diff --git a/.cirrus.yml b/.cirrus.yml
index f09c3a9..129b6cb 100644
--- a/.cirrus.yml
+++ b/.cirrus.yml
@@ -161,7 +161,7 @@
       env:
         # Currently missing; see https://github.com/flutter/flutter/issues/81982
         # and https://github.com/flutter/flutter/issues/82211
-        PLUGINS_TO_EXCLUDE_INTEGRATION_TESTS: "file_selector,image_picker_for_web,shared_preferences_web,video_player_web"
+        PLUGINS_TO_EXCLUDE_INTEGRATION_TESTS: "file_selector,image_picker_for_web,shared_preferences_web"
         matrix:
           CHANNEL: "master"
           CHANNEL: "stable"
diff --git a/packages/google_maps_flutter/google_maps_flutter_web/CHANGELOG.md b/packages/google_maps_flutter/google_maps_flutter_web/CHANGELOG.md
index fd56b64..0544ba2 100644
--- a/packages/google_maps_flutter/google_maps_flutter_web/CHANGELOG.md
+++ b/packages/google_maps_flutter/google_maps_flutter_web/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.3.0+1
+
+* Change sizing code of `GoogleMap` widget's `HtmlElementView` so it works well when slotted.
+
 ## 0.3.0
 
 * Migrate package to null-safety.
diff --git a/packages/google_maps_flutter/google_maps_flutter_web/lib/src/google_maps_controller.dart b/packages/google_maps_flutter/google_maps_flutter_web/lib/src/google_maps_controller.dart
index 2528490..2262682 100644
--- a/packages/google_maps_flutter/google_maps_flutter_web/lib/src/google_maps_controller.dart
+++ b/packages/google_maps_flutter/google_maps_flutter_web/lib/src/google_maps_controller.dart
@@ -96,7 +96,10 @@
     // Register the view factory that will hold the `_div` that holds the map in the DOM.
     // The `_div` needs to be created outside of the ViewFactory (and cached!) so we can
     // use it to create the [gmaps.GMap] in the `init()` method of this class.
-    _div = DivElement()..id = _getViewType(mapId);
+    _div = DivElement()
+      ..id = _getViewType(mapId)
+      ..style.width = '100%'
+      ..style.height = '100%';
 
     ui.platformViewRegistry.registerViewFactory(
       _getViewType(mapId),
diff --git a/packages/google_maps_flutter/google_maps_flutter_web/pubspec.yaml b/packages/google_maps_flutter/google_maps_flutter_web/pubspec.yaml
index 47e6c53..3eb3afb 100644
--- a/packages/google_maps_flutter/google_maps_flutter_web/pubspec.yaml
+++ b/packages/google_maps_flutter/google_maps_flutter_web/pubspec.yaml
@@ -2,7 +2,7 @@
 description: Web platform implementation of google_maps_flutter
 repository: https://github.com/flutter/plugins/tree/master/packages/google_maps_flutter/google_maps_flutter_web
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+maps%22
-version: 0.3.0
+version: 0.3.0+1
 
 environment:
   sdk: ">=2.12.0 <3.0.0"
diff --git a/packages/url_launcher/url_launcher/CHANGELOG.md b/packages/url_launcher/url_launcher/CHANGELOG.md
index 2c2ebc3..3ff1a08 100644
--- a/packages/url_launcher/url_launcher/CHANGELOG.md
+++ b/packages/url_launcher/url_launcher/CHANGELOG.md
@@ -1,6 +1,7 @@
-## NEXT
+## 6.0.5
 
 * Add iOS unit and UI integration test targets.
+* Add a `Link` widget to the example app.
 
 ## 6.0.4
 
diff --git a/packages/url_launcher/url_launcher/example/lib/main.dart b/packages/url_launcher/url_launcher/example/lib/main.dart
index 7faf2a8..d593e6d 100644
--- a/packages/url_launcher/url_launcher/example/lib/main.dart
+++ b/packages/url_launcher/url_launcher/example/lib/main.dart
@@ -7,6 +7,7 @@
 import 'dart:async';
 
 import 'package:flutter/material.dart';
+import 'package:url_launcher/link.dart';
 import 'package:url_launcher/url_launcher.dart';
 
 void main() {
@@ -196,6 +197,19 @@
                 child: const Text('Launch in app + close after 5 seconds'),
               ),
               const Padding(padding: EdgeInsets.all(16.0)),
+              Link(
+                uri: Uri.parse(
+                    'https://pub.dev/documentation/url_launcher/latest/link/link-library.html'),
+                target: LinkTarget.blank,
+                builder: (ctx, openLink) {
+                  return TextButton.icon(
+                    onPressed: openLink,
+                    label: Text('Link Widget documentation'),
+                    icon: Icon(Icons.read_more),
+                  );
+                },
+              ),
+              const Padding(padding: EdgeInsets.all(16.0)),
               FutureBuilder<void>(future: _launched, builder: _launchStatus),
             ],
           ),
diff --git a/packages/url_launcher/url_launcher/pubspec.yaml b/packages/url_launcher/url_launcher/pubspec.yaml
index b2b2def..ca5dd6b 100644
--- a/packages/url_launcher/url_launcher/pubspec.yaml
+++ b/packages/url_launcher/url_launcher/pubspec.yaml
@@ -3,7 +3,7 @@
   web, phone, SMS, and email schemes.
 repository: https://github.com/flutter/plugins/tree/master/packages/url_launcher/url_launcher
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+url_launcher%22
-version: 6.0.4
+version: 6.0.5
 
 environment:
   sdk: ">=2.12.0 <3.0.0"
diff --git a/packages/url_launcher/url_launcher_web/CHANGELOG.md b/packages/url_launcher/url_launcher_web/CHANGELOG.md
index 7da0ba0..488c338 100644
--- a/packages/url_launcher/url_launcher_web/CHANGELOG.md
+++ b/packages/url_launcher/url_launcher_web/CHANGELOG.md
@@ -1,3 +1,7 @@
+# 2.0.1
+
+- Change sizing code of `Link` widget's `HtmlElementView` so it works well when slotted.
+
 # 2.0.0
 
 - Migrate to null safety.
diff --git a/packages/url_launcher/url_launcher_web/lib/src/link.dart b/packages/url_launcher/url_launcher_web/lib/src/link.dart
index fcbbaae..3c556b3 100644
--- a/packages/url_launcher/url_launcher_web/lib/src/link.dart
+++ b/packages/url_launcher/url_launcher_web/lib/src/link.dart
@@ -170,6 +170,8 @@
     _element.style
       ..opacity = '0'
       ..display = 'block'
+      ..width = '100%'
+      ..height = '100%'
       ..cursor = 'unset';
 
     // This is recommended on MDN:
diff --git a/packages/url_launcher/url_launcher_web/pubspec.yaml b/packages/url_launcher/url_launcher_web/pubspec.yaml
index 5e3ba9f..7afdc0a 100644
--- a/packages/url_launcher/url_launcher_web/pubspec.yaml
+++ b/packages/url_launcher/url_launcher_web/pubspec.yaml
@@ -2,7 +2,7 @@
 description: Web platform implementation of url_launcher
 repository: https://github.com/flutter/plugins/tree/master/packages/url_launcher/url_launcher_web
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+url_launcher%22
-version: 2.0.0
+version: 2.0.1
 
 environment:
   sdk: ">=2.12.0 <3.0.0"
diff --git a/packages/video_player/video_player_web/CHANGELOG.md b/packages/video_player/video_player_web/CHANGELOG.md
index 63d4e10..63d950c 100644
--- a/packages/video_player/video_player_web/CHANGELOG.md
+++ b/packages/video_player/video_player_web/CHANGELOG.md
@@ -1,3 +1,8 @@
+## 2.0.1
+
+* Change sizing code of `Video` widget's `HtmlElementView` so it works well when slotted.
+* 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/video_player/video_player_web/example/README.md b/packages/video_player/video_player_web/example/README.md
new file mode 100644
index 0000000..0ec01e0
--- /dev/null
+++ b/packages/video_player/video_player_web/example/README.md
@@ -0,0 +1,21 @@
+# Testing
+
+This package utilizes the `integration_test` package to run its tests in a web browser.
+
+See [flutter.dev > Integration testing](https://flutter.dev/docs/testing/integration-tests) for more info.
+
+## Running the tests
+
+Make sure you have updated to the latest Flutter master.
+
+1. Check what version of Chrome is running on the machine you're running tests on.
+
+2. Download and install driver for that version from here:
+    * <https://chromedriver.chromium.org/downloads>
+
+3. Start the driver using `chromedriver --port=4444`
+
+4. Run tests: `flutter drive -d web-server --browser-name=chrome --driver=test_driver/integration_driver.dart --target=integration_test/TEST_NAME.dart`, or (in Linux):
+
+    * Single: `./run_test.sh integration_test/TEST_NAME.dart`
+    * All: `./run_test.sh`
diff --git a/packages/video_player/video_player_web/example/integration_test/video_player_web_test.dart b/packages/video_player/video_player_web/example/integration_test/video_player_web_test.dart
new file mode 100644
index 0000000..d3ad80c
--- /dev/null
+++ b/packages/video_player/video_player_web/example/integration_test/video_player_web_test.dart
@@ -0,0 +1,157 @@
+// 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 'dart:async';
+
+import 'package:flutter/services.dart';
+import 'package:flutter/widgets.dart';
+import 'package:flutter_test/flutter_test.dart';
+import 'package:integration_test/integration_test.dart';
+import 'package:video_player_platform_interface/video_player_platform_interface.dart';
+import 'package:video_player_web/video_player_web.dart';
+
+void main() {
+  IntegrationTestWidgetsFlutterBinding.ensureInitialized();
+
+  group('VideoPlayer for Web', () {
+    late Future<int> textureId;
+
+    setUp(() {
+      VideoPlayerPlatform.instance = VideoPlayerPlugin();
+      textureId = VideoPlayerPlatform.instance
+          .create(
+            DataSource(
+              sourceType: DataSourceType.network,
+              uri:
+                  'https://flutter.github.io/assets-for-api-docs/assets/videos/bee.mp4',
+            ),
+          )
+          .then((textureId) => textureId!);
+    });
+
+    testWidgets('can init', (WidgetTester tester) async {
+      expect(VideoPlayerPlatform.instance.init(), completes);
+    });
+
+    testWidgets('can create from network', (WidgetTester tester) async {
+      expect(
+          VideoPlayerPlatform.instance.create(
+            DataSource(
+                sourceType: DataSourceType.network,
+                uri:
+                    'https://flutter.github.io/assets-for-api-docs/assets/videos/bee.mp4'),
+          ),
+          completion(isNonZero));
+    });
+
+    testWidgets('can create from asset', (WidgetTester tester) async {
+      expect(
+          VideoPlayerPlatform.instance.create(
+            DataSource(
+              sourceType: DataSourceType.asset,
+              asset: 'videos/bee.mp4',
+              package: 'bee_vids',
+            ),
+          ),
+          completion(isNonZero));
+    });
+
+    testWidgets('cannot create from file', (WidgetTester tester) async {
+      expect(
+          VideoPlayerPlatform.instance.create(
+            DataSource(
+              sourceType: DataSourceType.file,
+              uri: '/videos/bee.mp4',
+            ),
+          ),
+          throwsUnimplementedError);
+    });
+
+    testWidgets('can dispose', (WidgetTester tester) async {
+      expect(VideoPlayerPlatform.instance.dispose(await textureId), completes);
+    });
+
+    testWidgets('can set looping', (WidgetTester tester) async {
+      expect(
+        VideoPlayerPlatform.instance.setLooping(await textureId, true),
+        completes,
+      );
+    });
+
+    testWidgets('can play', (WidgetTester tester) async {
+      // Mute video to allow autoplay (See https://goo.gl/xX8pDD)
+      await VideoPlayerPlatform.instance.setVolume(await textureId, 0);
+      expect(VideoPlayerPlatform.instance.play(await textureId), completes);
+    });
+
+    testWidgets('throws PlatformException when playing bad media',
+        (WidgetTester tester) async {
+      int videoPlayerId = (await VideoPlayerPlatform.instance.create(
+        DataSource(
+            sourceType: DataSourceType.network,
+            uri:
+                'https://flutter.github.io/assets-for-api-docs/assets/videos/_non_existent_video.mp4'),
+      ))!;
+
+      Stream<VideoEvent> eventStream =
+          VideoPlayerPlatform.instance.videoEventsFor(videoPlayerId);
+
+      // Mute video to allow autoplay (See https://goo.gl/xX8pDD)
+      await VideoPlayerPlatform.instance.setVolume(videoPlayerId, 0);
+      await VideoPlayerPlatform.instance.play(videoPlayerId);
+
+      expect(() async {
+        await eventStream.last;
+      }, throwsA(isA<PlatformException>()));
+    });
+
+    testWidgets('can pause', (WidgetTester tester) async {
+      expect(VideoPlayerPlatform.instance.pause(await textureId), completes);
+    });
+
+    testWidgets('can set volume', (WidgetTester tester) async {
+      expect(
+        VideoPlayerPlatform.instance.setVolume(await textureId, 0.8),
+        completes,
+      );
+    });
+
+    testWidgets('can set playback speed', (WidgetTester tester) async {
+      expect(
+        VideoPlayerPlatform.instance.setPlaybackSpeed(await textureId, 2.0),
+        completes,
+      );
+    });
+
+    testWidgets('can seek to position', (WidgetTester tester) async {
+      expect(
+        VideoPlayerPlatform.instance.seekTo(
+          await textureId,
+          Duration(seconds: 1),
+        ),
+        completes,
+      );
+    });
+
+    testWidgets('can get position', (WidgetTester tester) async {
+      expect(VideoPlayerPlatform.instance.getPosition(await textureId),
+          completion(isInstanceOf<Duration>()));
+    });
+
+    testWidgets('can get video event stream', (WidgetTester tester) async {
+      expect(VideoPlayerPlatform.instance.videoEventsFor(await textureId),
+          isInstanceOf<Stream<VideoEvent>>());
+    });
+
+    testWidgets('can build view', (WidgetTester tester) async {
+      expect(VideoPlayerPlatform.instance.buildView(await textureId),
+          isInstanceOf<Widget>());
+    });
+
+    testWidgets('ignores setting mixWithOthers', (WidgetTester tester) async {
+      expect(VideoPlayerPlatform.instance.setMixWithOthers(true), completes);
+      expect(VideoPlayerPlatform.instance.setMixWithOthers(false), completes);
+    });
+  });
+}
diff --git a/packages/video_player/video_player_web/example/lib/main.dart b/packages/video_player/video_player_web/example/lib/main.dart
new file mode 100644
index 0000000..e1a38dc
--- /dev/null
+++ b/packages/video_player/video_player_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/video_player/video_player_web/example/pubspec.yaml b/packages/video_player/video_player_web/example/pubspec.yaml
new file mode 100644
index 0000000..c172eea
--- /dev/null
+++ b/packages/video_player/video_player_web/example/pubspec.yaml
@@ -0,0 +1,20 @@
+name: connectivity_for_web_integration_tests
+publish_to: none
+
+environment:
+  sdk: ">=2.12.0 <3.0.0"
+  flutter: ">=2.2.0"
+
+dependencies:
+  video_player_web:
+    path: ../
+  flutter:
+    sdk: flutter
+
+dev_dependencies:
+  flutter_test:
+    sdk: flutter
+  flutter_driver:
+    sdk: flutter
+  integration_test:
+    sdk: flutter
diff --git a/packages/video_player/video_player_web/example/run_test.sh b/packages/video_player/video_player_web/example/run_test.sh
new file mode 100755
index 0000000..aa52974
--- /dev/null
+++ b/packages/video_player/video_player_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/video_player/video_player_web/example/test_driver/integration_test.dart b/packages/video_player/video_player_web/example/test_driver/integration_test.dart
new file mode 100644
index 0000000..4f10f2a
--- /dev/null
+++ b/packages/video_player/video_player_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/video_player/video_player_web/example/web/index.html b/packages/video_player/video_player_web/example/web/index.html
new file mode 100644
index 0000000..7fb138c
--- /dev/null
+++ b/packages/video_player/video_player_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/video_player/video_player_web/lib/video_player_web.dart b/packages/video_player/video_player_web/lib/video_player_web.dart
index a61e010..560c4af 100644
--- a/packages/video_player/video_player_web/lib/video_player_web.dart
+++ b/packages/video_player/video_player_web/lib/video_player_web.dart
@@ -181,7 +181,9 @@
       ..src = uri
       ..autoplay = false
       ..controls = false
-      ..style.border = 'none';
+      ..style.border = 'none'
+      ..style.height = '100%'
+      ..style.width = '100%';
 
     // Allows Safari iOS to play the video inline
     videoElement.setAttribute('playsinline', 'true');
diff --git a/packages/video_player/video_player_web/pubspec.yaml b/packages/video_player/video_player_web/pubspec.yaml
index b303980..568a926 100644
--- a/packages/video_player/video_player_web/pubspec.yaml
+++ b/packages/video_player/video_player_web/pubspec.yaml
@@ -2,7 +2,7 @@
 description: Web platform implementation of video_player.
 repository: https://github.com/flutter/plugins/tree/master/packages/video_player/video_player_web
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+video_player%22
-version: 2.0.0
+version: 2.0.1
 
 environment:
   sdk: ">=2.12.0 <3.0.0"
diff --git a/packages/video_player/video_player_web/test/README.md b/packages/video_player/video_player_web/test/README.md
new file mode 100644
index 0000000..7c5b4ad
--- /dev/null
+++ b/packages/video_player/video_player_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/video_player/video_player_web/test/tests_exist_elsewhere_test.dart b/packages/video_player/video_player_web/test/tests_exist_elsewhere_test.dart
new file mode 100644
index 0000000..442c501
--- /dev/null
+++ b/packages/video_player/video_player_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/packages/video_player/video_player_web/test/video_player_web_test.dart b/packages/video_player/video_player_web/test/video_player_web_test.dart
deleted file mode 100644
index 1827266..0000000
--- a/packages/video_player/video_player_web/test/video_player_web_test.dart
+++ /dev/null
@@ -1,147 +0,0 @@
-// 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.
-
-@TestOn('browser')
-
-import 'dart:async';
-
-import 'package:flutter/services.dart';
-import 'package:flutter/widgets.dart';
-import 'package:flutter_test/flutter_test.dart';
-import 'package:video_player_platform_interface/video_player_platform_interface.dart';
-import 'package:video_player_web/video_player_web.dart';
-
-void main() {
-  group('VideoPlayer for Web', () {
-    late int textureId;
-
-    setUp(() async {
-      VideoPlayerPlatform.instance = VideoPlayerPlugin();
-      textureId = (await VideoPlayerPlatform.instance.create(
-        DataSource(
-            sourceType: DataSourceType.network,
-            uri:
-                'https://flutter.github.io/assets-for-api-docs/assets/videos/bee.mp4'),
-      ))!;
-    });
-
-    test('$VideoPlayerPlugin is the live instance', () {
-      expect(VideoPlayerPlatform.instance, isA<VideoPlayerPlugin>());
-    });
-
-    test('can init', () {
-      expect(VideoPlayerPlatform.instance.init(), completes);
-    });
-
-    test('can create from network', () {
-      expect(
-          VideoPlayerPlatform.instance.create(
-            DataSource(
-                sourceType: DataSourceType.network,
-                uri:
-                    'https://flutter.github.io/assets-for-api-docs/assets/videos/bee.mp4'),
-          ),
-          completion(isNonZero));
-    });
-
-    test('can create from asset', () {
-      expect(
-          VideoPlayerPlatform.instance.create(
-            DataSource(
-              sourceType: DataSourceType.asset,
-              asset: 'videos/bee.mp4',
-              package: 'bee_vids',
-            ),
-          ),
-          completion(isNonZero));
-    });
-
-    test('cannot create from file', () {
-      expect(
-          VideoPlayerPlatform.instance.create(
-            DataSource(
-              sourceType: DataSourceType.file,
-              uri: '/videos/bee.mp4',
-            ),
-          ),
-          throwsUnimplementedError);
-    });
-
-    test('can dispose', () {
-      expect(VideoPlayerPlatform.instance.dispose(textureId), completes);
-    });
-
-    test('can set looping', () {
-      expect(
-          VideoPlayerPlatform.instance.setLooping(textureId, true), completes);
-    });
-
-    test('can play', () async {
-      // Mute video to allow autoplay (See https://goo.gl/xX8pDD)
-      await VideoPlayerPlatform.instance.setVolume(textureId, 0);
-      expect(VideoPlayerPlatform.instance.play(textureId), completes);
-    });
-
-    test('throws PlatformException when playing bad media', () async {
-      int videoPlayerId = (await VideoPlayerPlatform.instance.create(
-        DataSource(
-            sourceType: DataSourceType.network,
-            uri:
-                'https://flutter.github.io/assets-for-api-docs/assets/videos/_non_existent_video.mp4'),
-      ))!;
-
-      Stream<VideoEvent> eventStream =
-          VideoPlayerPlatform.instance.videoEventsFor(videoPlayerId);
-
-      // Mute video to allow autoplay (See https://goo.gl/xX8pDD)
-      await VideoPlayerPlatform.instance.setVolume(videoPlayerId, 0);
-      await VideoPlayerPlatform.instance.play(videoPlayerId);
-
-      expect(() async {
-        await eventStream.last;
-      }, throwsA(isA<PlatformException>()));
-    });
-
-    test('can pause', () {
-      expect(VideoPlayerPlatform.instance.pause(textureId), completes);
-    });
-
-    test('can set volume', () {
-      expect(VideoPlayerPlatform.instance.setVolume(textureId, 0.8), completes);
-    });
-
-    test('can set playback speed', () {
-      expect(
-        VideoPlayerPlatform.instance.setPlaybackSpeed(textureId, 2.0),
-        completes,
-      );
-    });
-
-    test('can seek to position', () {
-      expect(
-          VideoPlayerPlatform.instance.seekTo(textureId, Duration(seconds: 1)),
-          completes);
-    });
-
-    test('can get position', () {
-      expect(VideoPlayerPlatform.instance.getPosition(textureId),
-          completion(isInstanceOf<Duration>()));
-    });
-
-    test('can get video event stream', () {
-      expect(VideoPlayerPlatform.instance.videoEventsFor(textureId),
-          isInstanceOf<Stream<VideoEvent>>());
-    });
-
-    test('can build view', () {
-      expect(VideoPlayerPlatform.instance.buildView(textureId),
-          isInstanceOf<Widget>());
-    });
-
-    test('ignores setting mixWithOthers', () {
-      expect(VideoPlayerPlatform.instance.setMixWithOthers(true), completes);
-      expect(VideoPlayerPlatform.instance.setMixWithOthers(false), completes);
-    });
-  });
-}
