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