diff --git a/dev/automated_tests/pubspec.yaml b/dev/automated_tests/pubspec.yaml index c9c2dc5991..2fffc2419b 100644 --- a/dev/automated_tests/pubspec.yaml +++ b/dev/automated_tests/pubspec.yaml @@ -12,7 +12,7 @@ dependencies: test: 1.6.3 analyzer: 0.36.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - args: 1.5.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + args: 1.5.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" async: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -65,4 +65,4 @@ dependencies: flutter: uses-material-design: true -# PUBSPEC CHECKSUM: 5cc4 +# PUBSPEC CHECKSUM: f3c5 diff --git a/dev/benchmarks/complex_layout/pubspec.yaml b/dev/benchmarks/complex_layout/pubspec.yaml index becfef6306..3b0c7e4ecd 100644 --- a/dev/benchmarks/complex_layout/pubspec.yaml +++ b/dev/benchmarks/complex_layout/pubspec.yaml @@ -43,7 +43,7 @@ dev_dependencies: test: 1.6.3 analyzer: 0.36.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - args: 1.5.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + args: 1.5.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" csslib: 0.16.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" front_end: 0.1.18 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -82,4 +82,4 @@ flutter: - packages/flutter_gallery_assets/people/square/ali.png - packages/flutter_gallery_assets/places/india_chettinad_silk_maker.png -# PUBSPEC CHECKSUM: f699 +# PUBSPEC CHECKSUM: f69a diff --git a/dev/benchmarks/macrobenchmarks/pubspec.yaml b/dev/benchmarks/macrobenchmarks/pubspec.yaml index f12d528aa5..f7f56ec595 100644 --- a/dev/benchmarks/macrobenchmarks/pubspec.yaml +++ b/dev/benchmarks/macrobenchmarks/pubspec.yaml @@ -43,7 +43,7 @@ dev_dependencies: test: 1.6.3 analyzer: 0.36.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - args: 1.5.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + args: 1.5.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" csslib: 0.16.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" front_end: 0.1.18 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -79,4 +79,4 @@ dev_dependencies: flutter: uses-material-design: true -# PUBSPEC CHECKSUM: f699 +# PUBSPEC CHECKSUM: f69a diff --git a/dev/benchmarks/microbenchmarks/pubspec.yaml b/dev/benchmarks/microbenchmarks/pubspec.yaml index 64dfdf336b..a18484d9aa 100644 --- a/dev/benchmarks/microbenchmarks/pubspec.yaml +++ b/dev/benchmarks/microbenchmarks/pubspec.yaml @@ -16,7 +16,7 @@ dependencies: test: 1.6.3 analyzer: 0.36.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - args: 1.5.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + args: 1.5.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" async: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -73,4 +73,4 @@ dependencies: flutter: uses-material-design: true -# PUBSPEC CHECKSUM: ce27 +# PUBSPEC CHECKSUM: 1128 diff --git a/dev/bots/pubspec.yaml b/dev/bots/pubspec.yaml index 0fa88143f6..3b047a63fb 100644 --- a/dev/bots/pubspec.yaml +++ b/dev/bots/pubspec.yaml @@ -7,7 +7,7 @@ environment: dependencies: path: 1.6.2 - args: 1.5.1 + args: 1.5.2 meta: 1.1.6 process: 3.0.9 platform: 2.2.0 @@ -64,7 +64,7 @@ dependencies: yaml: 2.1.15 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" dev_dependencies: - mockito: 4.0.0 + mockito: 4.1.0 test_api: 0.2.5 -# PUBSPEC CHECKSUM: 7f9d +# PUBSPEC CHECKSUM: ee9f diff --git a/dev/devicelab/bin/tasks/linux_chrome_dev_mode.dart b/dev/devicelab/bin/tasks/linux_chrome_dev_mode.dart new file mode 100644 index 0000000000..a11b0ab96e --- /dev/null +++ b/dev/devicelab/bin/tasks/linux_chrome_dev_mode.dart @@ -0,0 +1,10 @@ +// Copyright 2019 The Chromium 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_devicelab/framework/framework.dart'; +import 'package:flutter_devicelab/tasks/web_dev_mode_tests.dart'; + +Future main() async { + await task(createWebDevModeTest()); +} diff --git a/dev/devicelab/bin/tasks/macos_chrome_dev_mode.dart b/dev/devicelab/bin/tasks/macos_chrome_dev_mode.dart new file mode 100644 index 0000000000..a11b0ab96e --- /dev/null +++ b/dev/devicelab/bin/tasks/macos_chrome_dev_mode.dart @@ -0,0 +1,10 @@ +// Copyright 2019 The Chromium 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_devicelab/framework/framework.dart'; +import 'package:flutter_devicelab/tasks/web_dev_mode_tests.dart'; + +Future main() async { + await task(createWebDevModeTest()); +} diff --git a/dev/devicelab/bin/tasks/windows_chrome_dev_mode.dart b/dev/devicelab/bin/tasks/windows_chrome_dev_mode.dart new file mode 100644 index 0000000000..a11b0ab96e --- /dev/null +++ b/dev/devicelab/bin/tasks/windows_chrome_dev_mode.dart @@ -0,0 +1,10 @@ +// Copyright 2019 The Chromium 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_devicelab/framework/framework.dart'; +import 'package:flutter_devicelab/tasks/web_dev_mode_tests.dart'; + +Future main() async { + await task(createWebDevModeTest()); +} diff --git a/dev/devicelab/lib/tasks/web_dev_mode_tests.dart b/dev/devicelab/lib/tasks/web_dev_mode_tests.dart new file mode 100644 index 0000000000..d5a7ef29fa --- /dev/null +++ b/dev/devicelab/lib/tasks/web_dev_mode_tests.dart @@ -0,0 +1,142 @@ +// Copyright 2019 The Chromium 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 'dart:convert'; +import 'dart:io'; + +import 'package:path/path.dart' as path; + +import '../framework/framework.dart'; +import '../framework/utils.dart'; + +final Directory _editedFlutterGalleryDir = dir(path.join(Directory.systemTemp.path, 'edited_flutter_gallery')); +final Directory flutterGalleryDir = dir(path.join(flutterDirectory.path, 'examples/flutter_gallery')); + +TaskFunction createWebDevModeTest() { + return () async { + final List options = [ + '--hot', '-d', 'web', '--verbose', '--resident', '--target=lib/main_web.dart', + ]; + setLocalEngineOptionIfNecessary(options); + int hotRestartCount = 0; + await inDirectory(flutterDirectory, () async { + rmTree(_editedFlutterGalleryDir); + mkdirs(_editedFlutterGalleryDir); + recursiveCopy(flutterGalleryDir, _editedFlutterGalleryDir); + await inDirectory(_editedFlutterGalleryDir, () async { + { + final Process packagesGet = await startProcess( + path.join(flutterDirectory.path, 'bin', 'flutter'), + ['packages', 'get'], + environment: { + 'FLUTTER_WEB': 'true', + }, + ); + await packagesGet.exitCode; + final Process process = await startProcess( + path.join(flutterDirectory.path, 'bin', 'flutter'), + ['run']..addAll(options), + environment: { + 'FLUTTER_WEB': 'true', + }, + ); + + final Completer stdoutDone = Completer(); + final Completer stderrDone = Completer(); + process.stdout + .transform(utf8.decoder) + .transform(const LineSplitter()) + .listen((String line) { + if (line.contains('To hot restart')) { + process.stdin.write('R'); + } + if (line.contains('Restarted')) { + if (hotRestartCount == 0) { + // Update the file and reload again. + final File appDartSource = file(path.join( + _editedFlutterGalleryDir.path, 'lib/gallery/app.dart', + )); + appDartSource.writeAsStringSync( + appDartSource.readAsStringSync().replaceFirst( + "'Flutter Gallery'", "'Updated Flutter Gallery'", + ) + ); + process.stdin.writeln('R'); + ++hotRestartCount; + } else { + // Quit after second hot restart. + process.stdin.writeln('q'); + } + } + print('stdout: $line'); + }, onDone: () { + stdoutDone.complete(); + }); + process.stderr + .transform(utf8.decoder) + .transform(const LineSplitter()) + .listen((String line) { + print('stderr: $line'); + }, onDone: () { + stderrDone.complete(); + }); + + await Future.wait(>[ + stdoutDone.future, + stderrDone.future, + ]); + await process.exitCode; + + } + + // Start `flutter run` again to make sure it loads from the previous + // state. dev compilers loads up from previously compiled JavaScript. + { + final Process process = await startProcess( + path.join(flutterDirectory.path, 'bin', 'flutter'), + ['run']..addAll(options), + environment: { + 'FLUTTER_WEB': 'true', + }, + ); + final Completer stdoutDone = Completer(); + final Completer stderrDone = Completer(); + process.stdout + .transform(utf8.decoder) + .transform(const LineSplitter()) + .listen((String line) { + if (line.contains('To hot restart')) { + process.stdin.write('R'); + } + if (line.contains('Restarted')) { + process.stdin.writeln('q'); + } + print('stdout: $line'); + }, onDone: () { + stdoutDone.complete(); + }); + process.stderr + .transform(utf8.decoder) + .transform(const LineSplitter()) + .listen((String line) { + print('stderr: $line'); + }, onDone: () { + stderrDone.complete(); + }); + + await Future.wait(>[ + stdoutDone.future, + stderrDone.future, + ]); + await process.exitCode; + } + }); + }); + if (hotRestartCount != 1) { + return TaskResult.failure(null); + } + return TaskResult.success(null); + }; +} diff --git a/dev/devicelab/manifest.yaml b/dev/devicelab/manifest.yaml index 0c976c9b95..581bbebb67 100644 --- a/dev/devicelab/manifest.yaml +++ b/dev/devicelab/manifest.yaml @@ -125,6 +125,13 @@ tasks: stage: devicelab_win required_agent_capabilities: ["windows/android"] + windows_chrome_dev_mode: + description: > + Run flutter web on the devicelab and hot restart. + stage: devicelab_win + required_agent_capabilities: ["windows/android"] + flaky: true + # Android on-device tests complex_layout_scroll_perf__timeline_summary: @@ -324,6 +331,13 @@ tasks: stage: devicelab required_agent_capabilities: ["linux/android"] + linux_chrome_dev_mode: + description: > + Run flutter web on the devicelab and hot restart. + stage: devicelab + required_agent_capabilities: ["linux/android"] + flaky: true + # iOS on-device tests flavors_test_ios: @@ -421,6 +435,13 @@ tasks: stage: devicelab_ios required_agent_capabilities: ["mac/ios"] + macos_chrome_dev_mode: + description: > + Run flutter web on the devicelab and hot restart. + stage: devicelab_ios + required_agent_capabilities: ["mac/ios"] + flaky: true + # Tests running on Windows host flavors_test_win: diff --git a/dev/devicelab/pubspec.yaml b/dev/devicelab/pubspec.yaml index db2cd556fd..2b1e441f3f 100644 --- a/dev/devicelab/pubspec.yaml +++ b/dev/devicelab/pubspec.yaml @@ -8,9 +8,9 @@ environment: sdk: ">=2.0.0-dev.68.0 <3.0.0" dependencies: - args: 1.5.1 + args: 1.5.2 file: 5.0.8 - image: 2.1.3 + image: 2.1.4 meta: 1.1.6 path: 1.6.2 platform: 2.2.0 @@ -73,4 +73,4 @@ dev_dependencies: watcher: 0.9.7+10 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" yaml: 2.1.15 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" -# PUBSPEC CHECKSUM: b018 +# PUBSPEC CHECKSUM: 491a diff --git a/dev/integration_tests/android_semantics_testing/pubspec.yaml b/dev/integration_tests/android_semantics_testing/pubspec.yaml index 571f789961..dd9f6acac6 100644 --- a/dev/integration_tests/android_semantics_testing/pubspec.yaml +++ b/dev/integration_tests/android_semantics_testing/pubspec.yaml @@ -9,7 +9,7 @@ dependencies: test: 1.6.3 analyzer: 0.36.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - args: 1.5.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + args: 1.5.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" async: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -63,4 +63,4 @@ dependencies: flutter: uses-material-design: true -# PUBSPEC CHECKSUM: d60e +# PUBSPEC CHECKSUM: 820f diff --git a/dev/integration_tests/android_views/pubspec.yaml b/dev/integration_tests/android_views/pubspec.yaml index bf9e305910..74356bdac2 100644 --- a/dev/integration_tests/android_views/pubspec.yaml +++ b/dev/integration_tests/android_views/pubspec.yaml @@ -40,7 +40,7 @@ dev_dependencies: test: 1.6.3 analyzer: 0.36.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - args: 1.5.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + args: 1.5.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" csslib: 0.16.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" front_end: 0.1.18 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -76,4 +76,4 @@ dev_dependencies: flutter: uses-material-design: true -# PUBSPEC CHECKSUM: 10be +# PUBSPEC CHECKSUM: fdbf diff --git a/dev/integration_tests/channels/pubspec.yaml b/dev/integration_tests/channels/pubspec.yaml index 150a7685df..a0a74cdceb 100644 --- a/dev/integration_tests/channels/pubspec.yaml +++ b/dev/integration_tests/channels/pubspec.yaml @@ -13,7 +13,7 @@ dependencies: test: 1.6.3 analyzer: 0.36.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - args: 1.5.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + args: 1.5.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" async: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -67,4 +67,4 @@ dependencies: flutter: uses-material-design: true -# PUBSPEC CHECKSUM: d60e +# PUBSPEC CHECKSUM: 820f diff --git a/dev/integration_tests/codegen/pubspec.yaml b/dev/integration_tests/codegen/pubspec.yaml index 229c3e4f0f..baca4ae8db 100644 --- a/dev/integration_tests/codegen/pubspec.yaml +++ b/dev/integration_tests/codegen/pubspec.yaml @@ -35,7 +35,7 @@ dev_dependencies: test: 1.6.3 analyzer: 0.36.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - args: 1.5.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + args: 1.5.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" csslib: 0.16.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" front_end: 0.1.18 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -74,4 +74,4 @@ builders: flutter: uses-material-design: true -# PUBSPEC CHECKSUM: d60e +# PUBSPEC CHECKSUM: 820f diff --git a/dev/integration_tests/external_ui/pubspec.yaml b/dev/integration_tests/external_ui/pubspec.yaml index 17e47393b1..8827df8515 100644 --- a/dev/integration_tests/external_ui/pubspec.yaml +++ b/dev/integration_tests/external_ui/pubspec.yaml @@ -13,7 +13,7 @@ dependencies: test: 1.6.3 analyzer: 0.36.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - args: 1.5.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + args: 1.5.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" async: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -67,4 +67,4 @@ dependencies: flutter: uses-material-design: true -# PUBSPEC CHECKSUM: d60e +# PUBSPEC CHECKSUM: 820f diff --git a/dev/integration_tests/flavors/pubspec.yaml b/dev/integration_tests/flavors/pubspec.yaml index 8ef036a1f0..d6a9adaca7 100644 --- a/dev/integration_tests/flavors/pubspec.yaml +++ b/dev/integration_tests/flavors/pubspec.yaml @@ -13,7 +13,7 @@ dependencies: test: 1.6.3 analyzer: 0.36.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - args: 1.5.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + args: 1.5.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" async: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -67,4 +67,4 @@ dependencies: flutter: uses-material-design: true -# PUBSPEC CHECKSUM: d60e +# PUBSPEC CHECKSUM: 820f diff --git a/dev/integration_tests/image_loading/pubspec.yaml b/dev/integration_tests/image_loading/pubspec.yaml index 09b3790fed..9d2f5c60e3 100644 --- a/dev/integration_tests/image_loading/pubspec.yaml +++ b/dev/integration_tests/image_loading/pubspec.yaml @@ -5,10 +5,10 @@ dependencies: flutter: sdk: flutter test: 1.6.3 - mockito: 4.0.0 + mockito: 4.1.0 analyzer: 0.36.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - args: 1.5.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + args: 1.5.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" async: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -60,4 +60,4 @@ dependencies: flutter: uses-material-design: true -# PUBSPEC CHECKSUM: bf1e +# PUBSPEC CHECKSUM: 8420 diff --git a/dev/integration_tests/platform_interaction/pubspec.yaml b/dev/integration_tests/platform_interaction/pubspec.yaml index 8171255894..9e483e4601 100644 --- a/dev/integration_tests/platform_interaction/pubspec.yaml +++ b/dev/integration_tests/platform_interaction/pubspec.yaml @@ -13,7 +13,7 @@ dependencies: test: 1.6.3 analyzer: 0.36.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - args: 1.5.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + args: 1.5.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" async: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -67,4 +67,4 @@ dependencies: flutter: uses-material-design: true -# PUBSPEC CHECKSUM: d60e +# PUBSPEC CHECKSUM: 820f diff --git a/dev/integration_tests/simple_codegen/pubspec.yaml b/dev/integration_tests/simple_codegen/pubspec.yaml index 3f13bf2fbf..024082e007 100644 --- a/dev/integration_tests/simple_codegen/pubspec.yaml +++ b/dev/integration_tests/simple_codegen/pubspec.yaml @@ -5,7 +5,7 @@ dependencies: build: 1.1.4 analyzer: 0.36.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - args: 1.5.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + args: 1.5.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" async: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" collection: 1.14.11 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -32,4 +32,4 @@ environment: # The pub client defaults to an <2.0.0 sdk constraint which we need to explicitly overwrite. sdk: ">=2.0.0-dev.68.0 <3.0.0" -# PUBSPEC CHECKSUM: 669a +# PUBSPEC CHECKSUM: 069b diff --git a/dev/integration_tests/ui/pubspec.yaml b/dev/integration_tests/ui/pubspec.yaml index 3454f9d59e..64ccf84bc4 100644 --- a/dev/integration_tests/ui/pubspec.yaml +++ b/dev/integration_tests/ui/pubspec.yaml @@ -6,7 +6,7 @@ environment: sdk: ">=2.0.0-dev.68.0 <3.0.0" dependencies: - image: 2.1.3 + image: 2.1.4 flutter: sdk: flutter flutter_driver: @@ -15,7 +15,7 @@ dependencies: analyzer: 0.36.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" archive: 2.0.9 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - args: 1.5.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + args: 1.5.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" async: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -77,4 +77,4 @@ dev_dependencies: flutter: uses-material-design: true -# PUBSPEC CHECKSUM: 1b28 +# PUBSPEC CHECKSUM: 772a diff --git a/dev/manual_tests/pubspec.yaml b/dev/manual_tests/pubspec.yaml index 703c255a9c..4ceeef249b 100644 --- a/dev/manual_tests/pubspec.yaml +++ b/dev/manual_tests/pubspec.yaml @@ -17,7 +17,7 @@ dev_dependencies: flutter_test: sdk: flutter - mockito: 4.0.0 + mockito: 4.1.0 async: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -36,4 +36,4 @@ dev_dependencies: flutter: uses-material-design: true -# PUBSPEC CHECKSUM: 949f +# PUBSPEC CHECKSUM: 0ba0 diff --git a/dev/snippets/pubspec.yaml b/dev/snippets/pubspec.yaml index f0502917b2..9422e4aac9 100644 --- a/dev/snippets/pubspec.yaml +++ b/dev/snippets/pubspec.yaml @@ -13,7 +13,7 @@ dartdoc: nodoc: true dependencies: - args: 1.5.1 + args: 1.5.2 dart_style: 1.2.7 meta: 1.1.6 platform: 2.2.0 @@ -98,4 +98,4 @@ executables: vm_service_client: 0.2.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" web_socket_channel: 1.0.9 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" -# PUBSPEC CHECKSUM: 6b2c +# PUBSPEC CHECKSUM: 052d diff --git a/dev/tools/gen_keycodes/pubspec.yaml b/dev/tools/gen_keycodes/pubspec.yaml index 0b1f93500b..cabc93895c 100644 --- a/dev/tools/gen_keycodes/pubspec.yaml +++ b/dev/tools/gen_keycodes/pubspec.yaml @@ -6,7 +6,7 @@ environment: sdk: ">=2.0.0-dev.68.0 <3.0.0" dependencies: - args: 1.5.1 + args: 1.5.2 http: 0.12.0+2 path: 1.6.2 platform: 2.2.0 @@ -22,4 +22,4 @@ dependencies: term_glyph: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" typed_data: 1.1.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" -# PUBSPEC CHECKSUM: 8bd3 +# PUBSPEC CHECKSUM: 24d4 diff --git a/dev/tools/pubspec.yaml b/dev/tools/pubspec.yaml index bf6f713887..be0a7f7cca 100644 --- a/dev/tools/pubspec.yaml +++ b/dev/tools/pubspec.yaml @@ -7,7 +7,7 @@ environment: dependencies: archive: 2.0.9 - args: 1.5.1 + args: 1.5.2 http: 0.12.0+2 intl: 0.15.8 meta: 1.1.6 @@ -30,11 +30,11 @@ dependencies: dev_dependencies: test_api: 0.2.5 - mockito: 4.0.0 + mockito: 4.1.0 boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" matcher: 0.12.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" stack_trace: 1.9.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" stream_channel: 2.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" -# PUBSPEC CHECKSUM: 470f +# PUBSPEC CHECKSUM: a711 diff --git a/dev/tools/vitool/pubspec.yaml b/dev/tools/vitool/pubspec.yaml index c9c6437fe7..e7fc5a7f0b 100644 --- a/dev/tools/vitool/pubspec.yaml +++ b/dev/tools/vitool/pubspec.yaml @@ -9,7 +9,7 @@ environment: sdk: ">=2.0.0-dev.68.0 <3.0.0" dependencies: - args: 1.5.1 + args: 1.5.2 vector_math: 2.0.8 xml: 3.5.0 @@ -37,4 +37,4 @@ dev_dependencies: term_glyph: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" test_api: 0.2.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" -# PUBSPEC CHECKSUM: b74d +# PUBSPEC CHECKSUM: 3d4e diff --git a/examples/catalog/pubspec.yaml b/examples/catalog/pubspec.yaml index f5f77ec051..70e2c7e992 100644 --- a/examples/catalog/pubspec.yaml +++ b/examples/catalog/pubspec.yaml @@ -23,7 +23,7 @@ dev_dependencies: test: 1.6.3 analyzer: 0.36.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - args: 1.5.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + args: 1.5.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" async: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -73,4 +73,4 @@ dev_dependencies: flutter: uses-material-design: true -# PUBSPEC CHECKSUM: 5ff8 +# PUBSPEC CHECKSUM: 25f9 diff --git a/examples/flutter_gallery/pubspec.yaml b/examples/flutter_gallery/pubspec.yaml index 780e46c6ff..c5aab9f244 100644 --- a/examples/flutter_gallery/pubspec.yaml +++ b/examples/flutter_gallery/pubspec.yaml @@ -12,9 +12,9 @@ dependencies: intl: 0.15.8 connectivity: 0.4.3+2 string_scanner: 1.0.4 - url_launcher: 5.0.2 + url_launcher: 5.0.3 cupertino_icons: 0.1.2 - video_player: 0.10.1+2 + video_player: 0.10.1+3 scoped_model: 1.0.1 shrine_images: 1.1.2 @@ -39,7 +39,7 @@ dev_dependencies: test: 1.6.3 analyzer: 0.36.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - args: 1.5.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + args: 1.5.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" async: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" convert: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -253,4 +253,4 @@ flutter: - asset: packages/flutter_gallery_assets/fonts/merriweather/Merriweather-Regular.ttf - asset: packages/flutter_gallery_assets/fonts/merriweather/Merriweather-Light.ttf -# PUBSPEC CHECKSUM: 8760 +# PUBSPEC CHECKSUM: 7863 diff --git a/examples/platform_channel/pubspec.yaml b/examples/platform_channel/pubspec.yaml index 9433dfa85d..50bc7d5e75 100644 --- a/examples/platform_channel/pubspec.yaml +++ b/examples/platform_channel/pubspec.yaml @@ -21,7 +21,7 @@ dev_dependencies: test: 1.6.3 analyzer: 0.36.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - args: 1.5.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + args: 1.5.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" async: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -72,4 +72,4 @@ dev_dependencies: flutter: uses-material-design: true -# PUBSPEC CHECKSUM: 5ff8 +# PUBSPEC CHECKSUM: 25f9 diff --git a/examples/stocks/pubspec.yaml b/examples/stocks/pubspec.yaml index e9aea00083..f10e89a261 100644 --- a/examples/stocks/pubspec.yaml +++ b/examples/stocks/pubspec.yaml @@ -15,7 +15,7 @@ dependencies: isolate: 2.0.2 analyzer: 0.36.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - args: 1.5.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + args: 1.5.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" async: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" collection: 1.14.11 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -62,4 +62,4 @@ dev_dependencies: flutter: uses-material-design: true -# PUBSPEC CHECKSUM: 63b7 +# PUBSPEC CHECKSUM: 69b8 diff --git a/packages/flutter/pubspec.yaml b/packages/flutter/pubspec.yaml index a035993d1b..e4afaebfe5 100644 --- a/packages/flutter/pubspec.yaml +++ b/packages/flutter/pubspec.yaml @@ -22,7 +22,7 @@ dev_dependencies: sdk: flutter flutter_goldens: sdk: flutter - mockito: 4.0.0 + mockito: 4.1.0 async: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -42,4 +42,4 @@ dev_dependencies: term_glyph: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" test_api: 0.2.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" -# PUBSPEC CHECKSUM: 94dc +# PUBSPEC CHECKSUM: 45dd diff --git a/packages/flutter_driver/pubspec.yaml b/packages/flutter_driver/pubspec.yaml index eb36b72078..70c267920f 100644 --- a/packages/flutter_driver/pubspec.yaml +++ b/packages/flutter_driver/pubspec.yaml @@ -43,7 +43,7 @@ dependencies: vector_math: 2.0.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" dev_dependencies: - mockito: 4.0.0 + mockito: 4.1.0 quiver: 2.0.3 -# PUBSPEC CHECKSUM: b48d +# PUBSPEC CHECKSUM: ef8e diff --git a/packages/flutter_goldens/pubspec.yaml b/packages/flutter_goldens/pubspec.yaml index 2a53afc8a4..cf846a1cb3 100644 --- a/packages/flutter_goldens/pubspec.yaml +++ b/packages/flutter_goldens/pubspec.yaml @@ -33,6 +33,6 @@ dependencies: vector_math: 2.0.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" dev_dependencies: - mockito: 4.0.0 + mockito: 4.1.0 -# PUBSPEC CHECKSUM: 046a +# PUBSPEC CHECKSUM: 926b diff --git a/packages/flutter_localizations/pubspec.yaml b/packages/flutter_localizations/pubspec.yaml index d73ddefd18..7c50e3dd40 100644 --- a/packages/flutter_localizations/pubspec.yaml +++ b/packages/flutter_localizations/pubspec.yaml @@ -20,7 +20,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - mockito: 4.0.0 + mockito: 4.1.0 async: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -35,4 +35,4 @@ dev_dependencies: term_glyph: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" test_api: 0.2.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" -# PUBSPEC CHECKSUM: 4ddd +# PUBSPEC CHECKSUM: c3de diff --git a/packages/flutter_tools/BUILD.gn b/packages/flutter_tools/BUILD.gn index 48b481deef..79988dbd9d 100644 --- a/packages/flutter_tools/BUILD.gn +++ b/packages/flutter_tools/BUILD.gn @@ -31,6 +31,8 @@ dart_library("flutter_tools") { "//third_party/dart-pkg/pub/json_schema", "//third_party/dart-pkg/pub/linter", "//third_party/dart-pkg/pub/meta", + "//third_party/dart-pkg/pub/mime", + "//third_party/dart-pkg/pub/multi_server_socket", "//third_party/dart-pkg/pub/multicast_dns", "//third_party/dart-pkg/pub/mustache", "//third_party/dart-pkg/pub/package_config", @@ -38,12 +40,16 @@ dart_library("flutter_tools") { "//third_party/dart-pkg/pub/platform", "//third_party/dart-pkg/pub/process", "//third_party/dart-pkg/pub/quiver", + "//third_party/dart-pkg/pub/shelf_packages_handler", + "//third_party/dart-pkg/pub/shelf_static", "//third_party/dart-pkg/pub/stack_trace", "//third_party/dart-pkg/pub/test", "//third_party/dart-pkg/pub/usage", "//third_party/dart-pkg/pub/web_socket_channel", + "//third_party/dart-pkg/pub/webkit_inspection_protocol", "//third_party/dart-pkg/pub/xml", "//third_party/dart-pkg/pub/yaml", + "//third_party/dart-pkg/pub/node_preamble", ] } diff --git a/packages/flutter_tools/lib/src/application_package.dart b/packages/flutter_tools/lib/src/application_package.dart index 96bc9b55c4..60f0276439 100644 --- a/packages/flutter_tools/lib/src/application_package.dart +++ b/packages/flutter_tools/lib/src/application_package.dart @@ -56,7 +56,7 @@ class ApplicationPackageFactory { return applicationBinary == null ? MacOSApp.fromMacOSProject(FlutterProject.current().macos) : MacOSApp.fromPrebuiltApp(applicationBinary); - case TargetPlatform.web: + case TargetPlatform.web_javascript: return WebApplicationPackage(FlutterProject.current()); case TargetPlatform.linux_x64: return applicationBinary == null @@ -411,7 +411,7 @@ class ApplicationPackageStore { case TargetPlatform.linux_x64: case TargetPlatform.windows_x64: case TargetPlatform.tester: - case TargetPlatform.web: + case TargetPlatform.web_javascript: return null; } return null; diff --git a/packages/flutter_tools/lib/src/artifacts.dart b/packages/flutter_tools/lib/src/artifacts.dart index 259ba67548..26f6ee7323 100644 --- a/packages/flutter_tools/lib/src/artifacts.dart +++ b/packages/flutter_tools/lib/src/artifacts.dart @@ -136,7 +136,7 @@ class CachedArtifacts extends Artifacts { case TargetPlatform.windows_x64: case TargetPlatform.fuchsia: case TargetPlatform.tester: - case TargetPlatform.web: + case TargetPlatform.web_javascript: return _getHostArtifactPath(artifact, platform, mode); } assert(false, 'Invalid platform $platform.'); @@ -238,7 +238,7 @@ class CachedArtifacts extends Artifacts { case TargetPlatform.windows_x64: case TargetPlatform.fuchsia: case TargetPlatform.tester: - case TargetPlatform.web: + case TargetPlatform.web_javascript: assert(mode == null, 'Platform $platform does not support different build modes.'); return fs.path.join(engineDir, platformName); case TargetPlatform.ios: diff --git a/packages/flutter_tools/lib/src/build_info.dart b/packages/flutter_tools/lib/src/build_info.dart index 8c8e94fce9..8379e8187c 100644 --- a/packages/flutter_tools/lib/src/build_info.dart +++ b/packages/flutter_tools/lib/src/build_info.dart @@ -243,7 +243,7 @@ enum TargetPlatform { windows_x64, fuchsia, tester, - web, + web_javascript, } /// iOS target device architecture. @@ -303,8 +303,8 @@ String getNameForTargetPlatform(TargetPlatform platform) { return 'fuchsia'; case TargetPlatform.tester: return 'flutter-tester'; - case TargetPlatform.web: - return 'web'; + case TargetPlatform.web_javascript: + return 'web-javascript'; } assert(false); return null; @@ -328,8 +328,8 @@ TargetPlatform getTargetPlatformForName(String platform) { return TargetPlatform.linux_x64; case 'windows-x64': return TargetPlatform.windows_x64; - case 'web': - return TargetPlatform.web; + case 'web-javascript': + return TargetPlatform.web_javascript; } assert(platform != null); return null; diff --git a/packages/flutter_tools/lib/src/commands/run.dart b/packages/flutter_tools/lib/src/commands/run.dart index 55292dcb32..50c609d93f 100644 --- a/packages/flutter_tools/lib/src/commands/run.dart +++ b/packages/flutter_tools/lib/src/commands/run.dart @@ -403,7 +403,7 @@ class RunCommand extends RunCommandBase { // in a "hot mode". final bool webMode = !FlutterVersion.instance.isStable && devices.length == 1 - && await devices.single.targetPlatform == TargetPlatform.web + && await devices.single.targetPlatform == TargetPlatform.web_javascript && hotMode; ResidentRunner runner; diff --git a/packages/flutter_tools/lib/src/commands/update_packages.dart b/packages/flutter_tools/lib/src/commands/update_packages.dart index 6f08ce3a1b..9c80937f1c 100644 --- a/packages/flutter_tools/lib/src/commands/update_packages.dart +++ b/packages/flutter_tools/lib/src/commands/update_packages.dart @@ -22,7 +22,10 @@ import '../runner/flutter_command.dart'; const Map _kManuallyPinnedDependencies = { // Add pinned packages here. 'flutter_gallery_assets': '0.1.8', // See //examples/flutter_gallery/pubspec.yaml - 'build_daemon': '0.6.1', + 'build_daemon': '0.6.1', // Crashes at 1.0 + 'test': '1.6.3', // | Tests are timing out at 1.6.4 https://github.com/flutter/flutter/issues/33823 + 'test_api': '0.2.5', // | + 'test_core': '0.2.5' // | }; class UpdatePackagesCommand extends FlutterCommand { @@ -1106,7 +1109,16 @@ String _generateFakePubspec(Iterable dependencies) { overrides.writeln('dependency_overrides:'); if (_kManuallyPinnedDependencies.isNotEmpty) { printStatus('WARNING: the following packages use hard-coded version constraints:'); + final Set allTransitive = { + for (PubspecDependency dependency in dependencies) + dependency.name + }; for (String package in _kManuallyPinnedDependencies.keys) { + // Don't add pinned dependency if it is not in the set of all transitive dependencies. + if (!allTransitive.contains(package)) { + printStatus('Skipping $package because it was not transitive'); + continue; + } final String version = _kManuallyPinnedDependencies[package]; result.writeln(' $package: $version'); printStatus(' - $package: $version'); diff --git a/packages/flutter_tools/lib/src/context_runner.dart b/packages/flutter_tools/lib/src/context_runner.dart index 182130a5dc..8d7a0ebac8 100644 --- a/packages/flutter_tools/lib/src/context_runner.dart +++ b/packages/flutter_tools/lib/src/context_runner.dart @@ -43,8 +43,9 @@ import 'macos/xcode_validator.dart'; import 'run_hot.dart'; import 'usage.dart'; import 'version.dart'; +import 'web/chrome.dart'; import 'web/compile.dart'; -import 'web/web_device.dart'; +import 'web/workflow.dart'; import 'windows/windows_workflow.dart'; Future runInContext( @@ -100,6 +101,7 @@ Future runInContext( Usage: () => Usage(), UserMessages: () => UserMessages(), WebCompiler: () => const WebCompiler(), + WebWorkflow: () => const WebWorkflow(), WindowsWorkflow: () => const WindowsWorkflow(), Xcode: () => Xcode(), XcodeValidator: () => const XcodeValidator(), diff --git a/packages/flutter_tools/lib/src/device.dart b/packages/flutter_tools/lib/src/device.dart index fa0ae74274..01aca670d4 100644 --- a/packages/flutter_tools/lib/src/device.dart +++ b/packages/flutter_tools/lib/src/device.dart @@ -23,6 +23,7 @@ import 'macos/macos_device.dart'; import 'project.dart'; import 'tester/flutter_tester.dart'; import 'web/web_device.dart'; +import 'web/workflow.dart'; import 'windows/windows_device.dart'; DeviceManager get deviceManager => context.get(); diff --git a/packages/flutter_tools/lib/src/doctor.dart b/packages/flutter_tools/lib/src/doctor.dart index 1fff8d7b09..50cf645077 100644 --- a/packages/flutter_tools/lib/src/doctor.dart +++ b/packages/flutter_tools/lib/src/doctor.dart @@ -33,6 +33,8 @@ import 'proxy_validator.dart'; import 'tester/flutter_tester.dart'; import 'version.dart'; import 'vscode/vscode_validator.dart'; +import 'web/web_validator.dart'; +import 'web/workflow.dart'; import 'windows/windows_workflow.dart'; Doctor get doctor => context.get(); @@ -66,6 +68,9 @@ class _DefaultDoctorValidatorsProvider implements DoctorValidatorsProvider { if (iosWorkflow.appliesToHostPlatform) _validators.add(iosValidator); + if (webWorkflow.appliesToHostPlatform) + _validators.add(const WebValidator()); + final List ideValidators = []; ideValidators.addAll(AndroidStudioValidator.allValidators); ideValidators.addAll(IntelliJValidator.installedValidators); @@ -278,6 +283,8 @@ class Doctor { /// A series of tools and required install steps for a target platform (iOS or Android). abstract class Workflow { + const Workflow(); + /// Whether the workflow applies to this platform (as in, should we ever try and use it). bool get appliesToHostPlatform; diff --git a/packages/flutter_tools/lib/src/project.dart b/packages/flutter_tools/lib/src/project.dart index ed9ae19ca7..6b514467ec 100644 --- a/packages/flutter_tools/lib/src/project.dart +++ b/packages/flutter_tools/lib/src/project.dart @@ -20,7 +20,7 @@ import 'ios/plist_utils.dart' as plist; import 'ios/xcodeproj.dart' as xcode; import 'plugins.dart'; import 'template.dart'; -import 'web/web_device.dart'; +import 'web/workflow.dart'; /// Represents the contents of a Flutter project at the specified [directory]. /// @@ -188,7 +188,7 @@ class FlutterProject { if (flutterDesktopEnabled && macos.existsSync()) { await macos.ensureReadyForPlatformSpecificTooling(); } - if (flutterWebEnabled) { + if (flutterWebEnabled && web.existsSync()) { await web.ensureReadyForPlatformSpecificTooling(); } await injectPlugins(this, checkProjects: checkProjects); diff --git a/packages/flutter_tools/lib/src/resident_web_runner.dart b/packages/flutter_tools/lib/src/resident_web_runner.dart index 1652628c72..4777b21b3c 100644 --- a/packages/flutter_tools/lib/src/resident_web_runner.dart +++ b/packages/flutter_tools/lib/src/resident_web_runner.dart @@ -5,11 +5,14 @@ import 'dart:async'; import 'package:meta/meta.dart'; +import 'package:webkit_inspection_protocol/webkit_inspection_protocol.dart'; import 'asset.dart'; import 'base/common.dart'; import 'base/file_system.dart'; +import 'base/logger.dart'; import 'base/terminal.dart'; +import 'base/utils.dart'; import 'build_info.dart'; import 'bundle.dart'; import 'dart/package_map.dart'; @@ -19,8 +22,8 @@ import 'project.dart'; import 'resident_runner.dart'; import 'run_hot.dart'; import 'web/asset_server.dart'; +import 'web/chrome.dart'; import 'web/compile.dart'; -import 'web/web_device.dart'; /// A hot-runner which handles browser specific delegation. class ResidentWebRunner extends ResidentRunner { @@ -44,6 +47,7 @@ class ResidentWebRunner extends ResidentRunner { WebAssetServer _server; ProjectFileInvalidator projectFileInvalidator; DateTime _lastCompiled; + WipConnection _connection; final FlutterProject flutterProject; @override @@ -58,12 +62,16 @@ class ResidentWebRunner extends ResidentRunner { } @override - Future cleanupAfterSignal() { + Future cleanupAfterSignal() async { + await _connection.sendCommand('Browser.close'); + _connection = null; return _server?.dispose(); } @override - Future cleanupAtFinish() { + Future cleanupAtFinish() async { + await _connection?.sendCommand('Browser.close'); + _connection = null; return _server?.dispose(); } @@ -128,7 +136,15 @@ class ResidentWebRunner extends ResidentRunner { await _server.initialize(); // Step 3: Spawn an instance of Chrome and direct it to the created server. - await chromeLauncher.launch('http:localhost:${_server.port}'); + final String url = 'http://localhost:${_server.port}'; + final Chrome chrome = await chromeLauncher.launch(url); + final ChromeTab chromeTab = await chrome.chromeConnection.getTab((ChromeTab chromeTab) { + return chromeTab.url.contains(url); // we don't care about trailing slashes or # + }); + _connection = await chromeTab.connect(); + _connection.onClose.listen((WipConnection connection) { + appFinished(); + }); // We don't support the debugging proxy yet. appStartedCompleter?.complete(); @@ -139,23 +155,39 @@ class ResidentWebRunner extends ResidentRunner { } @override - Future restart( - {bool fullRestart = false, - bool pauseAfterRestart = false, - String reason, - bool benchmarkMode = false}) async { - final List invalidatedSources = ProjectFileInvalidator.findInvalidated( - lastCompiled: _lastCompiled, - urisToMonitor: [ - for (FileSystemEntity entity in flutterProject.directory - .childDirectory('lib') - .listSync(recursive: true)) - if (entity is File && entity.path.endsWith('.dart')) entity.uri - ], // Add new class to track this for web. - packagesPath: PackageMap.globalPackagesPath, + Future restart({ + bool fullRestart = false, + bool pauseAfterRestart = false, + String reason, + bool benchmarkMode = false, + }) async { + final Stopwatch timer = Stopwatch()..start(); + final Status status = logger.startProgress( + 'Performing hot restart...', + timeout: timeoutConfiguration.fastOperation, + progressId: 'hot.restart', ); - await webCompilationProxy.invalidate(inputs: invalidatedSources); - printStatus('Sources updated, refresh browser'); - return OperationResult.ok; + OperationResult result = OperationResult.ok; + try { + final List invalidatedSources = ProjectFileInvalidator.findInvalidated( + lastCompiled: _lastCompiled, + urisToMonitor: [ + for (FileSystemEntity entity in flutterProject.directory + .childDirectory('lib') + .listSync(recursive: true)) + if (entity is File && entity.path.endsWith('.dart')) entity.uri + ], // Add new class to track this for web. + packagesPath: PackageMap.globalPackagesPath, + ); + await webCompilationProxy.invalidate(inputs: invalidatedSources); + await _connection.sendCommand('Page.reload'); + await Future.delayed(const Duration(milliseconds: 150)); + } catch (err) { + result = OperationResult(1, err.toString()); + } finally { + printStatus('Restarted application in ${getElapsedAsMilliseconds(timer.elapsed)}.'); + status.cancel(); + } + return result; } } diff --git a/packages/flutter_tools/lib/src/runner/flutter_command.dart b/packages/flutter_tools/lib/src/runner/flutter_command.dart index bd00937d6a..b39e674d1d 100644 --- a/packages/flutter_tools/lib/src/runner/flutter_command.dart +++ b/packages/flutter_tools/lib/src/runner/flutter_command.dart @@ -670,7 +670,7 @@ DevelopmentArtifact _artifactFromTargetPlatform(TargetPlatform targetPlatform) { case TargetPlatform.android_x64: case TargetPlatform.android_x86: return DevelopmentArtifact.android; - case TargetPlatform.web: + case TargetPlatform.web_javascript: return DevelopmentArtifact.web; case TargetPlatform.ios: return DevelopmentArtifact.iOS; diff --git a/packages/flutter_tools/lib/src/web/asset_server.dart b/packages/flutter_tools/lib/src/web/asset_server.dart index d4ad143b3c..730692c000 100644 --- a/packages/flutter_tools/lib/src/web/asset_server.dart +++ b/packages/flutter_tools/lib/src/web/asset_server.dart @@ -170,7 +170,6 @@ class WebAssetServer { Future _completeRequest(HttpRequest request, File file, [String contentType = 'text']) async { - printTrace('looking for ${request.uri} at ${file.path}'); if (!file.existsSync()) { request.response.statusCode = HttpStatus.notFound; await request.response.close(); diff --git a/packages/flutter_tools/lib/src/web/chrome.dart b/packages/flutter_tools/lib/src/web/chrome.dart new file mode 100644 index 0000000000..40be47fe90 --- /dev/null +++ b/packages/flutter_tools/lib/src/web/chrome.dart @@ -0,0 +1,182 @@ +// Copyright 2019 The Chromium 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:webkit_inspection_protocol/webkit_inspection_protocol.dart'; + +import '../base/common.dart'; +import '../base/context.dart'; +import '../base/file_system.dart'; +import '../base/io.dart'; +import '../base/os.dart'; +import '../base/platform.dart'; +import '../base/process_manager.dart'; +import '../convert.dart'; +import '../globals.dart'; + +/// The [ChromeLauncher] instance. +ChromeLauncher get chromeLauncher => context.get(); + +/// An environment variable used to override the location of chrome. +const String kChromeEnvironment = 'CHROME_EXECUTABLE'; + +/// The expected executable name on linux. +const String kLinuxExecutable = 'google-chrome'; + +/// The expected executable name on macOS. +const String kMacOSExecutable = + '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome'; + +/// The expected executable name on Windows. +const String kWindowsExecutable = r'Google\Chrome\Application\chrome.exe'; + +/// The possible locations where the chrome executable can be located on windows. +final List kWindowsPrefixes = [ + platform.environment['LOCALAPPDATA'], + platform.environment['PROGRAMFILES'], + platform.environment['PROGRAMFILES(X86)'] +]; + +/// Find the chrome executable on the current platform. +/// +/// Does not verify whether the executable exists. +String findChromeExecutable() { + if (platform.environment.containsKey(kChromeEnvironment)) { + return platform.environment[kChromeEnvironment]; + } + if (platform.isLinux) { + return kLinuxExecutable; + } + if (platform.isMacOS) { + return kMacOSExecutable; + } + if (platform.isWindows) { + final String windowsPrefix = kWindowsPrefixes.firstWhere((String prefix) { + if (prefix == null) { + return false; + } + final String path = fs.path.join(prefix, kWindowsExecutable); + return fs.file(path).existsSync(); + }, orElse: () => '.'); + return fs.path.join(windowsPrefix, kWindowsExecutable); + } + throwToolExit('Platform ${platform.operatingSystem} is not supported.'); + return null; +} + +/// Responsible for launching chrome with devtools configured. +class ChromeLauncher { + const ChromeLauncher(); + + static final Completer _currentCompleter = Completer(); + + /// Launch the chrome browser to a particular `host` page. + Future launch(String url) async { + final String chromeExecutable = findChromeExecutable(); + final Directory dataDir = fs.systemTempDirectory.createTempSync(); + final int port = await os.findFreePort(); + final List args = [ + chromeExecutable, + // Using a tmp directory ensures that a new instance of chrome launches + // allowing for the remote debug port to be enabled. + '--user-data-dir=${dataDir.path}', + '--remote-debugging-port=$port', + // When the DevTools has focus we don't want to slow down the application. + '--disable-background-timer-throttling', + // Since we are using a temp profile, disable features that slow the + // Chrome launch. + '--disable-extensions', + '--disable-popup-blocking', + '--bwsi', + '--no-first-run', + '--no-default-browser-check', + '--disable-default-apps', + '--disable-translate', + url, + ]; + final Process process = await processManager.start(args); + + // Wait until the DevTools are listening before trying to connect. + await process.stderr + .transform(utf8.decoder) + .transform(const LineSplitter()) + .firstWhere((String line) => line.startsWith('DevTools listening')) + .timeout(const Duration(seconds: 60), onTimeout: () { + throwToolExit('Unable to connect to Chrome DevTools.'); + return null; + }); + + return _connect(Chrome._( + port, + ChromeConnection('localhost', port), + process: process, + dataDir: dataDir, + )); + } + + static Future _connect(Chrome chrome) async { + if (_currentCompleter.isCompleted) { + throwToolExit('Only one instance of chrome can be started.'); + } + // The connection is lazy. Try a simple call to make sure the provided + // connection is valid. + try { + await chrome.chromeConnection.getTabs(); + } catch (e) { + await chrome.close(); + throwToolExit( + 'Unable to connect to Chrome debug port: ${chrome.debugPort}\n $e'); + } + _currentCompleter.complete(chrome); + return chrome; + } + + /// Connects to an instance of Chrome with an open debug port. + static Future fromExisting(int port) async => + _connect(Chrome._(port, ChromeConnection('localhost', port))); + + static Future get connectedInstance => _currentCompleter.future; +} + +/// A class for managing an instance of Chrome. +class Chrome { + const Chrome._( + this.debugPort, + this.chromeConnection, { + Process process, + Directory dataDir, + }) : _process = process, + _dataDir = dataDir; + + final int debugPort; + final Process _process; + final Directory _dataDir; + final ChromeConnection chromeConnection; + + static Completer _currentCompleter = Completer(); + + Future close() async { + if (_currentCompleter.isCompleted) { + _currentCompleter = Completer(); + } + chromeConnection.close(); + _process?.kill(ProcessSignal.SIGKILL); + await _process?.exitCode; + try { + // Chrome starts another process as soon as it dies that modifies the + // profile information. Give it some time before attempting to delete + // the directory. + await Future.delayed(const Duration(milliseconds: 500)); + } catch (_) { + // Silently fail if we can't clean up the profile information. + } finally { + try { + await _dataDir?.delete(recursive: true); + } on FileSystemException { + printError('failed to delete temporary profile at ${_dataDir.path}'); + } + } + } +} diff --git a/packages/flutter_tools/lib/src/web/web_device.dart b/packages/flutter_tools/lib/src/web/web_device.dart index d8ce9ce3e5..b267ca45a4 100644 --- a/packages/flutter_tools/lib/src/web/web_device.dart +++ b/packages/flutter_tools/lib/src/web/web_device.dart @@ -5,30 +5,18 @@ import '../application_package.dart'; import '../asset.dart'; import '../base/common.dart'; -import '../base/context.dart'; import '../base/file_system.dart'; import '../base/io.dart'; import '../base/logger.dart'; -import '../base/platform.dart'; import '../base/process_manager.dart'; import '../build_info.dart'; import '../bundle.dart'; import '../device.dart'; import '../globals.dart'; import '../project.dart'; -import '../version.dart'; import '../web/compile.dart'; - -ChromeLauncher get chromeLauncher => context.get(); - -/// Only launch or display web devices if `FLUTTER_WEB` -/// environment variable is set to true. -bool get flutterWebEnabled { - _flutterWebEnabled = platform.environment['FLUTTER_WEB']?.toLowerCase() == 'true'; - return _flutterWebEnabled && !FlutterVersion.instance.isStable; -} -bool _flutterWebEnabled; - +import '../web/workflow.dart'; +import 'chrome.dart'; class WebApplicationPackage extends ApplicationPackage { WebApplicationPackage(this._flutterProject) : super(id: _flutterProject.manifest.appName); @@ -42,7 +30,6 @@ class WebApplicationPackage extends ApplicationPackage { Directory get webSourcePath => _flutterProject.directory.childDirectory('web'); } - class WebDevice extends Device { WebDevice() : super('web'); @@ -94,7 +81,17 @@ class WebDevice extends Device { DevicePortForwarder get portForwarder => const NoOpDevicePortForwarder(); @override - Future get sdkNameAndVersion async => 'web'; + Future get sdkNameAndVersion async { + final String chrome = findChromeExecutable(); + final ProcessResult result = await processManager.run([ + chrome, + '--version', + ]); + if (result.exitCode == 0) { + return result.stdout; + } + return 'unknown'; + } @override Future startApp( @@ -140,7 +137,7 @@ class WebDevice extends Device { } @override - Future get targetPlatform async => TargetPlatform.web; + Future get targetPlatform async => TargetPlatform.web_javascript; @override Future uninstallApp(ApplicationPackage app) async => true; @@ -202,45 +199,3 @@ class WebDevices extends PollingDeviceDiscovery { @override bool get supportsPlatform => flutterWebEnabled; } - -const String _klinuxExecutable = 'google-chrome'; -const String _kMacOSExecutable = '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome'; -const String _kWindowsExecutable = r'Google\Chrome\Application\chrome.exe'; -final List _kWindowsPrefixes = [ - platform.environment['LOCALAPPDATA'], - platform.environment['PROGRAMFILES'], - platform.environment['PROGRAMFILES(X86)'], -]; - -// Responsible for launching chrome with devtools configured. -class ChromeLauncher { - const ChromeLauncher(); - - /// Launch the chrome browser to a particular `host` page. - Future launch(String host) async { - String executable; - if (platform.isMacOS) { - executable = _kMacOSExecutable; - } else if (platform.isLinux) { - executable = _klinuxExecutable; - } else if (platform.isWindows) { - final String filePath = _kWindowsPrefixes.firstWhere((String prefix) { - if (prefix == null) { - return false; - } - final String path = fs.path.join(prefix, _kWindowsExecutable); - return fs.file(path).existsSync(); - }, orElse: () => '.'); - executable = filePath; - } else { - throwToolExit('Platform ${platform.operatingSystem} is not supported.'); - } - if (!fs.file(executable).existsSync()) { - throwToolExit('Chrome executable not found at $executable'); - } - return processManager.start([ - executable, - host, - ], mode: ProcessStartMode.detached); - } -} diff --git a/packages/flutter_tools/lib/src/web/web_validator.dart b/packages/flutter_tools/lib/src/web/web_validator.dart new file mode 100644 index 0000000000..51ec94ee18 --- /dev/null +++ b/packages/flutter_tools/lib/src/web/web_validator.dart @@ -0,0 +1,37 @@ +// Copyright 2019 The Chromium 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 '../base/platform.dart'; +import '../doctor.dart'; +import 'chrome.dart'; +import 'workflow.dart'; + +/// A validator that checks whether chrome is installed and can run. +class WebValidator extends DoctorValidator { + const WebValidator() : super('Chrome - develop for the web'); + + @override + Future validate() async { + final String chrome = findChromeExecutable(); + final bool canRunChrome = canFindChrome(); + final List messages = []; + if (platform.environment.containsKey(kChromeEnvironment)) { + messages.add(ValidationMessage('$kChromeEnvironment = $chrome')); + } else { + messages.add(ValidationMessage('Chrome at $chrome')); + messages.add(ValidationMessage.hint('$kChromeEnvironment not set')); + } + if (!canRunChrome) { + return ValidationResult( + ValidationType.missing, + messages, + statusInfo: 'Cannot find chrome executable at $chrome', + ); + } + return ValidationResult( + ValidationType.installed, + messages, + ); + } +} diff --git a/packages/flutter_tools/lib/src/web/workflow.dart b/packages/flutter_tools/lib/src/web/workflow.dart new file mode 100644 index 0000000000..47c28f4133 --- /dev/null +++ b/packages/flutter_tools/lib/src/web/workflow.dart @@ -0,0 +1,51 @@ +// Copyright 2019 The Chromium 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 '../base/context.dart'; +import '../base/file_system.dart'; +import '../base/platform.dart'; +import '../base/process_manager.dart'; +import '../doctor.dart'; +import '../version.dart'; +import 'chrome.dart'; + +/// Only launch or display web devices if `FLUTTER_WEB` +/// environment variable is set to true. +bool get flutterWebEnabled { + _flutterWebEnabled = platform.environment['FLUTTER_WEB']?.toLowerCase() == 'true'; + return _flutterWebEnabled && !FlutterVersion.instance.isStable; +} +bool _flutterWebEnabled; + +/// The web workflow instance. +WebWorkflow get webWorkflow => context.get(); + +class WebWorkflow extends Workflow { + const WebWorkflow(); + + @override + bool get appliesToHostPlatform => flutterWebEnabled && (platform.isWindows || platform.isMacOS || platform.isLinux); + + @override + bool get canLaunchDevices => flutterWebEnabled && canFindChrome(); + + @override + bool get canListDevices => flutterWebEnabled && canFindChrome(); + + @override + bool get canListEmulators => false; +} + +/// Whether we can locate the chrome executable. +bool canFindChrome() { + final String chrome = findChromeExecutable(); + if (platform.isLinux) { + return processManager.canRun(chrome); + } else if (platform.isMacOS) { + return fs.file(chrome).existsSync(); + } else if (platform.isWindows) { + return fs.file(chrome).existsSync(); + } + return false; +} diff --git a/packages/flutter_tools/pubspec.yaml b/packages/flutter_tools/pubspec.yaml index 8521cedb8b..a4cca93fbc 100644 --- a/packages/flutter_tools/pubspec.yaml +++ b/packages/flutter_tools/pubspec.yaml @@ -10,7 +10,7 @@ environment: dependencies: # To update these, use "flutter update-packages --force-upgrade". archive: 2.0.9 - args: 1.5.1 + args: 1.5.2 bsdiff: 0.1.0 completion: 0.2.1+1 coverage: 0.12.4 @@ -33,6 +33,7 @@ dependencies: usage: 3.4.1 vm_service_client: 0.2.6+2 web_socket_channel: 1.0.13 + webkit_inspection_protocol: 0.4.0 xml: 3.5.0 yaml: 2.1.15 flutter_goldens_client: @@ -60,7 +61,7 @@ dependencies: build_config: 0.4.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" build_resolvers: 1.0.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" built_collection: 4.2.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - built_value: 6.5.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + built_value: 6.6.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" convert: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" csslib: 0.16.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -100,13 +101,13 @@ dependencies: dev_dependencies: collection: 1.14.11 - mockito: 4.0.0 + mockito: 4.1.0 file_testing: 2.1.0 - vm_service_lib: 3.17.0 + vm_service_lib: 3.17.0+1 test: 1.6.3 build_runner: 1.4.0 build_vm_compilers: 1.0.0 - build_test: 0.10.7+3 + build_test: 0.10.8 mime: 0.9.6+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" multi_server_socket: 1.0.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -118,4 +119,4 @@ dartdoc: # Exclude this package from the hosted API docs. nodoc: true -# PUBSPEC CHECKSUM: b34a +# PUBSPEC CHECKSUM: ef94 diff --git a/packages/flutter_tools/test/commands/run_test.dart b/packages/flutter_tools/test/commands/run_test.dart index aa8aeccbb7..492c149e57 100644 --- a/packages/flutter_tools/test/commands/run_test.dart +++ b/packages/flutter_tools/test/commands/run_test.dart @@ -66,7 +66,7 @@ void main() { when(mockDeviceManager.getDevices()).thenAnswer((Invocation invocation) { return Stream.fromIterable([ - MockDevice(TargetPlatform.web), + MockDevice(TargetPlatform.web_javascript), ]); }); diff --git a/packages/flutter_tools/test/web/devices_test.dart b/packages/flutter_tools/test/web/devices_test.dart index 77dac14e70..7ab085629d 100644 --- a/packages/flutter_tools/test/web/devices_test.dart +++ b/packages/flutter_tools/test/web/devices_test.dart @@ -5,6 +5,7 @@ import 'package:flutter_tools/src/base/file_system.dart'; import 'package:flutter_tools/src/base/platform.dart'; import 'package:flutter_tools/src/project.dart'; +import 'package:flutter_tools/src/web/chrome.dart'; import 'package:flutter_tools/src/web/compile.dart'; import 'package:flutter_tools/src/web/web_device.dart'; import 'package:mockito/mockito.dart'; diff --git a/packages/flutter_tools/test/web/web_validator_test.dart b/packages/flutter_tools/test/web/web_validator_test.dart new file mode 100644 index 0000000000..9270bf25a5 --- /dev/null +++ b/packages/flutter_tools/test/web/web_validator_test.dart @@ -0,0 +1,52 @@ +// Copyright 2019 The Chromium 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_tools/src/base/file_system.dart'; +import 'package:flutter_tools/src/base/platform.dart'; +import 'package:flutter_tools/src/doctor.dart'; +import 'package:flutter_tools/src/web/chrome.dart'; +import 'package:flutter_tools/src/web/web_validator.dart'; +import 'package:mockito/mockito.dart'; + +import '../src/common.dart'; +import '../src/testbed.dart'; + +void main() { + group('WebValidator', () { + Testbed testbed; + WebValidator webValidator; + MockPlatform mockPlatform; + + setUp(() { + testbed = Testbed(setup: () { + fs.file(kMacOSExecutable).createSync(recursive: true); + fs.file('chrome_foo').createSync(); + return null; + }, overrides: { + Platform: () => mockPlatform, + }); + webValidator = const WebValidator(); + mockPlatform = MockPlatform(); + when(mockPlatform.isMacOS).thenReturn(true); + when(mockPlatform.isWindows).thenReturn(false); + when(mockPlatform.isLinux).thenReturn(false); + }); + + test('Can find macOS executable ', () => testbed.run(() async { + final ValidationResult result = await webValidator.validate(); + expect(result.type, ValidationType.installed); + })); + + test('Can notice missing macOS executable ', () => testbed.run(() async { + fs.file(kMacOSExecutable).deleteSync(); + final ValidationResult result = await webValidator.validate(); + expect(result.type, ValidationType.missing); + })); + }); +} + +class MockPlatform extends Mock implements Platform { + @override + Map get environment => const {}; +} diff --git a/packages/flutter_tools/test/web/workflow_test.dart b/packages/flutter_tools/test/web/workflow_test.dart new file mode 100644 index 0000000000..d9660e0f13 --- /dev/null +++ b/packages/flutter_tools/test/web/workflow_test.dart @@ -0,0 +1,140 @@ +// Copyright 2019 The Chromium 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_tools/src/base/file_system.dart'; +import 'package:flutter_tools/src/base/platform.dart'; +import 'package:flutter_tools/src/version.dart'; +import 'package:flutter_tools/src/web/chrome.dart'; +import 'package:flutter_tools/src/web/workflow.dart'; +import 'package:mockito/mockito.dart'; +import 'package:process/process.dart'; + +import '../src/common.dart'; +import '../src/context.dart'; +import '../src/testbed.dart'; + +void main() { + group('WebWorkflow', () { + Testbed testbed; + MockPlatform noEnvironment; + MockPlatform notSupported; + MockPlatform windows; + MockPlatform linux; + MockPlatform macos; + MockProcessManager mockProcessManager; + MockFlutterVersion unstable; + MockFlutterVersion stable; + WebWorkflow workflow; + + setUpAll(() { + unstable = MockFlutterVersion(false); + stable = MockFlutterVersion(true); + noEnvironment = MockPlatform(environment: const {}); + notSupported = MockPlatform(linux: false, windows: false, macos: false); + windows = MockPlatform(windows: true); + linux = MockPlatform(linux: true); + macos = MockPlatform(macos: true); + workflow = const WebWorkflow(); + mockProcessManager = MockProcessManager(); + testbed = Testbed(setup: () async { + fs.file('chrome').createSync(); + when(mockProcessManager.canRun('chrome')).thenReturn(true); + }, overrides: { + FlutterVersion: () => unstable, + ProcessManager: () => mockProcessManager, + }); + }); + + test('does not apply if FLUTTER_WEB is not true', ()=> testbed.run(() { + expect(workflow.appliesToHostPlatform, false); + expect(workflow.canLaunchDevices, false); + expect(workflow.canListDevices, false); + expect(workflow.canListEmulators, false); + }, overrides: { + Platform: () => noEnvironment, + })); + + test('Applies on Linux', () => testbed.run(() { + expect(workflow.appliesToHostPlatform, true); + expect(workflow.canLaunchDevices, true); + expect(workflow.canListDevices, true); + expect(workflow.canListEmulators, false); + }, overrides: { + Platform: () => linux, + })); + + test('Applies on macOS', () => testbed.run(() { + expect(workflow.appliesToHostPlatform, true); + expect(workflow.canLaunchDevices, true); + expect(workflow.canListDevices, true); + expect(workflow.canListEmulators, false); + }, overrides: { + Platform: () => macos, + })); + + test('Applies on Windows', () => testbed.run(() { + expect(workflow.appliesToHostPlatform, true); + expect(workflow.canLaunchDevices, true); + expect(workflow.canListDevices, true); + expect(workflow.canListEmulators, false); + }, overrides: { + Platform: () => windows, + })); + + test('does not apply on other platforms', () => testbed.run(() { + expect(workflow.appliesToHostPlatform, false); + expect(workflow.canLaunchDevices, false); + expect(workflow.canListDevices, false); + expect(workflow.canListEmulators, false); + }, overrides: { + Platform: () => notSupported, + })); + + test('does not apply on stable brnach', () => testbed.run(() { + expect(workflow.appliesToHostPlatform, false); + expect(workflow.canLaunchDevices, false); + expect(workflow.canListDevices, false); + expect(workflow.canListEmulators, false); + }, overrides: { + Platform: () => macos, + FlutterVersion: () => stable, + })); + }); +} + +class MockFlutterVersion extends Mock implements FlutterVersion { + MockFlutterVersion(this.isStable); + + @override + final bool isStable; +} + +class MockProcessManager extends Mock implements ProcessManager {} + +class MockPlatform extends Mock implements Platform { + MockPlatform( + {this.windows = false, + this.macos = false, + this.linux = false, + this.environment = const { + 'FLUTTER_WEB': 'true', + kChromeEnvironment: 'chrome', + }}); + + final bool windows; + final bool macos; + final bool linux; + + @override + final Map environment; + + @override + bool get isLinux => linux; + + @override + bool get isMacOS => macos; + + @override + bool get isWindows => windows; +} diff --git a/packages/fuchsia_remote_debug_protocol/pubspec.yaml b/packages/fuchsia_remote_debug_protocol/pubspec.yaml index 67b6225b96..c5cbdba3be 100644 --- a/packages/fuchsia_remote_debug_protocol/pubspec.yaml +++ b/packages/fuchsia_remote_debug_protocol/pubspec.yaml @@ -42,6 +42,6 @@ dependencies: vm_service_client: 0.2.6+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" dev_dependencies: - mockito: 4.0.0 + mockito: 4.1.0 -# PUBSPEC CHECKSUM: b48d +# PUBSPEC CHECKSUM: ef8e