Index: testing/android/junit/java/src/org/chromium/testing/local/JsonLogger.java |
diff --git a/testing/android/junit/java/src/org/chromium/testing/local/JsonLogger.java b/testing/android/junit/java/src/org/chromium/testing/local/JsonLogger.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..c253ba33cac527df0e701d4f8c2bbf751224c4a9 |
--- /dev/null |
+++ b/testing/android/junit/java/src/org/chromium/testing/local/JsonLogger.java |
@@ -0,0 +1,89 @@ |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+package org.chromium.testing.local; |
+ |
+import org.json.JSONArray; |
+import org.json.JSONException; |
+import org.json.JSONObject; |
+import org.junit.runner.Description; |
+ |
+import java.io.File; |
+import java.io.FileNotFoundException; |
+import java.io.FileOutputStream; |
+import java.io.PrintStream; |
+ |
+/** |
+ * Creates json file with junit test information. Format of the json file mirrors the |
+ * json generated by build/android/pylib/results/json_results.py. |
+ */ |
+public class JsonLogger { |
+ |
+ private final JSONObject mBaseJsonObject; |
+ private final JSONObject mBaseTestInfoJsonObject; |
+ private final File mOutputFile; |
+ |
+ public JsonLogger(File outputFile) { |
+ mBaseJsonObject = new JSONObject(); |
+ mBaseTestInfoJsonObject = new JSONObject(); |
+ mOutputFile = outputFile; |
+ |
+ try { |
+ mBaseJsonObject.put("global_tags", new JSONArray()); |
+ mBaseJsonObject.put("all_tests", new JSONArray()); |
+ mBaseJsonObject.put("disabled_tests", new JSONArray()); |
+ mBaseJsonObject.put("per_iteration_data", |
+ new JSONArray().put(mBaseTestInfoJsonObject)); |
+ } catch (JSONException e) { |
+ System.err.println("Unable to create json output."); |
+ } |
+ } |
+ |
+ /** |
+ * Add the results of a test run to the json output. |
+ */ |
+ public void addTestResultInfo(Description test, boolean passed, long elapsedTimeMillis) { |
+ JSONObject testInfoJsonObject = new JSONObject(); |
+ |
+ try { |
+ testInfoJsonObject.put("status", (passed ? "SUCCESS" : "FAILURE")); |
+ testInfoJsonObject.put("elapsed_time_ms", elapsedTimeMillis); |
+ testInfoJsonObject.put("output_snippet", ""); |
+ testInfoJsonObject.put("output_snippet_base64", ""); |
+ testInfoJsonObject.put("losless_snippet", ""); |
+ |
+ if (mBaseTestInfoJsonObject.optJSONArray(testName(test)) == null) { |
+ mBaseTestInfoJsonObject.put(testName(test), new JSONArray()); |
+ mBaseJsonObject.getJSONArray("all_tests").put(testName(test)); |
+ } |
+ mBaseTestInfoJsonObject.getJSONArray(testName(test)).put(testInfoJsonObject); |
+ } catch (JSONException e) { |
+ System.err.println("Unable to log test to json output: " + testName(test)); |
+ } |
+ } |
+ |
+ /** |
+ * Writes the json output to a file. |
+ */ |
+ public void writeJsonToFile() { |
+ try { |
+ PrintStream stream = new PrintStream(new FileOutputStream(mOutputFile)); |
+ try { |
+ stream.print(mBaseJsonObject); |
+ } finally { |
+ try { |
+ stream.close(); |
+ } catch (RuntimeException e) { |
+ System.err.println("Unable to close output file: " + mOutputFile.getPath()); |
+ } |
+ } |
+ } catch (FileNotFoundException e) { |
+ System.err.println("File not found: " + mOutputFile.getPath()); |
+ } |
+ } |
+ |
+ private String testName(Description test) { |
+ return test.getClassName() + "#" + test.getMethodName(); |
+ } |
+} |