Signed-off-by: Tomek Grabiec <[email protected]>
---
Makefile | 1 +
regression/jvm/ExceptionsTest.java | 25 ----------
regression/jvm/StackTraceTest.java | 90 ++++++++++++++++++++++++++++++++++++
regression/jvm/TestCase.java | 18 +++++++
regression/run-suite.sh | 1 +
5 files changed, 110 insertions(+), 25 deletions(-)
create mode 100644 regression/jvm/StackTraceTest.java
diff --git a/Makefile b/Makefile
index 58ad9db..8beea06 100644
--- a/Makefile
+++ b/Makefile
@@ -255,6 +255,7 @@ REGRESSION_TEST_SUITE_CLASSES = \
regression/jvm/PutstaticPatchingTest.class \
regression/jvm/PutstaticTest.class \
regression/jvm/RegisterAllocatorTortureTest.class \
+ regression/jvm/StackTraceTest.class \
regression/jvm/StringTest.class \
regression/jvm/SynchronizationExceptionsTest.class \
regression/jvm/SynchronizationTest.class \
diff --git a/regression/jvm/ExceptionsTest.java
b/regression/jvm/ExceptionsTest.java
index 1330281..b8aba54 100644
--- a/regression/jvm/ExceptionsTest.java
+++ b/regression/jvm/ExceptionsTest.java
@@ -140,30 +140,6 @@ public class ExceptionsTest extends TestCase {
assertTrue(caught);
}
- public static void testGetStackTrace() {
- StackTraceElement []e = new Exception().getStackTrace();
-
- assertNotNull(e);
-
- assertEquals(3, e.length);
-
- assertEquals(144, e[0].getLineNumber());
- assertObjectEquals("ExceptionsTest.java", e[0].getFileName());
- assertObjectEquals("jvm.ExceptionsTest", e[0].getClassName());
- assertObjectEquals("testGetStackTrace", e[0].getMethodName());
- assertFalse(e[0].isNativeMethod());
-
- assertEquals(164, e[1].getLineNumber());
- assertObjectEquals("ExceptionsTest.java", e[1].getFileName());
- assertObjectEquals("jvm.ExceptionsTest", e[1].getClassName());
- assertObjectEquals("testStackTrace", e[1].getMethodName());
- assertFalse(e[1].isNativeMethod());
- }
-
- public static void testStackTrace() {
- testGetStackTrace();
- }
-
public static void main(String args[]) {
testTryBlockDoesNotThrowAnything();
testThrowAndCatchInTheSameMethod();
@@ -172,6 +148,5 @@ public class ExceptionsTest extends TestCase {
testNestedTryCatch();
testEmptyCatchBlock();
testAthrow();
- testStackTrace();
}
}
diff --git a/regression/jvm/StackTraceTest.java
b/regression/jvm/StackTraceTest.java
new file mode 100644
index 0000000..dd364ca
--- /dev/null
+++ b/regression/jvm/StackTraceTest.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 2009 Tomasz Grabiec
+ *
+ * This file is released under the GPL version 2 with the following
+ * clarification and special exception:
+ *
+ * Linking this library statically or dynamically with other modules is
+ * making a combined work based on this library. Thus, the terms and
+ * conditions of the GNU General Public License cover the whole
+ * combination.
+ *
+ * As a special exception, the copyright holders of this library give you
+ * permission to link this library with independent modules to produce an
+ * executable, regardless of the license terms of these independent
+ * modules, and to copy and distribute the resulting executable under terms
+ * of your choice, provided that you also meet, for each linked independent
+ * module, the terms and conditions of the license of that module. An
+ * independent module is a module which is not derived from or based on
+ * this library. If you modify this library, you may extend this exception
+ * to your version of the library, but you are not obligated to do so. If
+ * you do not wish to do so, delete this exception statement from your
+ * version.
+ *
+ * Please refer to the file LICENSE for details.
+ */
+package jvm;
+
+import jato.internal.VM;
+
+/**
+ * @author Tomasz Grabiec
+ */
+public class StackTraceTest extends TestCase {
+
+ public static void doTestJITStackTrace() {
+ StackTraceElement []st = new Exception().getStackTrace();
+
+ assertNotNull(st);
+ assertEquals(3, st.length);
+
+ assertStackTraceElement(st[0], 36, "StackTraceTest.java",
+ "jvm.StackTraceTest",
+ "doTestJITStackTrace",
+ false);
+
+ assertStackTraceElement(st[1], 53, "StackTraceTest.java",
+ "jvm.StackTraceTest",
+ "testJITStackTrace",
+ false);
+ }
+
+ public static void testJITStackTrace() {
+ doTestJITStackTrace();
+ }
+
+ public static void doTestVMNativeInStackTrace() {
+ StackTraceElement []st = null;
+
+ try {
+ VM.println(null);
+ } catch (NullPointerException e) {
+ st = e.getStackTrace();
+ }
+
+ assertNotNull(st);
+ assertEquals(4, st.length);
+
+ assertStackTraceElement(st[0], -1, null, "jato.internal.VM",
+ "println", true);
+
+ assertStackTraceElement(st[1], 60, "StackTraceTest.java",
+ "jvm.StackTraceTest",
+ "doTestVMNativeInStackTrace",
+ false);
+
+ assertStackTraceElement(st[2], 83, "StackTraceTest.java",
+ "jvm.StackTraceTest",
+ "testVMNativeInStackTrace",
+ false);
+ }
+
+ public static void testVMNativeInStackTrace() {
+ doTestVMNativeInStackTrace();
+ }
+
+ public static void main(String []args) {
+ testJITStackTrace();
+ testVMNativeInStackTrace();
+ }
+}
\ No newline at end of file
diff --git a/regression/jvm/TestCase.java b/regression/jvm/TestCase.java
index 8ff0207..6ed621b 100644
--- a/regression/jvm/TestCase.java
+++ b/regression/jvm/TestCase.java
@@ -78,9 +78,27 @@ public class TestCase {
}
protected static void assertObjectEquals(String a, String b) {
+ if (a == null && b == null)
+ return;
+
assertTrue(a.equals(b));
}
+ protected static void assertStackTraceElement(StackTraceElement e,
+ int lineNumber, String fileName, String className,
+ String methodName, boolean isNative)
+ {
+ assertEquals(lineNumber, e.getLineNumber());
+ assertObjectEquals(fileName, e.getFileName());
+ assertObjectEquals(className, e.getClassName());
+ assertObjectEquals(methodName, e.getMethodName());
+
+ if (isNative)
+ assertTrue(e.isNativeMethod());
+ else
+ assertFalse(e.isNativeMethod());
+ }
+
protected static void fail(String s) {
throw new AssertionError(s);
}
diff --git a/regression/run-suite.sh b/regression/run-suite.sh
index a3f3fe3..93a9e1b 100755
--- a/regression/run-suite.sh
+++ b/regression/run-suite.sh
@@ -79,6 +79,7 @@ if [ -z "$CLASS_LIST" ]; then
run_java jvm.PutstaticPatchingTest 0
run_java jvm.PutstaticTest 0
run_java jvm.RegisterAllocatorTortureTest 0
+ run_java jvm.StackTraceTest 0
run_java jvm.StringTest 0
run_java jvm.SynchronizationExceptionsTest 0
run_java jvm.SynchronizationTest 0
--
1.6.0.6
------------------------------------------------------------------------------
_______________________________________________
Jatovm-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jatovm-devel