1The description of the tests for the InnerClasses attribute.
2
3InnerClassesTestBase is the base class for tests of inner classes attribute.
4Each tests extends the base class.
5The scenario of tests:
6 1. set possible values of class modifiers, outer/inner class types.
7 2. according to set class modifiers, a test generates sources
8 and golden data with generateTestCases.
9 3. a test loops through all test cases and checks InnerClasses attribute in method test().
10
11Example, possible flags for outer class are Modifier.PRIVATE and Modifier.PUBLIC,
12possible flags for inner class are Modifier.EMPTY, outer class type is CLASS
13and inner class type is CLASS.
14At the second step the test generates two test cases:
15 1. public class A {
16 public class B {
17 class C {}
18 }
19 }
20 2. public class A {
21 private class B {
22 class C {}
23 }
24 }
25
26The list of tests.
27
28Test: test if there is not inner class, the InnerClasses attribute
29is not generated (NoInnerClasses.java).
30
31Test: inner classes in anonymous class (InnerClassesInAnonymousClassTest.java).
32Possible access flags of the inner class: abstract and final.
33
34Test: inner classes in local class (InnerClassesInLocalClassTest.java).
35Locations of local class: static and instance initializer, constructor, method, lambda,
36default and static methods of interface.
37
38Test: test the outer_class_info_index and inner_name_index of
39local and anonymous classes (InnerClassesIndexTest.java).
40
41List of test cases for Inner*InInner*Test:
42 * InnerClassesInInnerClassTest
43 outer flags: all possible flags
44 inner flags: all possible flags
45 * InnerClassesInInnerEnumTest
46 outer flags: all access flags, abstract
47 inner flags: all possible flags
48 * InnerClassesInInnerAnnotationTest
49 outer flags: all access flags, abstract
50 inner flags: all flags, except private and protected
51 * InnerClassesInInnerInterfaceTest
52 outer flags: all access flags, abstract
53 inner flags: all flags, except private and protected
54
55 * InnerEnumsInInnerClassTest
56 outer flags: all possible flags
57 inner flags: all possible flags
58 * InnerEnumsInInnerEnumTest
59 outer flags: all possible flags
60 inner flags: all possible flags
61 * InnerEnumsInInnerAnnotationTest
62 outer flags: all access flags, abstract, static
63 inner flags: public, static
64 * InnerEnumsInInnerInterfaceTest
65 outer flags: all access flags, abstract, static
66 inner flags: public, static
67
68 * InnerAnnotationInInnerClassTest
69 outer flags: all possible flags, except static
70 inner flags: all access flags, abstract and static
71 * InnerAnnotationInInnerEnumTest
72 outer flags: all access flags, static
73 inner flags: all access flags, abstract and static
74 * InnerAnnotationInInnerAnnotation
75 outer flags: all access flags, static and abstract
76 inner flags: public, abstract, static
77 * InnerAnnotationInInnerInterface
78 outer flags: all access flags, static and abstract
79 inner flags: public, abstract, static
80
81 * InnerInterfaceInInnerClassTest
82 outer flags: all possible flags, except static
83 inner flags: all access flags, abstract and static
84 * InnerInterfaceInInnerEnumTest
85 outer flags: all access flags, static
86 inner flags: all access flags, abstract and static
87 * InnerInterfaceInInnerAnnotation
88 outer flags: all access flags, static and abstract
89 inner flags: public, abstract, static
90 * InnerInterfaceInInnerInterface
91 outer flags: all access flags, static and abstract
92 inner flags: public, abstract, static