1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.bcel;
21
22 import static org.junit.jupiter.api.Assertions.assertEquals;
23 import static org.junit.jupiter.api.Assertions.assertFalse;
24 import static org.junit.jupiter.api.Assertions.assertNull;
25 import static org.junit.jupiter.api.Assertions.assertTrue;
26
27 import org.apache.bcel.classfile.InnerClass;
28 import org.apache.bcel.classfile.InnerClasses;
29 import org.apache.bcel.classfile.JavaClass;
30 import org.apache.bcel.data.EmptyClass;
31 import org.junit.jupiter.api.Test;
32
33 class AnonymousClassTest extends AbstractTest {
34 @Test
35 void testAnonymousInnerClassIsAnonymous() throws ClassNotFoundException {
36 final JavaClass clazz = getTestJavaClass(PACKAGE_BASE_NAME + ".data.AnonymousClassTest$1");
37 assertTrue(clazz.isAnonymous(), "anonymous inner classes are anonymous");
38 assertTrue(clazz.isNested(), "anonymous inner classes are anonymous");
39 }
40
41 @Test
42 void testNamedInnerClassIsNotAnonymous() throws ClassNotFoundException {
43 final JavaClass clazz = getTestJavaClass(PACKAGE_BASE_NAME + ".data.AnonymousClassTest$X");
44 assertFalse(clazz.isAnonymous(), "regular inner classes are not anonymous");
45 assertTrue(clazz.isNested(), "regular inner classes are nested");
46 }
47
48 @Test
49 void testRegularClassInnerClasses() throws ClassNotFoundException {
50 final JavaClass clazz = getTestJavaClass(PACKAGE_BASE_NAME + ".data.AnonymousClassTest");
51 final InnerClasses innerClasses = clazz.getAttribute(Const.ATTR_INNER_CLASSES);
52 final InnerClass[] innerClassArray = innerClasses.getInnerClasses();
53 assertEquals(3, innerClassArray.length);
54 assertNull(Repository.lookupClass(EmptyClass.class).getAttribute(Const.ATTR_INNER_CLASSES));
55 }
56
57 @Test
58 void testRegularClassIsNotAnonymous() throws ClassNotFoundException {
59 final JavaClass clazz = getTestJavaClass(PACKAGE_BASE_NAME + ".data.AnonymousClassTest");
60 assertFalse(clazz.isAnonymous(), "regular outer classes are not anonymous");
61 assertFalse(clazz.isNested(), "regular outer classes are not nested");
62 }
63
64 @Test
65 void testStaticInnerClassIsNotAnonymous() throws ClassNotFoundException {
66 final JavaClass clazz = getTestJavaClass(PACKAGE_BASE_NAME + ".data.AnonymousClassTest$Y");
67 assertFalse(clazz.isAnonymous(), "regular static inner classes are not anonymous");
68 assertTrue(clazz.isNested(), "regular static inner classes are nested");
69 }
70 }