From d0cdfa41764a60024fe07a2ead3bb764393d756c Mon Sep 17 00:00:00 2001 From: Jonah Williams Date: Wed, 28 Oct 2020 17:31:44 -0700 Subject: [PATCH] [flutter_tools] enable web integration tests (#69114) * [flutter_tools] stage web integration tests --- .../debugger_stepping_web_test.dart | 2 +- .../expression_evaluation_web_test.dart | 20 +++---- .../hot_reload_web_test.dart | 52 +++++++++++++++++++ .../test_data/stepping_project.dart | 4 +- .../test/integration.shard/web_run_test.dart | 2 +- 5 files changed, 66 insertions(+), 14 deletions(-) create mode 100644 packages/flutter_tools/test/integration.shard/hot_reload_web_test.dart diff --git a/packages/flutter_tools/test/integration.shard/debugger_stepping_web_test.dart b/packages/flutter_tools/test/integration.shard/debugger_stepping_web_test.dart index 280e2253f5..6ab2ec0536 100644 --- a/packages/flutter_tools/test/integration.shard/debugger_stepping_web_test.dart +++ b/packages/flutter_tools/test/integration.shard/debugger_stepping_web_test.dart @@ -46,7 +46,7 @@ void main() { reason: 'After $i steps, debugger should stop at $expectedLine but stopped at $actualLine' ); } - }, skip: true); // https://github.com/flutter/flutter/issues/62889 + }, skip: platform.isMacOS); tearDown(() async { await flutter.stop(); diff --git a/packages/flutter_tools/test/integration.shard/expression_evaluation_web_test.dart b/packages/flutter_tools/test/integration.shard/expression_evaluation_web_test.dart index b3dbb86183..7800ab9687 100644 --- a/packages/flutter_tools/test/integration.shard/expression_evaluation_web_test.dart +++ b/packages/flutter_tools/test/integration.shard/expression_evaluation_web_test.dart @@ -57,7 +57,7 @@ void batch1() { await breakInTopLevelFunction(_flutter); await failToEvaluateExpression(_flutter); await cleanProject(); - }, skip: 'CI not setup for web tests'); // https://github.com/flutter/flutter/issues/53779 + }, skip: platform.isMacOS); testWithoutContext('flutter run expression evaluation - no native javascript objects in static scope', () async { await initProject(); @@ -65,7 +65,7 @@ void batch1() { await breakInTopLevelFunction(_flutter); await checkStaticScope(_flutter); await cleanProject(); - }, skip: 'CI not setup for web tests'); // https://github.com/flutter/flutter/issues/53779 + }, skip: platform.isMacOS); testWithoutContext('flutter run expression evaluation - can handle compilation errors', () async { await initProject(); @@ -73,7 +73,7 @@ void batch1() { await breakInTopLevelFunction(_flutter); await evaluateErrorExpressions(_flutter); await cleanProject(); - }, skip: 'CI not setup for web tests'); // https://github.com/flutter/flutter/issues/53779 + }, skip: platform.isMacOS); testWithoutContext('flutter run expression evaluation - can evaluate trivial expressions in top level function', () async { await initProject(); @@ -81,7 +81,7 @@ void batch1() { await breakInTopLevelFunction(_flutter); await evaluateTrivialExpressions(_flutter); await cleanProject(); - }, skip: 'CI not setup for web tests'); // https://github.com/flutter/flutter/issues/53779 + }, skip: platform.isMacOS); testWithoutContext('flutter run expression evaluation - can evaluate trivial expressions in build method', () async { await initProject(); @@ -89,7 +89,7 @@ void batch1() { await breakInBuildMethod(_flutter); await evaluateTrivialExpressions(_flutter); await cleanProject(); - }, skip: 'CI not setup for web tests'); // https://github.com/flutter/flutter/issues/53779 + }, skip: platform.isMacOS); testWithoutContext('flutter run expression evaluation - can evaluate complex expressions in top level function', () async { await initProject(); @@ -97,7 +97,7 @@ void batch1() { await breakInTopLevelFunction(_flutter); await evaluateComplexExpressions(_flutter); await cleanProject(); - }, skip: 'CI not setup for web tests'); // https://github.com/flutter/flutter/issues/53779 + }, skip: platform.isMacOS); testWithoutContext('flutter run expression evaluation - can evaluate complex expressions in build method', () async { await initProject(); @@ -105,7 +105,7 @@ void batch1() { await breakInBuildMethod(_flutter); await evaluateComplexExpressions(_flutter); await cleanProject(); - }, skip: 'CI not setup for web tests'); // https://github.com/flutter/flutter/issues/53779 + }, skip: platform.isMacOS); } void batch2() { @@ -149,7 +149,7 @@ void batch2() { await breakInMethod(_flutter); await failToEvaluateExpression(_flutter); await cleanProject(); - }, skip: 'CI not setup for web tests'); // https://github.com/flutter/flutter/issues/53779 + }, skip: platform.isMacOS); testWithoutContext('flutter test expression evaluation - can evaluate trivial expressions in a test', () async { await initProject(); @@ -157,7 +157,7 @@ void batch2() { await breakInMethod(_flutter); await evaluateTrivialExpressions(_flutter); await cleanProject(); - }, skip: 'CI not setup for web tests'); // https://github.com/flutter/flutter/issues/53779 + }, skip: platform.isMacOS); testWithoutContext('flutter test expression evaluation - can evaluate complex expressions in a test', () async { await initProject(); @@ -165,7 +165,7 @@ void batch2() { await breakInMethod(_flutter); await evaluateComplexExpressions(_flutter); await cleanProject(); - }, skip: 'CI not setup for web tests'); // https://github.com/flutter/flutter/issues/53779 + }, skip: platform.isMacOS); } Future failToEvaluateExpression(FlutterTestDriver flutter) async { diff --git a/packages/flutter_tools/test/integration.shard/hot_reload_web_test.dart b/packages/flutter_tools/test/integration.shard/hot_reload_web_test.dart new file mode 100644 index 0000000000..1bdf2a89b2 --- /dev/null +++ b/packages/flutter_tools/test/integration.shard/hot_reload_web_test.dart @@ -0,0 +1,52 @@ +// 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:async'; + +import 'package:file/file.dart'; + +import '../src/common.dart'; +import 'test_data/hot_reload_project.dart'; +import 'test_driver.dart'; +import 'test_utils.dart'; + +void main() { + Directory tempDir; + final HotReloadProject project = HotReloadProject(); + FlutterRunTestDriver flutter; + + setUp(() async { + tempDir = createResolvedTempDirectorySync('hot_reload_test.'); + await project.setUpIn(tempDir); + flutter = FlutterRunTestDriver(tempDir); + }); + + tearDown(() async { + await flutter?.stop(); + tryToDelete(tempDir); + }); + + testWithoutContext('hot restart works without error', () async { + await flutter.run(chrome: true); + await flutter.hotRestart(); + }, skip: platform.isMacOS); + + testWithoutContext('newly added code executes during hot restart', () async { + final Completer completer = Completer(); + final StreamSubscription subscription = flutter.stdout.listen((String line) { + print(line); + if (line.contains('(((((RELOAD WORKED)))))')) { + completer.complete(); + } + }); + await flutter.run(chrome: true); + project.uncommentHotReloadPrint(); + try { + await flutter.hotRestart(); + await completer.future; + } finally { + await subscription.cancel(); + } + }, skip: platform.isMacOS); +} diff --git a/packages/flutter_tools/test/integration.shard/test_data/stepping_project.dart b/packages/flutter_tools/test/integration.shard/test_data/stepping_project.dart index ddccb329fe..21b49346eb 100644 --- a/packages/flutter_tools/test/integration.shard/test_data/stepping_project.dart +++ b/packages/flutter_tools/test/integration.shard/test_data/stepping_project.dart @@ -89,8 +89,8 @@ class WebSteppingProject extends Project { Future doAsyncStuff() async { print("test"); // BREAKPOINT - await new Future.value(true); // STEP 1 // STEP 2 - await new Future.microtask(() => true); + await new Future.value(true); // STEP 1 + await new Future.microtask(() => true); // STEP 2 await new Future.delayed(const Duration(milliseconds: 1)); // STEP 3 print("done!"); // STEP 4 } // STEP 5 diff --git a/packages/flutter_tools/test/integration.shard/web_run_test.dart b/packages/flutter_tools/test/integration.shard/web_run_test.dart index b776f7ea0a..ae0a6b4526 100644 --- a/packages/flutter_tools/test/integration.shard/web_run_test.dart +++ b/packages/flutter_tools/test/integration.shard/web_run_test.dart @@ -27,5 +27,5 @@ void main() { testWithoutContext('flutter run works on web devices with a unary main function', () async { await flutter.run(chrome: true); - }, skip: 'Web CI skipped'); + }, skip: platform.isMacOS); }