Add tests 988-992 to cts

Test: cts-tradefed
Change-Id: Ib0c53d50ef5d4428a11d0805d7b042c95213aa33
diff --git a/test/988-method-trace/expected.txt b/test/988-method-trace/expected.txt
index 30ad532..63343b8 100644
--- a/test/988-method-trace/expected.txt
+++ b/test/988-method-trace/expected.txt
@@ -143,11 +143,11 @@
 ......=> private static native java.lang.Object java.lang.Throwable.nativeFillInStackTrace()
 ......<= private static native java.lang.Object java.lang.Throwable.nativeFillInStackTrace() -> <class [Ljava.lang.Object;: <non-deterministic>>
 .....<= public synchronized java.lang.Throwable java.lang.Throwable.fillInStackTrace() -> <class java.lang.Error: java.lang.Error: Bad argument: -19 < 0
-	at art.Test988.iter_fibonacci(Test988.java:209)
-	at art.Test988$IterOp.applyAsInt(Test988.java:204)
-	at art.Test988.doFibTest(Test988.java:297)
-	at art.Test988.run(Test988.java:267)
-	at Main.main(Main.java:19)
+	art.Test988.iter_fibonacci(Test988.java:228)
+	art.Test988$IterOp.applyAsInt(Test988.java:223)
+	art.Test988.doFibTest(Test988.java:316)
+	art.Test988.run(Test988.java:286)
+	<additional hidden frames>
 >
 ....<= public java.lang.Throwable(java.lang.String) -> <null: null>
 ...<= public java.lang.Error(java.lang.String) -> <null: null>
@@ -163,11 +163,11 @@
 ...<= private void java.util.ArrayList.ensureExplicitCapacity(int) -> <null: null>
 ..<= private void java.util.ArrayList.ensureCapacityInternal(int) -> <null: null>
 fibonacci(-19) -> java.lang.Error: Bad argument: -19 < 0
-	at art.Test988.iter_fibonacci(Test988.java:209)
-	at art.Test988$IterOp.applyAsInt(Test988.java:204)
-	at art.Test988.doFibTest(Test988.java:297)
-	at art.Test988.run(Test988.java:267)
-	at Main.main(Main.java:19)
+	art.Test988.iter_fibonacci(Test988.java:228)
+	art.Test988$IterOp.applyAsInt(Test988.java:223)
+	art.Test988.doFibTest(Test988.java:316)
+	art.Test988.run(Test988.java:286)
+	<additional hidden frames>
 
 .<= public boolean java.util.ArrayList.add(java.lang.Object) -> <class java.lang.Boolean: true>
 <= public static void art.Test988.doFibTest(int,java.util.function.IntUnaryOperator) -> <null: null>
@@ -244,11 +244,11 @@
 ......=> private static native java.lang.Object java.lang.Throwable.nativeFillInStackTrace()
 ......<= private static native java.lang.Object java.lang.Throwable.nativeFillInStackTrace() -> <class [Ljava.lang.Object;: <non-deterministic>>
 .....<= public synchronized java.lang.Throwable java.lang.Throwable.fillInStackTrace() -> <class java.lang.Error: java.lang.Error: Bad argument: -19 < 0
-	at art.Test988.fibonacci(Test988.java:231)
-	at art.Test988$RecurOp.applyAsInt(Test988.java:226)
-	at art.Test988.doFibTest(Test988.java:297)
-	at art.Test988.run(Test988.java:268)
-	at Main.main(Main.java:19)
+	art.Test988.fibonacci(Test988.java:250)
+	art.Test988$RecurOp.applyAsInt(Test988.java:245)
+	art.Test988.doFibTest(Test988.java:316)
+	art.Test988.run(Test988.java:287)
+	<additional hidden frames>
 >
 ....<= public java.lang.Throwable(java.lang.String) -> <null: null>
 ...<= public java.lang.Error(java.lang.String) -> <null: null>
@@ -264,14 +264,14 @@
 ...<= private void java.util.ArrayList.ensureExplicitCapacity(int) -> <null: null>
 ..<= private void java.util.ArrayList.ensureCapacityInternal(int) -> <null: null>
 fibonacci(-19) -> java.lang.Error: Bad argument: -19 < 0
-	at art.Test988.fibonacci(Test988.java:231)
-	at art.Test988$RecurOp.applyAsInt(Test988.java:226)
-	at art.Test988.doFibTest(Test988.java:297)
-	at art.Test988.run(Test988.java:268)
-	at Main.main(Main.java:19)
+	art.Test988.fibonacci(Test988.java:250)
+	art.Test988$RecurOp.applyAsInt(Test988.java:245)
+	art.Test988.doFibTest(Test988.java:316)
+	art.Test988.run(Test988.java:287)
+	<additional hidden frames>
 
 .<= public boolean java.util.ArrayList.add(java.lang.Object) -> <class java.lang.Boolean: true>
 <= public static void art.Test988.doFibTest(int,java.util.function.IntUnaryOperator) -> <null: null>
 => public static native java.lang.Thread java.lang.Thread.currentThread()
-<= public static native java.lang.Thread java.lang.Thread.currentThread() -> <class java.lang.Thread: <non-deterministic>>
+<= public static native java.lang.Thread java.lang.Thread.currentThread() -> <<non-deterministic>: <non-deterministic>>
 => public static native void art.Trace.disableTracing(java.lang.Thread)
diff --git a/test/988-method-trace/src/art/Test988.java b/test/988-method-trace/src/art/Test988.java
index 6a45c0e..e40c612 100644
--- a/test/988-method-trace/src/art/Test988.java
+++ b/test/988-method-trace/src/art/Test988.java
@@ -31,6 +31,7 @@
 
     // Methods with non-deterministic output that should not be printed.
     static Set<Method> NON_DETERMINISTIC_OUTPUT_METHODS = new HashSet<>();
+    static Set<Method> NON_DETERMINISTIC_OUTPUT_TYPE_METHODS = new HashSet<>();
 
     static {
       try {
@@ -39,6 +40,7 @@
       } catch (Exception e) {}
       try {
         NON_DETERMINISTIC_OUTPUT_METHODS.add(Thread.class.getDeclaredMethod("currentThread"));
+        NON_DETERMINISTIC_OUTPUT_TYPE_METHODS.add(Thread.class.getDeclaredMethod("currentThread"));
       } catch (Exception e) {}
     }
 
@@ -66,7 +68,16 @@
         return arrayToString(val);
       } else if (val instanceof Throwable) {
         StringWriter w = new StringWriter();
-        ((Throwable) val).printStackTrace(new PrintWriter(w));
+        Throwable thr = ((Throwable) val);
+        w.write(thr.getClass().getName() + ": " + thr.getMessage() + "\n");
+        for (StackTraceElement e : thr.getStackTrace()) {
+          if (e.getClassName().startsWith("art.")) {
+            w.write("\t" + e + "\n");
+          } else {
+            w.write("\t<additional hidden frames>\n");
+            break;
+          }
+        }
         return w.toString();
       } else {
         return val.toString();
@@ -134,8 +145,16 @@
             if (val != null) {
               klass = val.getClass();
             }
+            String klass_print;
+            if (klass == null) {
+              klass_print =  "null";
+            } else if (NON_DETERMINISTIC_OUTPUT_TYPE_METHODS.contains(m)) {
+              klass_print = "<non-deterministic>";
+            } else {
+              klass_print = klass.toString();
+            }
             System.out.println(
-                whitespace(cnt) + "<= " + m + " -> <" + klass + ": " + print + ">");
+                whitespace(cnt) + "<= " + m + " -> <" + klass_print + ": " + print + ">");
         }
     }
 
diff --git a/test/992-source-data/expected.txt b/test/992-source-data/expected.txt
index 480d8a4..4db8df0 100644
--- a/test/992-source-data/expected.txt
+++ b/test/992-source-data/expected.txt
@@ -1,6 +1,6 @@
 class art.Test992 is defined in file "Test992.java"
 class art.Test992$Target1 is defined in file "Test992.java"
-class art.Test2 is defined in file "Test2.java"
+class art.Target2 is defined in file "Target2.java"
 int does not have a known source file because java.lang.RuntimeException: JVMTI_ERROR_ABSENT_INFORMATION
 class java.lang.Integer is defined in file "Integer.java"
 class java.lang.Object is defined in file "Object.java"
diff --git a/test/992-source-data/src/art/Test2.java b/test/992-source-data/src/art/Target2.java
similarity index 96%
rename from test/992-source-data/src/art/Test2.java
rename to test/992-source-data/src/art/Target2.java
index dbb1089..7c29d88 100644
--- a/test/992-source-data/src/art/Test2.java
+++ b/test/992-source-data/src/art/Target2.java
@@ -16,4 +16,4 @@
 
 package art;
 
-public class Test2 {}
+public class Target2 {}
diff --git a/test/992-source-data/src/art/Test992.java b/test/992-source-data/src/art/Test992.java
index db6ea73..d9ab112 100644
--- a/test/992-source-data/src/art/Test992.java
+++ b/test/992-source-data/src/art/Test992.java
@@ -25,7 +25,7 @@
   public static void run() {
     doTest(Test992.class);
     doTest(Target1.class);
-    doTest(Test2.class);
+    doTest(Target2.class);
     doTest(Integer.TYPE);
     doTest(Integer.class);
     doTest(Object.class);
diff --git a/test/Android.run-test-jvmti-java-library.mk b/test/Android.run-test-jvmti-java-library.mk
index 60ce6c7..753fe9a 100644
--- a/test/Android.run-test-jvmti-java-library.mk
+++ b/test/Android.run-test-jvmti-java-library.mk
@@ -22,6 +22,7 @@
 LOCAL_SHIM_CLASSES := \
   902-hello-transformation/src/art/Redefinition.java \
   903-hello-tagging/src/art/Main.java \
+  989-method-trace-throw/src/art/Trace.java \
 
 LOCAL_SRC_FILES := $(LOCAL_SHIM_CLASSES)
 
@@ -77,6 +78,12 @@
   984-obsolete-invoke/src/art/Test984.java \
   985-re-obsolete/src/art/Test985.java \
   986-native-method-bind/src/art/Test986.java \
+  988-method-trace/src/art/Test988.java \
+  989-method-trace-throw/src/art/Test989.java \
+  990-field-trace/src/art/Test990.java \
+  991-field-trace-2/src/art/Test991.java \
+  992-source-data/src/art/Test992.java \
+    992-source-data/src/art/Target2.java \
 
 JVMTI_RUN_TEST_GENERATED_NUMBERS := \
   901 \
@@ -119,6 +126,11 @@
   984 \
   985 \
   986 \
+  988 \
+  989 \
+  990 \
+  991 \
+  992 \
 
 # Try to enforce that the directories correspond to the Java files we pull in.
 JVMTI_RUN_TEST_DIR_CHECK := $(sort $(foreach DIR,$(JVMTI_RUN_TEST_GENERATED_NUMBERS), \