Index: base/test/android/javatests/src/org/chromium/base/test/TestListInstrumentationRunListener.java |
diff --git a/base/test/android/javatests/src/org/chromium/base/test/TestListInstrumentationRunListener.java b/base/test/android/javatests/src/org/chromium/base/test/TestListInstrumentationRunListener.java |
deleted file mode 100644 |
index 71fa4e0aaf7c29b249e4d0e71892a1238578efa3..0000000000000000000000000000000000000000 |
--- a/base/test/android/javatests/src/org/chromium/base/test/TestListInstrumentationRunListener.java |
+++ /dev/null |
@@ -1,150 +0,0 @@ |
-// Copyright 2017 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.base.test; |
- |
-import android.support.test.internal.runner.listener.InstrumentationRunListener; |
- |
-import org.json.JSONArray; |
-import org.json.JSONObject; |
-import org.junit.runner.Description; |
-import org.junit.runner.Result; |
- |
-import org.chromium.base.Log; |
- |
-import java.io.File; |
-import java.io.FileOutputStream; |
-import java.io.IOException; |
-import java.io.OutputStreamWriter; |
-import java.io.Writer; |
-import java.lang.annotation.Annotation; |
-import java.lang.reflect.Method; |
-import java.util.Arrays; |
-import java.util.Collection; |
-import java.util.HashMap; |
-import java.util.HashSet; |
-import java.util.Map; |
-import java.util.Set; |
- |
-/** |
- * A RunListener that list out all the test information into a json file. |
- */ |
-public class TestListInstrumentationRunListener extends InstrumentationRunListener { |
- private static final String TAG = "TestListRunListener"; |
- private static final Set<String> SKIP_METHODS = new HashSet<>( |
- Arrays.asList(new String[] {"toString", "hashCode", "annotationType", "equals"})); |
- |
- private final Map<Class<?>, JSONObject> mTestClassJsonMap = new HashMap<>(); |
- private final String mOutputPath; |
- |
- public TestListInstrumentationRunListener(String outputPath) { |
- super(); |
- mOutputPath = outputPath; |
- } |
- |
- /** |
- * Store the test method description to a Map at the beginning of a test run. |
- */ |
- @Override |
- public void testStarted(Description desc) throws Exception { |
- if (mTestClassJsonMap.containsKey(desc.getTestClass())) { |
- ((JSONArray) mTestClassJsonMap.get(desc.getTestClass()).get("methods")) |
- .put(getTestMethodJSON(desc)); |
- } else { |
- Class<?> testClass = desc.getTestClass(); |
- mTestClassJsonMap.put(desc.getTestClass(), new JSONObject() |
- .put("class", testClass.getName()) |
- .put("superclass", testClass.getSuperclass().getName()) |
- .put("annotations", |
- getAnnotationJSON(Arrays.asList(testClass.getAnnotations()))) |
- .put("methods", new JSONArray().put(getTestMethodJSON(desc)))); |
- } |
- } |
- |
- /** |
- * Create a JSONArray with all the test class JSONObjects and save it to listed output path. |
- */ |
- @Override |
- public void testRunFinished(Result result) throws IOException { |
- Writer writer = null; |
- File file = new File(mOutputPath); |
- try { |
- writer = new OutputStreamWriter(new FileOutputStream(file), "UTF-8"); |
- JSONArray allTestClassesJSON = new JSONArray(mTestClassJsonMap.values()); |
- writer.write(allTestClassesJSON.toString()); |
- } catch (IOException e) { |
- Log.e(TAG, "failed to write json to file", e); |
- throw e; |
- } finally { |
- if (writer != null) { |
- try { |
- writer.close(); |
- } catch (IOException e) { |
- // Intentionally ignore IOException when closing writer |
- } |
- } |
- } |
- } |
- |
- /** |
- * Return a JSONOject that represent a Description of a method". |
- */ |
- static JSONObject getTestMethodJSON(Description desc) throws Exception { |
- return new JSONObject() |
- .put("method", desc.getMethodName()) |
- .put("annotations", getAnnotationJSON(desc.getAnnotations())); |
- } |
- |
- /** |
- * Create a JSONObject that represent a collection of anntations. |
- * |
- * For example, for the following group of annotations for ExampleClass |
- * <code> |
- * @A |
- * @B(message = "hello", level = 3) |
- * public class ExampleClass() {} |
- * </code> |
- * |
- * This method would return a JSONObject as such: |
- * <code> |
- * { |
- * "A": {}, |
- * "B": { |
- * "message": "hello", |
- * "level": "3" |
- * } |
- * } |
- * </code> |
- * |
- * The method accomplish this by though through each annotation and reflectively call the |
- * annotation's method to get the element value, with exceptions to methods like "equals()" |
- * or "hashCode". |
- */ |
- static JSONObject getAnnotationJSON(Collection<Annotation> annotations) |
- throws Exception { |
- JSONObject annotationsJsons = new JSONObject(); |
- for (Annotation a : annotations) { |
- JSONObject elementJsonObject = new JSONObject(); |
- for (Method method : a.annotationType().getMethods()) { |
- if (SKIP_METHODS.contains(method.getName())) { |
- continue; |
- } |
- try { |
- Object value = method.invoke(a); |
- if (value == null) { |
- elementJsonObject.put(method.getName(), null); |
- } else { |
- elementJsonObject.put(method.getName(), |
- value.getClass().isArray() |
- ? new JSONArray(Arrays.asList((Object[]) value)) |
- : value.toString()); |
- } |
- } catch (IllegalArgumentException e) { |
- } |
- } |
- annotationsJsons.put(a.annotationType().getSimpleName(), elementJsonObject); |
- } |
- return annotationsJsons; |
- } |
-} |