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