* tests/regression/MinimalClassReflection.output: New file.
authorpanzi <none@none>
Fri, 17 Aug 2007 20:03:06 +0000 (20:03 +0000)
committerpanzi <none@none>
Fri, 17 Aug 2007 20:03:06 +0000 (20:03 +0000)
* tests/regression/MinimalClassReflection.java: New file.
This adds tests for some reflection methods like
java.lang.Class.isLocal/.isMember/.isAnonymous/.getDeclaringClass etc.

* tests/regression/Makefile.am
(SOURCE_FILES): Added MinimalClassReflection.java.
(EXTRA_DIST): Added MinimalClassReflection.output.
(OUTPUT_JAVA_TESTS): Added MinimalClassReflection.

tests/regression/Makefile.am
tests/regression/MinimalClassReflection.java [new file with mode: 0644]
tests/regression/MinimalClassReflection.output [new file with mode: 0644]

index 879b3cdab4ae219aac7ec3d7c5b0168313ba5be9..dc80d4f28cf67d1b8d58cbe2a93d9e013de5be88 100644 (file)
@@ -26,7 +26,7 @@
 ##
 ## Authors: Christian Thalinger
 ##
-## $Id: Makefile.am 7486 2007-03-08 13:50:07Z twisti $
+## $Id: Makefile.am 8338 2007-08-17 20:03:06Z panzi $
 
 ## Process this file with automake to produce Makefile.in
 
@@ -54,7 +54,8 @@ SOURCE_FILES = \
        $(srcdir)/clinitexception.java \
        $(srcdir)/LoadDisplacementOverflow.java \
        $(srcdir)/FieldDisplacementOverflow.java \
-       $(srcdir)/StackDisplacementOverflow.java
+       $(srcdir)/StackDisplacementOverflow.java \
+       $(srcdir)/MinimalClassReflection.java
 
 EXTRA_DIST = \
        $(SOURCE_FILES) \
@@ -67,7 +68,8 @@ EXTRA_DIST = \
        clinitexception.2output \
        LoadDisplacementOverflow.output \
        FieldDisplacementOverflow.output \
-       StackDisplacementOverflow.output
+       StackDisplacementOverflow.output \
+       MinimalClassReflection.output
 
 CLEANFILES = \
        *.class \
@@ -85,7 +87,8 @@ OUTPUT_JAVA_TESTS = \
        clinitexception \
        LoadDisplacementOverflow \
        FieldDisplacementOverflow \
-       StackDisplacementOverflow
+       StackDisplacementOverflow \
+       MinimalClassReflection
 
 check: build $(SIMPLE_JAVA_TESTS) $(OUTPUT_JAVA_TESTS)
 
diff --git a/tests/regression/MinimalClassReflection.java b/tests/regression/MinimalClassReflection.java
new file mode 100644 (file)
index 0000000..1a198e0
--- /dev/null
@@ -0,0 +1,137 @@
+/* tests/regression/MinimalClassReflection.java - checks most some of the
+   reflective methods onto java.lang.Class
+
+   Copyright (C) 1996-2005, 2006 R. Grafl, A. Krall, C. Kruegel,
+   C. Oates, R. Obermaisser, M. Platter, M. Probst, S. Ring,
+   E. Steiner, C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich,
+   TU Wien
+
+   This file is part of CACAO.
+
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2, or (at
+   your option) any later version.
+
+   This program is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+   02110-1301, USA.
+
+   Contact: cacao@cacaojvm.org
+
+   Authors: Mathias Panzenböck
+
+   $Id$
+
+*/
+
+import java.lang.reflect.Method;
+import java.lang.reflect.Constructor;
+
+public class MinimalClassReflection {
+       public static void printClassInfo(String header, Class<?> cls) {
+               Class<?>       clazz;
+               Constructor<?> constr;
+               Method         method;
+               
+               p("---------------------- %s ----------------------", header);
+               p("is local:              %s", cls.isLocalClass());
+               p("is anonymous:          %s", cls.isAnonymousClass());
+               p("is member:             %s", cls.isMemberClass());
+               p("name:                  %s", cls.getName());
+               p("simple name:           %s", cls.getSimpleName());
+               p("canonical name:        %s", cls.getCanonicalName());
+               
+               clazz = cls.getSuperclass();
+               p("super class:           %s",
+                               (clazz == null ? "null" : clazz.getName()));
+               
+               clazz = cls.getDeclaringClass();
+               p("declaring class:       %s",
+                               (clazz == null ? "null" : clazz.getName()));
+               
+               clazz = cls.getEnclosingClass();
+               p("enclosing class:       %s",
+                               (clazz == null ? "null" : clazz.getName()));
+               
+               constr = cls.getEnclosingConstructor();
+               p("enclosing constructor: %s",
+                               (constr == null ? "null" :
+                                       constr.getDeclaringClass().getName() +
+                                       "." + constr.getName()));
+               
+               method = cls.getEnclosingMethod();
+               p("enclosing method:      %s",
+                               (method == null ? "null" :
+                                       method.getDeclaringClass().getName() +
+                                       "." + method.getName()));
+               
+               p();
+       }
+       
+       public static void main(String[] args) {
+               class ALocalClass {
+                       class AMemberClass {
+                       }
+                       
+                       public ALocalClass() {
+                               class AnotherLocalClass {
+                               }
+
+                               printClassInfo(
+                                               "test a member class",
+                                               AMemberClass.class);
+                               
+                               printClassInfo(
+                                               "test a anonymous class derived from a member class",
+                                               new AMemberClass() {}.getClass());
+                               
+                               printClassInfo(
+                                               "test a local class (local to a constructor)",
+                                               AnotherLocalClass.class);
+                               
+                               printClassInfo(
+                                               "test a anonymous class derived from a local " +
+                                               "class (local to a constructor)",
+                                               new AnotherLocalClass() {}.getClass());
+                       }
+               }
+               
+               printClassInfo(
+                               "test a normal class",
+                               MinimalClassReflection.class);
+               
+               printClassInfo(
+                               "test a local class (local to a method)",
+                               ALocalClass.class);
+               
+               printClassInfo(
+                               "test a anonymous class",
+                               new Object() {}.getClass());
+               
+               printClassInfo(
+                               "test a anonymous class derived from a local class" +
+                               " (local to a method)",
+                               new ALocalClass() {}.getClass());
+               
+               new ALocalClass();
+       }
+       
+       public static void p(String fmt, Object... args) {
+               System.out.printf(fmt + "\n", args);
+       }
+       
+       public static <T> void p(T o) {
+               System.out.println(o);
+       }
+       
+       public static void p() {
+               System.out.println();
+       }
+}
diff --git a/tests/regression/MinimalClassReflection.output b/tests/regression/MinimalClassReflection.output
new file mode 100644 (file)
index 0000000..d51c393
--- /dev/null
@@ -0,0 +1,156 @@
+---------------------- test a normal class ----------------------
+is local:              false
+is anonymous:          false
+is member:             false
+name:                  MinimalClassReflection
+simple name:           MinimalClassReflection
+canonical name:        MinimalClassReflection
+super class:           java.lang.Object
+declaring class:       null
+enclosing class:       null
+enclosing constructor: null
+enclosing method:      null
+
+---------------------- test a local class (local to a method) ----------------------
+is local:              true
+is anonymous:          false
+is member:             false
+name:                  MinimalClassReflection$1ALocalClass
+simple name:           ALocalClass
+canonical name:        null
+super class:           java.lang.Object
+declaring class:       null
+enclosing class:       MinimalClassReflection
+enclosing constructor: null
+enclosing method:      MinimalClassReflection.main
+
+---------------------- test a anonymous class ----------------------
+is local:              false
+is anonymous:          true
+is member:             false
+name:                  MinimalClassReflection$1
+simple name:           
+canonical name:        null
+super class:           java.lang.Object
+declaring class:       null
+enclosing class:       MinimalClassReflection
+enclosing constructor: null
+enclosing method:      MinimalClassReflection.main
+
+---------------------- test a member class ----------------------
+is local:              false
+is anonymous:          false
+is member:             true
+name:                  MinimalClassReflection$1ALocalClass$AMemberClass
+simple name:           AMemberClass
+canonical name:        null
+super class:           java.lang.Object
+declaring class:       MinimalClassReflection$1ALocalClass
+enclosing class:       MinimalClassReflection$1ALocalClass
+enclosing constructor: null
+enclosing method:      null
+
+---------------------- test a anonymous class derived from a member class ----------------------
+is local:              false
+is anonymous:          true
+is member:             false
+name:                  MinimalClassReflection$1ALocalClass$1
+simple name:           
+canonical name:        null
+super class:           MinimalClassReflection$1ALocalClass$AMemberClass
+declaring class:       null
+enclosing class:       MinimalClassReflection$1ALocalClass
+enclosing constructor: MinimalClassReflection$1ALocalClass.MinimalClassReflection$1ALocalClass
+enclosing method:      null
+
+---------------------- test a local class (local to a constructor) ----------------------
+is local:              true
+is anonymous:          false
+is member:             false
+name:                  MinimalClassReflection$1ALocalClass$1AnotherLocalClass
+simple name:           AnotherLocalClass
+canonical name:        null
+super class:           java.lang.Object
+declaring class:       null
+enclosing class:       MinimalClassReflection$1ALocalClass
+enclosing constructor: MinimalClassReflection$1ALocalClass.MinimalClassReflection$1ALocalClass
+enclosing method:      null
+
+---------------------- test a anonymous class derived from a local class (local to a constructor) ----------------------
+is local:              false
+is anonymous:          true
+is member:             false
+name:                  MinimalClassReflection$1ALocalClass$2
+simple name:           
+canonical name:        null
+super class:           MinimalClassReflection$1ALocalClass$1AnotherLocalClass
+declaring class:       null
+enclosing class:       MinimalClassReflection$1ALocalClass
+enclosing constructor: MinimalClassReflection$1ALocalClass.MinimalClassReflection$1ALocalClass
+enclosing method:      null
+
+---------------------- test a anonymous class derived from a local class (local to a method) ----------------------
+is local:              false
+is anonymous:          true
+is member:             false
+name:                  MinimalClassReflection$2
+simple name:           
+canonical name:        null
+super class:           MinimalClassReflection$1ALocalClass
+declaring class:       null
+enclosing class:       MinimalClassReflection
+enclosing constructor: null
+enclosing method:      MinimalClassReflection.main
+
+---------------------- test a member class ----------------------
+is local:              false
+is anonymous:          false
+is member:             true
+name:                  MinimalClassReflection$1ALocalClass$AMemberClass
+simple name:           AMemberClass
+canonical name:        null
+super class:           java.lang.Object
+declaring class:       MinimalClassReflection$1ALocalClass
+enclosing class:       MinimalClassReflection$1ALocalClass
+enclosing constructor: null
+enclosing method:      null
+
+---------------------- test a anonymous class derived from a member class ----------------------
+is local:              false
+is anonymous:          true
+is member:             false
+name:                  MinimalClassReflection$1ALocalClass$1
+simple name:           
+canonical name:        null
+super class:           MinimalClassReflection$1ALocalClass$AMemberClass
+declaring class:       null
+enclosing class:       MinimalClassReflection$1ALocalClass
+enclosing constructor: MinimalClassReflection$1ALocalClass.MinimalClassReflection$1ALocalClass
+enclosing method:      null
+
+---------------------- test a local class (local to a constructor) ----------------------
+is local:              true
+is anonymous:          false
+is member:             false
+name:                  MinimalClassReflection$1ALocalClass$1AnotherLocalClass
+simple name:           AnotherLocalClass
+canonical name:        null
+super class:           java.lang.Object
+declaring class:       null
+enclosing class:       MinimalClassReflection$1ALocalClass
+enclosing constructor: MinimalClassReflection$1ALocalClass.MinimalClassReflection$1ALocalClass
+enclosing method:      null
+
+---------------------- test a anonymous class derived from a local class (local to a constructor) ----------------------
+is local:              false
+is anonymous:          true
+is member:             false
+name:                  MinimalClassReflection$1ALocalClass$2
+simple name:           
+canonical name:        null
+super class:           MinimalClassReflection$1ALocalClass$1AnotherLocalClass
+declaring class:       null
+enclosing class:       MinimalClassReflection$1ALocalClass
+enclosing constructor: MinimalClassReflection$1ALocalClass.MinimalClassReflection$1ALocalClass
+enclosing method:      null
+