Merge "[Ravenwood] Update RATR to setup environment ASAP" into main
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 30a653d..66a6890 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.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 @@
/** 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 @@
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 @@
*/
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);
-
- Log.v(TAG, "RavenwoodAwareTestRunner starting for " + testClass.getCanonicalName());
-
- onRunnerInitializing();
-
- 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");
-
- // This is for testing if tradefed is fixed.
- if ("1".equals(System.getenv("RAVENWOOD_THROW_EXCEPTION_IN_TEST_RUNNER"))) {
- throw th;
- }
+ /*
+ * 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());
+
+ // This is needed to make AndroidJUnit4ClassRunner happy.
+ InstrumentationRegistry.registerInstance(null, Bundle.EMPTY);
+
+ // Hook point to allow more customization.
+ runAnnotatedMethodsOnRavenwood(RavenwoodTestRunnerInitializing.class, null);
+
+ mRealRunner = instantiateRealRunner(mTestClass);
+
+ mState.enterTestRunner();
}
@Override
@@ -165,23 +149,11 @@
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 @@
}
@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 @@
dumpDescription(description);
}
- if (maybeReportExceptionFromConstructor(notifier)) {
- return;
- }
-
// TODO(b/365976974): handle nested classes better
final boolean skipRunnerHook =
mRealRunnerTakesRunnerBuilder && mRealRunner instanceof Suite;
@@ -228,7 +191,7 @@
try {
if (!skipRunnerHook) {
try {
- mState.enterTestClass(description);
+ mState.enterTestClass();
} catch (Throwable th) {
notifier.reportBeforeTestFailure(description, th);
return;
@@ -251,18 +214,6 @@
}
}
- /** 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 @@
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 @@
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 ead4a84..ec00e8f 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 @@
mRunner = runner;
}
- private Description mClassDescription;
+ /**
+ * The RavenwoodConfig used to configure the current Ravenwood environment.
+ * This can either come from mConfig or mRule.
+ */
+ private RavenwoodConfig mCurrentConfig;
+ /**
+ * 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;
- private RavenwoodConfig mCurrentConfig;
- private RavenwoodRule mCurrentRule;
- private boolean mHasRavenwoodRule;
-
- 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.getTestClass().getJavaClass());
- mCurrentConfig = extractConfiguration(mRunner.getTestClass().getJavaClass());
+ mHasRavenwoodRule = hasRavenwoodRule(mRunner.mTestJavaClass);
+ mConfig = extractConfiguration(mRunner.mTestJavaClass);
+
+ 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 enterTestClass() {
+ Log.i(TAG, "enterTestClass: " + mRunner.mTestJavaClass.getName());
+
+ if (mCurrentConfig != null) {
+ RavenwoodRuntimeEnvironmentController.init(mRunner);
}
}
public void exitTestClass() {
- Log.i(TAG, "exitTestClass: description=" + mClassDescription);
- if (mCurrentConfig != null) {
- try {
+ 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 void exitTestMethod() {
mMethodDescription = null;
+ RavenwoodRuntimeEnvironmentController.reinit();
}
public void enterRavenwoodRule(RavenwoodRule rule) {
@@ -99,48 +128,32 @@
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.
+ if (mRule != rule) {
+ fail("RavenwoodRule did not take effect.");
}
-
- try {
- RavenwoodRuntimeEnvironmentController.reset();
- } finally {
- mCurrentRule = null;
- }
+ 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 de4357c..9002e40 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 @@
return res;
}
- private static RavenwoodConfig sConfig;
+ private static RavenwoodAwareTestRunner sRunner;
private static RavenwoodSystemProperties sProps;
private static boolean sInitialized = false;
@@ -171,6 +171,10 @@
// 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 @@
/**
* 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 @@
}
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 @@
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 @@
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 @@
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 @@
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 7c72f6b..31a1416 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 @@
}
@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 773dba1..3d6ac0f 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.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 @@
*/
@Deprecated
public Context getContext() {
- return Objects.requireNonNull(mConfiguration.mInstContext,
- "Context is only available during @Test execution");
+ return InstrumentationRegistry.getInstrumentation().getContext();
}
/**
@@ -230,8 +231,7 @@
*/
@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 637f069..4e21f86 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.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 @@
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 bd01313..6720e45 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 @@
@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 @@
@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 73ea64f..02d1073 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 @@
@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 @@
@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 @@
@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 @@
@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 @@
@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 @@
@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 @@
@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 @@
@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
""")