From 22f170042746ff253997236f6350ecb7403cf3b1 Mon Sep 17 00:00:00 2001 From: Jia Hao Date: Tue, 26 Jan 2021 14:34:03 +0800 Subject: [PATCH] [flutter_tools] Make setting of CWD consistent for flutter test (#74622) --- .../flutter_test/working_directory_expectation.txt | 1 + .../flutter_test/working_directory_test.dart | 12 ++++++++++++ dev/tools/vitool/test/vitool_test.dart | 4 +--- .../test/cupertino/translations_test.dart | 2 +- .../test/material/translations_test.dart | 2 +- packages/flutter_tools/bin/fuchsia_tester.dart | 1 - packages/flutter_tools/lib/src/commands/test.dart | 12 +++++------- packages/flutter_tools/lib/src/test/runner.dart | 10 ---------- .../test/integration.shard/test_test.dart | 4 ++++ .../integration_test/test/binding_fail_test.dart | 2 +- 10 files changed, 26 insertions(+), 24 deletions(-) create mode 100644 dev/automated_tests/flutter_test/working_directory_expectation.txt create mode 100644 dev/automated_tests/flutter_test/working_directory_test.dart diff --git a/dev/automated_tests/flutter_test/working_directory_expectation.txt b/dev/automated_tests/flutter_test/working_directory_expectation.txt new file mode 100644 index 0000000000..cda62d712c --- /dev/null +++ b/dev/automated_tests/flutter_test/working_directory_expectation.txt @@ -0,0 +1 @@ +[0-9]+:[0-9]+ [+]1: All tests passed! diff --git a/dev/automated_tests/flutter_test/working_directory_test.dart b/dev/automated_tests/flutter_test/working_directory_test.dart new file mode 100644 index 0000000000..8b5ac9bef5 --- /dev/null +++ b/dev/automated_tests/flutter_test/working_directory_test.dart @@ -0,0 +1,12 @@ +// 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:test/test.dart' hide TypeMatcher, isInstanceOf; + +void main() { + test('working directory is the root of this package', () { + expect(Directory.current.path, endsWith('automated_tests')); + }); +} diff --git a/dev/tools/vitool/test/vitool_test.dart b/dev/tools/vitool/test/vitool_test.dart index 332990813e..ba464bb435 100644 --- a/dev/tools/vitool/test/vitool_test.dart +++ b/dev/tools/vitool/test/vitool_test.dart @@ -10,8 +10,6 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:vitool/vitool.dart'; import 'package:path/path.dart' as path; -const String kPackagePath = '..'; - void main() { test('parsePixels', () { @@ -694,5 +692,5 @@ class PathAnimationMatcher extends Matcher { } String testAsset(String name) { - return path.join(kPackagePath, 'test_assets', name); + return path.join('test_assets', name); } diff --git a/packages/flutter_localizations/test/cupertino/translations_test.dart b/packages/flutter_localizations/test/cupertino/translations_test.dart index a9d7d690b6..fcf3b8175f 100644 --- a/packages/flutter_localizations/test/cupertino/translations_test.dart +++ b/packages/flutter_localizations/test/cupertino/translations_test.dart @@ -13,7 +13,7 @@ import 'package:flutter_test/flutter_test.dart'; import '../test_utils.dart'; -final String rootDirectoryPath = Directory.current.parent.path; +final String rootDirectoryPath = Directory.current.path; void main() { for (final String language in kCupertinoSupportedLanguages) { diff --git a/packages/flutter_localizations/test/material/translations_test.dart b/packages/flutter_localizations/test/material/translations_test.dart index c4a14f601c..610f73cbda 100644 --- a/packages/flutter_localizations/test/material/translations_test.dart +++ b/packages/flutter_localizations/test/material/translations_test.dart @@ -13,7 +13,7 @@ import 'package:flutter_test/flutter_test.dart'; import '../test_utils.dart'; -final String rootDirectoryPath = Directory.current.parent.path; +final String rootDirectoryPath = Directory.current.path; void main() { for (final String language in kMaterialSupportedLanguages) { diff --git a/packages/flutter_tools/bin/fuchsia_tester.dart b/packages/flutter_tools/bin/fuchsia_tester.dart index 0a3fe3bbff..e6ee664d60 100644 --- a/packages/flutter_tools/bin/fuchsia_tester.dart +++ b/packages/flutter_tools/bin/fuchsia_tester.dart @@ -140,7 +140,6 @@ Future run(List args) async { exitCode = await const FlutterTestRunner().runTests( const TestWrapper(), tests.keys.toList(), - workDir: testDirectory, watcher: collector, ipv6: false, enableObservatory: collector != null, diff --git a/packages/flutter_tools/lib/src/commands/test.dart b/packages/flutter_tools/lib/src/commands/test.dart index 3a651736c9..a2760aea44 100644 --- a/packages/flutter_tools/lib/src/commands/test.dart +++ b/packages/flutter_tools/lib/src/commands/test.dart @@ -219,18 +219,17 @@ class TestCommand extends FlutterCommand { ); } - Directory workDir; if (files.isEmpty) { // We don't scan the entire package, only the test/ subdirectory, so that // files with names like like "hit_test.dart" don't get run. - workDir = globals.fs.directory('test'); - if (!workDir.existsSync()) { - throwToolExit('Test directory "${workDir.path}" not found.'); + final Directory testDir = globals.fs.directory('test'); + if (!testDir.existsSync()) { + throwToolExit('Test directory "${testDir.path}" not found.'); } - files = _findTests(workDir).toList(); + files = _findTests(testDir).toList(); if (files.isEmpty) { throwToolExit( - 'Test directory "${workDir.path}" does not appear to contain any test files.\n' + 'Test directory "${testDir.path}" does not appear to contain any test files.\n' 'Test files must be in that directory and end with the pattern "_test.dart".' ); } @@ -269,7 +268,6 @@ class TestCommand extends FlutterCommand { final int result = await testRunner.runTests( testWrapper, files, - workDir: workDir, names: names, plainNames: plainNames, tags: tags, diff --git a/packages/flutter_tools/lib/src/test/runner.dart b/packages/flutter_tools/lib/src/test/runner.dart index 509efee2ac..469451fe0d 100644 --- a/packages/flutter_tools/lib/src/test/runner.dart +++ b/packages/flutter_tools/lib/src/test/runner.dart @@ -27,7 +27,6 @@ abstract class FlutterTestRunner { Future runTests( TestWrapper testWrapper, List testFiles, { - Directory workDir, List names = const [], List plainNames = const [], String tags, @@ -64,7 +63,6 @@ class _FlutterTestRunnerImpl implements FlutterTestRunner { Future runTests( TestWrapper testWrapper, List testFiles, { - Directory workDir, List names = const [], List plainNames = const [], String tags, @@ -206,14 +204,7 @@ class _FlutterTestRunnerImpl implements FlutterTestRunner { additionalArguments: additionalArguments, ); - // Call package:test's main method in the appropriate directory. - final Directory saved = globals.fs.currentDirectory; try { - if (workDir != null) { - globals.printTrace('switching to directory $workDir to run tests'); - globals.fs.currentDirectory = workDir; - } - globals.printTrace('running test package with arguments: $testArgs'); await testWrapper.main(testArgs); @@ -222,7 +213,6 @@ class _FlutterTestRunnerImpl implements FlutterTestRunner { return exitCode; } finally { - globals.fs.currentDirectory = saved.path; await platform.close(); } } diff --git a/packages/flutter_tools/test/integration.shard/test_test.dart b/packages/flutter_tools/test/integration.shard/test_test.dart index 4266542621..bda077ba44 100644 --- a/packages/flutter_tools/test/integration.shard/test_test.dart +++ b/packages/flutter_tools/test/integration.shard/test_test.dart @@ -42,6 +42,10 @@ void main() { return _testFile('trivial_widget', automatedTestsDirectory, flutterTestDirectory, exitCode: isZero); }); + testWithoutContext('flutter test set the working directory correctly', () async { + return _testFile('working_directory', automatedTestsDirectory, flutterTestDirectory, exitCode: isZero); + }); + testWithoutContext('flutter test should report nice errors for exceptions thrown within testWidgets()', () async { return _testFile('exception_handling', automatedTestsDirectory, flutterTestDirectory); }); diff --git a/packages/integration_test/test/binding_fail_test.dart b/packages/integration_test/test/binding_fail_test.dart index 622c970c3b..4216d8cb1f 100644 --- a/packages/integration_test/test/binding_fail_test.dart +++ b/packages/integration_test/test/binding_fail_test.dart @@ -10,7 +10,7 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:path/path.dart' as path; final String bat = Platform.isWindows ? '.bat' : ''; -final String _flutterBin = path.join(Directory.current.parent.parent.parent.path, 'bin', 'flutter$bat'); +final String _flutterBin = path.join(Directory.current.parent.parent.path, 'bin', 'flutter$bat'); const String _integrationResultsPrefix = 'IntegrationTestWidgetsFlutterBinding test results:'; const String _failureExcerpt = r'Expected: \n Actual: ';