diff --git a/runner/android_junit_runner/CHANGELOG.md b/runner/android_junit_runner/CHANGELOG.md index 43ae3fda7..d8d6e2ad4 100644 --- a/runner/android_junit_runner/CHANGELOG.md +++ b/runner/android_junit_runner/CHANGELOG.md @@ -12,6 +12,8 @@ * Add logs at the start and end of RunBefore and RunAfters sections to help bug understanding. (b/445754263) +* Ensure @Before and @Test run on the same thread in AndroidJUnit4ClassRunner. + **Breaking Changes** **API Changes** diff --git a/runner/android_junit_runner/java/androidx/test/internal/runner/junit4/AndroidJUnit4ClassRunner.java b/runner/android_junit_runner/java/androidx/test/internal/runner/junit4/AndroidJUnit4ClassRunner.java index a4dfde2c7..ea7b0fba3 100644 --- a/runner/android_junit_runner/java/androidx/test/internal/runner/junit4/AndroidJUnit4ClassRunner.java +++ b/runner/android_junit_runner/java/androidx/test/internal/runner/junit4/AndroidJUnit4ClassRunner.java @@ -73,31 +73,31 @@ protected Statement withBefores(FrameworkMethod method, Object target, Statement @Override protected Statement withAfters(FrameworkMethod method, Object target, Statement statement) { List afters = getTestClass().getAnnotatedMethods(After.class); - return afters.isEmpty() ? statement : new RunAfters(method, statement, afters, target); - } + Statement combined = + afters.isEmpty() ? statement : new RunAfters(method, statement, afters, target); - /** - * Default to {@link org.junit.Test#timeout()} level timeout if set. Otherwise, set the timeout - * that was passed to the instrumentation via argument. - */ - @Override - protected Statement withPotentialTimeout(FrameworkMethod method, Object test, Statement next) { - // test level timeout i.e @Test(timeout = 123) long timeout = getTimeout(method.getAnnotation(Test.class)); - - // use runner arg timeout if test level timeout is not present if (timeout <= 0 && perTestTimeout > 0) { timeout = perTestTimeout; } - if (timeout <= 0) { - // no timeout was set - return next; + if (timeout > 0) { + // Cannot switch to use builder as that is not supported in JUnit 4.10 which is what is + // available in AOSP. + @SuppressWarnings("deprecation") + var failOnTimeout = new FailOnTimeout(combined, timeout); + return failOnTimeout; } + return combined; + } - // Cannot switch to use builder as that is not supported in JUnit 4.10 which is what is - // available in AOSP. - return new FailOnTimeout(next, timeout); + /** + * Default to {@link org.junit.Test#timeout()} level timeout if set. Otherwise, set the timeout + * that was passed to the instrumentation via argument. + */ + @Override + protected Statement withPotentialTimeout(FrameworkMethod method, Object test, Statement next) { + return next; } private long getTimeout(Test annotation) {