From b1c0e173bb21240e915449a26303699841c9098d Mon Sep 17 00:00:00 2001 From: Sebastian Roth Date: Fri, 17 Apr 2020 08:01:56 +0100 Subject: [PATCH 1/3] Reland: [e2e] Replaces the check for ActivityTestRule (#2633) This reverts commit 608774119dd5c9d68f5237347c12669fa9110c2b. --- packages/e2e/CHANGELOG.md | 4 +++ .../plugins/e2e/FlutterTestRunner.java | 14 ++++++++--- .../MainActivityWithPermissionTest.java | 25 +++++++++++++++++++ packages/e2e/pubspec.yaml | 2 +- 4 files changed, 40 insertions(+), 5 deletions(-) create mode 100644 packages/e2e/example/android/app/src/androidTest/java/com/example/e2e_example/MainActivityWithPermissionTest.java diff --git a/packages/e2e/CHANGELOG.md b/packages/e2e/CHANGELOG.md index 52fcc9284fde..24dc7a846ff2 100644 --- a/packages/e2e/CHANGELOG.md +++ b/packages/e2e/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.4.2 + +* Adds support for Android E2E tests that utilize other @Rule's, like GrantPermissionRule. + ## 0.4.1 * Remove Android dependencies fallback. 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 f214cd7ce3fe..78f0c3c5bac2 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 @@ -4,23 +4,24 @@ 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; import java.util.concurrent.ExecutionException; import org.junit.Rule; +import org.junit.rules.TestRule; import org.junit.runner.Description; import org.junit.runner.Runner; import org.junit.runner.notification.Failure; import org.junit.runner.notification.RunNotifier; public class FlutterTestRunner extends Runner { + private static final String TAG = "FlutterTestRunner"; final Class testClass; - ActivityTestRule rule = null; + TestRule rule = null; public FlutterTestRunner(Class testClass) { super(); @@ -32,7 +33,10 @@ public FlutterTestRunner(Class testClass) { if (field.isAnnotationPresent(Rule.class)) { try { Object instance = testClass.newInstance(); - rule = (ActivityTestRule) field.get(instance); + if (field.get(instance) instanceof ActivityTestRule) { + rule = (TestRule) field.get(instance); + break; + } } 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. @@ -53,7 +57,9 @@ public void run(RunNotifier notifier) { throw new RuntimeException("Unable to run tests due to missing activity rule"); } try { - rule.launchActivity(null); + if (rule instanceof ActivityTestRule) { + ((ActivityTestRule) rule).launchActivity(null); + } } catch (RuntimeException e) { Log.v(TAG, "launchActivity failed, possibly because the activity was already running. " + e); Log.v( diff --git a/packages/e2e/example/android/app/src/androidTest/java/com/example/e2e_example/MainActivityWithPermissionTest.java b/packages/e2e/example/android/app/src/androidTest/java/com/example/e2e_example/MainActivityWithPermissionTest.java new file mode 100644 index 000000000000..90218e8724a9 --- /dev/null +++ b/packages/e2e/example/android/app/src/androidTest/java/com/example/e2e_example/MainActivityWithPermissionTest.java @@ -0,0 +1,25 @@ +package com.example.e2e_example; + +import android.Manifest.permission; +import androidx.test.rule.ActivityTestRule; +import androidx.test.rule.GrantPermissionRule; +import dev.flutter.plugins.e2e.FlutterTestRunner; +import org.junit.Rule; +import org.junit.runner.RunWith; + +/** + * Demonstrates how a E2E test on Android can be run with permissions already granted. This is + * helpful if developers want to test native App behavior that depends on certain system service + * results which are guarded with permissions. + */ +@RunWith(FlutterTestRunner.class) +public class MainActivityWithPermissionTest { + + @Rule + public GrantPermissionRule permissionRule = + GrantPermissionRule.grant(permission.ACCESS_COARSE_LOCATION); + + @Rule + public ActivityTestRule rule = + new ActivityTestRule<>(MainActivity.class, true, false); +} diff --git a/packages/e2e/pubspec.yaml b/packages/e2e/pubspec.yaml index 72a782e25649..1857e2ddfb91 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.4.1 +version: 0.4.2 homepage: https://github.com/flutter/plugins/tree/master/packages/e2e environment: From c8d95d2aa956c836f8fe620d14835f2eba2a8cfc Mon Sep 17 00:00:00 2001 From: Sebastian Roth Date: Fri, 4 Dec 2020 16:20:57 +0000 Subject: [PATCH 2/3] Set networkCallback back to null when event stream is cancelled --- .../plugins/connectivity/ConnectivityBroadcastReceiver.java | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/connectivity/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityBroadcastReceiver.java b/packages/connectivity/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityBroadcastReceiver.java index ca3ccff82d2d..dbf96bda9fe8 100644 --- a/packages/connectivity/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityBroadcastReceiver.java +++ b/packages/connectivity/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityBroadcastReceiver.java @@ -64,6 +64,7 @@ public void onCancel(Object arguments) { if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { if (networkCallback != null) { connectivity.getConnectivityManager().unregisterNetworkCallback(networkCallback); + networkCallback = null; } } else { context.unregisterReceiver(this); From f98888e0552a8402e0c8bef6dd244488c709ea72 Mon Sep 17 00:00:00 2001 From: Sebastian Roth Date: Fri, 4 Dec 2020 16:22:00 +0000 Subject: [PATCH 3/3] Bump version, add changelog --- packages/connectivity/connectivity/CHANGELOG.md | 4 ++++ packages/connectivity/connectivity/pubspec.yaml | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/connectivity/connectivity/CHANGELOG.md b/packages/connectivity/connectivity/CHANGELOG.md index 72b6d9b6513a..8e0e85a97e11 100644 --- a/packages/connectivity/connectivity/CHANGELOG.md +++ b/packages/connectivity/connectivity/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.0.3 + +* Android: Cleanup the NetworkCallback object when a connectivity stream is cancelled + ## 2.0.2 * Android: Fix IllegalArgumentException. diff --git a/packages/connectivity/connectivity/pubspec.yaml b/packages/connectivity/connectivity/pubspec.yaml index 91d06373ab83..640be28e8c8d 100644 --- a/packages/connectivity/connectivity/pubspec.yaml +++ b/packages/connectivity/connectivity/pubspec.yaml @@ -2,7 +2,7 @@ name: connectivity description: Flutter plugin for discovering the state of the network (WiFi & mobile/cellular) connectivity on Android and iOS. homepage: https://github.com/flutter/plugins/tree/master/packages/connectivity/connectivity -version: 2.0.2 +version: 2.0.3 flutter: plugin: