summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrett Chabot <brettchabot@google.com>2014-02-03 18:35:35 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2014-02-03 18:35:36 +0000
commit1b187d8791269666045f1f32c548b41c1f4093c5 (patch)
treef65c4957dc0a686e31aaaeb597c2fbd079fdf384
parente696b968bfe7521fe8c6623dbc466adb9b4302c9 (diff)
parent5cfc27f62f1d05b95d0432916beba7037edeeabf (diff)
downloadtesting-1b187d8791269666045f1f32c548b41c1f4093c5.tar.gz
Merge "Tweak -e suiteAssignment mode."
-rw-r--r--support/src/android/support/test/internal/runner/junit3/JUnit38ClassRunner.java13
-rw-r--r--support/src/android/support/test/internal/runner/listener/InstrumentationRunListener.java9
-rw-r--r--support/src/android/support/test/internal/runner/listener/SuiteAssignmentPrinter.java67
-rw-r--r--support/src/android/support/test/runner/AndroidJUnitRunner.java2
4 files changed, 70 insertions, 21 deletions
diff --git a/support/src/android/support/test/internal/runner/junit3/JUnit38ClassRunner.java b/support/src/android/support/test/internal/runner/junit3/JUnit38ClassRunner.java
index 268390b..10b46a4 100644
--- a/support/src/android/support/test/internal/runner/junit3/JUnit38ClassRunner.java
+++ b/support/src/android/support/test/internal/runner/junit3/JUnit38ClassRunner.java
@@ -56,21 +56,16 @@ public class JUnit38ClassRunner extends Runner implements Filterable, Sortable {
Describable facade = (Describable) test;
return facade.getDescription();
}
- return Description.createTestDescription(getEffectiveClass(test), getName(test));
+ if (test instanceof TestCase) {
+ return makeDescription(test);
+ }
+ return Description.createTestDescription(getEffectiveClass(test), test.toString());
}
private Class<? extends Test> getEffectiveClass(Test test) {
return test.getClass();
}
- private String getName(Test test) {
- if (test instanceof TestCase) {
- return ((TestCase) test).getName();
- } else {
- return test.toString();
- }
- }
-
@Override
public void addFailure(Test test, AssertionFailedError t) {
addError(test, t);
diff --git a/support/src/android/support/test/internal/runner/listener/InstrumentationRunListener.java b/support/src/android/support/test/internal/runner/listener/InstrumentationRunListener.java
index f584677..5785cfc 100644
--- a/support/src/android/support/test/internal/runner/listener/InstrumentationRunListener.java
+++ b/support/src/android/support/test/internal/runner/listener/InstrumentationRunListener.java
@@ -46,6 +46,15 @@ public abstract class InstrumentationRunListener extends RunListener {
}
/**
+ * Convenience method to output a string on instrumentation output
+ */
+ public void sendString(String msg) {
+ Bundle b = new Bundle();
+ b.putString(Instrumentation.REPORT_KEY_STREAMRESULT, msg);
+ sendStatus(0, b);
+ }
+
+ /**
* Optional callback subclasses can implement. Will be called when instrumentation run
* completes.
*
diff --git a/support/src/android/support/test/internal/runner/listener/SuiteAssignmentPrinter.java b/support/src/android/support/test/internal/runner/listener/SuiteAssignmentPrinter.java
index c636f7f..5d77935 100644
--- a/support/src/android/support/test/internal/runner/listener/SuiteAssignmentPrinter.java
+++ b/support/src/android/support/test/internal/runner/listener/SuiteAssignmentPrinter.java
@@ -16,20 +16,22 @@
package android.support.test.internal.runner.listener;
+import android.app.Instrumentation;
import android.support.test.internal.runner.TestRequestBuilder;
+import android.test.suitebuilder.annotation.LargeTest;
+import android.test.suitebuilder.annotation.MediumTest;
+import android.test.suitebuilder.annotation.SmallTest;
+import android.util.Log;
import org.junit.runner.Description;
import org.junit.runner.notification.Failure;
-import org.junit.runner.notification.RunListener;
-
-import java.io.PrintStream;
/**
* This class measures the elapsed run time of each test, and used it to report back to the user
* which suite ({@link SmallSuite}, {@link MediumSuite}, {@link LargeSuite}) the test should belong
* to.
*/
-public class SuiteAssignmentPrinter extends RunListener {
+public class SuiteAssignmentPrinter extends InstrumentationRunListener {
/**
* This constant defines the maximum allowed runtime (in ms) for a test included in the "small"
* suite. It is used to make an educated guess at what suite an unlabeled test belongs to.
@@ -42,10 +44,8 @@ public class SuiteAssignmentPrinter extends RunListener {
*/
private static final float MEDIUM_SUITE_MAX_RUNTIME = 1000;
- private final PrintStream mWriter;
-
- public SuiteAssignmentPrinter(PrintStream writer) {
- mWriter = writer;
+ public SuiteAssignmentPrinter(Instrumentation i) {
+ super(i);
}
private long mStartTime;
@@ -79,9 +79,54 @@ public class SuiteAssignmentPrinter extends RunListener {
// Clear mStartTime so that we can verify that it gets set next time.
mStartTime = -1;
- mWriter.printf("%s#%s\n" + "in %s suite\n" + "runTime: %d ms\n",
- description.getClassName(), description.getMethodName(), assignmentSuite,
- runTime);
+ String currentSize = getTestSize(description);
+ if (!assignmentSuite.equals(currentSize)) {
+ // test size != runtime
+ sendString(String.format("\n%s#%s: current size: %s. suggested: %s runTime: %d ms\n",
+ description.getClassName(), description.getMethodName(), currentSize,
+ assignmentSuite, runTime));
+ } else {
+ sendString(".");
+ Log.d("SuiteAssignmentPrinter", String.format(
+ "%s#%s assigned correctly as %s. runTime: %d ms\n", description.getClassName(),
+ description.getMethodName(), assignmentSuite, runTime));
+ }
+
+ }
+
+ private String getTestSize(Description description) {
+ String testSize = getTestSizeFromMethod(description);
+ if (testSize != null) {
+ return testSize;
+ }
+ return getTestSizeFromClass(description);
+ }
+
+ String getTestSizeFromMethod(Description desc) {
+ if (desc.getAnnotation(SmallTest.class) != null) {
+ return TestRequestBuilder.SMALL_SIZE;
+ } else if (desc.getAnnotation(MediumTest.class) != null) {
+ return TestRequestBuilder.MEDIUM_SIZE;
+ } else if (desc.getAnnotation(LargeTest.class) != null) {
+ return TestRequestBuilder.LARGE_SIZE;
+ }
+ return null;
+
+ }
+
+ String getTestSizeFromClass(Description desc) {
+ Class<?> testClass = desc.getTestClass();
+ if (testClass == null) {
+ return null;
+ }
+ if (testClass.isAnnotationPresent(SmallTest.class)) {
+ return TestRequestBuilder.SMALL_SIZE;
+ } else if (testClass.isAnnotationPresent(MediumTest.class)) {
+ return TestRequestBuilder.MEDIUM_SIZE;
+ } else if (testClass.isAnnotationPresent(LargeTest.class)) {
+ return TestRequestBuilder.LARGE_SIZE;
+ }
+ return null;
}
@Override
diff --git a/support/src/android/support/test/runner/AndroidJUnitRunner.java b/support/src/android/support/test/runner/AndroidJUnitRunner.java
index 9179519..f3c0ceb 100644
--- a/support/src/android/support/test/runner/AndroidJUnitRunner.java
+++ b/support/src/android/support/test/runner/AndroidJUnitRunner.java
@@ -238,7 +238,7 @@ public class AndroidJUnitRunner extends Instrumentation {
private void addListeners(List<RunListener> listeners, JUnitCore testRunner,
PrintStream writer) {
if (getBooleanArgument(ARGUMENT_SUITE_ASSIGNMENT)) {
- addListener(listeners, testRunner, new SuiteAssignmentPrinter(writer));
+ addListener(listeners, testRunner, new SuiteAssignmentPrinter(this));
} else {
addListener(listeners, testRunner, new TextListener(writer));
addListener(listeners, testRunner, new LogRunListener());