1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.bcel;
20
21 import static org.junit.jupiter.api.Assertions.assertEquals;
22
23 import java.util.Iterator;
24
25 import org.apache.bcel.classfile.JavaClass;
26 import org.apache.bcel.classfile.Method;
27 import org.apache.bcel.generic.InstructionHandle;
28 import org.apache.bcel.generic.InstructionList;
29 import org.apache.bcel.util.InstructionFinder;
30 import org.junit.jupiter.api.Test;
31
32 class InstructionFinderTest extends AbstractTest {
33 @Test
34 void testSearchAll() throws Exception {
35 final JavaClass clazz = getTestJavaClass(PACKAGE_BASE_NAME + ".util.InstructionFinder");
36 final Method[] methods = clazz.getMethods();
37 Method searchM = null;
38 for (final Method m : methods) {
39 if (m.getName().equals("search") && m.getArgumentTypes().length == 3) {
40 searchM = m;
41 break;
42 }
43 }
44
45 if (searchM == null) {
46 throw new Exception("search method not found");
47 }
48
49 final byte[] bytes = searchM.getCode().getCode();
50 final InstructionList il = new InstructionList(bytes);
51 final InstructionFinder finder = new InstructionFinder(il);
52 final Iterator<?> it = finder.search(".*", il.getStart(), null);
53
54 final InstructionHandle[] ihs = (InstructionHandle[]) it.next();
55 int size = 0;
56 for (final InstructionHandle ih : ihs) {
57 size += ih.getInstruction().getLength();
58 }
59 assertEquals(bytes.length, size);
60
61 }
62 }