Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3454)

Unified Diff: base/test/android/javatests/src/org/chromium/base/test/BaseTestResult.java

Issue 2963683002: Simplify CommandLine parameterizing J3 Instrumentation Tests (Closed)
Patch Set: address comments Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: base/test/android/javatests/src/org/chromium/base/test/BaseTestResult.java
diff --git a/base/test/android/javatests/src/org/chromium/base/test/BaseTestResult.java b/base/test/android/javatests/src/org/chromium/base/test/BaseTestResult.java
index 7e31a5d46e31f4f61bd4dabd7cf8dbbbab22cdb9..a80e0cc4a0771d73a782296fec664c82342ba81c 100644
--- a/base/test/android/javatests/src/org/chromium/base/test/BaseTestResult.java
+++ b/base/test/android/javatests/src/org/chromium/base/test/BaseTestResult.java
@@ -9,27 +9,15 @@ import android.content.Context;
import android.os.Bundle;
import android.os.SystemClock;
-import junit.framework.AssertionFailedError;
import junit.framework.TestCase;
import junit.framework.TestResult;
import org.chromium.base.Log;
-import org.chromium.base.test.util.CommandLineFlags;
import org.chromium.base.test.util.SkipCheck;
-import org.chromium.base.test.util.parameter.BaseParameter;
-import org.chromium.base.test.util.parameter.Parameter;
-import org.chromium.base.test.util.parameter.Parameterizable;
-import org.chromium.base.test.util.parameter.ParameterizedTest;
-import java.io.PrintWriter;
-import java.io.StringWriter;
import java.lang.reflect.Method;
import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Iterator;
import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
/**
* A test result that can skip tests.
@@ -119,250 +107,7 @@ public class BaseTestResult extends TestResult {
endTest(test);
} else {
- if (test instanceof Parameterizable) {
- try {
- runParameterized(test);
- } catch (ThreadDeath e) {
- Log.e(TAG, "Parameterized test run failed: %s", e);
- }
- } else {
- super.run(test);
- }
- }
- }
-
- @SuppressWarnings("unchecked")
- private <T extends TestCase & Parameterizable> void runParameterized(TestCase test)
- throws ThreadDeath {
- T testCase = (T) test;
-
- // Prepare test.
- Parameter.Reader parameterReader = new Parameter.Reader(test);
- testCase.setParameterReader(parameterReader);
- List<ParameterizedTest> parameterizedTests = parameterReader.getParameterizedTests();
- List<ParameterError> errors = new ArrayList<>();
- List<ParameterError> failures = new ArrayList<>();
- Map<String, BaseParameter> availableParameters = testCase.getAvailableParameters();
-
- // Remove all @ParameterizedTests that contain CommandLineFlags.Parameter -- those
- // are handled in test_runner.py as it is needed to re-launch the whole test activity
- // to apply command-line args correctly. Note that this way we will also ignore any
- // other parameters that may present in these @ParameterizedTests.
- for (Iterator<ParameterizedTest> iter = parameterizedTests.iterator(); iter.hasNext();) {
- ParameterizedTest paramTest = iter.next();
- for (Parameter p: paramTest.parameters()) {
- if (CommandLineFlags.Parameter.PARAMETER_TAG.equals(p.tag())) {
- iter.remove();
- }
- }
- }
-
- if (parameterizedTests.isEmpty()) {
super.run(test);
- } else {
- // Start test.
- startTest(testCase);
- for (ParameterizedTest parameterizedTest : parameterizedTests) {
- parameterReader.setCurrentParameterizedTest(parameterizedTest);
- try {
- setUpParameters(availableParameters, parameterReader);
- testCase.runBare();
- tearDownParameters(availableParameters, parameterReader);
- } catch (AssertionFailedError e) {
- failures.add(new ParameterError(e, parameterizedTest));
- } catch (ThreadDeath e) {
- throw e;
- } catch (Throwable e) {
- errors.add(new ParameterError(e, parameterizedTest));
- }
- }
-
- // Generate failures and errors.
- if (!failures.isEmpty()) {
- addFailure(test, new ParameterizedTestFailure(failures));
- }
- if (!errors.isEmpty()) {
- addError(test, new ParameterizedTestError(errors));
- }
-
- // End test.
- endTest(testCase);
- }
- }
-
- private static <T extends TestCase & Parameterizable> void setUpParameters(
- Map<String, BaseParameter> availableParameters, Parameter.Reader reader)
- throws Exception {
- for (Entry<String, BaseParameter> entry : availableParameters.entrySet()) {
- if (reader.getParameter(entry.getValue().getTag()) != null) {
- entry.getValue().setUp();
- }
- }
- }
-
- private static <T extends TestCase & Parameterizable> void tearDownParameters(
- Map<String, BaseParameter> availableParameters, Parameter.Reader reader)
- throws Exception {
- for (Entry<String, BaseParameter> entry : availableParameters.entrySet()) {
- if (reader.getParameter(entry.getValue().getTag()) != null) {
- entry.getValue().tearDown();
- }
- }
- }
-
- private static class ParameterError {
- private final Throwable mThrowable;
- private final ParameterizedTest mParameterizedTest;
-
- public ParameterError(Throwable throwable, ParameterizedTest parameterizedTest) {
- mThrowable = throwable;
- mParameterizedTest = parameterizedTest;
- }
-
- private Throwable getThrowable() {
- return mThrowable;
- }
-
- private ParameterizedTest getParameterizedTest() {
- return mParameterizedTest;
- }
- }
-
- private static class ParameterizedTestFailure extends AssertionFailedError {
- public ParameterizedTestFailure(List<ParameterError> failures) {
- super(new ParameterizedTestError(failures).toString());
- }
- }
-
- private static class ParameterizedTestError extends Exception {
- private final List<ParameterError> mErrors;
-
- public ParameterizedTestError(List<ParameterError> errors) {
- mErrors = errors;
- }
-
- /**
- * Error output is as follows.
- *
- * DEFINITIONS:
- * {{ERROR}} is the standard error output from
- * {@link ParameterError#getThrowable().toString()}.
- * {{PARAMETER_TAG}} is the {@link Parameter#tag()} value associated with the parameter.
- * {{ARGUMENT_NAME}} is the {@link Parameter.Argument#name()} associated with the argument.
- * {{ARGUMENT_VALUE}} is the value associated with the {@link Parameter.Argument}. This can
- * be a String, int, String[], or int[].
- *
- * With no {@link Parameter}:
- * {{ERROR}} (with no parameters)
- *
- * With Single {@link Parameter} and no {@link Parameter.Argument}:
- * {{ERROR}} (with parameters: {{PARAMETER_TAG}} with no arguments)
- *
- * With Single {@link Parameter} and one {@link Parameter.Argument}:
- * {{ERROR}} (with parameters: {{PARAMETER_TAG}} with arguments:
- * {{ARGUMENT_NAME}}={{ARGUMENT_VALUE}})
- *
- * With Single {@link Parameter} and multiple {@link Parameter.Argument}s:
- * {{ERROR}} (with parameters: {{PARAMETER_TAG}} with arguments:
- * {{ARGUMENT_NAME}}={{ARGUMENT_VALUE}}, {{ARGUMENT_NAME}}={{ARGUMENT_VALUE}}, ...)
- *
- * DEFINITION:
- * {{PARAMETER_ERROR}} is the output of a single {@link Parameter}'s error. Format:
- * {{PARAMETER_TAG}} with arguments: {{ARGUMENT_NAME}}={{ARGUMENT_NAME}}, ...
- *
- * With Multiple {@link Parameter}s:
- * {{ERROR}} (with parameters: {{PARAMETER_ERROR}}; {{PARAMETER_ERROR}}; ...)
- *
- * There will be a trace after this. And this is shown for every possible {@link
- * ParameterizedTest} that is failed in the {@link ParameterizedTest.Set} if there is one.
- *
- * @return the error message and trace of the test failures.
- */
- @Override
- public String toString() {
- if (mErrors.isEmpty()) return "\n";
- StringBuilder builder = new StringBuilder();
- Iterator<ParameterError> iter = mErrors.iterator();
- if (iter.hasNext()) {
- builder.append(createErrorBuilder(iter.next()));
- }
- while (iter.hasNext()) {
- builder.append("\n").append(createErrorBuilder(iter.next()));
- }
- return builder.toString();
- }
-
- private static StringBuilder createErrorBuilder(ParameterError error) {
- StringBuilder builder = new StringBuilder("\n").append(error.getThrowable().toString());
- List<Parameter> parameters =
- Arrays.asList(error.getParameterizedTest().parameters());
- if (parameters.isEmpty()) {
- builder.append(" (with no parameters)");
- } else {
- Iterator<Parameter> iter = parameters.iterator();
- builder.append(" (with parameters: ").append(createParameterBuilder(iter.next()));
- while (iter.hasNext()) {
- builder.append("; ").append(createParameterBuilder(iter.next()));
- }
- builder.append(")");
- }
- return builder.append("\n").append(trace(error));
- }
-
- private static StringBuilder createParameterBuilder(Parameter parameter) {
- StringBuilder builder = new StringBuilder(parameter.tag());
- List<Parameter.Argument> arguments = Arrays.asList(parameter.arguments());
- if (arguments.isEmpty()) {
- builder.append(" with no arguments");
- } else {
- Iterator<Parameter.Argument> iter = arguments.iterator();
- builder.append(" with arguments: ").append(createArgumentBuilder(iter.next()));
- while (iter.hasNext()) {
- builder.append(", ").append(createArgumentBuilder(iter.next()));
- }
- }
- return builder;
- }
-
- private static StringBuilder createArgumentBuilder(Parameter.Argument argument) {
- StringBuilder builder = new StringBuilder(argument.name()).append("=");
- if (!Parameter.ArgumentDefault.STRING.equals(argument.stringVar())) {
- builder.append(argument.stringVar());
- } else if (Parameter.ArgumentDefault.INT != argument.intVar()) {
- builder.append(argument.intVar());
- } else if (argument.stringArray().length > 0) {
- builder.append(Arrays.toString(argument.stringArray()));
- } else if (argument.intArray().length > 0) {
- builder.append(Arrays.toString(argument.intArray()));
- }
- return builder;
- }
-
- /**
- * @return the trace without the error message
- */
- private static StringBuilder trace(ParameterError error) {
- StringWriter stringWriter = new StringWriter();
- PrintWriter writer = new PrintWriter(stringWriter);
- error.getThrowable().printStackTrace(writer);
- StringBuilder builder = new StringBuilder(stringWriter.getBuffer());
- return trim(deleteFirstLine(builder));
- }
-
- private static StringBuilder deleteFirstLine(StringBuilder builder) {
- return builder.delete(0, builder.indexOf("\n") + 1);
- }
-
- private static StringBuilder trim(StringBuilder sb) {
- if (sb == null || sb.length() == 0) return sb;
- for (int i = sb.length() - 1; i >= 0; i--) {
- if (Character.isWhitespace(sb.charAt(i))) {
- sb.deleteCharAt(i);
- } else {
- return sb;
- }
- }
- return sb;
}
}

Powered by Google App Engine
This is Rietveld 408576698