blob: 29fe787b37d643b9055f3f7d5163a38e029eeec3 [file] [log] [blame]
The description of the tests for the InnerClasses attribute.
InnerClassesTestBase is the base class for tests of inner classes attribute.
Each tests extends the base class.
The scenario of tests:
1. set possible values of class modifiers, outer/inner class types.
2. according to set class modifiers, a test generates sources
and golden data with generateTestCases.
3. a test loops through all test cases and checks InnerClasses attribute in method test().
Example, possible flags for outer class are Modifier.PRIVATE and Modifier.PUBLIC,
possible flags for inner class are Modifier.EMPTY, outer class type is CLASS
and inner class type is CLASS.
At the second step the test generates two test cases:
1. public class A {
public class B {
class C {}
}
}
2. public class A {
private class B {
class C {}
}
}
The list of tests.
Test: test if there is not inner class, the InnerClasses attribute
is not generated (NoInnerClasses.java).
Test: inner classes in anonymous class (InnerClassesInAnonymousClassTest.java).
Possible access flags of the inner class: abstract and final.
Test: inner classes in local class (InnerClassesInLocalClassTest.java).
Locations of local class: static and instance initializer, constructor, method, lambda,
default and static methods of interface.
Test: test the outer_class_info_index and inner_name_index of
local and anonymous classes (InnerClassesIndexTest.java).
List of test cases for Inner*InInner*Test:
* InnerClassesInInnerClassTest
outer flags: all possible flags
inner flags: all possible flags
* InnerClassesInInnerEnumTest
outer flags: all access flags, abstract
inner flags: all possible flags
* InnerClassesInInnerAnnotationTest
outer flags: all access flags, abstract
inner flags: all flags, except private and protected
* InnerClassesInInnerInterfaceTest
outer flags: all access flags, abstract
inner flags: all flags, except private and protected
* InnerEnumsInInnerClassTest
outer flags: all possible flags
inner flags: all possible flags
* InnerEnumsInInnerEnumTest
outer flags: all possible flags
inner flags: all possible flags
* InnerEnumsInInnerAnnotationTest
outer flags: all access flags, abstract, static
inner flags: public, static
* InnerEnumsInInnerInterfaceTest
outer flags: all access flags, abstract, static
inner flags: public, static
* InnerAnnotationInInnerClassTest
outer flags: all possible flags, except static
inner flags: all access flags, abstract and static
* InnerAnnotationInInnerEnumTest
outer flags: all access flags, static
inner flags: all access flags, abstract and static
* InnerAnnotationInInnerAnnotation
outer flags: all access flags, static and abstract
inner flags: public, abstract, static
* InnerAnnotationInInnerInterface
outer flags: all access flags, static and abstract
inner flags: public, abstract, static
* InnerInterfaceInInnerClassTest
outer flags: all possible flags, except static
inner flags: all access flags, abstract and static
* InnerInterfaceInInnerEnumTest
outer flags: all access flags, static
inner flags: all access flags, abstract and static
* InnerInterfaceInInnerAnnotation
outer flags: all access flags, static and abstract
inner flags: public, abstract, static
* InnerInterfaceInInnerInterface
outer flags: all access flags, static and abstract
inner flags: public, abstract, static