From 10a7bfb644057b27d538f87f72765ba29618ef6e Mon Sep 17 00:00:00 2001 From: Mouad Debbar Date: Fri, 30 Sep 2022 16:59:03 -0400 Subject: [PATCH] [web] Fix 'felt test' watch mode (flutter/engine#36423) --- .../lib/web_ui/dev/steps/run_tests_step.dart | 12 +++++----- .../flutter/lib/web_ui/dev/test_runner.dart | 22 +++++++++++++++++-- 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/engine/src/flutter/lib/web_ui/dev/steps/run_tests_step.dart b/engine/src/flutter/lib/web_ui/dev/steps/run_tests_step.dart index 97d6c8fbea..38d733a1f9 100644 --- a/engine/src/flutter/lib/web_ui/dev/steps/run_tests_step.dart +++ b/engine/src/flutter/lib/web_ui/dev/steps/run_tests_step.dart @@ -38,7 +38,7 @@ class RunTestsStep implements PipelineStep { required this.requireSkiaGold, this.testFiles, required this.overridePathToCanvasKit, - }) : _browserEnvironment = getBrowserEnvironment(browserName); + }); final String browserName; final List? testFiles; @@ -49,8 +49,6 @@ class RunTestsStep implements PipelineStep { /// Require Skia Gold to be available and reachable. final bool requireSkiaGold; - final BrowserEnvironment _browserEnvironment; - @override String get description => 'run_tests'; @@ -63,14 +61,16 @@ class RunTestsStep implements PipelineStep { @override Future run() async { await _prepareTestResultsDirectory(); - await _browserEnvironment.prepare(); + + final BrowserEnvironment browserEnvironment = getBrowserEnvironment(browserName); + await browserEnvironment.prepare(); final SkiaGoldClient? skiaClient = await _createSkiaClient(); final List testFiles = this.testFiles ?? findAllTests(); await _runTestBatch( testFiles: testFiles, - browserEnvironment: _browserEnvironment, + browserEnvironment: browserEnvironment, expectFailure: false, isDebug: isDebug, doUpdateScreenshotGoldens: doUpdateScreenshotGoldens, @@ -78,7 +78,7 @@ class RunTestsStep implements PipelineStep { overridePathToCanvasKit: overridePathToCanvasKit, ); - await _browserEnvironment.cleanup(); + await browserEnvironment.cleanup(); if (io.exitCode != 0) { throw ToolExit('Some tests failed'); diff --git a/engine/src/flutter/lib/web_ui/dev/test_runner.dart b/engine/src/flutter/lib/web_ui/dev/test_runner.dart index 8984d2f7b2..1a695c3102 100644 --- a/engine/src/flutter/lib/web_ui/dev/test_runner.dart +++ b/engine/src/flutter/lib/web_ui/dev/test_runner.dart @@ -141,12 +141,30 @@ class TestCommand extends Command with ArgUtils { overridePathToCanvasKit: overridePathToCanvasKit, ), ]); - await testPipeline.run(); + + try { + await testPipeline.run(); + if (isWatchMode) { + print(''); + print('Initial test succeeded!'); + } + } catch(error, stackTrace) { + if (isWatchMode) { + // The error is printed but not rethrown in watch mode because + // failures are expected. The idea is that the developer corrects the + // error, saves the file, and the pipeline reruns. + print(''); + print('Initial test failed!\n'); + print(error); + print(stackTrace); + } else { + rethrow; + } + } if (isWatchMode) { final FilePath dir = FilePath.fromWebUi(''); print(''); - print('Initial test run is done!'); print( 'Watching ${dir.relativeToCwd}/lib and ${dir.relativeToCwd}/test to re-run tests'); print('');