diff options
author | 2024-10-29 23:28:52 +0000 | |
---|---|---|
committer | 2024-10-29 23:28:52 +0000 | |
commit | bc31fb6166ad6a94b88db7e9a993f00ded9440f5 (patch) | |
tree | c350e9bf90fd9edfb7ddbf40a90fd5c11c6e8515 | |
parent | 1539943b321916e0736def90c289d76a9833032f (diff) | |
parent | cd90e326c2855d2bc3447b4c16b7b08d8502f0e1 (diff) |
Merge "[Ravenwood] Update RATR to setup environment ASAP" into main
8 files changed, 155 insertions, 174 deletions
diff --git a/ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodAwareTestRunner.java b/ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodAwareTestRunner.java index 30a653d2da76..66a6890a23b0 100644 --- a/ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodAwareTestRunner.java +++ b/ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodAwareTestRunner.java @@ -38,7 +38,6 @@ import org.junit.runner.Runner; import org.junit.runner.manipulation.Filter; import org.junit.runner.manipulation.Filterable; import org.junit.runner.manipulation.NoTestsRemainException; -import org.junit.runner.notification.Failure; import org.junit.runner.notification.RunNotifier; import org.junit.runners.BlockJUnit4ClassRunner; import org.junit.runners.Suite; @@ -94,7 +93,7 @@ public final class RavenwoodAwareTestRunner extends RavenwoodAwareTestRunnerBase /** Keeps track of the runner on the current thread. */ private static final ThreadLocal<RavenwoodAwareTestRunner> sCurrentRunner = new ThreadLocal<>(); - static RavenwoodAwareTestRunner getCurrentRunner() { + private static RavenwoodAwareTestRunner getCurrentRunner() { var runner = sCurrentRunner.get(); if (runner == null) { throw new RuntimeException("Current test runner not set!"); @@ -102,11 +101,9 @@ public final class RavenwoodAwareTestRunner extends RavenwoodAwareTestRunnerBase return runner; } - private final Class<?> mTestJavaClass; + final Class<?> mTestJavaClass; + private final Runner mRealRunner; private TestClass mTestClass = null; - private Runner mRealRunner = null; - private Description mDescription = null; - private Throwable mExceptionInConstructor = null; /** * Stores internal states / methods associated with this runner that's only needed in @@ -114,50 +111,37 @@ public final class RavenwoodAwareTestRunner extends RavenwoodAwareTestRunnerBase */ final RavenwoodRunnerState mState = new RavenwoodRunnerState(this); - public TestClass getTestClass() { - return mTestClass; - } - /** * Constructor. */ public RavenwoodAwareTestRunner(Class<?> testClass) { RavenwoodRuntimeEnvironmentController.globalInitOnce(); mTestJavaClass = testClass; - try { - /* - * If the class has @DisabledOnRavenwood, then we'll delegate to - * ClassSkippingTestRunner, which simply skips it. - * - * We need to do it before instantiating TestClass for b/367694651. - */ - if (!RavenwoodEnablementChecker.shouldRunClassOnRavenwood(testClass, true)) { - mRealRunner = new ClassSkippingTestRunner(testClass); - mDescription = mRealRunner.getDescription(); - return; - } - mTestClass = new TestClass(testClass); + /* + * If the class has @DisabledOnRavenwood, then we'll delegate to + * ClassSkippingTestRunner, which simply skips it. + * + * We need to do it before instantiating TestClass for b/367694651. + */ + if (!RavenwoodEnablementChecker.shouldRunClassOnRavenwood(testClass, true)) { + mRealRunner = new ClassSkippingTestRunner(testClass); + return; + } + + mTestClass = new TestClass(testClass); + + Log.v(TAG, "RavenwoodAwareTestRunner starting for " + testClass.getCanonicalName()); - Log.v(TAG, "RavenwoodAwareTestRunner starting for " + testClass.getCanonicalName()); + // This is needed to make AndroidJUnit4ClassRunner happy. + InstrumentationRegistry.registerInstance(null, Bundle.EMPTY); - onRunnerInitializing(); + // Hook point to allow more customization. + runAnnotatedMethodsOnRavenwood(RavenwoodTestRunnerInitializing.class, null); - mRealRunner = instantiateRealRunner(mTestClass); - mDescription = mRealRunner.getDescription(); - } catch (Throwable th) { - // If we throw in the constructor, Tradefed may not report it and just ignore the class, - // so record it and throw it when the test actually started. - Log.e(TAG, "Fatal: Exception detected in constructor", th); - mExceptionInConstructor = new RuntimeException("Exception detected in constructor", - th); - mDescription = Description.createTestDescription(testClass, "Constructor"); + mRealRunner = instantiateRealRunner(mTestClass); - // This is for testing if tradefed is fixed. - if ("1".equals(System.getenv("RAVENWOOD_THROW_EXCEPTION_IN_TEST_RUNNER"))) { - throw th; - } - } + mState.enterTestRunner(); } @Override @@ -165,23 +149,11 @@ public final class RavenwoodAwareTestRunner extends RavenwoodAwareTestRunnerBase return mRealRunner; } - /** - * Run the bare minimum setup to initialize the wrapped runner. - */ - // This method is called by the ctor, so never make it virtual. - private void onRunnerInitializing() { - // This is needed to make AndroidJUnit4ClassRunner happy. - InstrumentationRegistry.registerInstance(null, Bundle.EMPTY); - - // Hook point to allow more customization. - runAnnotatedMethodsOnRavenwood(RavenwoodTestRunnerInitializing.class, null); - } - private void runAnnotatedMethodsOnRavenwood(Class<? extends Annotation> annotationClass, Object instance) { Log.v(TAG, "runAnnotatedMethodsOnRavenwood() " + annotationClass.getName()); - for (var method : getTestClass().getAnnotatedMethods(annotationClass)) { + for (var method : mTestClass.getAnnotatedMethods(annotationClass)) { ensureIsPublicVoidMethod(method.getMethod(), /* isStatic=*/ instance == null); var methodDesc = method.getDeclaringClass().getName() + "." @@ -195,11 +167,6 @@ public final class RavenwoodAwareTestRunner extends RavenwoodAwareTestRunnerBase } @Override - public Description getDescription() { - return mDescription; - } - - @Override public void run(RunNotifier realNotifier) { final var notifier = new RavenwoodRunNotifier(realNotifier); final var description = getDescription(); @@ -216,10 +183,6 @@ public final class RavenwoodAwareTestRunner extends RavenwoodAwareTestRunnerBase dumpDescription(description); } - if (maybeReportExceptionFromConstructor(notifier)) { - return; - } - // TODO(b/365976974): handle nested classes better final boolean skipRunnerHook = mRealRunnerTakesRunnerBuilder && mRealRunner instanceof Suite; @@ -228,7 +191,7 @@ public final class RavenwoodAwareTestRunner extends RavenwoodAwareTestRunnerBase try { if (!skipRunnerHook) { try { - mState.enterTestClass(description); + mState.enterTestClass(); } catch (Throwable th) { notifier.reportBeforeTestFailure(description, th); return; @@ -251,18 +214,6 @@ public final class RavenwoodAwareTestRunner extends RavenwoodAwareTestRunnerBase } } - /** Throw the exception detected in the constructor, if any. */ - private boolean maybeReportExceptionFromConstructor(RunNotifier notifier) { - if (mExceptionInConstructor == null) { - return false; - } - notifier.fireTestStarted(mDescription); - notifier.fireTestFailure(new Failure(mDescription, mExceptionInConstructor)); - notifier.fireTestFinished(mDescription); - - return true; - } - private Statement wrapWithHooks(Statement base, Description description, Scope scope, Order order) { return new Statement() { @@ -338,7 +289,7 @@ public final class RavenwoodAwareTestRunner extends RavenwoodAwareTestRunnerBase mState.enterTestMethod(description); } - final var classDescription = mState.getClassDescription(); + final var classDescription = getDescription(); // Class-level annotations are checked by the runner already, so we only check // method-level annotations here. @@ -360,7 +311,7 @@ public final class RavenwoodAwareTestRunner extends RavenwoodAwareTestRunnerBase private boolean onAfter(Description description, Scope scope, Order order, Throwable th) { Log.v(TAG, "onAfter: description=" + description + ", " + scope + ", " + order + ", " + th); - final var classDescription = mState.getClassDescription(); + final var classDescription = getDescription(); if (scope == Scope.Instance && order == Order.Outer) { // End of a test method. diff --git a/ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodRunnerState.java b/ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodRunnerState.java index ead4a849dcff..ec00e8fea887 100644 --- a/ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodRunnerState.java +++ b/ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodRunnerState.java @@ -52,37 +52,65 @@ public final class RavenwoodRunnerState { mRunner = runner; } - private Description mClassDescription; - private Description mMethodDescription; - + /** + * The RavenwoodConfig used to configure the current Ravenwood environment. + * This can either come from mConfig or mRule. + */ private RavenwoodConfig mCurrentConfig; - private RavenwoodRule mCurrentRule; + /** + * The RavenwoodConfig declared in the test class + */ + private RavenwoodConfig mConfig; + /** + * The RavenwoodRule currently in effect, declared in the test class + */ + private RavenwoodRule mRule; private boolean mHasRavenwoodRule; + private Description mMethodDescription; - public Description getClassDescription() { - return mClassDescription; + public RavenwoodConfig getConfig() { + return mCurrentConfig; } - public void enterTestClass(Description classDescription) { - Log.i(TAG, "enterTestClass: description=" + classDescription); - mClassDescription = classDescription; + public void enterTestRunner() { + Log.i(TAG, "enterTestRunner: " + mRunner); + + mHasRavenwoodRule = hasRavenwoodRule(mRunner.mTestJavaClass); + mConfig = extractConfiguration(mRunner.mTestJavaClass); - mHasRavenwoodRule = hasRavenwoodRule(mRunner.getTestClass().getJavaClass()); - mCurrentConfig = extractConfiguration(mRunner.getTestClass().getJavaClass()); + if (mConfig != null) { + if (mHasRavenwoodRule) { + fail("RavenwoodConfig and RavenwoodRule cannot be used in the same class." + + " Suggest migrating to RavenwoodConfig."); + } + mCurrentConfig = mConfig; + } else if (!mHasRavenwoodRule) { + // If no RavenwoodConfig and no RavenwoodRule, use a default config + mCurrentConfig = new RavenwoodConfig.Builder().build(); + } if (mCurrentConfig != null) { - RavenwoodRuntimeEnvironmentController.init(mCurrentConfig); + RavenwoodRuntimeEnvironmentController.init(mRunner); } } - public void exitTestClass() { - Log.i(TAG, "exitTestClass: description=" + mClassDescription); + public void enterTestClass() { + Log.i(TAG, "enterTestClass: " + mRunner.mTestJavaClass.getName()); + if (mCurrentConfig != null) { - try { + RavenwoodRuntimeEnvironmentController.init(mRunner); + } + } + + public void exitTestClass() { + Log.i(TAG, "exitTestClass: " + mRunner.mTestJavaClass.getName()); + try { + if (mCurrentConfig != null) { RavenwoodRuntimeEnvironmentController.reset(); - } finally { - mClassDescription = null; } + } finally { + mConfig = null; + mRule = null; } } @@ -92,6 +120,7 @@ public final class RavenwoodRunnerState { public void exitTestMethod() { mMethodDescription = null; + RavenwoodRuntimeEnvironmentController.reinit(); } public void enterRavenwoodRule(RavenwoodRule rule) { @@ -99,48 +128,32 @@ public final class RavenwoodRunnerState { fail("If you have a RavenwoodRule in your test, make sure the field type is" + " RavenwoodRule so Ravenwood can detect it."); } - if (mCurrentConfig != null) { - fail("RavenwoodConfig and RavenwoodRule cannot be used in the same class." - + " Suggest migrating to RavenwoodConfig."); - } - if (mCurrentRule != null) { + if (mRule != null) { fail("Multiple nesting RavenwoodRule's are detected in the same class," + " which is not supported."); } - mCurrentRule = rule; - RavenwoodRuntimeEnvironmentController.init(rule.getConfiguration()); + mRule = rule; + if (mCurrentConfig == null) { + mCurrentConfig = rule.getConfiguration(); + } + RavenwoodRuntimeEnvironmentController.init(mRunner); } public void exitRavenwoodRule(RavenwoodRule rule) { - if (mCurrentRule != rule) { - return; // This happens if the rule did _not_ take effect somehow. - } - - try { - RavenwoodRuntimeEnvironmentController.reset(); - } finally { - mCurrentRule = null; + if (mRule != rule) { + fail("RavenwoodRule did not take effect."); } + mRule = null; } /** * @return a configuration from a test class, if any. */ @Nullable - private RavenwoodConfig extractConfiguration(Class<?> testClass) { + private static RavenwoodConfig extractConfiguration(Class<?> testClass) { var field = findConfigurationField(testClass); if (field == null) { - if (mHasRavenwoodRule) { - // Should be handled by RavenwoodRule - return null; - } - - // If no RavenwoodConfig and no RavenwoodRule, return a default config - return new RavenwoodConfig.Builder().build(); - } - if (mHasRavenwoodRule) { - fail("RavenwoodConfig and RavenwoodRule cannot be used in the same class." - + " Suggest migrating to RavenwoodConfig."); + return null; } try { diff --git a/ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodRuntimeEnvironmentController.java b/ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodRuntimeEnvironmentController.java index de4357c4e7c5..9002e40bba32 100644 --- a/ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodRuntimeEnvironmentController.java +++ b/ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodRuntimeEnvironmentController.java @@ -137,7 +137,7 @@ public class RavenwoodRuntimeEnvironmentController { return res; } - private static RavenwoodConfig sConfig; + private static RavenwoodAwareTestRunner sRunner; private static RavenwoodSystemProperties sProps; private static boolean sInitialized = false; @@ -171,6 +171,10 @@ public class RavenwoodRuntimeEnvironmentController { // Redirect stdout/stdin to liblog. RuntimeInit.redirectLogStreams(); + // Touch some references early to ensure they're <clinit>'ed + Objects.requireNonNull(Build.TYPE); + Objects.requireNonNull(Build.VERSION.SDK); + if (RAVENWOOD_VERBOSE_LOGGING) { RavenwoodCommonUtils.log(TAG, "Force enabling verbose logging"); try { @@ -191,12 +195,19 @@ public class RavenwoodRuntimeEnvironmentController { /** * Initialize the environment. */ - public static void init(RavenwoodConfig config) { + public static void init(RavenwoodAwareTestRunner runner) { if (RAVENWOOD_VERBOSE_LOGGING) { - Log.i(TAG, "init() called here", new RuntimeException("STACKTRACE")); + Log.i(TAG, "init() called here: " + runner, new RuntimeException("STACKTRACE")); } + if (sRunner == runner) { + return; + } + if (sRunner != null) { + reset(); + } + sRunner = runner; try { - initInner(config); + initInner(runner.mState.getConfig()); } catch (Exception th) { Log.e(TAG, "init() failed", th); reset(); @@ -205,10 +216,6 @@ public class RavenwoodRuntimeEnvironmentController { } private static void initInner(RavenwoodConfig config) throws IOException { - if (sConfig != null) { - throw new RavenwoodRuntimeException("Internal error: init() called without reset()"); - } - sConfig = config; if (ENABLE_UNCAUGHT_EXCEPTION_DETECTION) { maybeThrowPendingUncaughtException(false); Thread.setDefaultUncaughtExceptionHandler(sUncaughtExceptionHandler); @@ -216,7 +223,7 @@ public class RavenwoodRuntimeEnvironmentController { android.os.Process.init$ravenwood(config.mUid, config.mPid); sOriginalIdentityToken = Binder.clearCallingIdentity(); - Binder.restoreCallingIdentity(packBinderIdentityToken(false, config.mUid, config.mPid)); + reinit(); setSystemProperties(config.mSystemProperties); ServiceManager.init$ravenwood(); @@ -269,9 +276,7 @@ public class RavenwoodRuntimeEnvironmentController { config.mInstContext = instContext; config.mTargetContext = targetContext; - final Supplier<Resources> systemResourcesLoader = () -> { - return config.mState.loadResources(null); - }; + final Supplier<Resources> systemResourcesLoader = () -> config.mState.loadResources(null); config.mState.mSystemServerContext = new RavenwoodContext(ANDROID_PACKAGE_NAME, main, systemResourcesLoader); @@ -288,10 +293,14 @@ public class RavenwoodRuntimeEnvironmentController { RavenwoodRuntimeEnvironmentController::dumpStacks, TIMEOUT_MILLIS, TimeUnit.MILLISECONDS); } + } - // Touch some references early to ensure they're <clinit>'ed - Objects.requireNonNull(Build.TYPE); - Objects.requireNonNull(Build.VERSION.SDK); + /** + * Partially re-initialize after each test method invocation + */ + public static void reinit() { + var config = sRunner.mState.getConfig(); + Binder.restoreCallingIdentity(packBinderIdentityToken(false, config.mUid, config.mPid)); } /** @@ -301,11 +310,11 @@ public class RavenwoodRuntimeEnvironmentController { if (RAVENWOOD_VERBOSE_LOGGING) { Log.i(TAG, "reset() called here", new RuntimeException("STACKTRACE")); } - if (sConfig == null) { + if (sRunner == null) { throw new RavenwoodRuntimeException("Internal error: reset() already called"); } - var config = sConfig; - sConfig = null; + var config = sRunner.mState.getConfig(); + sRunner = null; if (ENABLE_TIMEOUT_STACKS) { sPendingTimeout.cancel(false); diff --git a/ravenwood/junit-src/android/platform/test/ravenwood/RavenwoodAwareTestRunnerBase.java b/ravenwood/junit-src/android/platform/test/ravenwood/RavenwoodAwareTestRunnerBase.java index 7c72f6bd8619..31a14164bd51 100644 --- a/ravenwood/junit-src/android/platform/test/ravenwood/RavenwoodAwareTestRunnerBase.java +++ b/ravenwood/junit-src/android/platform/test/ravenwood/RavenwoodAwareTestRunnerBase.java @@ -74,7 +74,7 @@ abstract class RavenwoodAwareTestRunnerBase extends Runner implements Filterable } @Override - public Description getDescription() { + public final Description getDescription() { return getRealRunner().getDescription(); } diff --git a/ravenwood/junit-src/android/platform/test/ravenwood/RavenwoodRule.java b/ravenwood/junit-src/android/platform/test/ravenwood/RavenwoodRule.java index 773dba1b4620..3d6ac0f37050 100644 --- a/ravenwood/junit-src/android/platform/test/ravenwood/RavenwoodRule.java +++ b/ravenwood/junit-src/android/platform/test/ravenwood/RavenwoodRule.java @@ -24,6 +24,8 @@ import android.app.Instrumentation; import android.content.Context; import android.platform.test.annotations.DisabledOnRavenwood; +import androidx.test.platform.app.InstrumentationRegistry; + import com.android.ravenwood.common.RavenwoodCommonUtils; import org.junit.rules.TestRule; @@ -219,8 +221,7 @@ public final class RavenwoodRule implements TestRule { */ @Deprecated public Context getContext() { - return Objects.requireNonNull(mConfiguration.mInstContext, - "Context is only available during @Test execution"); + return InstrumentationRegistry.getInstrumentation().getContext(); } /** @@ -230,8 +231,7 @@ public final class RavenwoodRule implements TestRule { */ @Deprecated public Instrumentation getInstrumentation() { - return Objects.requireNonNull(mConfiguration.mInstrumentation, - "Instrumentation is only available during @Test execution"); + return InstrumentationRegistry.getInstrumentation(); } @Override diff --git a/ravenwood/tests/bivalenttest/test/com/android/ravenwoodtest/bivalenttest/ravenizer/RavenwoodAwareTestRunnerTest.java b/ravenwood/tests/bivalenttest/test/com/android/ravenwoodtest/bivalenttest/ravenizer/RavenwoodAwareTestRunnerTest.java index 637f06910d55..4e21f8605163 100644 --- a/ravenwood/tests/bivalenttest/test/com/android/ravenwoodtest/bivalenttest/ravenizer/RavenwoodAwareTestRunnerTest.java +++ b/ravenwood/tests/bivalenttest/test/com/android/ravenwoodtest/bivalenttest/ravenizer/RavenwoodAwareTestRunnerTest.java @@ -16,12 +16,15 @@ package com.android.ravenwoodtest.bivalenttest.ravenizer; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; import android.platform.test.annotations.DisabledOnRavenwood; import android.platform.test.annotations.RavenwoodTestRunnerInitializing; import android.platform.test.ravenwood.RavenwoodRule; import android.util.Log; +import androidx.test.platform.app.InstrumentationRegistry; + import junitparams.JUnitParamsRunner; import junitparams.Parameters; @@ -30,6 +33,8 @@ import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; +import java.util.List; + /** * Make sure RavenwoodAwareTestRunnerTest properly delegates to the original runner, * and also run the special annotated methods. @@ -61,13 +66,22 @@ public class RavenwoodAwareTestRunnerTest { sCallTracker.incrementMethodCallCount(); } + public RavenwoodAwareTestRunnerTest() { + // Make sure the environment is already initialized when the constructor is called + assertNotNull(InstrumentationRegistry.getInstrumentation()); + } + @Test public void test1() { sCallTracker.incrementMethodCallCount(); } + public static List<String> testParams() { + return List.of("foo", "bar"); + } + @Test - @Parameters({"foo", "bar"}) + @Parameters(method = "testParams") public void testWithParams(String arg) { sCallTracker.incrementMethodCallCount(); } diff --git a/ravenwood/tests/coretest/test/com/android/ravenwoodtest/runnercallbacktests/RavenwoodRunnerCallbackTest.java b/ravenwood/tests/coretest/test/com/android/ravenwoodtest/runnercallbacktests/RavenwoodRunnerCallbackTest.java index bd013133d3a4..6720e45939fb 100644 --- a/ravenwood/tests/coretest/test/com/android/ravenwoodtest/runnercallbacktests/RavenwoodRunnerCallbackTest.java +++ b/ravenwood/tests/coretest/test/com/android/ravenwoodtest/runnercallbacktests/RavenwoodRunnerCallbackTest.java @@ -337,9 +337,9 @@ public class RavenwoodRunnerCallbackTest extends RavenwoodRunnerTestBase { @Expected(""" testRunStarted: classes testSuiteStarted: classes - testStarted: Constructor(com.android.ravenwoodtest.runnercallbacktests.RavenwoodRunnerCallbackTest$ExceptionFromInnerRunnerConstructorTest) - testFailure: Exception detected in constructor - testFinished: Constructor(com.android.ravenwoodtest.runnercallbacktests.RavenwoodRunnerCallbackTest$ExceptionFromInnerRunnerConstructorTest) + testStarted: initializationError(com.android.ravenwoodtest.runnercallbacktests.RavenwoodRunnerCallbackTest$ExceptionFromInnerRunnerConstructorTest) + testFailure: Failed to instantiate class androidx.test.ext.junit.runners.AndroidJUnit4 + testFinished: initializationError(com.android.ravenwoodtest.runnercallbacktests.RavenwoodRunnerCallbackTest$ExceptionFromInnerRunnerConstructorTest) testSuiteFinished: classes testRunFinished: 1,1,0,0 """) @@ -439,9 +439,9 @@ public class RavenwoodRunnerCallbackTest extends RavenwoodRunnerTestBase { @Expected(""" testRunStarted: classes testSuiteStarted: classes - testStarted: Constructor(com.android.ravenwoodtest.runnercallbacktests.RavenwoodRunnerCallbackTest$BrokenRunnerTest) - testFailure: Exception detected in constructor - testFinished: Constructor(com.android.ravenwoodtest.runnercallbacktests.RavenwoodRunnerCallbackTest$BrokenRunnerTest) + testStarted: initializationError(com.android.ravenwoodtest.runnercallbacktests.RavenwoodRunnerCallbackTest$BrokenRunnerTest) + testFailure: Failed to instantiate class com.android.ravenwoodtest.runnercallbacktests.RavenwoodRunnerCallbackTest$BrokenTestRunner + testFinished: initializationError(com.android.ravenwoodtest.runnercallbacktests.RavenwoodRunnerCallbackTest$BrokenRunnerTest) testSuiteFinished: classes testRunFinished: 1,1,0,0 """) diff --git a/ravenwood/tests/coretest/test/com/android/ravenwoodtest/runnercallbacktests/RavenwoodRunnerConfigValidationTest.java b/ravenwood/tests/coretest/test/com/android/ravenwoodtest/runnercallbacktests/RavenwoodRunnerConfigValidationTest.java index 73ea64f57997..02d10732245d 100644 --- a/ravenwood/tests/coretest/test/com/android/ravenwoodtest/runnercallbacktests/RavenwoodRunnerConfigValidationTest.java +++ b/ravenwood/tests/coretest/test/com/android/ravenwoodtest/runnercallbacktests/RavenwoodRunnerConfigValidationTest.java @@ -106,17 +106,11 @@ public class RavenwoodRunnerConfigValidationTest extends RavenwoodRunnerTestBase @Expected(""" testRunStarted: classes testSuiteStarted: classes - testStarted: testMethod1(com.android.ravenwoodtest.runnercallbacktests.RavenwoodRunnerConfigValidationTest$ErrorMustBeReportedFromEachTest) + testStarted: initializationError(com.android.ravenwoodtest.runnercallbacktests.RavenwoodRunnerConfigValidationTest$ErrorMustBeReportedFromEachTest) testFailure: com.android.ravenwoodtest.runnercallbacktests.RavenwoodRunnerConfigValidationTest$ErrorMustBeReportedFromEachTest.sConfig expected to be public static - testFinished: testMethod1(com.android.ravenwoodtest.runnercallbacktests.RavenwoodRunnerConfigValidationTest$ErrorMustBeReportedFromEachTest) - testStarted: testMethod2(com.android.ravenwoodtest.runnercallbacktests.RavenwoodRunnerConfigValidationTest$ErrorMustBeReportedFromEachTest) - testFailure: com.android.ravenwoodtest.runnercallbacktests.RavenwoodRunnerConfigValidationTest$ErrorMustBeReportedFromEachTest.sConfig expected to be public static - testFinished: testMethod2(com.android.ravenwoodtest.runnercallbacktests.RavenwoodRunnerConfigValidationTest$ErrorMustBeReportedFromEachTest) - testStarted: testMethod3(com.android.ravenwoodtest.runnercallbacktests.RavenwoodRunnerConfigValidationTest$ErrorMustBeReportedFromEachTest) - testFailure: com.android.ravenwoodtest.runnercallbacktests.RavenwoodRunnerConfigValidationTest$ErrorMustBeReportedFromEachTest.sConfig expected to be public static - testFinished: testMethod3(com.android.ravenwoodtest.runnercallbacktests.RavenwoodRunnerConfigValidationTest$ErrorMustBeReportedFromEachTest) + testFinished: initializationError(com.android.ravenwoodtest.runnercallbacktests.RavenwoodRunnerConfigValidationTest$ErrorMustBeReportedFromEachTest) testSuiteFinished: classes - testRunFinished: 3,3,0,0 + testRunFinished: 1,1,0,0 """) // CHECKSTYLE:ON public static class ErrorMustBeReportedFromEachTest { @@ -145,9 +139,9 @@ public class RavenwoodRunnerConfigValidationTest extends RavenwoodRunnerTestBase @Expected(""" testRunStarted: classes testSuiteStarted: classes - testStarted: testConfig(com.android.ravenwoodtest.runnercallbacktests.RavenwoodRunnerConfigValidationTest$DuplicateConfigTest) + testStarted: initializationError(com.android.ravenwoodtest.runnercallbacktests.RavenwoodRunnerConfigValidationTest$DuplicateConfigTest) testFailure: Class com.android.ravenwoodtest.runnercallbacktests.RavenwoodRunnerConfigValidationTest.DuplicateConfigTest has multiple fields with @RavenwoodConfig.Config - testFinished: testConfig(com.android.ravenwoodtest.runnercallbacktests.RavenwoodRunnerConfigValidationTest$DuplicateConfigTest) + testFinished: initializationError(com.android.ravenwoodtest.runnercallbacktests.RavenwoodRunnerConfigValidationTest$DuplicateConfigTest) testSuiteFinished: classes testRunFinished: 1,1,0,0 """) @@ -175,9 +169,9 @@ public class RavenwoodRunnerConfigValidationTest extends RavenwoodRunnerTestBase @Expected(""" testRunStarted: classes testSuiteStarted: classes - testStarted: testConfig(com.android.ravenwoodtest.runnercallbacktests.RavenwoodRunnerConfigValidationTest$NonStaticConfigTest) + testStarted: initializationError(com.android.ravenwoodtest.runnercallbacktests.RavenwoodRunnerConfigValidationTest$NonStaticConfigTest) testFailure: com.android.ravenwoodtest.runnercallbacktests.RavenwoodRunnerConfigValidationTest$NonStaticConfigTest.sConfig expected to be public static - testFinished: testConfig(com.android.ravenwoodtest.runnercallbacktests.RavenwoodRunnerConfigValidationTest$NonStaticConfigTest) + testFinished: initializationError(com.android.ravenwoodtest.runnercallbacktests.RavenwoodRunnerConfigValidationTest$NonStaticConfigTest) testSuiteFinished: classes testRunFinished: 1,1,0,0 """) @@ -201,9 +195,9 @@ public class RavenwoodRunnerConfigValidationTest extends RavenwoodRunnerTestBase @Expected(""" testRunStarted: classes testSuiteStarted: classes - testStarted: testConfig(com.android.ravenwoodtest.runnercallbacktests.RavenwoodRunnerConfigValidationTest$NonPublicConfigTest) + testStarted: initializationError(com.android.ravenwoodtest.runnercallbacktests.RavenwoodRunnerConfigValidationTest$NonPublicConfigTest) testFailure: com.android.ravenwoodtest.runnercallbacktests.RavenwoodRunnerConfigValidationTest$NonPublicConfigTest.sConfig expected to be public static - testFinished: testConfig(com.android.ravenwoodtest.runnercallbacktests.RavenwoodRunnerConfigValidationTest$NonPublicConfigTest) + testFinished: initializationError(com.android.ravenwoodtest.runnercallbacktests.RavenwoodRunnerConfigValidationTest$NonPublicConfigTest) testSuiteFinished: classes testRunFinished: 1,1,0,0 """) @@ -227,9 +221,9 @@ public class RavenwoodRunnerConfigValidationTest extends RavenwoodRunnerTestBase @Expected(""" testRunStarted: classes testSuiteStarted: classes - testStarted: testConfig(com.android.ravenwoodtest.runnercallbacktests.RavenwoodRunnerConfigValidationTest$WrongTypeConfigTest) + testStarted: initializationError(com.android.ravenwoodtest.runnercallbacktests.RavenwoodRunnerConfigValidationTest$WrongTypeConfigTest) testFailure: Field com.android.ravenwoodtest.runnercallbacktests.RavenwoodRunnerConfigValidationTest.WrongTypeConfigTest.sConfig has @RavenwoodConfig.Config but type is not RavenwoodConfig - testFinished: testConfig(com.android.ravenwoodtest.runnercallbacktests.RavenwoodRunnerConfigValidationTest$WrongTypeConfigTest) + testFinished: initializationError(com.android.ravenwoodtest.runnercallbacktests.RavenwoodRunnerConfigValidationTest$WrongTypeConfigTest) testSuiteFinished: classes testRunFinished: 1,1,0,0 """) @@ -282,9 +276,9 @@ public class RavenwoodRunnerConfigValidationTest extends RavenwoodRunnerTestBase @Expected(""" testRunStarted: classes testSuiteStarted: classes - testStarted: testConfig(com.android.ravenwoodtest.runnercallbacktests.RavenwoodRunnerConfigValidationTest$WithInstanceRuleTest) + testStarted: initializationError(com.android.ravenwoodtest.runnercallbacktests.RavenwoodRunnerConfigValidationTest$WithInstanceRuleTest) testFailure: RavenwoodConfig and RavenwoodRule cannot be used in the same class. Suggest migrating to RavenwoodConfig. - testFinished: testConfig(com.android.ravenwoodtest.runnercallbacktests.RavenwoodRunnerConfigValidationTest$WithInstanceRuleTest) + testFinished: initializationError(com.android.ravenwoodtest.runnercallbacktests.RavenwoodRunnerConfigValidationTest$WithInstanceRuleTest) testSuiteFinished: classes testRunFinished: 1,1,0,0 """) @@ -311,9 +305,9 @@ public class RavenwoodRunnerConfigValidationTest extends RavenwoodRunnerTestBase @Expected(""" testRunStarted: classes testSuiteStarted: classes - testStarted: Constructor(com.android.ravenwoodtest.runnercallbacktests.RavenwoodRunnerConfigValidationTest$WithStaticRuleTest) - testFailure: Exception detected in constructor - testFinished: Constructor(com.android.ravenwoodtest.runnercallbacktests.RavenwoodRunnerConfigValidationTest$WithStaticRuleTest) + testStarted: initializationError(com.android.ravenwoodtest.runnercallbacktests.RavenwoodRunnerConfigValidationTest$WithStaticRuleTest) + testFailure: Failed to instantiate class androidx.test.ext.junit.runners.AndroidJUnit4 + testFinished: initializationError(com.android.ravenwoodtest.runnercallbacktests.RavenwoodRunnerConfigValidationTest$WithStaticRuleTest) testSuiteFinished: classes testRunFinished: 1,1,0,0 """) @@ -400,9 +394,9 @@ public class RavenwoodRunnerConfigValidationTest extends RavenwoodRunnerTestBase @Expected(""" testRunStarted: classes testSuiteStarted: classes - testStarted: test(com.android.ravenwoodtest.runnercallbacktests.RavenwoodRunnerConfigValidationTest$ConfigWithRuleInBaseClassTest) + testStarted: initializationError(com.android.ravenwoodtest.runnercallbacktests.RavenwoodRunnerConfigValidationTest$ConfigWithRuleInBaseClassTest) testFailure: RavenwoodConfig and RavenwoodRule cannot be used in the same class. Suggest migrating to RavenwoodConfig. - testFinished: test(com.android.ravenwoodtest.runnercallbacktests.RavenwoodRunnerConfigValidationTest$ConfigWithRuleInBaseClassTest) + testFinished: initializationError(com.android.ravenwoodtest.runnercallbacktests.RavenwoodRunnerConfigValidationTest$ConfigWithRuleInBaseClassTest) testSuiteFinished: classes testRunFinished: 1,1,0,0 """) |