Output of check, i think ;-)
[cacao.git] / tests / extest.java
index 97db7b8f533a5a4a21969bb6f4ca23201d662069..c4ca584a1f32b0d1d72e16ce6a5ab32956564287 100644 (file)
-import java.io.*;
-
-public class extest extends Object
-{
-    public static void main (String args[])
-    {
-        try
-        {
-            RandomAccessFile file = new RandomAccessFile("test.file", "rw");
-            
-            file.seek(file.length());
+public class extest {
+
+    public static boolean printStackTrace;
+
+    public static void main(String[] argv) {
+       printStackTrace=false;
+       if (argv.length>0) 
+               if (argv[0].equals("stacktrace")) printStackTrace=true;
+
+        boolean catched = false;
+
+       pln("---------- normal exceptions --------------------");
+
+       try {
+            p("throw new Exception():");
+           throw new Exception();
+       } catch (Exception e) {
+            catched = true;
+           pln("OK");
+           pstacktrace(e);
+
+       }
+
+        /* check if catch block was executed */
+        if (!catched) {
+            pln("FAILED");
+        }
+
+       try {
+            p("throw new Exception() (from subroutines):");
+           sub();
+            pln("FAILED");
+       } catch (Exception e) {
+           pln("OK");
+           pstacktrace(e);
+       }
+
+        try {
+            p("NullPointerException:");
+            int[] ia = null;
+            int i = ia.length;
+            pln("FAILED");
+        } catch (NullPointerException e) {
+           pln("OK");
+           pstacktrace(e);
+       }
+
+       try {
+            p("NullPointerException (native):");
+            System.arraycopy(null, 1, null, 1, 1);
+            pln("FAILED");
+       } catch (Exception e) {
+           pln("OK");
+       }
+
+       pln();
+
+
+       pln("---------- test soft inline exceptions ----------");
+       pln("/* thrown twice to check the inline jump code */");
+
+        try {
+            p("ArrayIndexOutOfBoundsException:");
+            int[] ia = new int[1];
+            ia[0xcafebabe] = 1;
+            pln("FAILED");
+        } catch (ArrayIndexOutOfBoundsException e) {
+           String msg = e.getMessage();
+
+           if (msg == null || !msg.equals(String.valueOf(0xcafebabe))) {
+               pln("FAILED: wrong index: " + msg + ", should be: " + 0xcafebabe);
+               pstacktrace(e);
+           } else {
+               pln("OK");
+               pstacktrace(e);
+           }
+       }
+
+        try {
+            p("ArrayIndexOutOfBoundsException:");
+            int[] ia = new int[1];
+            ia[0xbabecafe] = 1;
+            pln("FAILED");
+        } catch (ArrayIndexOutOfBoundsException e) {
+           String msg = e.getMessage();
+
+           if (msg == null || !msg.equals(String.valueOf(0xbabecafe))) {
+               pln("FAILED: wrong index: " + msg + ", should be: " + 0xbabecafe);
+               pstacktrace(e);
+           } else {
+               pln("OK");
+               pstacktrace(e);
+
+           }
+       }
+
+
+        try {
+            p("NegativeArraySizeException:");
+            int[] ia = new int[-1];
+            pln("FAILED");
+        } catch (NegativeArraySizeException e) {
+           pln("OK");
+           pstacktrace(e);
+       }
+
+        try {
+            p("NegativeArraySizeException:");
+            int[] ia = new int[-1];
+            pln("FAILED");
+        } catch (NegativeArraySizeException e) {
+           pln("OK");
+           pstacktrace(e);
+       }
+
+        
+        try {
+            p("ClassCastException:");
+            Object o = new Object();
+            Integer i = (Integer) o;
+            pln("FAILED");
+        } catch (ClassCastException e) {
+           pln("OK");
+       }
+
+        try {
+            p("ClassCastException:");
+            Object o = new Object();
+            Integer i = null;
+            i = (Integer) o;
+            pln("FAILED");
+        } catch (ClassCastException e) {
+           pln("OK");
+           pstacktrace(e);
+       }
+
+
+        try {
+            p("ArithmeticException (only w/ -softnull):");
+            int i = 1, j = 0, k = i / j;
+            pln("FAILED");
+        } catch (ArithmeticException e) {
+           String msg = e.getMessage();
+
+           if (msg == null || !msg.equals("/ by zero")) {
+               pln("FAILED: wrong message: " + msg + ", should be: / by zero");
+               pstacktrace(e);
+           } else {
+                pln("OK");
+                pstacktrace(e);
+            }
+       }
+
+        try {
+            p("ArithmeticException (only w/ -softnull):");
+            long i = 1, j = 0, k = i / j;
+            pln("FAILED");
+        } catch (ArithmeticException e) {
+           String msg = e.getMessage();
+
+           if (msg == null || !msg.equals("/ by zero")) {
+               pln("FAILED: wrong message: " + msg + ", should be: / by zero");
+
+           } else {
+                pln("OK");
+                pstacktrace(e);
+            }
+       }
+
+
+        try {
+            p("OutOfMemoryError:");
+           /* 100 MB should be enough */
+           byte[] ba = new byte[100 * 1024 * 1024];
+            pln("FAILED");
+        } catch (OutOfMemoryError e) {
+           pln("OK");
+           pstacktrace(e);
+       }
+
+        try {
+            p("OutOfMemoryError:");
+           /* 100 MB should be enough */
+           byte[] ba = new byte[100 * 1024 * 1024];
+            pln("FAILED");
+        } catch (OutOfMemoryError e) {
+           pln("OK");
+           pstacktrace(e);
+       }
+        
+
+        try {
+            p("NullPointerException (only w/ -softnull):");
+            int[] ia = null;
+            int i = ia.length;
+            pln("FAILED");
+        } catch (NullPointerException e) {
+           pln("OK");
+           pstacktrace(e);
+       }
+
+        try {
+            p("NullPointerException (only w/ -softnull):");
+            int[] ia = null;
+            int i = ia.length;
+            pln("FAILED");
+        } catch (NullPointerException e) {
+           pln("OK");
+           pstacktrace(e);
+       }
+
+       pln();
+
+
+       pln("---------- some asmpart exceptions --------------");
+
+        try {
+            p("ExceptionInInitializerError (clinit):");
+            extest_clinit.i = 1;
+            pln("FAILED");
+        } catch (ExceptionInInitializerError e) {
+            if (e.getCause().getClass() != NullPointerException.class) {
+                pln("FAILED");
+            } else {
+                pln("OK");
+               pstacktrace(e);
+            }
         }
-        catch (Exception exc)
-        {
-            System.out.println("could not open file");
+
+        try {
+            p("ArithmeticException (idiv):");
+            int i = 1, j = 0, k = i / j;
+            pln("FAILED");
+        } catch (ArithmeticException e) {
+           pln("OK");
+           pstacktrace(e);
+       }
+
+        try {
+            p("ArithmeticException (ldiv):");
+            long i = 1, j = 0, k = i / j;
+            pln("FAILED");
+        } catch (ArithmeticException e) {
+           pln("OK");
+           pstacktrace(e);
+       }
+
+        try {
+            p("ArithmeticException (irem):");
+            int i = 1, j = 0, k = i % j;
+            pln("FAILED");
+        } catch (ArithmeticException e) {
+           pln("OK");
+           pstacktrace(e);
+       }
+
+        try {
+            p("ArithmeticException (lrem):");
+            long i = 1, j = 0, k = i % j;
+            pln("FAILED");
+        } catch (ArithmeticException e) {
+           pln("OK");
+           pstacktrace(e);
+       }
+
+        try {
+            p("NullPointerException (aastore):");
+           Object[] oa = null;
+           oa[0] = new Object();
+            pln("FAILED");
+        } catch (NullPointerException e) {
+           pln("OK");
+           pstacktrace(e);
+       }
+
+        try {
+            p("ArrayIndexOutOfBoundsException (aastore):");
+           Object[] oa = new Object[1];
+           oa[0xaa] = new Object();
+            pln("FAILED");
+        } catch (ArrayIndexOutOfBoundsException e) {
+           String msg = e.getMessage();
+
+           if (msg == null || !msg.equals(String.valueOf(0xaa))) {
+               pln("FAILED: wrong index: " + msg + ", should be: " + 0xaa);
+
+           } else {
+                pln("OK");
+                pstacktrace(e);
+            }
+       }
+
+        try {
+            p("ArrayStoreException (aastore):");
+           Integer[] ia = new Integer[1];
+            Object[] oa = (Object[]) ia;
+           oa[0] = new Object();
+            pln("FAILED");
+        } catch (ArrayStoreException e) {
+           pln("OK");
+           pstacktrace(e);
+       }
+
+        try {
+            p("ClassCastException (checkarraycast):");
+            Object[] oa = new Object[1];
+           Integer[] ia = (Integer[]) oa;
+            pln("FAILED");
+        } catch (ClassCastException e) {
+           pln("OK");
+           pstacktrace(e);
+       }
+
+       pln();
+
+
+       pln("---------- exception related things -------------");
+
+        try {
+            p("load/link an exception class in asmpart:");
+            throw new Exception();
+        } catch (UnknownError e) {
+            /* this exception class MUST NOT be loaded before!!!
+               otherwise this test in useless */
+        } catch (Exception e) {
+           pln("OK");
+           pstacktrace(e);
+       }
+
+        pln();
+
+
+       pln("---------- no OK beyond this point --------------");
+
+        pln("NullPointerException (without catch):");
+        String s = null;
+        int i = s.length();
+        pln("FAILED");
+    }
+
+    public synchronized static void sub() throws Exception {
+       sub2();
+    }
+
+    public static void sub2() throws Exception {
+       sub3();
+    }
+
+    public synchronized static void sub3() throws Exception {
+       sub4();
+    }
+
+    public static void sub4() throws Exception {
+       throw new Exception();
+    }
+
+    public static void p(String s) {
+       System.out.print(s);
+        for (int i = s.length(); i < 42; i++) {
+            System.out.print(" ");
         }
     }
+
+    public static void pln() {
+       System.out.println();
+    }
+
+    public static void pln(String s) {
+       System.out.println(s);
+    }
+
+    public static void pstacktrace(Throwable e) {
+       if (!printStackTrace) return;
+       System.out.println("================== Stacktrace");
+       e.printStackTrace();
+       System.out.println("Stacktrace ==================");
+    }
+
 }