1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.bcel.verifier.structurals;
20
21 import static org.junit.jupiter.api.Assertions.assertThrows;
22 import static org.junit.jupiter.api.Assertions.assertTrue;
23 import static org.mockito.Mockito.mock;
24 import static org.mockito.Mockito.when;
25
26 import org.apache.bcel.classfile.Constant;
27 import org.apache.bcel.generic.ConstantPoolGen;
28 import org.apache.bcel.generic.LDC;
29 import org.apache.bcel.verifier.exc.CodeConstraintException;
30 import org.junit.jupiter.api.BeforeEach;
31 import org.junit.jupiter.params.ParameterizedTest;
32 import org.junit.jupiter.params.provider.MethodSource;
33
34 class InstConstraintVisitorTest {
35
36 private ConstantPoolGen cp;
37
38 @ParameterizedTest
39 @MethodSource("org.apache.bcel.verifier.statics.Pass3aVerifierTest#constantsNotSupportedByLdc")
40 public void rejectLdcConstantModule(final Constant constant) {
41 final InstConstraintVisitor visitor = new InstConstraintVisitor();
42 cp = mock(ConstantPoolGen.class);
43 when(cp.getConstant(0)).thenReturn(constant);
44 visitor.setConstantPoolGen(cp);
45 final LDC ldc = new LDC(0);
46 assertTrue(assertThrows(CodeConstraintException.class, () -> visitor.visitLDC(ldc)).getMessage()
47 .startsWith("Instruction LDC constraint violated: Referenced constant should be a"));
48 }
49
50 @BeforeEach
51 public void setup() {
52 cp = mock(ConstantPoolGen.class);
53 }
54 }