Unverified Commit 6884086e authored by Jonah Williams's avatar Jonah Williams Committed by GitHub

[flutter_tools] Update to latest dwds APIs (#51004)

Update to latest dwds APIs, moving back to dwds driven hot restart and enabling future work on expression evaluation.
parent 6990b8b2
......@@ -168,6 +168,7 @@ task:
# 6 CPUs, and needed at least 8G of RAM to not run out of memory.
CPU: 6
MEMORY: 8G
CHROME_NO_SANDBOX: true
script:
- dart --enable-asserts ./dev/bots/test.dart
......
......@@ -62,7 +62,7 @@ dependencies:
test_core: 0.3.3 # 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"
vector_math: 2.0.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service: 3.0.0+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
watcher: 0.9.7+14 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
web_socket_channel: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
webkit_inspection_protocol: 0.5.0+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
......@@ -74,4 +74,4 @@ flutter:
assets:
- icon/
# PUBSPEC CHECKSUM: f833
# PUBSPEC CHECKSUM: fb8f
......@@ -81,7 +81,7 @@ dev_dependencies:
string_scanner: 1.0.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
test_api: 0.2.15 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
test_core: 0.3.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service: 3.0.0+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
watcher: 0.9.7+14 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
webkit_inspection_protocol: 0.5.0+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
xml: 3.5.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
......@@ -93,4 +93,4 @@ flutter:
- packages/flutter_gallery_assets/people/square/ali.png
- packages/flutter_gallery_assets/places/india_chettinad_silk_maker.png
# PUBSPEC CHECKSUM: 2d9e
# PUBSPEC CHECKSUM: b0fa
......@@ -81,7 +81,7 @@ dev_dependencies:
string_scanner: 1.0.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
test_api: 0.2.15 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
test_core: 0.3.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service: 3.0.0+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
watcher: 0.9.7+14 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
webkit_inspection_protocol: 0.5.0+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
xml: 3.5.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
......@@ -94,4 +94,4 @@ flutter:
- packages/flutter_gallery_assets/food/cherry_pie.png
- assets/999x1000.png
# PUBSPEC CHECKSUM: 2d9e
# PUBSPEC CHECKSUM: b0fa
......@@ -69,7 +69,7 @@ dependencies:
test_core: 0.3.3 # 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"
vector_math: 2.0.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service: 3.0.0+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
watcher: 0.9.7+14 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
web_socket_channel: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
webkit_inspection_protocol: 0.5.0+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
......@@ -79,4 +79,4 @@ dependencies:
flutter:
uses-material-design: true
# PUBSPEC CHECKSUM: 208d
# PUBSPEC CHECKSUM: 8ce9
......@@ -78,7 +78,7 @@ dev_dependencies:
sync_http: 0.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
test_api: 0.2.15 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
test_core: 0.3.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service: 3.0.0+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service_client: 0.2.6+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
web_socket_channel: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
webdriver: 2.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
......@@ -88,4 +88,4 @@ dev_dependencies:
flutter:
uses-material-design: true
# PUBSPEC CHECKSUM: e4c1
# PUBSPEC CHECKSUM: f41e
......@@ -66,7 +66,7 @@ dependencies:
term_glyph: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
test_core: 0.3.3 # 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"
vm_service: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service: 3.0.0+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service_client: 0.2.6+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
watcher: 0.9.7+14 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
web_socket_channel: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
......@@ -78,4 +78,4 @@ dev_dependencies:
mockito: 4.1.1
test_api: 0.2.15
# PUBSPEC CHECKSUM: 4b59
# PUBSPEC CHECKSUM: 96b5
......@@ -278,11 +278,15 @@ Future<void> _runToolTests() async {
final String suffix = Platform.isWindows && subshard == 'commands'
? 'permeable'
: '';
// Only linux has Chrome installed and is running web integration tests.
// See `_pubRunTest` for more information.
final bool forceSingleCore = Platform.isLinux && subshard == 'integration';
await _pubRunTest(
toolsPath,
testPaths: <String>[path.join(kTest, '$subshard$kDotShard', suffix)],
tableData: bigqueryApi?.tabledata,
enableFlutterToolAsserts: true,
forceSingleCore: forceSingleCore,
);
},
);
......@@ -718,6 +722,7 @@ Future<void> _pubRunTest(String workingDirectory, {
bool useBuildRunner = false,
String coverage,
bq.TabledataResourceApi tableData,
bool forceSingleCore = false,
}) async {
int cpus;
final String cpuVariable = Platform.environment['CPU']; // CPU is set in cirrus.yml
......@@ -731,6 +736,11 @@ Future<void> _pubRunTest(String workingDirectory, {
} else {
cpus = 2; // Don't default to 1, otherwise we won't catch race conditions.
}
// Integration tests that depend on external processes like chrome
// can get stuck if there are multiple instances running at once.
if (forceSingleCore) {
cpus = 1;
}
final List<String> args = <String>[
'run',
......
......@@ -72,9 +72,9 @@ dev_dependencies:
string_scanner: 1.0.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
test_api: 0.2.15 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
test_core: 0.3.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service: 3.0.0+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
watcher: 0.9.7+14 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
webkit_inspection_protocol: 0.5.0+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
yaml: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
# PUBSPEC CHECKSUM: f7b1
# PUBSPEC CHECKSUM: a40e
......@@ -20,7 +20,7 @@ dependencies:
flutter:
sdk: flutter
# This plugin is using Android Embedding 1
battery: 0.3.1+8
battery: 0.3.1+9
# TODO(egarciad): Add a plugin that uses Android Embedding 2
# The following adds the Cupertino Icons font to your application.
......@@ -99,4 +99,4 @@ flutter:
# For details regarding fonts from package dependencies,
# see https://flutter.dev/custom-fonts/#from-packages
# PUBSPEC CHECKSUM: cfe7
# PUBSPEC CHECKSUM: 7fe8
......@@ -60,7 +60,7 @@ dependencies:
test_core: 0.3.3 # 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"
vector_math: 2.0.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service: 3.0.0+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service_client: 0.2.6+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
watcher: 0.9.7+14 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
web_socket_channel: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
......@@ -71,4 +71,4 @@ dependencies:
flutter:
uses-material-design: true
# PUBSPEC CHECKSUM: 29b8
# PUBSPEC CHECKSUM: 6415
......@@ -93,7 +93,7 @@ dev_dependencies:
term_glyph: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
test_api: 0.2.15 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
test_core: 0.3.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service: 3.0.0+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service_client: 0.2.6+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
watcher: 0.9.7+14 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
web_socket_channel: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
......@@ -140,4 +140,4 @@ flutter:
# For details regarding fonts from package dependencies,
# see https://flutter.dev/custom-fonts/#from-packages
# PUBSPEC CHECKSUM: 3345
# PUBSPEC CHECKSUM: 51a1
......@@ -93,7 +93,7 @@ dev_dependencies:
term_glyph: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
test_api: 0.2.15 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
test_core: 0.3.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service: 3.0.0+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service_client: 0.2.6+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
watcher: 0.9.7+14 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
web_socket_channel: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
......@@ -140,4 +140,4 @@ flutter:
# For details regarding fonts from package dependencies,
# see https://flutter.dev/custom-fonts/#from-packages
# PUBSPEC CHECKSUM: 3345
# PUBSPEC CHECKSUM: 51a1
......@@ -82,7 +82,7 @@ dev_dependencies:
string_scanner: 1.0.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
test_api: 0.2.15 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
test_core: 0.3.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service: 3.0.0+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
watcher: 0.9.7+14 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
webkit_inspection_protocol: 0.5.0+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
xml: 3.5.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
......@@ -91,4 +91,4 @@ dev_dependencies:
flutter:
uses-material-design: true
# PUBSPEC CHECKSUM: dcb9
# PUBSPEC CHECKSUM: cc16
......@@ -64,7 +64,7 @@ dependencies:
test_core: 0.3.3 # 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"
vector_math: 2.0.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service: 3.0.0+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service_client: 0.2.6+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
watcher: 0.9.7+14 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
web_socket_channel: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
......@@ -75,4 +75,4 @@ dependencies:
flutter:
uses-material-design: true
# PUBSPEC CHECKSUM: 29b8
# PUBSPEC CHECKSUM: 6415
......@@ -70,7 +70,7 @@ dev_dependencies:
string_scanner: 1.0.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
test_api: 0.2.15 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
test_core: 0.3.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service: 3.0.0+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
watcher: 0.9.7+14 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
webkit_inspection_protocol: 0.5.0+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
yaml: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
......@@ -82,4 +82,4 @@ builders:
flutter:
uses-material-design: true
# PUBSPEC CHECKSUM: 29b8
# PUBSPEC CHECKSUM: 6415
......@@ -64,7 +64,7 @@ dependencies:
test_core: 0.3.3 # 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"
vector_math: 2.0.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service: 3.0.0+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service_client: 0.2.6+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
watcher: 0.9.7+14 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
web_socket_channel: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
......@@ -75,4 +75,4 @@ dependencies:
flutter:
uses-material-design: true
# PUBSPEC CHECKSUM: 29b8
# PUBSPEC CHECKSUM: 6415
......@@ -64,7 +64,7 @@ dependencies:
test_core: 0.3.3 # 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"
vector_math: 2.0.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service: 3.0.0+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service_client: 0.2.6+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
watcher: 0.9.7+14 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
web_socket_channel: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
......@@ -75,4 +75,4 @@ dependencies:
flutter:
uses-material-design: true
# PUBSPEC CHECKSUM: 29b8
# PUBSPEC CHECKSUM: 6415
......@@ -71,7 +71,7 @@ dev_dependencies:
string_scanner: 1.0.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
test_api: 0.2.15 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
test_core: 0.3.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service: 3.0.0+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
watcher: 0.9.7+14 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
webkit_inspection_protocol: 0.5.0+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
yaml: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
......@@ -81,4 +81,4 @@ flutter:
assets:
- assets/
# PUBSPEC CHECKSUM: 8f87
# PUBSPEC CHECKSUM: 06e3
......@@ -94,7 +94,7 @@ dev_dependencies:
sync_http: 0.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
test_api: 0.2.15 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
test_core: 0.3.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service: 3.0.0+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service_client: 0.2.6+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
watcher: 0.9.7+14 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
web_socket_channel: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
......@@ -274,4 +274,4 @@ flutter:
- asset: packages/flutter_gallery_assets/fonts/merriweather/Merriweather-Regular.ttf
- asset: packages/flutter_gallery_assets/fonts/merriweather/Merriweather-Light.ttf
# PUBSPEC CHECKSUM: eaa8
# PUBSPEC CHECKSUM: 9605
......@@ -54,7 +54,7 @@ dependencies:
test_core: 0.3.3 # 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"
vector_math: 2.0.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service: 3.0.0+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
watcher: 0.9.7+14 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
web_socket_channel: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
webkit_inspection_protocol: 0.5.0+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
......@@ -63,4 +63,4 @@ dependencies:
flutter:
uses-material-design: true
# PUBSPEC CHECKSUM: e232
# PUBSPEC CHECKSUM: 318e
......@@ -72,7 +72,7 @@ dev_dependencies:
term_glyph: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
test_api: 0.2.15 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
test_core: 0.3.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service: 3.0.0+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service_client: 0.2.6+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
watcher: 0.9.7+14 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
web_socket_channel: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
......@@ -88,4 +88,4 @@ flutter:
# the material Icons class.
uses-material-design: true
# PUBSPEC CHECKSUM: 509f
# PUBSPEC CHECKSUM: d7fb
......@@ -64,7 +64,7 @@ dependencies:
test_core: 0.3.3 # 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"
vector_math: 2.0.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service: 3.0.0+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service_client: 0.2.6+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
watcher: 0.9.7+14 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
web_socket_channel: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
......@@ -75,4 +75,4 @@ dependencies:
flutter:
uses-material-design: true
# PUBSPEC CHECKSUM: 29b8
# PUBSPEC CHECKSUM: 6415
......@@ -65,7 +65,7 @@ dependencies:
test_core: 0.3.3 # 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"
vector_math: 2.0.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service: 3.0.0+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service_client: 0.2.6+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
watcher: 0.9.7+14 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
web_socket_channel: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
......@@ -84,4 +84,4 @@ dev_dependencies:
flutter:
uses-material-design: true
# PUBSPEC CHECKSUM: 509f
# PUBSPEC CHECKSUM: d7fb
......@@ -32,8 +32,8 @@ const List<StackFrame> expectedDebugStackFrames = <StackFrame>[
StackFrame(
number: -1,
packageScheme: 'package',
package: 'web_integration',
packagePath: 'stack_trace.dart',
package: 'packages',
packagePath: 'web_integration/stack_trace.dart',
line: 121,
column: 3,
className: '<unknown>',
......@@ -43,8 +43,8 @@ const List<StackFrame> expectedDebugStackFrames = <StackFrame>[
StackFrame(
number: -1,
packageScheme: 'package',
package: 'web_integration',
packagePath: 'stack_trace.dart',
package: 'packages',
packagePath: 'web_integration/stack_trace.dart',
line: 116,
column: 3,
className: '<unknown>',
......@@ -54,8 +54,8 @@ const List<StackFrame> expectedDebugStackFrames = <StackFrame>[
StackFrame(
number: -1,
packageScheme: 'package',
package: 'web_integration',
packagePath: 'stack_trace.dart',
package: 'packages',
packagePath: 'web_integration/stack_trace.dart',
line: 111,
column: 3,
className: '<unknown>',
......
......@@ -68,7 +68,7 @@ dev_dependencies:
stream_channel: 2.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
test_api: 0.2.15 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
test_core: 0.3.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service: 3.0.0+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
web_socket_channel: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
webkit_inspection_protocol: 0.5.0+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
......@@ -101,4 +101,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: cf3c
# PUBSPEC CHECKSUM: 4698
......@@ -63,10 +63,10 @@ dev_dependencies:
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"
test_core: 0.3.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service: 3.0.0+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
watcher: 0.9.7+14 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
web_socket_channel: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
webkit_inspection_protocol: 0.5.0+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
yaml: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
# PUBSPEC CHECKSUM: 53fb
# PUBSPEC CHECKSUM: c858
......@@ -72,7 +72,7 @@ dev_dependencies:
term_glyph: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
test_api: 0.2.15 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
test_core: 0.3.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service: 3.0.0+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service_client: 0.2.6+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
watcher: 0.9.7+14 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
web_socket_channel: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
......@@ -84,4 +84,4 @@ dev_dependencies:
flutter:
uses-material-design: true
# PUBSPEC CHECKSUM: 509f
# PUBSPEC CHECKSUM: d7fb
......@@ -71,7 +71,7 @@ dev_dependencies:
term_glyph: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
test_api: 0.2.15 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
test_core: 0.3.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service: 3.0.0+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service_client: 0.2.6+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
watcher: 0.9.7+14 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
web_socket_channel: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
......@@ -80,4 +80,4 @@ dev_dependencies:
xml: 3.5.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
yaml: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
# PUBSPEC CHECKSUM: 509f
# PUBSPEC CHECKSUM: d7fb
......@@ -71,7 +71,7 @@ dev_dependencies:
term_glyph: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
test_api: 0.2.15 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
test_core: 0.3.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service: 3.0.0+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service_client: 0.2.6+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
watcher: 0.9.7+14 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
web_socket_channel: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
......@@ -83,4 +83,4 @@ dev_dependencies:
flutter:
uses-material-design: true
# PUBSPEC CHECKSUM: 509f
# PUBSPEC CHECKSUM: d7fb
......@@ -71,7 +71,7 @@ dev_dependencies:
term_glyph: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
test_api: 0.2.15 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
test_core: 0.3.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service: 3.0.0+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service_client: 0.2.6+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
watcher: 0.9.7+14 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
web_socket_channel: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
......@@ -83,4 +83,4 @@ dev_dependencies:
flutter:
uses-material-design: true
# PUBSPEC CHECKSUM: 509f
# PUBSPEC CHECKSUM: d7fb
......@@ -85,7 +85,7 @@ dependencies:
test: 1.14.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
timing: 0.1.1+2 # 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"
vm_service: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service: 3.0.0+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
watcher: 0.9.7+14 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
web_socket_channel: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
webkit_inspection_protocol: 0.5.0+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
......@@ -95,4 +95,4 @@ dartdoc:
# Exclude this package from the hosted API docs.
nodoc: true
# PUBSPEC CHECKSUM: a925
# PUBSPEC CHECKSUM: c381
......@@ -103,9 +103,11 @@ class StackFrame {
}
static StackFrame _parseWebDebugFrame(String line) {
// This RegExp is only partially correct for flutter run/test differences.
// https://github.com/flutter/flutter/issues/52685
final bool hasPackage = line.startsWith('package');
final RegExp parser = hasPackage
? RegExp(r'^(package:.+) (\d+):(\d+)\s+(.+)$')
? RegExp(r'^(package.+) (\d+):(\d+)\s+(.+)$')
: RegExp(r'^(.+) (\d+):(\d+)\s+(.+)$');
final Match match = parser.firstMatch(line);
assert(match != null, 'Expected $line to match $parser.');
......
......@@ -41,12 +41,37 @@ import '../web/chrome.dart';
/// This is only used in development mode.
class WebAssetServer implements AssetReader {
@visibleForTesting
WebAssetServer(this._httpServer, this._packages, this.internetAddress);
WebAssetServer(
this._httpServer,
this._packages,
this.internetAddress,
this._modules,
this._digests,
);
// Fallback to "application/octet-stream" on null which
// makes no claims as to the structure of the data.
static const String _kDefaultMimeType = 'application/octet-stream';
final Map<String, String> _modules;
final Map<String, String> _digests;
void performRestart(List<String> modules) {
for (final String module in modules) {
// We skip computing the digest by using the hashCode of the underlying buffer.
// Whenever a file is updated, the corresponding Uint8List.view it corresponds
// to will change.
final String moduleName = module.startsWith('/')
? module.substring(1)
: module;
final String name = moduleName.replaceAll('.lib.js', '');
final String path = moduleName.replaceAll('.js', '');
_modules[name] = path;
_digests[name] = _files[moduleName].hashCode.toString();
}
}
/// Start the web asset server on a [hostname] and [port].
///
/// If [testMode] is true, do not actually initialize dwds or the shelf static
......@@ -70,7 +95,15 @@ class WebAssetServer implements AssetReader {
// ignore: deprecated_member_use
final Packages packages = await loadPackagesFile(
Uri.base.resolve('.packages'), loader: (Uri uri) => globals.fs.file(uri).readAsBytes());
final WebAssetServer server = WebAssetServer(httpServer, packages, address);
final Map<String, String> digests = <String, String>{};
final Map<String, String> modules = <String, String>{};
final WebAssetServer server = WebAssetServer(
httpServer,
packages,
address,
modules,
digests,
);
if (testMode) {
return server;
}
......@@ -92,7 +125,13 @@ class WebAssetServer implements AssetReader {
urlEncoder: urlTunneller,
enableDebugging: true,
serveDevTools: false,
logWriter: (Level logLevel, String message) => globals.printTrace(message)
logWriter: (Level logLevel, String message) => globals.printTrace(message),
loadStrategy: RequireStrategy(
ReloadConfiguration.none,
'.lib.js',
(String path) async => modules,
(String path) async => digests,
),
);
shelf.Pipeline pipeline = const shelf.Pipeline();
if (enableDwds) {
......@@ -132,6 +171,7 @@ class WebAssetServer implements AssetReader {
// handle requests for JavaScript source, dart sources maps, or asset files.
@visibleForTesting
Future<shelf.Response> handleRequest(shelf.Request request) async {
final String requestPath = request.url.path;
final Map<String, String> headers = <String, String>{};
// If the response is `/`, then we are requesting the index file.
if (request.url.path == '/' || request.url.path.isEmpty) {
......@@ -150,11 +190,6 @@ class WebAssetServer implements AssetReader {
final String ifNoneMatch = request.headers[HttpHeaders.ifNoneMatchHeader];
headers[HttpHeaders.cacheControlHeader] = 'max-age=0, must-revalidate';
// NOTE: shelf removes leading `/` for some reason.
final String requestPath = request.url.path.startsWith('/')
? request.url.path
: '/${request.url.path}';
// If this is a JavaScript file, it must be in the in-memory cache.
// Attempt to look up the file by URI.
if (_files.containsKey(requestPath)) {
......@@ -191,13 +226,13 @@ class WebAssetServer implements AssetReader {
// Try and resolve the path relative to the built asset directory.
if (!file.existsSync()) {
final Uri potential = globals.fs.directory(getAssetBuildDirectory())
.uri.resolve(requestPath.replaceFirst('/assets/', ''));
.uri.resolve(requestPath.replaceFirst('assets/', ''));
file = globals.fs.file(potential);
}
if (!file.existsSync()) {
final String webPath = globals.fs.path.join(
globals.fs.currentDirectory.childDirectory('web').path, requestPath.substring(1));
globals.fs.currentDirectory.childDirectory('web').path, requestPath);
file = globals.fs.file(webPath);
}
......@@ -272,7 +307,10 @@ class WebAssetServer implements AssetReader {
codeStart,
codeEnd - codeStart,
);
_files[filePath] = byteView;
final String fileName = filePath.startsWith('/')
? filePath.substring(1)
: filePath;
_files[fileName] = byteView;
final int sourcemapStart = sourcemapOffsets[0];
final int sourcemapEnd = sourcemapOffsets[1];
......@@ -285,9 +323,10 @@ class WebAssetServer implements AssetReader {
sourcemapStart,
sourcemapEnd - sourcemapStart,
);
_sourcemaps['$filePath.map'] = sourcemapView;
final String sourcemapName = '$fileName.map';
_sourcemaps[sourcemapName] = sourcemapView;
modules.add(filePath);
modules.add(fileName);
}
return modules;
}
......@@ -331,11 +370,11 @@ class WebAssetServer implements AssetReader {
File _resolveDartFile(String path) {
// Return the actual file objects so that local engine changes are automatically picked up.
switch (path) {
case '/dart_sdk.js':
case 'dart_sdk.js':
return canvasKitRendering
? canvasKitDartSdk
: dartSdk;
case '/dart_sdk.js.map':
case 'dart_sdk.js.map':
return canvasKitRendering
? canvasKitDartSdkSourcemap
: dartSdkSourcemap;
......@@ -382,7 +421,13 @@ class WebAssetServer implements AssetReader {
}
@override
Future<String> dartSourceContents(String serverPath) {
Future<String> dartSourceContents(String serverPath) async {
// TODO(jonahwilliams): ensure devtools can correctly hide this file.
final bool isEntrypointRequest = serverPath == null || serverPath.isEmpty;
if (isEntrypointRequest) {
return '/* no sourcemaps available. */';
}
final File result = _resolveDartFile(serverPath);
if (result.existsSync()) {
return result.readAsString();
......@@ -534,28 +579,24 @@ class WebDevFS implements DevFS {
if (bundleFirstUpload) {
generator.addFileSystemRoot(outputDirectoryPath);
final String entrypoint = globals.fs.path.basename(mainPath);
webAssetServer.writeFile('/require.js', requireJS.readAsStringSync());
webAssetServer.writeFile('/dart_stack_trace_mapper.js', stackTraceMapper.readAsStringSync());
webAssetServer.writeFile('/$entrypoint', globals.fs.file(mainPath).readAsStringSync());
webAssetServer.writeFile('/manifest.json', '{"info":"manifest not generated in run mode."}');
webAssetServer.writeFile('/flutter_service_worker.js', '// Service worker not loaded in run mode.');
webAssetServer.writeFile(entrypoint, globals.fs.file(mainPath).readAsStringSync());
webAssetServer.writeFile('manifest.json', '{"info":"manifest not generated in run mode."}');
webAssetServer.writeFile('flutter_service_worker.js', '// Service worker not loaded in run mode.');
webAssetServer.writeFile('require.js', requireJS.readAsStringSync());
webAssetServer.writeFile('stack_trace_mapper.js', stackTraceMapper.readAsStringSync());
webAssetServer.writeFile(
'/main.dart.js',
'main.dart.js',
generateBootstrapScript(
requireUrl: '/require.js',
mapperUrl: '/dart_stack_trace_mapper.js',
entrypoint: '/$entrypoint.lib.js',
requireUrl: 'require.js',
mapperUrl: 'stack_trace_mapper.js',
),
);
webAssetServer.writeFile(
'/main_module.bootstrap.js',
'main_module.bootstrap.js',
generateMainModule(
entrypoint: '/$entrypoint.lib.js',
entrypoint: entrypoint,
),
);
// TODO(jonahwilliams): switch to DWDS provided APIs when they are ready.
webAssetServer.writeFile('/basic.digests', '{}');
// TODO(jonahwilliams): refactor the asset code in this and the regular devfs to
// be shared.
if (bundle != null) {
......@@ -602,7 +643,7 @@ class WebDevFS implements DevFS {
} on FileSystemException catch (err) {
throwToolExit('Failed to load recompiled sources:\n$err');
}
webAssetServer.performRestart(modules);
return UpdateFSReport(
success: true,
syncedBytes: codeFile.lengthSync(),
......
......@@ -470,7 +470,6 @@ class _ResidentWebRunner extends ResidentWebRunner {
progressId: 'hot.restart',
);
String reloadModules;
if (debuggingOptions.buildInfo.isDebug) {
// Full restart is always false for web, since the extra recompile is wasteful.
final UpdateFSReport report = await _updateDevFS(fullRestart: false);
......@@ -481,9 +480,6 @@ class _ResidentWebRunner extends ResidentWebRunner {
await device.generator.reject();
return OperationResult(1, 'Failed to recompile application.');
}
reloadModules = report.invalidatedModules
.map((String module) => '"$module"')
.join(',');
} else {
try {
await buildWeb(
......@@ -498,29 +494,22 @@ class _ResidentWebRunner extends ResidentWebRunner {
}
}
Duration transferMarker;
try {
if (!deviceIsDebuggable) {
globals.printStatus('Recompile complete. Page requires refresh.');
} else if (!debuggingOptions.buildInfo.isDebug) {
} else if (isRunningDebug) {
await _vmService.callMethod('hotRestart');
} else {
// On non-debug builds, a hard refresh is required to ensure the
// up to date sources are loaded.
await _wipConnection?.sendCommand('Page.reload', <String, Object>{
'ignoreCache': !debuggingOptions.buildInfo.isDebug,
});
} else {
transferMarker = timer.elapsed;
await _wipConnection?.debugger?.sendCommand(
'Runtime.evaluate', params: <String, Object>{
'expression': 'window.\$hotReloadHook([$reloadModules])',
'awaitPromise': true,
'returnByValue': true,
},
);
}
} on Exception catch (err) {
return OperationResult(1, err.toString(), fatal: true);
} on WipError catch (err) {
globals.printError(err.toString());
return OperationResult(1, err.toString());
return OperationResult(1, err.toString(), fatal: true);
} finally {
status.stop();
}
......@@ -539,7 +528,6 @@ class _ResidentWebRunner extends ResidentWebRunner {
fullRestart: true,
reason: reason,
overallTimeInMs: timer.elapsed.inMilliseconds,
transferTimeInMs: timer.elapsed.inMilliseconds - transferMarker.inMilliseconds
).send();
}
return OperationResult.ok;
......@@ -656,13 +644,19 @@ class _ResidentWebRunner extends ResidentWebRunner {
// Cleanup old subscriptions. These will throw if there isn't anything
// listening, which is fine because that is what we want to ensure.
try {
await _vmService.streamCancel('Stdout');
await _vmService.streamCancel(vmservice.EventStreams.kStdout);
} on vmservice.RPCError {
// It is safe to ignore this error because we expect an error to be
// thrown if we're not already subscribed.
}
try {
await _vmService.streamListen(vmservice.EventStreams.kStdout);
} on vmservice.RPCError {
// It is safe to ignore this error because we expect an error to be
// thrown if we're not already subscribed.
}
try {
await _vmService.streamListen('Stdout');
await _vmService.streamListen(vmservice.EventStreams.kIsolate);
} on vmservice.RPCError {
// It is safe to ignore this error because we expect an error to be
// thrown if we're not already subscribed.
......@@ -677,8 +671,6 @@ class _ResidentWebRunner extends ResidentWebRunner {
await restart(benchmarkMode: false, pause: pause, fullRestart: false);
return <String, Object>{'type': 'Success'};
});
// Note: can't register our own hot restart hook. Would be fixed by moving
// to DWDS digests.
websocketUri = Uri.parse(_connectionResult.debugConnection.uri);
// Always run main after connecting because start paused doesn't work yet.
......
......@@ -656,6 +656,10 @@ class DefaultResidentCompiler implements ResidentCompiler {
sdkRoot,
'--incremental',
'--target=$targetModel',
// TODO(jonahwilliams): remove once this becomes the default behavior
// in the frontend_server.
// https://github.com/flutter/flutter/issues/52693
'--debugger-module-names',
'-Ddart.developer.causal_async_stacks=${buildMode == BuildMode.debug}',
for (final Object dartDefine in dartDefines)
'-D$dartDefine',
......
......@@ -190,7 +190,7 @@ class _FlutterTestRunnerImpl implements FlutterTestRunner {
return exitCode;
} finally {
globals.fs.currentDirectory = saved;
globals.fs.currentDirectory = saved.path;
await platform.close();
}
}
......
......@@ -4,39 +4,6 @@
import 'package:meta/meta.dart';
// This logic is taken directly from https://github.com/dart-lang/build/blob/master/build_web_compilers/lib/src/dev_compiler_bootstrap.dart#L272
// It should be fairly stable, but is otherwise required to interact with the client.js script
// vendored with DWDS.
const String _currentDirectoryScript = r'''
var _currentDirectory = (function () {
var _url;
var lines = new Error().stack.split('\n');
function lookupUrl() {
if (lines.length > 2) {
var match = lines[1].match(/^\s+at (.+):\d+:\d+$/);
// Chrome.
if (match) return match[1];
// Chrome nested eval case.
match = lines[1].match(/^\s+at eval [(](.+):\d+:\d+[)]$/);
if (match) return match[1];
// Edge.
match = lines[1].match(/^\s+at.+\((.+):\d+:\d+\)$/);
if (match) return match[1];
// Firefox.
match = lines[0].match(/[<][@](.+):\d+:\d+$/)
if (match) return match[1];
}
// Safari.
return lines[0].match(/(.+):\d+:\d+$/)[1];
}
_url = lookupUrl();
var lastSlash = _url.lastIndexOf('/');
if (lastSlash == -1) return _url;
var currentDirectory = _url.substring(0, lastSlash + 1);
return currentDirectory;
})();
''';
/// The JavaScript bootstrap script to support in-browser hot restart.
///
/// The [requireUrl] loads our cached RequireJS script file. The [mapperUrl]
......@@ -49,7 +16,6 @@ var _currentDirectory = (function () {
String generateBootstrapScript({
@required String requireUrl,
@required String mapperUrl,
@required String entrypoint,
}) {
return '''
"use strict";
......@@ -69,34 +35,6 @@ requireEl.src = "$requireUrl";
// This attribute tells require JS what to load as main (defined below).
requireEl.setAttribute("data-main", "main_module.bootstrap");
document.head.appendChild(requireEl);
// Invoked by connected chrome debugger for hot reload/restart support.
window.\$hotReloadHook = function(modules) {
return new Promise(function(resolve, reject) {
if (modules == null) {
reject();
}
// If no modules change, return immediately.
if (modules.length == 0) {
resolve();
}
var reloadCount = 0;
for (var i = 0; i < modules.length; i++) {
require.undef(modules[i]);
require([modules[i]], function(module) {
reloadCount += 1;
// once we've reloaded every module, trigger the hot reload.
if (reloadCount == modules.length) {
require(["$entrypoint", "dart_sdk"], function(app, dart_sdk) {
// See the doc comment under in generateMainModule.
window.\$dartRunMain = app[Object.keys(app)[0]].main;
window.\$hotReload(resolve);
});
}
});
}
});
}
''';
}
......@@ -112,127 +50,33 @@ window.\$hotReloadHook = function(modules) {
/// this object is the module.
String generateMainModule({@required String entrypoint}) {
return '''/* ENTRYPOINT_EXTENTION_MARKER */
// baseUrlScript
var baseUrl = (function () {
// Attempt to detect --precompiled mode for tests, and set the base url
// appropriately, otherwise set it to '/'.
var pathParts = location.pathname.split("/");
if (pathParts[0] == "") {
pathParts.shift();
}
if (pathParts.length > 1 && pathParts[1] == "test") {
return "/" + pathParts.slice(0, 2).join("/") + "/";
}
// Attempt to detect base url using <base href> html tag
// base href should start and end with "/"
if (typeof document !== 'undefined') {
var el = document.getElementsByTagName('base');
if (el && el[0] && el[0].getAttribute("href") && el[0].getAttribute
("href").startsWith("/") && el[0].getAttribute("href").endsWith("/")){
return el[0].getAttribute("href");
}
}
// return default value
return "/";
}());
$_currentDirectoryScript
// dart loader
if(!window.\$dartLoader) {
window.\$dartLoader = {
appDigests: _currentDirectory + 'basic.digests',
moduleIdToUrl: new Map(),
urlToModuleId: new Map(),
rootDirectories: new Array(),
// Used in package:build_runner/src/server/build_updates_client/hot_reload_client.dart
moduleParentsGraph: new Map(),
moduleLoadingErrorCallbacks: new Map(),
forceLoadModule: function (moduleName, callback, onError) {
if (typeof onError != 'undefined') {
var errorCallbacks = \$dartLoader.moduleLoadingErrorCallbacks;
if (!errorCallbacks.has(moduleName)) {
errorCallbacks.set(moduleName, new Set());
}
errorCallbacks.get(moduleName).add(onError);
}
requirejs.undef(moduleName);
requirejs([moduleName], function() {
if (typeof onError != 'undefined') {
errorCallbacks.get(moduleName).delete(onError);
}
if (typeof callback != 'undefined') {
callback();
}
});
},
getModuleLibraries: null, // set up by _initializeTools
};
}
let modulePaths = {};
let customModulePaths = {};
window.\$dartLoader.rootDirectories.push(window.location.origin + baseUrl);
for (let moduleName of Object.getOwnPropertyNames(modulePaths)) {
let modulePath = modulePaths[moduleName];
if (modulePath != moduleName) {
customModulePaths[moduleName] = modulePath;
}
var src = window.location.origin + '/' + modulePath + '.js';
if (window.\$dartLoader.moduleIdToUrl.has(moduleName)) {
continue;
}
\$dartLoader.moduleIdToUrl.set(moduleName, src);
\$dartLoader.urlToModuleId.set(src, moduleName);
}
// Create the main module loaded below.
define("main_module.bootstrap", ["$entrypoint", "dart_sdk"], function(app, dart_sdk) {
dart_sdk.dart.setStartAsyncSynchronously(true);
dart_sdk._debugger.registerDevtoolsFormatter();
\$dartLoader.getModuleLibraries = dart_sdk.dart.getModuleLibraries;
if (window.\$dartStackTraceUtility && !window.\$dartStackTraceUtility.ready) {
window.\$dartStackTraceUtility.ready = true;
let dart = dart_sdk.dart;
window.\$dartStackTraceUtility.setSourceMapProvider(
function(url) {
url = url.replace(baseUrl, '/');
var module = window.\$dartLoader.urlToModuleId.get(url);
if (!module) {
if (url.endsWith('dart_sdk.js')) {
module = 'dart_sdk';
} else {
try {
module = '/packages' + url.split('packages')[1].split('.')[0] + '.dart';
} catch (e) {
return null;
}
}
}
return dart.getSourceMap(module);
});
}
if (typeof document != 'undefined') {
window.postMessage({ type: "DDC_STATE_CHANGE", state: "start" }, "*");
}
dart_sdk._isolate_helper.startRootIsolate(() => {}, []);
// See the generateMainModule doc comment.
var child = {};
child.main = app[Object.keys(app)[0]].main;
if (window.\$hotReload == null) {
window.\$hotReload = function(cb) {
dart_sdk.developer.invokeExtension("ext.flutter.disassemble", "{}").then((_) => {
dart_sdk.dart.hotRestart();
window.\$dartRunMain();
window.requestAnimationFrame(cb);
});
}
}
/* MAIN_EXTENSION_MARKER */
child.main();
});
// Require JS configuration.
require.config({
waitSeconds: 0,
window.\$dartLoader = {};
window.\$dartLoader.rootDirectories = [];
window.\$requireLoader.getModuleLibraries = dart_sdk.dart.getModuleLibraries;
if (window.\$dartStackTraceUtility && !window.\$dartStackTraceUtility.ready) {
window.\$dartStackTraceUtility.ready = true;
let dart = dart_sdk.dart;
window.\$dartStackTraceUtility.setSourceMapProvider(function(url) {
url = url.replace(window.\$dartUriBase + '/', '');
if (url == 'dart_sdk.js') {
return dart.getSourceMap('dart_sdk');
}
url = url.replace(".lib.js", "");
return dart.getSourceMap(url);
});
}
});
''';
}
......@@ -11,7 +11,7 @@ dependencies:
# To update these, use "flutter update-packages --force-upgrade".
archive: 2.0.11
args: 1.5.2
dwds: 1.0.1
dwds: 2.0.1
completion: 0.2.2
coverage: 0.13.9
crypto: 2.1.3
......@@ -45,6 +45,8 @@ dependencies:
test_api: 0.2.15
test_core: 0.3.3
vm_service: 3.0.0+1
_fe_analyzer_shared: 1.0.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
analyzer: 0.39.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
async: 2.4.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
......@@ -55,8 +57,9 @@ dependencies:
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.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
devtools: 0.1.15 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
devtools_server: 0.1.13 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
devtools: 0.2.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
devtools_server: 0.2.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
devtools_shared: 0.2.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
fixnum: 0.10.11 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
glob: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
html: 0.14.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
......@@ -90,7 +93,6 @@ 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"
uuid: 2.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
watcher: 0.9.7+14 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
dev_dependencies:
......@@ -109,4 +111,4 @@ dartdoc:
# Exclude this package from the hosted API docs.
nodoc: true
# PUBSPEC CHECKSUM: 8703
# PUBSPEC CHECKSUM: 8796
......@@ -49,14 +49,15 @@ void main() {
testUsingContext('Selects assumed port if VM service connection is successful', () async {
when(mockVmService.getVM()).thenAnswer((Invocation invocation) async {
return VM()..isolates = <IsolateRef>[
IsolateRef(),
return VM.parse(<String, Object>{})..isolates = <IsolateRef>[
IsolateRef.parse(<String, Object>{}),
];
});
when(mockVmService.getIsolate(any)).thenAnswer((Invocation invocation) async {
return Isolate()
..rootLib = (LibraryRef()..uri = 'package:hello/main.dart');
return Isolate.parse(<String, Object>{})
..rootLib = (LibraryRef(name: 'main', uri: 'package:hello/main.dart'));
});
expect(await fallbackDiscovery.discover(
assumedDevicePort: 23,
deivce: null,
......@@ -69,18 +70,18 @@ void main() {
testUsingContext('Selects assumed port when another isolate has no root library', () async {
when(mockVmService.getVM()).thenAnswer((Invocation invocation) async {
return VM()..isolates = <IsolateRef>[
IsolateRef()..id = '1',
IsolateRef()..id = '2',
return VM.parse(<String, Object>{})..isolates = <IsolateRef>[
IsolateRef.parse(<String, Object>{})..id = '1',
IsolateRef.parse(<String, Object>{})..id = '2',
];
});
when(mockVmService.getIsolate('1')).thenAnswer((Invocation invocation) async {
return Isolate()
return Isolate.parse(<String, Object>{})
..rootLib = null;
});
when(mockVmService.getIsolate('2')).thenAnswer((Invocation invocation) async {
return Isolate()
..rootLib = (LibraryRef()..uri = 'package:hello/main.dart');
return Isolate.parse(<String, Object>{})
..rootLib = (LibraryRef.parse(<String, Object>{})..uri = 'package:hello/main.dart');
});
expect(await fallbackDiscovery.discover(
assumedDevicePort: 23,
......@@ -94,12 +95,16 @@ void main() {
testUsingContext('Selects mdns discovery if VM service connecton fails due to Sentinel', () async {
when(mockVmService.getVM()).thenAnswer((Invocation invocation) async {
return VM()..isolates = <IsolateRef>[
IsolateRef(),
return VM.parse(<String, Object>{})..isolates = <IsolateRef>[
IsolateRef(
id: 'a',
name: 'isolate',
number: '1',
),
];
});
when(mockVmService.getIsolate(any)).thenAnswer((Invocation invocation) async {
return Sentinel();
return Sentinel(kind: 'Something', valueAsString: 'Something');
});
when(mockMDnsObservatoryDiscovery.getObservatoryUri(
......
......@@ -115,6 +115,11 @@ void main() {
when(mockVmService.onDebugEvent).thenAnswer((Invocation _) {
return const Stream<Event>.empty();
});
when(mockVmService.onIsolateEvent).thenAnswer((Invocation _) {
return Stream<Event>.fromIterable(<Event>[
Event(kind: EventKind.kIsolateStart, timestamp: 1),
]);
});
when(mockDebugConnection.uri).thenReturn('ws://127.0.0.1/abcd/');
when(mockFlutterDevice.devFS).thenReturn(mockWebDevFS);
when(mockWebDevFS.sources).thenReturn(<Uri>[]);
......@@ -426,7 +431,7 @@ void main() {
}));
test('web resident runner can toggle CanvasKit', () => testbed.run(() async {
final WebAssetServer webAssetServer = WebAssetServer(null, null, null);
final WebAssetServer webAssetServer = WebAssetServer(null, null, null, null, null);
when(mockWebDevFS.webAssetServer).thenReturn(webAssetServer);
expect(residentWebRunner.supportsCanvasKit, true);
......
......@@ -11,7 +11,6 @@ void main() {
final String result = generateBootstrapScript(
requireUrl: 'require.js',
mapperUrl: 'mapper.js',
entrypoint: 'foo/bar/main.js',
);
// require js source is interpolated correctly.
expect(result, contains('requireEl.src = "require.js";'));
......@@ -19,9 +18,6 @@ void main() {
expect(result, contains('mapperEl.src = "mapper.js";'));
// data-main is set to correct bootstrap module.
expect(result, contains('requireEl.setAttribute("data-main", "main_module.bootstrap");'));
// bootstrap main module has correct imports.
expect(result, contains('require(["foo/bar/main.js", "dart_sdk"],'
' function(app, dart_sdk) {'));
});
test('generateMainModule embeds urls correctly', () {
......
......@@ -51,7 +51,13 @@ void main() {
linux = FakePlatform(operatingSystem: 'linux', environment: <String, String>{});
windows = FakePlatform(operatingSystem: 'windows', environment: <String, String>{});
testbed = Testbed(setup: () {
webAssetServer = WebAssetServer(mockHttpServer, packages, InternetAddress.loopbackIPv4);
webAssetServer = WebAssetServer(
mockHttpServer,
packages,
InternetAddress.loopbackIPv4,
null,
null,
);
});
});
......@@ -103,7 +109,7 @@ void main() {
}));
test('serves JavaScript files from in memory cache not from manifest', () => testbed.run(() async {
webAssetServer.writeFile('/foo.js', 'main() {}');
webAssetServer.writeFile('foo.js', 'main() {}');
final Response response = await webAssetServer
.handleRequest(Request('GET', Uri.parse('http://foobar/foo.js')));
......@@ -118,7 +124,7 @@ void main() {
}));
test('Returns notModified when the ifNoneMatch header matches the etag', () => testbed.run(() async {
webAssetServer.writeFile('/foo.js', 'main() {}');
webAssetServer.writeFile('foo.js', 'main() {}');
final Response response = await webAssetServer
.handleRequest(Request('GET', Uri.parse('http://foobar/foo.js')));
......@@ -376,24 +382,28 @@ void main() {
invalidatedFiles: <Uri>[],
);
expect(webDevFS.webAssetServer.getFile('/require.js'), isNotNull);
expect(webDevFS.webAssetServer.getFile('/dart_stack_trace_mapper.js'), isNotNull);
expect(webDevFS.webAssetServer.getFile('/main.dart'), isNotNull);
expect(webDevFS.webAssetServer.getFile('/manifest.json'), isNotNull);
expect(webDevFS.webAssetServer.getFile('/flutter_service_worker.js'), isNotNull);
expect(await webDevFS.webAssetServer.dartSourceContents('/dart_sdk.js'), 'HELLO');
expect(await webDevFS.webAssetServer.dartSourceContents('/dart_sdk.js.map'), 'THERE');
expect(webDevFS.webAssetServer.getFile('require.js'), isNotNull);
expect(webDevFS.webAssetServer.getFile('stack_trace_mapper.js'), isNotNull);
expect(webDevFS.webAssetServer.getFile('main.dart'), isNotNull);
expect(webDevFS.webAssetServer.getFile('manifest.json'), isNotNull);
expect(webDevFS.webAssetServer.getFile('flutter_service_worker.js'), isNotNull);
expect(await webDevFS.webAssetServer.dartSourceContents('dart_sdk.js'), 'HELLO');
expect(await webDevFS.webAssetServer.dartSourceContents('dart_sdk.js.map'), 'THERE');
// Update to the SDK.
webDevFS.webAssetServer.dartSdk.writeAsStringSync('BELLOW');
// New SDK should be visible..
expect(await webDevFS.webAssetServer.dartSourceContents('/dart_sdk.js'), 'BELLOW');
expect(await webDevFS.webAssetServer.dartSourceContents('dart_sdk.js'), 'BELLOW');
// Toggle CanvasKit
webDevFS.webAssetServer.canvasKitRendering = true;
expect(await webDevFS.webAssetServer.dartSourceContents('/dart_sdk.js'), 'OL');
expect(await webDevFS.webAssetServer.dartSourceContents('/dart_sdk.js.map'), 'CHUM');
expect(await webDevFS.webAssetServer.dartSourceContents('dart_sdk.js'), 'OL');
expect(await webDevFS.webAssetServer.dartSourceContents('dart_sdk.js.map'), 'CHUM');
// Generated entrypoint.
expect(await webDevFS.webAssetServer.dartSourceContents(null),
contains('/* no sourcemaps available. */'));
await webDevFS.destroy();
}));
......
// Copyright 2014 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:io';
import 'package:file/file.dart';
import 'package:flutter_tools/src/base/file_system.dart';
import '../src/common.dart';
import 'test_data/stepping_project.dart';
import 'test_driver.dart';
import 'test_utils.dart';
void main() {
Directory tempDirectory;
FlutterRunTestDriver flutter;
setUp(() {
tempDirectory = createResolvedTempDirectorySync('debugger_stepping_test.');
});
test('Web debugger can step over statements', () async {
final WebSteppingProject _project = WebSteppingProject();
await _project.setUpIn(tempDirectory);
flutter = FlutterRunTestDriver(tempDirectory);
await flutter.run(withDebugger: true, startPaused: true, chrome: true);
await flutter.addBreakpoint(_project.breakpointUri, _project.breakpointLine);
await flutter.resume();
await flutter.waitForPause(); // Now we should be on the breakpoint.
expect((await flutter.getSourceLocation()).line, equals(_project.breakpointLine));
// Issue 5 steps, ensuring that we end up on the annotated lines each time.
for (int i = 1; i <= _project.numberOfSteps; i += 1) {
await flutter.stepOverOrOverAsyncSuspension();
final SourcePosition location = await flutter.getSourceLocation();
final int actualLine = location.line;
// Get the line we're expected to stop at by searching for the comment
// within the source code.
final int expectedLine = _project.lineForStep(i);
expect(actualLine, equals(expectedLine),
reason: 'After $i steps, debugger should stop at $expectedLine but stopped at $actualLine'
);
}
}, skip: !Platform.isLinux); // only linux shards have Chrome installed.
tearDown(() async {
await flutter.stop();
tryToDelete(tempDirectory);
});
}
......@@ -10,6 +10,17 @@ import 'package:flutter_tools/src/globals.dart' as globals;
import '../test_utils.dart';
const String _kDefaultHtml = '''
<html>
<head>
<title>Hello, World</title>
</head>
<body>
<script src="main.dart.js"></script>
</body>
</html>
''';
abstract class Project {
Directory dir;
......@@ -24,6 +35,7 @@ abstract class Project {
if (main != null) {
writeFile(globals.fs.path.join(dir.path, 'lib', 'main.dart'), main);
}
writeFile(globals.fs.path.join(dir.path, 'web', 'index.html'), _kDefaultHtml);
await getPackages(dir.path);
}
......
......@@ -57,3 +57,57 @@ class SteppingProject extends Project {
final int numberOfSteps = 8;
}
class WebSteppingProject extends Project {
@override
final String pubspec = '''
name: test
dependencies:
flutter:
sdk: flutter
''';
@override
final String main = r'''
import 'dart:async';
import 'package:flutter/material.dart';
void main() => runApp(new MyApp());
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
@override
void initState() {
doAsyncStuff();
super.initState();
}
Future<void> doAsyncStuff() async {
print("test"); // BREAKPOINT
await new Future.value(true); // STEP 1 // STEP 2
await new Future.microtask(() => true);
await new Future.delayed(const Duration(milliseconds: 1)); // STEP 3
print("done!"); // STEP 4
} // STEP 5
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: 'Flutter Demo',
home: new Container(),
);
}
}
''';
Uri get breakpointUri => mainDart;
int get breakpointLine => lineContaining(main, '// BREAKPOINT');
int lineForStep(int i) => lineContaining(main, '// STEP $i');
final int numberOfSteps = 5;
}
......@@ -105,7 +105,8 @@ abstract class FlutterTestDriver {
.followedBy(arguments)
.toList(),
workingDirectory: _projectFolder.path,
environment: <String, String>{'FLUTTER_TEST': 'true'},
// The web environment variable has the same effect as `flutter config --enable-web`.
environment: <String, String>{'FLUTTER_TEST': 'true', 'FLUTTER_WEB': 'true'},
);
// This class doesn't use the result of the future. It's made available
......@@ -114,8 +115,8 @@ abstract class FlutterTestDriver {
_debugPrint('Process exited ($code)');
_hasExited = true;
}));
transformToLines(_process.stdout).listen((String line) => _stdout.add(line));
transformToLines(_process.stderr).listen((String line) => _stderr.add(line));
transformToLines(_process.stdout).listen(_stdout.add);
transformToLines(_process.stderr).listen(_stderr.add);
// Capture stderr to a buffer so we can show it all if any requests fail.
_stderr.stream.listen(_errorBuffer.writeln);
......@@ -304,7 +305,7 @@ abstract class FlutterTestDriver {
Future<Frame> getTopStackFrame() async {
final String flutterIsolateId = await _getFlutterIsolateId();
final Stack stack = await _vmService.getStack(flutterIsolateId);
final Stack stack = await _vmService.getStack(flutterIsolateId) as Stack;
if (stack.frames.isEmpty) {
throw Exception('Stack is empty');
}
......@@ -433,15 +434,20 @@ class FlutterRunTestDriver extends FlutterTestDriver {
bool withDebugger = false,
bool startPaused = false,
bool pauseOnExceptions = false,
bool chrome = false,
File pidFile,
}) async {
await _setupProcess(
<String>[
'run',
'--disable-service-auth-codes',
if (!chrome)
'--disable-service-auth-codes',
'--machine',
'-d',
'flutter-tester',
if (chrome)
...<String>['chrome', '--web-run-headless']
else
'flutter-tester',
],
withDebugger: withDebugger,
startPaused: startPaused,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment