summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrett Chabot <brettchabot@google.com>2014-02-21 12:10:22 -0800
committerBrett Chabot <brettchabot@google.com>2014-02-21 17:49:15 -0800
commita1898a7e8a25d9044ac39179f6b3e72dc1e778de (patch)
treef72cee5d6b009ace0afd2e354ad8481fe30adb08
parent7701a9228ec5a64cd252b2bfbdcc8f4517bee210 (diff)
downloadtesting-a1898a7e8a25d9044ac39179f6b3e72dc1e778de.tar.gz
Don't report an error for empty test runs.
Tests are commonly run with size or other filters. It is incorrect to report errors if a test package doesn't happen to have tests of the given size. Plus '0 tests is not an error' is the InstrumentationTestRunner behavior. Change-Id: Ifaa2abc6bffd57ff514277e8c7e4ddf33345023c
-rw-r--r--support/src/android/support/test/internal/runner/TestRequestBuilder.java45
-rw-r--r--support/tests/src/android/support/test/internal/runner/TestRequestBuilderTest.java18
2 files changed, 60 insertions, 3 deletions
diff --git a/support/src/android/support/test/internal/runner/TestRequestBuilder.java b/support/src/android/support/test/internal/runner/TestRequestBuilder.java
index cf0e6c9..0d7cd8c 100644
--- a/support/src/android/support/test/internal/runner/TestRequestBuilder.java
+++ b/support/src/android/support/test/internal/runner/TestRequestBuilder.java
@@ -32,6 +32,8 @@ import org.junit.runner.Description;
import org.junit.runner.Request;
import org.junit.runner.Runner;
import org.junit.runner.manipulation.Filter;
+import org.junit.runner.manipulation.NoTestsRemainException;
+import org.junit.runner.notification.RunNotifier;
import org.junit.runners.model.InitializationError;
import java.io.IOException;
@@ -228,6 +230,47 @@ public class TestRequestBuilder {
}
}
+ /**
+ * A {@link Request} that doesn't report an error if all tests are filtered out. Done for
+ * consistency with InstrumentationTestRunner.
+ */
+ private static class LenientFilterRequest extends Request {
+ private final Request mRequest;
+ private final Filter mFilter;
+
+ public LenientFilterRequest(Request classRequest, Filter filter) {
+ mRequest = classRequest;
+ mFilter = filter;
+ }
+
+ @Override
+ public Runner getRunner() {
+ try {
+ Runner runner = mRequest.getRunner();
+ mFilter.apply(runner);
+ return runner;
+ } catch (NoTestsRemainException e) {
+ // don't treat filtering out all tests as an error
+ return new BlankRunner();
+ }
+ }
+ }
+
+ /**
+ * A {@link Runner} that doesn't do anything
+ */
+ private static class BlankRunner extends Runner {
+ @Override
+ public Description getDescription() {
+ return Description.createSuiteDescription("no tests found");
+ }
+
+ @Override
+ public void run(RunNotifier notifier) {
+ // do nothing
+ }
+ }
+
public TestRequestBuilder(PrintStream writer, String... apkPaths) {
mApkPaths = apkPaths;
mTestLoader = new TestLoader(writer);
@@ -364,7 +407,7 @@ public class TestRequestBuilder {
Request request = classes(instr, bundle, mSkipExecution, new Computer(),
mTestLoader.getLoadedClasses().toArray(new Class[0]));
- return new TestRequest(mTestLoader.getLoadFailures(), request.filterWith(mFilter));
+ return new TestRequest(mTestLoader.getLoadFailures(), new LenientFilterRequest(request, mFilter));
}
/**
diff --git a/support/tests/src/android/support/test/internal/runner/TestRequestBuilderTest.java b/support/tests/src/android/support/test/internal/runner/TestRequestBuilderTest.java
index 81cf3f7..9da0ba3 100644
--- a/support/tests/src/android/support/test/internal/runner/TestRequestBuilderTest.java
+++ b/support/tests/src/android/support/test/internal/runner/TestRequestBuilderTest.java
@@ -521,8 +521,8 @@ public class TestRequestBuilderTest {
// The last iteration through the loop doesn't add a ShardingFilter - it runs all the
// tests to establish a baseline for the total number that should have been run.
for (int i = 0; i < 5; i++) {
- TestRequestBuilder b
- = new TestRequestBuilder(new PrintStream(new ByteArrayOutputStream()));
+ TestRequestBuilder b = new TestRequestBuilder(new PrintStream(
+ new ByteArrayOutputStream()));
if (i < 4) {
b.addShardingFilter(4, i);
}
@@ -549,4 +549,18 @@ public class TestRequestBuilderTest {
Assert.assertTrue(results[i].getRunCount() < totalRun);
}
}
+
+ /**
+ * Verify that filtering out all tests is not treated as an error
+ */
+ @Test
+ public void testNoTests() {
+ TestRequestBuilder b = new TestRequestBuilder(new PrintStream(new ByteArrayOutputStream()));
+ b.addTestClass(SampleTest.class.getName());
+ b.addTestSizeFilter("medium");
+ TestRequest request = b.build(mInstr, mBundle);
+ JUnitCore testRunner = new JUnitCore();
+ Result result = testRunner.run(request.getRequest());
+ Assert.assertEquals(0, result.getRunCount());
+ }
}