diff --git a/.cirrus.yml b/.cirrus.yml index f09c3a9419c9..129b6cb84479 100644 --- a/.cirrus.yml +++ b/.cirrus.yml @@ -161,7 +161,7 @@ task: 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 fd56b64dbe57..0544ba26df8e 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 25284909d596..226268270579 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 @@ class GoogleMapController { // 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 47e6c530dfe3..3eb3afb06fb9 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 @@ name: google_maps_flutter_web 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 2c2ebc3904a5..3ff1a0828d8b 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 7faf2a895c98..d593e6d5e001 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 @@ class _MyHomePageState extends State { 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(future: _launched, builder: _launchStatus), ], ), diff --git a/packages/url_launcher/url_launcher/pubspec.yaml b/packages/url_launcher/url_launcher/pubspec.yaml index b2b2defa195d..ca5dd6be5302 100644 --- a/packages/url_launcher/url_launcher/pubspec.yaml +++ b/packages/url_launcher/url_launcher/pubspec.yaml @@ -3,7 +3,7 @@ description: Flutter plugin for launching a URL. Supports 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 7da0ba0a8095..488c3387cb68 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 fcbbaaec4e56..3c556b3950b0 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 @@ class LinkViewController extends PlatformViewController { _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 5e3ba9ffa7cc..7afdc0af85e2 100644 --- a/packages/url_launcher/url_launcher_web/pubspec.yaml +++ b/packages/url_launcher/url_launcher_web/pubspec.yaml @@ -2,7 +2,7 @@ name: url_launcher_web 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 63d4e10ef8da..63d950c21eb8 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 000000000000..0ec01e025570 --- /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: + * + +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/test/video_player_web_test.dart b/packages/video_player/video_player_web/example/integration_test/video_player_web_test.dart similarity index 51% rename from packages/video_player/video_player_web/test/video_player_web_test.dart rename to packages/video_player/video_player_web/example/integration_test/video_player_web_test.dart index 18272662fccf..d3ad80c890f1 100644 --- a/packages/video_player/video_player_web/test/video_player_web_test.dart +++ b/packages/video_player/video_player_web/example/integration_test/video_player_web_test.dart @@ -2,39 +2,39 @@ // 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: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 int textureId; + late Future textureId; - setUp(() async { + setUp(() { 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()); + textureId = VideoPlayerPlatform.instance + .create( + DataSource( + sourceType: DataSourceType.network, + uri: + 'https://flutter.github.io/assets-for-api-docs/assets/videos/bee.mp4', + ), + ) + .then((textureId) => textureId!); }); - test('can init', () { + testWidgets('can init', (WidgetTester tester) async { expect(VideoPlayerPlatform.instance.init(), completes); }); - test('can create from network', () { + testWidgets('can create from network', (WidgetTester tester) async { expect( VideoPlayerPlatform.instance.create( DataSource( @@ -45,7 +45,7 @@ void main() { completion(isNonZero)); }); - test('can create from asset', () { + testWidgets('can create from asset', (WidgetTester tester) async { expect( VideoPlayerPlatform.instance.create( DataSource( @@ -57,7 +57,7 @@ void main() { completion(isNonZero)); }); - test('cannot create from file', () { + testWidgets('cannot create from file', (WidgetTester tester) async { expect( VideoPlayerPlatform.instance.create( DataSource( @@ -68,22 +68,25 @@ void main() { throwsUnimplementedError); }); - test('can dispose', () { - expect(VideoPlayerPlatform.instance.dispose(textureId), completes); + testWidgets('can dispose', (WidgetTester tester) async { + expect(VideoPlayerPlatform.instance.dispose(await textureId), completes); }); - test('can set looping', () { + testWidgets('can set looping', (WidgetTester tester) async { expect( - VideoPlayerPlatform.instance.setLooping(textureId, true), completes); + VideoPlayerPlatform.instance.setLooping(await textureId, true), + completes, + ); }); - test('can play', () async { + testWidgets('can play', (WidgetTester tester) async { // Mute video to allow autoplay (See https://goo.gl/xX8pDD) - await VideoPlayerPlatform.instance.setVolume(textureId, 0); - expect(VideoPlayerPlatform.instance.play(textureId), completes); + await VideoPlayerPlatform.instance.setVolume(await textureId, 0); + expect(VideoPlayerPlatform.instance.play(await textureId), completes); }); - test('throws PlatformException when playing bad media', () async { + testWidgets('throws PlatformException when playing bad media', + (WidgetTester tester) async { int videoPlayerId = (await VideoPlayerPlatform.instance.create( DataSource( sourceType: DataSourceType.network, @@ -103,43 +106,50 @@ void main() { }, throwsA(isA())); }); - test('can pause', () { - expect(VideoPlayerPlatform.instance.pause(textureId), completes); + testWidgets('can pause', (WidgetTester tester) async { + expect(VideoPlayerPlatform.instance.pause(await textureId), completes); }); - test('can set volume', () { - expect(VideoPlayerPlatform.instance.setVolume(textureId, 0.8), completes); + testWidgets('can set volume', (WidgetTester tester) async { + expect( + VideoPlayerPlatform.instance.setVolume(await textureId, 0.8), + completes, + ); }); - test('can set playback speed', () { + testWidgets('can set playback speed', (WidgetTester tester) async { expect( - VideoPlayerPlatform.instance.setPlaybackSpeed(textureId, 2.0), + VideoPlayerPlatform.instance.setPlaybackSpeed(await textureId, 2.0), completes, ); }); - test('can seek to position', () { + testWidgets('can seek to position', (WidgetTester tester) async { expect( - VideoPlayerPlatform.instance.seekTo(textureId, Duration(seconds: 1)), - completes); + VideoPlayerPlatform.instance.seekTo( + await textureId, + Duration(seconds: 1), + ), + completes, + ); }); - test('can get position', () { - expect(VideoPlayerPlatform.instance.getPosition(textureId), + testWidgets('can get position', (WidgetTester tester) async { + expect(VideoPlayerPlatform.instance.getPosition(await textureId), completion(isInstanceOf())); }); - test('can get video event stream', () { - expect(VideoPlayerPlatform.instance.videoEventsFor(textureId), + testWidgets('can get video event stream', (WidgetTester tester) async { + expect(VideoPlayerPlatform.instance.videoEventsFor(await textureId), isInstanceOf>()); }); - test('can build view', () { - expect(VideoPlayerPlatform.instance.buildView(textureId), + testWidgets('can build view', (WidgetTester tester) async { + expect(VideoPlayerPlatform.instance.buildView(await textureId), isInstanceOf()); }); - test('ignores setting mixWithOthers', () { + 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 000000000000..e1a38dcdcd46 --- /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 { + @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 000000000000..c172eeaf1223 --- /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 000000000000..aa52974f310e --- /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 000000000000..4f10f2a522f3 --- /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 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 000000000000..7fb138cc90fa --- /dev/null +++ b/packages/video_player/video_player_web/example/web/index.html @@ -0,0 +1,13 @@ + + + + + + example + + + + + 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 a61e01071b0f..560c4afc0869 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 @@ class _VideoPlayer { ..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 b303980e3e55..568a9262b5f0 100644 --- a/packages/video_player/video_player_web/pubspec.yaml +++ b/packages/video_player/video_player_web/pubspec.yaml @@ -2,7 +2,7 @@ name: video_player_web 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 000000000000..7c5b4ad682ba --- /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 000000000000..442c50144727 --- /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('---'); + }); +}