Defined SUPPORT_CONST_ASTORE and SUPPORT_ONLY_ZERO_ASTORE.
[cacao.git] / tests / kaffe / InnerTest.java
1 /**
2  * Test for Inner classes and related methods in class Class.
3  *
4  * @author Edouard G. Parmelan <egp@free.fr>
5  */
6
7 import java.lang.reflect.Modifier;
8
9 /**
10  * Super class of InnerTest that define some inner classes and interfaces.
11  */
12 class InnerBase
13 {
14     private class privateInstanceClass
15     {
16         public void run() {
17             System.out.println ("InnerBase.privateInstanceClass");
18         }
19
20         public void start() { run(); }
21     }
22
23     private static class privateStaticClass
24     {
25         public void run() {
26             System.out.println ("InnerBase.privatStaticClass");
27         }
28
29         public void start() { run(); }
30     }
31
32     protected class protectedInstanceClass
33     {
34         public void run() {
35             System.out.println ("InnerBase.protectedInstanceClass");
36         }
37
38         public void start() { run(); }
39     }
40
41     protected static class protectedStaticClass
42     {
43         public void run() {
44             System.out.println ("InnerBase.privatStaticClass");
45         }
46
47         public void start() { run(); }
48     }
49
50     public class publicInstanceClass
51     {
52         public void run() {
53             System.out.println ("InnerBase.publicStaticClass");
54         }
55
56         public void start() { run(); }
57     }
58
59     public static class publicStaticClass
60     {
61         public void run() {
62             System.out.println ("InnerBase.publicStaticClass");
63         }
64
65         public void start() { run(); }
66     }
67
68     public static interface publicStaticInterface
69     {
70         public void run();
71     }
72
73     public interface publicInstanceInterface
74     {
75         public void run();
76     }
77 }
78
79
80 public class InnerTest
81     extends InnerBase
82 {
83     public static class Inner
84     {
85     }
86
87     private static void printClass(String prefix, Class clazz)
88     {
89         if (clazz == null) {
90             System.out.println (prefix + "<null>");
91         }
92         else {
93             int mods = clazz.getModifiers();
94             System.out.println (prefix + clazz + " [" + Integer.toString(mods, 16) + "] " + Modifier.toString (mods));
95         }
96     }
97
98     private static void printClasses(String prefix, Class[] classes)
99     {
100         if (classes.length == 0) {
101             System.out.println (prefix + "<empty>");
102         }
103         for (int i = classes.length; i-- > 0; ) {
104             printClass (prefix, classes[i]);
105         }
106     }
107
108     public static void main(String args[])
109     {
110         if (args.length == 0) {
111             args = new String[] { "java.lang.Object", "InnerBase", "InnerTest" };
112         }
113
114         for (int i = 0; i < args.length; i++) {
115             String name = args[i];
116             if (name.endsWith (".class")) {
117                 name = name.substring (0, name.length() - 6);
118             }
119             try {
120                 Class clazz = Class.forName (name);
121
122                 printClass (name + ": declaring: ", clazz.getDeclaringClass());
123                 printClasses (name + ": declared: ", clazz.getDeclaredClasses());
124                 printClasses (name + ": get: ", clazz.getClasses());
125             }
126             catch (Throwable t) {
127                 t.printStackTrace(System.out);
128             }
129         }
130     }
131
132     void useAnonymous()
133     {
134         new protectedInstanceClass() { public void run() {} }.start();
135         new protectedStaticClass() { public void run() {} }.start();
136         new publicInstanceClass() { public void run() {} }.start();
137         new publicStaticClass() { public void run() {} }.start();
138     }
139
140 }
141
142 // Sort output
143 /* Expected Output:
144 InnerBase: declared: class InnerBase$privateInstanceClass [2] private
145 InnerBase: declared: class InnerBase$privateStaticClass [a] private static
146 InnerBase: declared: class InnerBase$protectedInstanceClass [4] protected
147 InnerBase: declared: class InnerBase$protectedStaticClass [c] protected static
148 InnerBase: declared: class InnerBase$publicInstanceClass [1] public
149 InnerBase: declared: class InnerBase$publicStaticClass [9] public static
150 InnerBase: declared: interface InnerBase$publicInstanceInterface [609] public abstract static interface
151 InnerBase: declared: interface InnerBase$publicStaticInterface [609] public abstract static interface
152 InnerBase: declaring: <null>
153 InnerBase: get: class InnerBase$publicInstanceClass [1] public
154 InnerBase: get: class InnerBase$publicStaticClass [9] public static
155 InnerBase: get: interface InnerBase$publicInstanceInterface [609] public abstract static interface
156 InnerBase: get: interface InnerBase$publicStaticInterface [609] public abstract static interface
157 InnerTest: declared: class InnerTest$Inner [9] public static
158 InnerTest: declaring: <null>
159 InnerTest: get: class InnerBase$publicInstanceClass [1] public
160 InnerTest: get: class InnerBase$publicStaticClass [9] public static
161 InnerTest: get: class InnerTest$Inner [9] public static
162 InnerTest: get: interface InnerBase$publicInstanceInterface [609] public abstract static interface
163 InnerTest: get: interface InnerBase$publicStaticInterface [609] public abstract static interface
164 java.lang.Object: declared: <empty>
165 java.lang.Object: declaring: <null>
166 java.lang.Object: get: <empty>
167 */