Make FlutterRunner launch deterministic when running other tests. (#2584)
* Make FlutterRunner launch deterministic when running other tests.
* Switch to using FlutterTestRunner
diff --git a/packages/e2e/CHANGELOG.md b/packages/e2e/CHANGELOG.md
index 86f37b2..ab17150 100644
--- a/packages/e2e/CHANGELOG.md
+++ b/packages/e2e/CHANGELOG.md
@@ -1,3 +1,9 @@
+## 0.3.0
+
+* Updates documentation to instruct developers not to launch the activity since
+ we are doing it for them.
+* Renames `FlutterRunner` to `FlutterTestRunner` to avoid conflict with Fuchsia.
+
## 0.2.4+4
* Fixed a hang that occurred on platforms that don't have a `MethodChannel` listener registered..
diff --git a/packages/e2e/README.md b/packages/e2e/README.md
index 3e27ff3..7d571a5 100644
--- a/packages/e2e/README.md
+++ b/packages/e2e/README.md
@@ -93,10 +93,10 @@
import org.junit.Rule;
import org.junit.runner.RunWith;
-@RunWith(FlutterRunner.class)
+@RunWith(FlutterTestRunner.class)
public class MainActivityTest {
@Rule
- public ActivityTestRule<MainActivity> rule = new ActivityTestRule<>(MainActivity.class);
+ public ActivityTestRule<MainActivity> rule = new ActivityTestRule<>(MainActivity.class, true, false);
}
```
diff --git a/packages/e2e/android/src/main/java/dev/flutter/plugins/e2e/FlutterRunner.java b/packages/e2e/android/src/main/java/dev/flutter/plugins/e2e/FlutterTestRunner.java
similarity index 74%
rename from packages/e2e/android/src/main/java/dev/flutter/plugins/e2e/FlutterRunner.java
rename to packages/e2e/android/src/main/java/dev/flutter/plugins/e2e/FlutterTestRunner.java
index 31f3e84..f214cd7 100644
--- a/packages/e2e/android/src/main/java/dev/flutter/plugins/e2e/FlutterRunner.java
+++ b/packages/e2e/android/src/main/java/dev/flutter/plugins/e2e/FlutterTestRunner.java
@@ -5,6 +5,7 @@
package dev.flutter.plugins.e2e;
import android.app.Activity;
+import android.util.Log;
import androidx.test.rule.ActivityTestRule;
import java.lang.reflect.Field;
import java.util.Map;
@@ -15,11 +16,13 @@
import org.junit.runner.notification.Failure;
import org.junit.runner.notification.RunNotifier;
-public class FlutterRunner extends Runner {
+public class FlutterTestRunner extends Runner {
+ private static final String TAG = "FlutterTestRunner";
final Class testClass;
+ ActivityTestRule<Activity> rule = null;
- public FlutterRunner(Class<?> testClass) {
+ public FlutterTestRunner(Class<?> testClass) {
super();
this.testClass = testClass;
@@ -29,8 +32,7 @@
if (field.isAnnotationPresent(Rule.class)) {
try {
Object instance = testClass.newInstance();
- ActivityTestRule<Activity> rule = (ActivityTestRule<Activity>) field.get(instance);
- rule.launchActivity(null);
+ rule = (ActivityTestRule<Activity>) field.get(instance);
} catch (InstantiationException | IllegalAccessException e) {
// This might occur if the developer did not make the rule public.
// We could call field.setAccessible(true) but it seems better to throw.
@@ -47,6 +49,17 @@
@Override
public void run(RunNotifier notifier) {
+ if (rule == null) {
+ throw new RuntimeException("Unable to run tests due to missing activity rule");
+ }
+ try {
+ rule.launchActivity(null);
+ } catch (RuntimeException e) {
+ Log.v(TAG, "launchActivity failed, possibly because the activity was already running. " + e);
+ Log.v(
+ TAG,
+ "Try disabling auto-launch of the activity, e.g. ActivityTestRule<>(MainActivity.class, true, false);");
+ }
Map<String, String> results = null;
try {
results = E2EPlugin.testResults.get();
diff --git a/packages/e2e/example/android/app/src/androidTest/java/com/example/e2e_example/EmbedderV1ActivityTest.java b/packages/e2e/example/android/app/src/androidTest/java/com/example/e2e_example/EmbedderV1ActivityTest.java
index a526c1c..eedde29 100644
--- a/packages/e2e/example/android/app/src/androidTest/java/com/example/e2e_example/EmbedderV1ActivityTest.java
+++ b/packages/e2e/example/android/app/src/androidTest/java/com/example/e2e_example/EmbedderV1ActivityTest.java
@@ -1,13 +1,13 @@
package com.example.e2e_example;
import androidx.test.rule.ActivityTestRule;
-import dev.flutter.plugins.e2e.FlutterRunner;
+import dev.flutter.plugins.e2e.FlutterTestRunner;
import org.junit.Rule;
import org.junit.runner.RunWith;
-@RunWith(FlutterRunner.class)
+@RunWith(FlutterTestRunner.class)
public class EmbedderV1ActivityTest {
@Rule
public ActivityTestRule<EmbedderV1Activity> rule =
- new ActivityTestRule<>(EmbedderV1Activity.class);
+ new ActivityTestRule<>(EmbedderV1Activity.class, true, false);
}
diff --git a/packages/e2e/example/android/app/src/androidTest/java/com/example/e2e_example/MainActivityTest.java b/packages/e2e/example/android/app/src/androidTest/java/com/example/e2e_example/MainActivityTest.java
index b61c056..93b1f92 100644
--- a/packages/e2e/example/android/app/src/androidTest/java/com/example/e2e_example/MainActivityTest.java
+++ b/packages/e2e/example/android/app/src/androidTest/java/com/example/e2e_example/MainActivityTest.java
@@ -1,11 +1,13 @@
package com.example.e2e_example;
import androidx.test.rule.ActivityTestRule;
-import dev.flutter.plugins.e2e.FlutterRunner;
+import dev.flutter.plugins.e2e.FlutterTestRunner;
import org.junit.Rule;
import org.junit.runner.RunWith;
-@RunWith(FlutterRunner.class)
+@RunWith(FlutterTestRunner.class)
public class MainActivityTest {
- @Rule public ActivityTestRule<MainActivity> rule = new ActivityTestRule<>(MainActivity.class);
+ @Rule
+ public ActivityTestRule<MainActivity> rule =
+ new ActivityTestRule<>(MainActivity.class, true, false);
}
diff --git a/packages/e2e/pubspec.yaml b/packages/e2e/pubspec.yaml
index 21e1210..e05bc1b 100644
--- a/packages/e2e/pubspec.yaml
+++ b/packages/e2e/pubspec.yaml
@@ -1,6 +1,6 @@
name: e2e
description: Runs tests that use the flutter_test API as integration tests.
-version: 0.2.4+4
+version: 0.3.0
homepage: https://github.com/flutter/plugins/tree/master/packages/e2e
environment: