* src/native/jni.cpp (GetObjectClass): Remove null pointer check.
[cacao.git] / tests / regression / native / checkjni.java
index d55a1f2bf076b71cf12b5dfeae098eb77cd7b9c2..5cfd2f409a5c01881143ab1f393222294ae885e8 100644 (file)
@@ -1,9 +1,7 @@
 /* src/tests/native/checkjni.java - for testing JNI related stuff
 
-   Copyright (C) 1996-2005 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, J. Wenninger,
-   TU Wien
+   Copyright (C) 1996-2012
+   CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO
 
    This file is part of CACAO.
 
 
    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., 59 Temple Place - Suite 330, Boston, MA
-   02111-1307, USA.
-
-   Contact: cacao@complang.tuwien.ac.at
-
-   Authors: Christian Thalinger
-
-   Changes:
-
-   $Id: checkjni.java 2170 2005-03-31 19:18:38Z twisti $
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+   02110-1301, USA.
 
 */
 
 
 public class checkjni {
-    public native boolean IsAssignableFrom(Class sub, Class sup);
-    public native boolean IsInstanceOf(Object obj, Class clazz);
+    public static native boolean IsAssignableFrom(Class sub, Class sup);
+    public static native boolean IsInstanceOf(Object obj, Class clazz);
+    public static native boolean IsSameObject(Object obj1, Object obj2);
+    public static native int     PushLocalFrame(int capacity);
+       public static native void    Throw() throws Exception;
+       public static native Class   GetObjectClass(Object obj);
+       public static native String  NewString(int type);
+       public static native int     GetIntField(Object obj);
+       public static native Object  GetObjectField(Object obj);
+       public static native int     GetStaticIntField();
+       public static native Object  GetStaticObjectField();
+       public static native void    SetStaticIntField(int val);
+       public static native int     GetIntField();
+       public static native int[]   NewIntArray(int length);
+       public static native long[]  NewLongArray(int length);
+
+       public static int     jsfI = 0x123456;
+       public static Object  jsfL = new Object();
+
+       class checkjniobj {
+               public int    jfI = 0x123456;
+               public Object jfL = new Object();
+       }
 
     public static void main(String[] argv) {
         System.loadLibrary("checkjni");
@@ -46,6 +57,13 @@ public class checkjni {
     public checkjni() {
         checkIsAssignableFrom();
         checkIsInstanceOf();
+               checkIsSameObject();
+        checkPushLocalFrame();
+               checkThrow();
+               checkGetObjectClass();
+               checkFields();
+               checkArrays();
+               checkNewString();
     }
 
     void checkIsAssignableFrom() {
@@ -72,6 +90,91 @@ public class checkjni {
         equal(IsInstanceOf(obj, clazz2), false);
     }
 
+    void checkIsSameObject() {
+        p("IsSameObject:");
+
+        Object obj1 = new Object();
+        Object obj2 = new Integer(1);
+        Class clazz = Object.class;
+
+        equal(IsSameObject(obj1, obj1), true);
+        equal(IsSameObject(clazz, clazz), true);
+        equal(IsSameObject(null, null), true);
+        equal(IsSameObject(obj1, obj2), false);
+        equal(IsSameObject(obj1, clazz), false);
+        equal(IsSameObject(obj1, null), false);
+    }
+
+    void checkPushLocalFrame() {
+        p("PushLocalFrame:");
+
+        equal(PushLocalFrame(100), 0);
+    }
+
+       void checkThrow() {
+               p("Throw");
+               
+               try {
+                       Throw();
+                       p("FAILED, no exception thrown");
+               } catch (Exception e) {
+                       p("PASS, " + e);
+               }
+       }
+
+    void checkGetObjectClass() {
+        p("GetObjectClass:");
+
+        Object obj1 = new Object();
+        Object obj2 = new Integer(1);
+        Class clazz1 = Object.class;
+        Class clazz2 = Integer.class;
+
+        equal(GetObjectClass(obj1), clazz1);
+        equal(GetObjectClass(obj2), clazz2);
+    }
+
+       void checkNewString() {
+               p("NewString:");
+               
+               equal(NewString(2), "Test String from JNI with UTF");
+       }
+
+       void checkFields() {
+               p("Field Access:");
+               
+               equal(GetStaticIntField(), jsfI);
+               equal(GetStaticObjectField(), jsfL);
+               
+               checkjniobj o = new checkjniobj();
+
+               equal(GetIntField(o), o.jfI);
+               equal(GetObjectField(o), o.jfL);
+               
+               SetStaticIntField(0xABCDEF); equal(jsfI, 0xABCDEF);
+       }
+
+       void checkArrays() {
+               p("Array Access:");
+
+               int i;
+               boolean result;
+
+               int[] aI = NewIntArray(10);
+               for (i = 0, result = true; i < aI.length; i++) result &= (aI[i] == i);
+               if (result)
+                       p("PASS, size=" + aI.length);
+               else
+                       p("FAILED");
+
+               long[] aL = NewLongArray(20);
+               for (i = 0, result = true; i < aL.length; i++) result &= (aL[i] == i);
+               if (result)
+                       p("PASS, size=" + aL.length);
+               else
+                       p("FAILED");
+       }
+
     void equal(boolean a, boolean b) {
         if (a == b)
             p("PASS");
@@ -79,6 +182,27 @@ public class checkjni {
             p("FAILED");
     }
 
+    void equal(int a, int b) {
+        if (a == b)
+            p("PASS");
+        else
+            p("FAILED ("+a+"!="+b+")");
+    }
+
+    void equal(Object a, Object b) {
+        if (a == b)
+            p("PASS");
+        else
+            p("FAILED");
+    }
+
+    void equal(String a, String b) {
+        if (a.equals(b))
+            p("PASS");
+        else
+            p("FAILED ("+a+"!="+b+")");
+    }
+
     void p(String s) {
         System.out.println(s);
     }