From 1c646233d5b33c2113fecd3ceac3ee839e846224 Mon Sep 17 00:00:00 2001 From: Collin Jackson Date: Fri, 6 Mar 2020 10:16:56 -0800 Subject: [PATCH 1/9] Make FlutterRunner launch deterministic when running other tests. --- packages/e2e/CHANGELOG.md | 4 ++++ .../java/dev/flutter/plugins/e2e/FlutterRunner.java | 13 ++++++++++++- packages/e2e/pubspec.yaml | 2 +- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/packages/e2e/CHANGELOG.md b/packages/e2e/CHANGELOG.md index 86f37b291549..7f44c8cde219 100644 --- a/packages/e2e/CHANGELOG.md +++ b/packages/e2e/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.4+5 + +* Flake fix; more deterministic behavior for launching activity. + ## 0.2.4+4 * Fixed a hang that occurred on platforms that don't have a `MethodChannel` listener registered.. 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/FlutterRunner.java index 31f3e8431cad..d2d1bd40bd48 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/FlutterRunner.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; @@ -16,8 +17,10 @@ import org.junit.runner.notification.RunNotifier; public class FlutterRunner extends Runner { + private static final String TAG = "FlutterRunner"; final Class testClass; + ActivityTestRule rule; public FlutterRunner(Class testClass) { super(); @@ -29,7 +32,8 @@ public FlutterRunner(Class testClass) { if (field.isAnnotationPresent(Rule.class)) { try { Object instance = testClass.newInstance(); - ActivityTestRule rule = (ActivityTestRule) field.get(instance); + rule = (ActivityTestRule) field.get(instance); + // Launching the activity here seems to keep us from being terminated early rule.launchActivity(null); } catch (InstantiationException | IllegalAccessException e) { // This might occur if the developer did not make the rule public. @@ -47,6 +51,13 @@ public Description getDescription() { @Override public void run(RunNotifier notifier) { + try { + rule.launchActivity(null); + } catch (RuntimeException e) { + Log.v(TAG, e); + Log.v(TAG, "launchActivity failed, possibly because the activity was already running.") + Log.v(TAG, "Try disabling auto-launch of the activity, e.g. ActivityTestRule<>(MainActivity.class, true, false);"); + } Map results = null; try { results = E2EPlugin.testResults.get(); diff --git a/packages/e2e/pubspec.yaml b/packages/e2e/pubspec.yaml index 21e1210bd23e..fc22224a3de7 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.2.4+5 homepage: https://github.com/flutter/plugins/tree/master/packages/e2e environment: From ec499c6d27d3c308994ec5b582efb75d92a40756 Mon Sep 17 00:00:00 2001 From: Collin Jackson Date: Fri, 6 Mar 2020 10:19:55 -0800 Subject: [PATCH 2/9] Bump to 3.0 --- packages/e2e/CHANGELOG.md | 3 ++- packages/e2e/pubspec.yaml | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/e2e/CHANGELOG.md b/packages/e2e/CHANGELOG.md index 7f44c8cde219..050a92376c7a 100644 --- a/packages/e2e/CHANGELOG.md +++ b/packages/e2e/CHANGELOG.md @@ -1,6 +1,7 @@ -## 0.2.4+5 +## 0.3.0 * Flake fix; more deterministic behavior for launching activity. +* Renames `FlutterRunner` to `FlutterTestRunner` to avoid conflict with Fuchsia. ## 0.2.4+4 diff --git a/packages/e2e/pubspec.yaml b/packages/e2e/pubspec.yaml index fc22224a3de7..e05bc1b560d8 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+5 +version: 0.3.0 homepage: https://github.com/flutter/plugins/tree/master/packages/e2e environment: From b7c770d6c9cc370cec06881b225d1ab5b0d1ab2b Mon Sep 17 00:00:00 2001 From: Collin Jackson Date: Fri, 6 Mar 2020 10:22:21 -0800 Subject: [PATCH 3/9] Switch to using FlutterTestRunner --- .../src/main/java/dev/flutter/plugins/e2e/FlutterRunner.java | 4 ++-- .../java/com/example/e2e_example/EmbedderV1ActivityTest.java | 4 ++-- .../java/com/example/e2e_example/MainActivityTest.java | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) 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/FlutterRunner.java index d2d1bd40bd48..06c0c5600195 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/FlutterRunner.java @@ -16,8 +16,8 @@ import org.junit.runner.notification.Failure; import org.junit.runner.notification.RunNotifier; -public class FlutterRunner extends Runner { - private static final String TAG = "FlutterRunner"; +public class FlutterTestRunner extends Runner { + private static final String TAG = "FlutterTestRunner"; final Class testClass; ActivityTestRule rule; 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 a526c1c8422e..47852a356ffa 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 @@ -5,9 +5,9 @@ import org.junit.Rule; import org.junit.runner.RunWith; -@RunWith(FlutterRunner.class) +@RunWith(FlutterTestRunner.class) public class EmbedderV1ActivityTest { @Rule public ActivityTestRule 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 b61c056e176d..6553bf4f7b83 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 @@ -5,7 +5,7 @@ import org.junit.Rule; import org.junit.runner.RunWith; -@RunWith(FlutterRunner.class) +@RunWith(FlutterTestRunner.class) public class MainActivityTest { - @Rule public ActivityTestRule rule = new ActivityTestRule<>(MainActivity.class); + @Rule public ActivityTestRule rule = new ActivityTestRule<>(MainActivity.class, true, false); } From 9dd4b9b53dc755690b3ec2d37cff2b6f98e95ac8 Mon Sep 17 00:00:00 2001 From: Collin Jackson Date: Fri, 6 Mar 2020 10:24:55 -0800 Subject: [PATCH 4/9] update README --- packages/e2e/CHANGELOG.md | 3 ++- packages/e2e/README.md | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/e2e/CHANGELOG.md b/packages/e2e/CHANGELOG.md index 050a92376c7a..ab17150d7448 100644 --- a/packages/e2e/CHANGELOG.md +++ b/packages/e2e/CHANGELOG.md @@ -1,6 +1,7 @@ ## 0.3.0 -* Flake fix; more deterministic behavior for launching activity. +* 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 diff --git a/packages/e2e/README.md b/packages/e2e/README.md index 3e27ff36afa3..7d571a522057 100644 --- a/packages/e2e/README.md +++ b/packages/e2e/README.md @@ -93,10 +93,10 @@ import dev.flutter.plugins.e2e.FlutterRunner; import org.junit.Rule; import org.junit.runner.RunWith; -@RunWith(FlutterRunner.class) +@RunWith(FlutterTestRunner.class) public class MainActivityTest { @Rule - public ActivityTestRule rule = new ActivityTestRule<>(MainActivity.class); + public ActivityTestRule rule = new ActivityTestRule<>(MainActivity.class, true, false); } ``` From ae67ba8a68b8fdddb6a3115b07db2b1f165f3ace Mon Sep 17 00:00:00 2001 From: Collin Jackson Date: Fri, 6 Mar 2020 10:26:26 -0800 Subject: [PATCH 5/9] Fix syntax error --- .../src/main/java/dev/flutter/plugins/e2e/FlutterRunner.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) 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/FlutterRunner.java index 06c0c5600195..cbad4f3b788e 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/FlutterRunner.java @@ -33,8 +33,6 @@ public FlutterRunner(Class testClass) { try { Object instance = testClass.newInstance(); rule = (ActivityTestRule) field.get(instance); - // Launching the activity here seems to keep us from being terminated early - rule.launchActivity(null); } 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. @@ -55,7 +53,7 @@ public void run(RunNotifier notifier) { rule.launchActivity(null); } catch (RuntimeException e) { Log.v(TAG, e); - Log.v(TAG, "launchActivity failed, possibly because the activity was already running.") + Log.v(TAG, "launchActivity failed, possibly because the activity was already running."); Log.v(TAG, "Try disabling auto-launch of the activity, e.g. ActivityTestRule<>(MainActivity.class, true, false);"); } Map results = null; From ac2332327953aa0bfa747d4a2d67a71c327df0c8 Mon Sep 17 00:00:00 2001 From: Collin Jackson Date: Fri, 6 Mar 2020 10:30:17 -0800 Subject: [PATCH 6/9] Fix build failures --- .../e2e/{FlutterRunner.java => FlutterTestRunner.java} | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) rename packages/e2e/android/src/main/java/dev/flutter/plugins/e2e/{FlutterRunner.java => FlutterTestRunner.java} (96%) 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 96% 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 cbad4f3b788e..6dda6c471a63 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 @@ -22,7 +22,7 @@ public class FlutterTestRunner extends Runner { final Class testClass; ActivityTestRule rule; - public FlutterRunner(Class testClass) { + public FlutterTestRunner(Class testClass) { super(); this.testClass = testClass; @@ -52,8 +52,7 @@ public void run(RunNotifier notifier) { try { rule.launchActivity(null); } catch (RuntimeException e) { - Log.v(TAG, e); - Log.v(TAG, "launchActivity failed, possibly because the activity was already running."); + 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 results = null; From 78f66cb81c2f62e01820c4950d2d46e8da68260e Mon Sep 17 00:00:00 2001 From: Collin Jackson Date: Fri, 6 Mar 2020 10:34:40 -0800 Subject: [PATCH 7/9] Mark class as final, fix references --- .../main/java/dev/flutter/plugins/e2e/FlutterTestRunner.java | 2 +- .../java/com/example/e2e_example/EmbedderV1ActivityTest.java | 2 +- .../java/com/example/e2e_example/MainActivityTest.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/e2e/android/src/main/java/dev/flutter/plugins/e2e/FlutterTestRunner.java b/packages/e2e/android/src/main/java/dev/flutter/plugins/e2e/FlutterTestRunner.java index 6dda6c471a63..20da34714508 100644 --- a/packages/e2e/android/src/main/java/dev/flutter/plugins/e2e/FlutterTestRunner.java +++ b/packages/e2e/android/src/main/java/dev/flutter/plugins/e2e/FlutterTestRunner.java @@ -20,7 +20,7 @@ public class FlutterTestRunner extends Runner { private static final String TAG = "FlutterTestRunner"; final Class testClass; - ActivityTestRule rule; + final ActivityTestRule rule; public FlutterTestRunner(Class testClass) { super(); 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 47852a356ffa..eedde293eb6c 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,7 +1,7 @@ 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; 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 6553bf4f7b83..2fe4a6b4d96a 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,7 +1,7 @@ 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; From 16324a3e9fc0d2198a76e4dac4bf001c4fd108ab Mon Sep 17 00:00:00 2001 From: Collin Jackson Date: Fri, 6 Mar 2020 10:36:44 -0800 Subject: [PATCH 8/9] tests pass --- .../main/java/dev/flutter/plugins/e2e/FlutterTestRunner.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/e2e/android/src/main/java/dev/flutter/plugins/e2e/FlutterTestRunner.java b/packages/e2e/android/src/main/java/dev/flutter/plugins/e2e/FlutterTestRunner.java index 20da34714508..1fc071782dca 100644 --- a/packages/e2e/android/src/main/java/dev/flutter/plugins/e2e/FlutterTestRunner.java +++ b/packages/e2e/android/src/main/java/dev/flutter/plugins/e2e/FlutterTestRunner.java @@ -20,7 +20,7 @@ public class FlutterTestRunner extends Runner { private static final String TAG = "FlutterTestRunner"; final Class testClass; - final ActivityTestRule rule; + ActivityTestRule rule = null; public FlutterTestRunner(Class testClass) { super(); @@ -49,6 +49,9 @@ public Description getDescription() { @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) { From 01accaf8df5941ed6333f585899b7dd753fbe26f Mon Sep 17 00:00:00 2001 From: Collin Jackson Date: Fri, 6 Mar 2020 10:50:01 -0800 Subject: [PATCH 9/9] reformat --- .../main/java/dev/flutter/plugins/e2e/FlutterTestRunner.java | 4 +++- .../java/com/example/e2e_example/MainActivityTest.java | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/e2e/android/src/main/java/dev/flutter/plugins/e2e/FlutterTestRunner.java b/packages/e2e/android/src/main/java/dev/flutter/plugins/e2e/FlutterTestRunner.java index 1fc071782dca..f214cd7ce3fe 100644 --- a/packages/e2e/android/src/main/java/dev/flutter/plugins/e2e/FlutterTestRunner.java +++ b/packages/e2e/android/src/main/java/dev/flutter/plugins/e2e/FlutterTestRunner.java @@ -56,7 +56,9 @@ public void run(RunNotifier notifier) { 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);"); + Log.v( + TAG, + "Try disabling auto-launch of the activity, e.g. ActivityTestRule<>(MainActivity.class, true, false);"); } Map results = null; try { 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 2fe4a6b4d96a..93b1f923ee05 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 @@ -7,5 +7,7 @@ @RunWith(FlutterTestRunner.class) public class MainActivityTest { - @Rule public ActivityTestRule rule = new ActivityTestRule<>(MainActivity.class, true, false); + @Rule + public ActivityTestRule rule = + new ActivityTestRule<>(MainActivity.class, true, false); }