diff options
author | Brett Chabot <brettchabot@google.com> | 2014-02-21 12:10:22 -0800 |
---|---|---|
committer | Brett Chabot <brettchabot@google.com> | 2014-02-21 17:49:15 -0800 |
commit | a1898a7e8a25d9044ac39179f6b3e72dc1e778de (patch) | |
tree | f72cee5d6b009ace0afd2e354ad8481fe30adb08 | |
parent | 7701a9228ec5a64cd252b2bfbdcc8f4517bee210 (diff) | |
download | testing-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.java | 45 | ||||
-rw-r--r-- | support/tests/src/android/support/test/internal/runner/TestRequestBuilderTest.java | 18 |
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()); + } } |