[shared_preferences_web] Migrate tests to integration_test (#4185)

diff --git a/packages/shared_preferences/shared_preferences_web/CHANGELOG.md b/packages/shared_preferences/shared_preferences_web/CHANGELOG.md
index ec08267..ad5d8f0 100644
--- a/packages/shared_preferences/shared_preferences_web/CHANGELOG.md
+++ b/packages/shared_preferences/shared_preferences_web/CHANGELOG.md
@@ -1,3 +1,7 @@
+## NEXT
+
+* Move tests to `example` directory, so they run as integration_tests with `flutter drive`.
+
 ## 2.0.0
 
 * Migrate to null-safety.
diff --git a/packages/shared_preferences/shared_preferences_web/example/README.md b/packages/shared_preferences/shared_preferences_web/example/README.md
new file mode 100644
index 0000000..4348451
--- /dev/null
+++ b/packages/shared_preferences/shared_preferences_web/example/README.md
@@ -0,0 +1,9 @@
+# Testing
+
+This package uses `package:integration_test` to run its tests in a web browser.
+
+See [Plugin Tests > Web Tests](https://github.com/flutter/flutter/wiki/Plugin-Tests#web-tests)
+in the Flutter wiki for instructions to setup and run the tests in this package.
+
+Check [flutter.dev > Integration testing](https://flutter.dev/docs/testing/integration-tests)
+for more info.
diff --git a/packages/shared_preferences/shared_preferences_web/test/shared_preferences_web_test.dart b/packages/shared_preferences/shared_preferences_web/example/integration_test/shared_preferences_web_test.dart
similarity index 88%
rename from packages/shared_preferences/shared_preferences_web/test/shared_preferences_web_test.dart
rename to packages/shared_preferences/shared_preferences_web/example/integration_test/shared_preferences_web_test.dart
index 6e49fb4..d95a051 100644
--- a/packages/shared_preferences/shared_preferences_web/test/shared_preferences_web_test.dart
+++ b/packages/shared_preferences/shared_preferences_web/example/integration_test/shared_preferences_web_test.dart
@@ -2,11 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-@TestOn('chrome')
 import 'dart:convert' show json;
 import 'dart:html' as html;
 
 import 'package:flutter_test/flutter_test.dart';
+import 'package:integration_test/integration_test.dart';
 import 'package:shared_preferences_platform_interface/method_channel_shared_preferences.dart';
 import 'package:shared_preferences_platform_interface/shared_preferences_platform_interface.dart';
 import 'package:shared_preferences_web/shared_preferences_web.dart';
@@ -20,12 +20,14 @@
 };
 
 void main() {
+  IntegrationTestWidgetsFlutterBinding.ensureInitialized();
+
   group('SharedPreferencesPlugin', () {
     setUp(() {
       html.window.localStorage.clear();
     });
 
-    test('registers itself', () {
+    testWidgets('registers itself', (WidgetTester tester) async {
       SharedPreferencesStorePlatform.instance =
           MethodChannelSharedPreferencesStore();
       expect(SharedPreferencesStorePlatform.instance,
@@ -35,7 +37,7 @@
           isA<SharedPreferencesPlugin>());
     });
 
-    test('getAll', () async {
+    testWidgets('getAll', (WidgetTester tester) async {
       final SharedPreferencesPlugin store = SharedPreferencesPlugin();
       expect(await store.getAll(), isEmpty);
 
@@ -46,7 +48,7 @@
       expect(allData['flutter.testKey'], 'test value');
     });
 
-    test('remove', () async {
+    testWidgets('remove', (WidgetTester tester) async {
       final SharedPreferencesPlugin store = SharedPreferencesPlugin();
       html.window.localStorage['flutter.testKey'] = '"test value"';
       expect(html.window.localStorage['flutter.testKey'], isNotNull);
@@ -58,7 +60,7 @@
       );
     });
 
-    test('setValue', () async {
+    testWidgets('setValue', (WidgetTester tester) async {
       final SharedPreferencesPlugin store = SharedPreferencesPlugin();
       for (String key in kTestValues.keys) {
         final dynamic value = kTestValues[key];
@@ -79,7 +81,7 @@
       );
     });
 
-    test('clear', () async {
+    testWidgets('clear', (WidgetTester tester) async {
       final SharedPreferencesPlugin store = SharedPreferencesPlugin();
       html.window.localStorage['flutter.testKey1'] = '"test value"';
       html.window.localStorage['flutter.testKey2'] = '42';
diff --git a/packages/shared_preferences/shared_preferences_web/example/lib/main.dart b/packages/shared_preferences/shared_preferences_web/example/lib/main.dart
new file mode 100644
index 0000000..e1a38dc
--- /dev/null
+++ b/packages/shared_preferences/shared_preferences_web/example/lib/main.dart
@@ -0,0 +1,25 @@
+// Copyright 2013 The Flutter Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'package:flutter/material.dart';
+
+void main() {
+  runApp(MyApp());
+}
+
+/// App for testing
+class MyApp extends StatefulWidget {
+  @override
+  _MyAppState createState() => _MyAppState();
+}
+
+class _MyAppState extends State<MyApp> {
+  @override
+  Widget build(BuildContext context) {
+    return Directionality(
+      textDirection: TextDirection.ltr,
+      child: Text('Testing... Look at the console output for results!'),
+    );
+  }
+}
diff --git a/packages/shared_preferences/shared_preferences_web/example/pubspec.yaml b/packages/shared_preferences/shared_preferences_web/example/pubspec.yaml
new file mode 100644
index 0000000..a83a71b
--- /dev/null
+++ b/packages/shared_preferences/shared_preferences_web/example/pubspec.yaml
@@ -0,0 +1,21 @@
+name: shared_preferences_web_integration_tests
+publish_to: none
+
+environment:
+  sdk: ">=2.12.0 <3.0.0"
+  flutter: ">=2.2.0"
+
+dependencies:
+  shared_preferences_web:
+    path: ../
+  flutter:
+    sdk: flutter
+
+dev_dependencies:
+  js: ^0.6.3
+  flutter_test:
+    sdk: flutter
+  flutter_driver:
+    sdk: flutter
+  integration_test:
+    sdk: flutter
diff --git a/packages/shared_preferences/shared_preferences_web/example/run_test.sh b/packages/shared_preferences/shared_preferences_web/example/run_test.sh
new file mode 100755
index 0000000..aa52974
--- /dev/null
+++ b/packages/shared_preferences/shared_preferences_web/example/run_test.sh
@@ -0,0 +1,22 @@
+#!/usr/bin/bash
+# Copyright 2013 The Flutter Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+if pgrep -lf chromedriver > /dev/null; then
+  echo "chromedriver is running."
+
+  if [ $# -eq 0 ]; then
+    echo "No target specified, running all tests..."
+    find integration_test/ -iname *_test.dart | xargs -n1 -i -t flutter drive -d web-server --web-port=7357 --browser-name=chrome --driver=test_driver/integration_test.dart --target='{}'
+  else
+    echo "Running test target: $1..."
+    set -x
+    flutter drive -d web-server --web-port=7357 --browser-name=chrome --driver=test_driver/integration_test.dart --target=$1
+  fi
+
+  else
+    echo "chromedriver is not running."
+    echo "Please, check the README.md for instructions on how to use run_test.sh"
+fi
+
diff --git a/packages/shared_preferences/shared_preferences_web/example/test_driver/integration_test.dart b/packages/shared_preferences/shared_preferences_web/example/test_driver/integration_test.dart
new file mode 100644
index 0000000..4f10f2a
--- /dev/null
+++ b/packages/shared_preferences/shared_preferences_web/example/test_driver/integration_test.dart
@@ -0,0 +1,7 @@
+// Copyright 2013 The Flutter Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'package:integration_test/integration_test_driver.dart';
+
+Future<void> main() => integrationDriver();
diff --git a/packages/shared_preferences/shared_preferences_web/example/web/index.html b/packages/shared_preferences/shared_preferences_web/example/web/index.html
new file mode 100644
index 0000000..7fb138c
--- /dev/null
+++ b/packages/shared_preferences/shared_preferences_web/example/web/index.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<!-- Copyright 2013 The Flutter Authors. All rights reserved.
+Use of this source code is governed by a BSD-style license that can be
+found in the LICENSE file. -->
+<html>
+<head>
+  <meta charset="UTF-8">
+  <title>example</title>
+</head>
+<body>
+  <script src="main.dart.js" type="application/javascript"></script>
+</body>
+</html>
diff --git a/packages/shared_preferences/shared_preferences_web/test/README.md b/packages/shared_preferences/shared_preferences_web/test/README.md
new file mode 100644
index 0000000..7c5b4ad
--- /dev/null
+++ b/packages/shared_preferences/shared_preferences_web/test/README.md
@@ -0,0 +1,5 @@
+## test
+
+This package uses integration tests for testing.
+
+See `example/README.md` for more info.
diff --git a/packages/shared_preferences/shared_preferences_web/test/tests_exist_elsewhere_test.dart b/packages/shared_preferences/shared_preferences_web/test/tests_exist_elsewhere_test.dart
new file mode 100644
index 0000000..442c501
--- /dev/null
+++ b/packages/shared_preferences/shared_preferences_web/test/tests_exist_elsewhere_test.dart
@@ -0,0 +1,14 @@
+// Copyright 2013 The Flutter Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'package:flutter_test/flutter_test.dart';
+
+void main() {
+  test('Tell the user where to find the real tests', () {
+    print('---');
+    print('This package uses integration_test for its tests.');
+    print('See `example/README.md` for more info.');
+    print('---');
+  });
+}
diff --git a/script/configs/exclude_integration_web.yaml b/script/configs/exclude_integration_web.yaml
index 99e2083..6c0fc4e 100644
--- a/script/configs/exclude_integration_web.yaml
+++ b/script/configs/exclude_integration_web.yaml
@@ -1,4 +1,2 @@
-# Currently missing: https://github.com/flutter/flutter/issues/81982
-- shared_preferences_web
 # Currently missing: https://github.com/flutter/flutter/issues/82211
 - file_selector