Merge "Fail the test immediately on >100 errors." am: e268837101

Original change: https://android-review.googlesource.com/c/platform/cts/+/1460083

Change-Id: I17d986aef347cc22080dce5c3f4f7a79dfcba8ad
diff --git a/tests/signature/api-check/src/java/android/signature/cts/api/AbstractApiTest.java b/tests/signature/api-check/src/java/android/signature/cts/api/AbstractApiTest.java
index 7e8c6d6..5229a70 100644
--- a/tests/signature/api-check/src/java/android/signature/cts/api/AbstractApiTest.java
+++ b/tests/signature/api-check/src/java/android/signature/cts/api/AbstractApiTest.java
@@ -90,16 +90,7 @@
             mResultObserver.notifyFailure(FailureType.CAUGHT_EXCEPTION, e.getClass().getName(),
                     writer.toString());
         }
-        if (mResultObserver.mDidFail) {
-            StringBuilder errorString = mResultObserver.mErrorString;
-            ClassLoader classLoader = getClass().getClassLoader();
-            errorString.append("\nClassLoader hierarchy\n");
-            while (classLoader != null) {
-                errorString.append("    ").append(classLoader).append("\n");
-                classLoader = classLoader.getParent();
-            }
-            fail(errorString.toString());
-        }
+        mResultObserver.onTestComplete(); // Will throw is there are failures
     }
 
     static String[] getCommaSeparatedList(Bundle instrumentationArgs, String key) {
diff --git a/tests/signature/api-check/src/java/android/signature/cts/api/TestResultObserver.java b/tests/signature/api-check/src/java/android/signature/cts/api/TestResultObserver.java
index 715cf2f..5b74951 100644
--- a/tests/signature/api-check/src/java/android/signature/cts/api/TestResultObserver.java
+++ b/tests/signature/api-check/src/java/android/signature/cts/api/TestResultObserver.java
@@ -19,15 +19,18 @@
 import android.signature.cts.FailureType;
 import android.signature.cts.ResultObserver;
 
+import repackaged.junit.framework.Assert;
+import repackaged.junit.framework.TestCase;
+
 /**
  * Keeps track of any reported failures.
  */
 class TestResultObserver implements ResultObserver {
 
-    boolean mDidFail = false;
-    int failures = 0;
+    private boolean mDidFail = false;
+    private int failures = 0;
 
-    StringBuilder mErrorString = new StringBuilder();
+    private StringBuilder mErrorString = new StringBuilder();
 
     @Override
     public void notifyFailure(FailureType type, String name, String errorMessage) {
@@ -41,7 +44,26 @@
             mErrorString.append("\tError: ");
             mErrorString.append(errorMessage);
         } else if (failures == 101) {
-            mErrorString.append("\nMore than 100 failures, more errors will be elided.");
+            mErrorString.append("\nMore than 100 failures, aborting test.");
+            finalizeErrorString();
+            Assert.fail(mErrorString.toString());
         }
     }
+
+    private void finalizeErrorString() {
+        ClassLoader classLoader = getClass().getClassLoader();
+        mErrorString.append("\nClassLoader hierarchy\n");
+        while (classLoader != null) {
+            mErrorString.append("    ").append(classLoader).append("\n");
+            classLoader = classLoader.getParent();
+        }
+    }
+
+    public void onTestComplete() {
+        if (mDidFail) {
+            finalizeErrorString();
+            Assert.fail(mErrorString.toString());
+        }
+
+    }
 }