Unverified Commit 6b444c4d authored by Jonah Williams's avatar Jonah Williams Committed by GitHub

[flutter_tools] standardize patterns for integration.shard (#64980)

Integration tests must only go through the real file system/process manager/platform. The global indirection makes this code harder to understand than if it directly referred to the concrete instances that are being used.

Update the integration shard to use a const instance of a LocalFIleSystem, LocalProcessManager, and LocalPlatform. Remove global usage and apply testWithoutContext.
parent 46d1aba2
......@@ -5,25 +5,24 @@
import 'package:file_testing/file_testing.dart';
import 'package:flutter_tools/src/base/io.dart';
import 'package:flutter_tools/src/base/platform.dart';
import 'package:process/process.dart';
import 'package:flutter_tools/src/globals.dart' as globals;
import '../src/common.dart';
import 'test_utils.dart';
const String apkDebugMessage = 'A summary of your APK analysis can be found at: ';
const String iosDebugMessage = 'A summary of your iOS bundle analysis can be found at: ';
void main() {
test('--analyze-size flag produces expected output on hello_world for Android', () async {
final String woringDirectory = globals.fs.path.join(getFlutterRoot(), 'examples', 'hello_world');
final String flutterBin = globals.fs.path.join(getFlutterRoot(), 'bin', 'flutter');
final ProcessResult result = await const LocalProcessManager().run(<String>[
testWithoutContext('--analyze-size flag produces expected output on hello_world for Android', () async {
final String woringDirectory = fileSystem.path.join(getFlutterRoot(), 'examples', 'hello_world');
final String flutterBin = fileSystem.path.join(getFlutterRoot(), 'bin', 'flutter');
final ProcessResult result = await processManager.run(<String>[
flutterBin,
'build',
'apk',
'--analyze-size',
'--target-platform=android-arm64'
], workingDirectory: globals.fs.path.join(getFlutterRoot(), 'examples', 'hello_world'));
], workingDirectory: fileSystem.path.join(getFlutterRoot(), 'examples', 'hello_world'));
print(result.stdout);
print(result.stderr);
......@@ -34,14 +33,14 @@ void main() {
.firstWhere((String line) => line.contains(apkDebugMessage));
final String outputFilePath = line.split(apkDebugMessage).last.trim();
expect(globals.fs.file(globals.fs.path.join(woringDirectory, outputFilePath)), exists);
expect(fileSystem.file(fileSystem.path.join(woringDirectory, outputFilePath)), exists);
expect(result.exitCode, 0);
});
test('--analyze-size flag produces expected output on hello_world for iOS', () async {
final String woringDirectory = globals.fs.path.join(getFlutterRoot(), 'examples', 'hello_world');
final String flutterBin = globals.fs.path.join(getFlutterRoot(), 'bin', 'flutter');
final ProcessResult result = await const LocalProcessManager().run(<String>[
testWithoutContext('--analyze-size flag produces expected output on hello_world for iOS', () async {
final String woringDirectory = fileSystem.path.join(getFlutterRoot(), 'examples', 'hello_world');
final String flutterBin = fileSystem.path.join(getFlutterRoot(), 'bin', 'flutter');
final ProcessResult result = await processManager.run(<String>[
flutterBin,
'build',
'ios',
......@@ -58,20 +57,20 @@ void main() {
.firstWhere((String line) => line.contains(iosDebugMessage));
final String outputFilePath = line.split(iosDebugMessage).last.trim();
expect(globals.fs.file(globals.fs.path.join(woringDirectory, outputFilePath)), exists);
expect(fileSystem.file(fileSystem.path.join(woringDirectory, outputFilePath)), exists);
expect(result.exitCode, 0);
}, skip: !const LocalPlatform().isMacOS); // Only supported on macOS
test('--analyze-size is only supported in release mode', () async {
final String flutterBin = globals.fs.path.join(getFlutterRoot(), 'bin', 'flutter');
final ProcessResult result = await const LocalProcessManager().run(<String>[
testWithoutContext('--analyze-size is only supported in release mode', () async {
final String flutterBin = fileSystem.path.join(getFlutterRoot(), 'bin', 'flutter');
final ProcessResult result = await processManager.run(<String>[
flutterBin,
'build',
'apk',
'--analyze-size',
'--target-platform=android-arm64',
'--debug',
], workingDirectory: globals.fs.path.join(getFlutterRoot(), 'examples', 'hello_world'));
], workingDirectory: fileSystem.path.join(getFlutterRoot(), 'examples', 'hello_world'));
print(result.stdout);
print(result.stderr);
......
......@@ -5,7 +5,6 @@
import 'dart:async';
import 'package:file/file.dart';
import 'package:flutter_tools/src/base/file_system.dart';
import '../src/common.dart';
import 'test_data/background_project.dart';
......@@ -23,7 +22,7 @@ void main() {
tryToDelete(tempDir);
});
test('Hot restart kills background isolates', () async {
testWithoutContext('Hot restart kills background isolates', () async {
final BackgroundProject project = BackgroundProject();
await project.setUpIn(tempDir);
final FlutterRunTestDriver flutter = FlutterRunTestDriver(tempDir);
......@@ -58,7 +57,7 @@ void main() {
await flutter?.stop();
});
test('Hot reload updates background isolates', () async {
testWithoutContext('Hot reload updates background isolates', () async {
final RepeatingBackgroundProject project = RepeatingBackgroundProject();
await project.setUpIn(tempDir);
final FlutterRunTestDriver flutter = FlutterRunTestDriver(tempDir);
......
......@@ -7,16 +7,14 @@ import 'dart:convert';
import 'package:flutter_tools/src/base/file_system.dart';
import 'package:flutter_tools/src/base/io.dart';
import 'package:flutter_tools/src/features.dart';
import 'package:flutter_tools/src/globals.dart' as globals;
import 'package:process/process.dart';
import '../src/common.dart';
import 'test_utils.dart';
void main() {
test('All development tools and deprecated commands are hidden and help text is not verbose', () async {
final String flutterBin = globals.fs.path.join(getFlutterRoot(), 'bin', 'flutter');
final ProcessResult result = await const LocalProcessManager().run(<String>[
testWithoutContext('All development tools and deprecated commands are hidden and help text is not verbose', () async {
final String flutterBin = fileSystem.path.join(getFlutterRoot(), 'bin', 'flutter');
final ProcessResult result = await processManager.run(<String>[
flutterBin,
'-h',
'-v',
......@@ -34,9 +32,9 @@ void main() {
expect(result.stdout, isNot(contains('exiting with code 0')));
});
test('flutter doctor is not verbose', () async {
final String flutterBin = globals.fs.path.join(getFlutterRoot(), 'bin', 'flutter');
final ProcessResult result = await const LocalProcessManager().run(<String>[
testWithoutContext('flutter doctor is not verbose', () async {
final String flutterBin = fileSystem.path.join(getFlutterRoot(), 'bin', 'flutter');
final ProcessResult result = await processManager.run(<String>[
flutterBin,
'doctor',
'-v',
......@@ -46,9 +44,9 @@ void main() {
expect(result.stdout, isNot(contains('exiting with code 0')));
});
test('flutter doctor -vv super verbose', () async {
final String flutterBin = globals.fs.path.join(getFlutterRoot(), 'bin', 'flutter');
final ProcessResult result = await const LocalProcessManager().run(<String>[
testWithoutContext('flutter doctor -vv super verbose', () async {
final String flutterBin = fileSystem.path.join(getFlutterRoot(), 'bin', 'flutter');
final ProcessResult result = await processManager.run(<String>[
flutterBin,
'doctor',
'-vv',
......@@ -58,9 +56,9 @@ void main() {
expect(result.stdout, contains('Running shutdown hooks'));
});
test('flutter config contains all features', () async {
final String flutterBin = globals.fs.path.join(getFlutterRoot(), 'bin', 'flutter');
final ProcessResult result = await const LocalProcessManager().run(<String>[
testWithoutContext('flutter config contains all features', () async {
final String flutterBin = fileSystem.path.join(getFlutterRoot(), 'bin', 'flutter');
final ProcessResult result = await processManager.run(<String>[
flutterBin,
'config',
]);
......@@ -72,7 +70,7 @@ void main() {
]));
});
test('flutter run --machine uses AppRunLogger', () async {
testWithoutContext('flutter run --machine uses AppRunLogger', () async {
final Directory directory = createResolvedTempDirectorySync('flutter_run_test.')
.createTempSync('_flutter_run_test.')
..createSync(recursive: true);
......@@ -88,8 +86,8 @@ void main() {
.childDirectory('lib')
.childFile('main.dart')
.createSync(recursive: true);
final String flutterBin = globals.fs.path.join(getFlutterRoot(), 'bin', 'flutter');
final ProcessResult result = await const LocalProcessManager().run(<String>[
final String flutterBin = fileSystem.path.join(getFlutterRoot(), 'bin', 'flutter');
final ProcessResult result = await processManager.run(<String>[
flutterBin,
'run',
'--show-test-device', // ensure command can fail to run and hit injection of correct logger.
......@@ -103,9 +101,9 @@ void main() {
}
});
test('flutter attach --machine uses AppRunLogger', () async {
final String flutterBin = globals.fs.path.join(getFlutterRoot(), 'bin', 'flutter');
final ProcessResult result = await const LocalProcessManager().run(<String>[
testWithoutContext('flutter attach --machine uses AppRunLogger', () async {
final String flutterBin = fileSystem.path.join(getFlutterRoot(), 'bin', 'flutter');
final ProcessResult result = await processManager.run(<String>[
flutterBin,
'attach',
'--machine',
......@@ -115,9 +113,9 @@ void main() {
expect(result.stderr, contains('Target file')); // Target file not found, but different paths on Windows and Linux/macOS.
});
test('flutter build aot is deprecated', () async {
final String flutterBin = globals.fs.path.join(getFlutterRoot(), 'bin', 'flutter');
final ProcessResult result = await const LocalProcessManager().run(<String>[
testWithoutContext('flutter build aot is deprecated', () async {
final String flutterBin = fileSystem.path.join(getFlutterRoot(), 'bin', 'flutter');
final ProcessResult result = await processManager.run(<String>[
flutterBin,
'build',
'-h',
......@@ -131,9 +129,9 @@ void main() {
expect(result.stdout, isNot(contains('exiting with code 0')));
});
test('flutter --version --machine outputs JSON with flutterRoot', () async {
final String flutterBin = globals.fs.path.join(getFlutterRoot(), 'bin', 'flutter');
final ProcessResult result = await const LocalProcessManager().run(<String>[
testWithoutContext('flutter --version --machine outputs JSON with flutterRoot', () async {
final String flutterBin = fileSystem.path.join(getFlutterRoot(), 'bin', 'flutter');
final ProcessResult result = await processManager.run(<String>[
flutterBin,
'--version',
'--machine',
......
......@@ -4,7 +4,6 @@
import 'package:file/file.dart';
import 'package:file_testing/file_testing.dart';
import 'package:flutter_tools/src/base/file_system.dart';
import '../src/common.dart';
......@@ -23,7 +22,7 @@ void main() {
tryToDelete(tempDir);
});
test('Can collect coverage in machine mode', () async {
testWithoutContext('Can collect coverage in machine mode', () async {
final TestProject project = TestProject();
await project.setUpIn(tempDir);
final FlutterTestTestDriver flutter = FlutterTestTestDriver(tempDir);
......
......@@ -9,7 +9,6 @@ import 'dart:io';
import 'package:file/file.dart';
import 'package:flutter_tools/src/base/file_system.dart';
import 'package:flutter_tools/src/base/io.dart';
import 'package:flutter_tools/src/globals.dart' as globals;
import 'package:process/process.dart';
import '../src/common.dart';
......@@ -18,13 +17,13 @@ import 'test_driver.dart';
import 'test_utils.dart';
void main() {
test('device.getDevices', () async {
testWithoutContext('device.getDevices', () async {
final Directory tempDir = createResolvedTempDirectorySync('daemon_mode_test.');
final BasicProject _project = BasicProject();
await _project.setUpIn(tempDir);
final String flutterBin = globals.fs.path.join(getFlutterRoot(), 'bin', 'flutter');
final String flutterBin = fileSystem.path.join(getFlutterRoot(), 'bin', 'flutter');
const ProcessManager processManager = LocalProcessManager();
final Process process = await processManager.start(
......
......@@ -5,7 +5,6 @@
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';
......@@ -13,7 +12,7 @@ import 'test_driver.dart';
import 'test_utils.dart';
void main() {
test('can step over statements', () async {
testWithoutContext('can step over statements', () async {
final Directory tempDir = createResolvedTempDirectorySync('debugger_stepping_test.');
final SteppingProject _project = SteppingProject();
......
......@@ -5,7 +5,6 @@
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';
......@@ -20,7 +19,7 @@ void main() {
tempDirectory = createResolvedTempDirectorySync('debugger_stepping_test.');
});
test('Web debugger can step over statements', () async {
testWithoutContext('Web debugger can step over statements', () async {
final WebSteppingProject _project = WebSteppingProject();
await _project.setUpIn(tempDirectory);
......
......@@ -5,21 +5,19 @@
import 'package:flutter_tools/src/base/file_system.dart';
import 'package:flutter_tools/src/base/io.dart';
import 'package:flutter_tools/src/base/logger.dart';
import 'package:flutter_tools/src/base/platform.dart';
import 'package:flutter_tools/src/base/process.dart';
import 'package:flutter_tools/src/base/terminal.dart';
import 'package:process/process.dart';
import '../src/common.dart';
import 'test_utils.dart';
const String _kInitialVersion = 'v1.9.1';
const String _kBranch = 'dev';
final FileSystem fileSystem = LocalFileSystem.instance;
const ProcessManager processManager = LocalProcessManager();
final Stdio stdio = Stdio();
final ProcessUtils processUtils = ProcessUtils(processManager: processManager, logger: StdoutLogger(
terminal: AnsiTerminal(
platform: const LocalPlatform(),
platform: platform,
stdio: stdio,
),
stdio: stdio,
......@@ -46,7 +44,7 @@ void main() {
}
});
test('Can upgrade and downgrade a Flutter checkout', () async {
testWithoutContext('Can upgrade and downgrade a Flutter checkout', () async {
final Directory testDirectory = parentDirectory.childDirectory('flutter');
testDirectory.createSync(recursive: true);
......
......@@ -6,7 +6,6 @@ import 'dart:async';
import 'dart:io';
import 'package:file/file.dart';
import 'package:flutter_tools/src/base/file_system.dart';
import 'package:matcher/matcher.dart';
import 'package:vm_service/vm_service.dart';
......@@ -47,7 +46,7 @@ void batch1() {
);
}
test('flutter run expression evaluation - can evaluate trivial expressions in top level function', () async {
testWithoutContext('flutter run expression evaluation - can evaluate trivial expressions in top level function', () async {
await initProject();
await _flutter.run(withDebugger: true);
await breakInTopLevelFunction(_flutter);
......@@ -55,7 +54,7 @@ void batch1() {
await cleanProject();
});
test('flutter run expression evaluation - can evaluate trivial expressions in build method', () async {
testWithoutContext('flutter run expression evaluation - can evaluate trivial expressions in build method', () async {
await initProject();
await _flutter.run(withDebugger: true);
await breakInBuildMethod(_flutter);
......@@ -63,7 +62,7 @@ void batch1() {
await cleanProject();
});
test('flutter run expression evaluation - can evaluate complex expressions in top level function', () async {
testWithoutContext('flutter run expression evaluation - can evaluate complex expressions in top level function', () async {
await initProject();
await _flutter.run(withDebugger: true);
await breakInTopLevelFunction(_flutter);
......@@ -71,7 +70,7 @@ void batch1() {
await cleanProject();
});
test('flutter run expression evaluation - can evaluate complex expressions in build method', () async {
testWithoutContext('flutter run expression evaluation - can evaluate complex expressions in build method', () async {
await initProject();
await _flutter.run(withDebugger: true);
await breakInBuildMethod(_flutter);
......@@ -79,7 +78,7 @@ void batch1() {
await cleanProject();
});
test('flutter run expression evaluation - can evaluate expressions returning complex objects in top level function', () async {
testWithoutContext('flutter run expression evaluation - can evaluate expressions returning complex objects in top level function', () async {
await initProject();
await _flutter.run(withDebugger: true);
await breakInTopLevelFunction(_flutter);
......@@ -87,7 +86,7 @@ void batch1() {
await cleanProject();
});
test('flutter run expression evaluation - can evaluate expressions returning complex objects in build method', () async {
testWithoutContext('flutter run expression evaluation - can evaluate expressions returning complex objects in build method', () async {
await initProject();
await _flutter.run(withDebugger: true);
await breakInBuildMethod(_flutter);
......@@ -112,7 +111,7 @@ void batch2() {
tryToDelete(tempDir);
}
test('flutter test expression evaluation - can evaluate trivial expressions in a test', () async {
testWithoutContext('flutter test expression evaluation - can evaluate trivial expressions in a test', () async {
await initProject();
await _flutter.test(
withDebugger: true,
......@@ -123,7 +122,7 @@ void batch2() {
await cleanProject();
});
test('flutter test expression evaluation - can evaluate complex expressions in a test', () async {
testWithoutContext('flutter test expression evaluation - can evaluate complex expressions in a test', () async {
await initProject();
await _flutter.test(
withDebugger: true,
......@@ -134,7 +133,7 @@ void batch2() {
await cleanProject();
});
test('flutter test expression evaluation - can evaluate expressions returning complex objects in a test', () async {
testWithoutContext('flutter test expression evaluation - can evaluate expressions returning complex objects in a test', () async {
await initProject();
await _flutter.test(
withDebugger: true,
......
......@@ -3,10 +3,8 @@
// found in the LICENSE file.
import 'dart:async';
import 'dart:io';
import 'package:file/file.dart';
import 'package:flutter_tools/src/base/file_system.dart';
import 'package:matcher/matcher.dart';
import 'package:vm_service/vm_service.dart';
......@@ -55,7 +53,7 @@ void batch1() {
);
}
test('flutter run expression evaluation - error if expression evaluation disabled', () async {
testWithoutContext('flutter run expression evaluation - error if expression evaluation disabled', () async {
await initProject();
await start(expressionEvaluation: false);
await breakInTopLevelFunction(_flutter);
......@@ -63,7 +61,7 @@ void batch1() {
await cleanProject();
}, skip: 'CI not setup for web tests'); // https://github.com/flutter/flutter/issues/53779
test('flutter run expression evaluation - no native javascript objects in static scope', () async {
testWithoutContext('flutter run expression evaluation - no native javascript objects in static scope', () async {
await initProject();
await start(expressionEvaluation: true);
await breakInTopLevelFunction(_flutter);
......@@ -71,7 +69,7 @@ void batch1() {
await cleanProject();
}, skip: 'CI not setup for web tests'); // https://github.com/flutter/flutter/issues/53779
test('flutter run expression evaluation - can handle compilation errors', () async {
testWithoutContext('flutter run expression evaluation - can handle compilation errors', () async {
await initProject();
await start(expressionEvaluation: true);
await breakInTopLevelFunction(_flutter);
......@@ -79,7 +77,7 @@ void batch1() {
await cleanProject();
}, skip: 'CI not setup for web tests'); // https://github.com/flutter/flutter/issues/53779
test('flutter run expression evaluation - can evaluate trivial expressions in top level function', () async {
testWithoutContext('flutter run expression evaluation - can evaluate trivial expressions in top level function', () async {
await initProject();
await start(expressionEvaluation: true);
await breakInTopLevelFunction(_flutter);
......@@ -87,7 +85,7 @@ void batch1() {
await cleanProject();
}, skip: 'CI not setup for web tests'); // https://github.com/flutter/flutter/issues/53779
test('flutter run expression evaluation - can evaluate trivial expressions in build method', () async {
testWithoutContext('flutter run expression evaluation - can evaluate trivial expressions in build method', () async {
await initProject();
await start(expressionEvaluation: true);
await breakInBuildMethod(_flutter);
......@@ -95,7 +93,7 @@ void batch1() {
await cleanProject();
}, skip: 'CI not setup for web tests'); // https://github.com/flutter/flutter/issues/53779
test('flutter run expression evaluation - can evaluate complex expressions in top level function', () async {
testWithoutContext('flutter run expression evaluation - can evaluate complex expressions in top level function', () async {
await initProject();
await start(expressionEvaluation: true);
await breakInTopLevelFunction(_flutter);
......@@ -103,7 +101,7 @@ void batch1() {
await cleanProject();
}, skip: 'CI not setup for web tests'); // https://github.com/flutter/flutter/issues/53779
test('flutter run expression evaluation - can evaluate complex expressions in build method', () async {
testWithoutContext('flutter run expression evaluation - can evaluate complex expressions in build method', () async {
await initProject();
await _flutter.run(withDebugger: true, chrome: true);
await breakInBuildMethod(_flutter);
......@@ -147,7 +145,7 @@ void batch2() {
startPaused: true, script: _project.testFilePath);
}
test('flutter test expression evaluation - error if expression evaluation disabled', () async {
testWithoutContext('flutter test expression evaluation - error if expression evaluation disabled', () async {
await initProject();
await startPaused(expressionEvaluation: false);
await breakInMethod(_flutter);
......@@ -155,7 +153,7 @@ void batch2() {
await cleanProject();
}, skip: 'CI not setup for web tests'); // https://github.com/flutter/flutter/issues/53779
test('flutter test expression evaluation - can evaluate trivial expressions in a test', () async {
testWithoutContext('flutter test expression evaluation - can evaluate trivial expressions in a test', () async {
await initProject();
await startPaused(expressionEvaluation: true);
await breakInMethod(_flutter);
......@@ -163,7 +161,7 @@ void batch2() {
await cleanProject();
}, skip: 'CI not setup for web tests'); // https://github.com/flutter/flutter/issues/53779
test('flutter test expression evaluation - can evaluate complex expressions in a test', () async {
testWithoutContext('flutter test expression evaluation - can evaluate complex expressions in a test', () async {
await initProject();
await startPaused(expressionEvaluation: true);
await breakInMethod(_flutter);
......
......@@ -5,7 +5,6 @@
import 'dart:io';
import 'package:file/file.dart';
import 'package:flutter_tools/src/base/file_system.dart';
import '../src/common.dart';
import 'test_data/basic_project.dart';
......@@ -37,7 +36,7 @@ void main() {
tryToDelete(tempDir);
});
test('writes pid-file', () async {
testWithoutContext('writes pid-file', () async {
final File pidFile = tempDir.childFile('test.pid');
await _flutterRun.run(withDebugger: true);
await _flutterAttach.attach(
......@@ -47,13 +46,13 @@ void main() {
expect(pidFile.existsSync(), isTrue);
});
test('can hot reload', () async {
testWithoutContext('can hot reload', () async {
await _flutterRun.run(withDebugger: true);
await _flutterAttach.attach(_flutterRun.vmServicePort);
await _flutterAttach.hotReload();
});
test('can detach, reattach, hot reload', () async {
testWithoutContext('can detach, reattach, hot reload', () async {
await _flutterRun.run(withDebugger: true);
await _flutterAttach.attach(_flutterRun.vmServicePort);
await _flutterAttach.detach();
......@@ -61,7 +60,7 @@ void main() {
await _flutterAttach.hotReload();
});
test('killing process behaves the same as detach ', () async {
testWithoutContext('killing process behaves the same as detach ', () async {
await _flutterRun.run(withDebugger: true);
await _flutterAttach.attach(_flutterRun.vmServicePort);
await _flutterAttach.quit();
......
......@@ -3,7 +3,6 @@
// found in the LICENSE file.
import 'package:file/file.dart';
import 'package:flutter_tools/src/base/file_system.dart';
import '../src/common.dart';
import 'test_data/basic_project.dart';
......@@ -26,7 +25,7 @@ void main() {
tryToDelete(tempDir);
});
test('can correctly reference flutter generated code.', () async {
testWithoutContext('can correctly reference flutter generated code.', () async {
await flutter.run();
});
}
......@@ -3,9 +3,7 @@
// found in the LICENSE file.
import 'package:file/file.dart';
import 'package:flutter_tools/src/base/file_system.dart';
import 'package:flutter_tools/src/base/io.dart';
import 'package:flutter_tools/src/globals.dart' as globals;
import 'package:process/process.dart';
import '../src/common.dart';
......@@ -29,12 +27,12 @@ void main() {
tryToDelete(tempDir);
});
test('flutter run reports an error if an invalid device is supplied', () async {
testWithoutContext('flutter run reports an error if an invalid device is supplied', () async {
// This test forces flutter to check for all possible devices to catch issues
// like https://github.com/flutter/flutter/issues/21418 which were skipped
// over because other integration tests run using flutter-tester which short-cuts
// some of the checks for devices.
final String flutterBin = globals.fs.path.join(getFlutterRoot(), 'bin', 'flutter');
final String flutterBin = fileSystem.path.join(getFlutterRoot(), 'bin', 'flutter');
const ProcessManager _processManager = LocalProcessManager();
final ProcessResult _proc = await _processManager.run(
......@@ -50,7 +48,7 @@ void main() {
}
});
test('flutter run writes pid-file', () async {
testWithoutContext('flutter run writes pid-file', () async {
final File pidFile = tempDir.childFile('test.pid');
await _flutter.run(pidFile: pidFile);
expect(pidFile.existsSync(), isTrue);
......
......@@ -3,12 +3,9 @@
// found in the LICENSE file.
import 'dart:async';
import 'dart:io';
import 'package:file/file.dart';
import 'package:flutter_tools/src/base/file_system.dart';
import 'package:flutter_tools/src/globals.dart' as globals;
import 'package:process/process.dart';
import 'package:flutter_tools/src/base/io.dart';
import 'package:vm_service/vm_service.dart';
import 'package:vm_service/vm_service_io.dart';
......@@ -33,8 +30,8 @@ void main() {
tryToDelete(tempDir);
});
test('flutter run in non-machine mode reports an early error in an application', () async {
final String flutterBin = globals.fs.path.join(
testWithoutContext('flutter run in non-machine mode reports an early error in an application', () async {
final String flutterBin = fileSystem.path.join(
getFlutterRoot(),
'bin',
'flutter',
......@@ -42,7 +39,7 @@ void main() {
final StringBuffer stdout = StringBuffer();
final Process process = await const LocalProcessManager().start(<String>[
final Process process = await processManager.start(<String>[
flutterBin,
'run',
'--disable-service-auth-codes',
......@@ -79,7 +76,7 @@ void main() {
expect(stdout.toString(), contains(_exceptionStart));
});
test('flutter run in machine mode does not print an error', () async {
testWithoutContext('flutter run in machine mode does not print an error', () async {
final StringBuffer stdout = StringBuffer();
await _flutter.run(
......@@ -105,7 +102,7 @@ void main() {
expect(stdout.toString(), isNot(contains(_exceptionStart)));
});
test('flutter run for web reports an early error in an application', () async {
testWithoutContext('flutter run for web reports an early error in an application', () async {
final StringBuffer stdout = StringBuffer();
await _flutter.run(
......
......@@ -5,7 +5,6 @@
import 'dart:async';
import 'package:file/file.dart';
import 'package:flutter_tools/src/base/file_system.dart';
import '../src/common.dart';
import 'test_data/gen_l10n_project.dart';
......@@ -153,7 +152,7 @@ void main() {
// TODO(jsimmons): need a localization test that uses deferred loading
// (see https://github.com/flutter/flutter/issues/61911)
test('generated l10n classes produce expected localized strings', () async {
testWithoutContext('generated l10n classes produce expected localized strings', () async {
await project.setUpIn(tempDir);
flutter = FlutterRunTestDriver(tempDir);
final StringBuffer stdout = await runApp();
......
......@@ -6,7 +6,6 @@ import 'dart:async';
import 'package:file/file.dart';
import 'package:flutter_tools/src/base/common.dart';
import 'package:flutter_tools/src/base/file_system.dart';
import 'package:vm_service/vm_service.dart';
import 'package:vm_service/vm_service_io.dart';
......@@ -31,12 +30,12 @@ void main() {
tryToDelete(tempDir);
});
test('hot reload works without error', () async {
testWithoutContext('hot reload works without error', () async {
await flutter.run();
await flutter.hotReload();
});
test('multiple overlapping hot reload are debounced and queued', () async {
testWithoutContext('multiple overlapping hot reload are debounced and queued', () async {
await flutter.run();
// Capture how many *real* hot reloads occur.
int numReloads = 0;
......@@ -70,7 +69,7 @@ void main() {
}
});
test('newly added code executes during hot reload', () async {
testWithoutContext('newly added code executes during hot reload', () async {
final StringBuffer stdout = StringBuffer();
final StreamSubscription<String> subscription = flutter.stdout.listen(stdout.writeln);
await flutter.run();
......@@ -83,7 +82,7 @@ void main() {
}
});
test('fastReassemble behavior triggers hot reload behavior with evaluation of expression', () async {
testWithoutContext('fastReassemble behavior triggers hot reload behavior with evaluation of expression', () async {
final Completer<void> tick1 = Completer<void>();
final Completer<void> tick2 = Completer<void>();
final Completer<void> tick3 = Completer<void>();
......@@ -150,12 +149,12 @@ void main() {
}
});
test('hot restart works without error', () async {
testWithoutContext('hot restart works without error', () async {
await flutter.run();
await flutter.hotRestart();
});
test('breakpoints are hit after hot reload', () async {
testWithoutContext('breakpoints are hit after hot reload', () async {
Isolate isolate;
final Completer<void> sawTick1 = Completer<void>();
final Completer<void> sawDebuggerPausedMessage = Completer<void>();
......@@ -209,7 +208,7 @@ void main() {
await subscription.cancel();
});
test("hot reload doesn't reassemble if paused", () async {
testWithoutContext("hot reload doesn't reassemble if paused", () async {
final Completer<void> sawTick1 = Completer<void>();
final Completer<void> sawDebuggerPausedMessage1 = Completer<void>();
final Completer<void> sawDebuggerPausedMessage2 = Completer<void>();
......
......@@ -5,7 +5,6 @@
import 'dart:async';
import 'package:file/file.dart';
import 'package:flutter_tools/src/base/file_system.dart';
import '../src/common.dart';
import 'test_data/basic_project.dart';
......@@ -33,13 +32,13 @@ void main() {
tryToDelete(tempDir);
});
test('flutter run does not terminate when a debugger is attached', () async {
testWithoutContext('flutter run does not terminate when a debugger is attached', () async {
await _flutter.run(withDebugger: true);
await Future<void>.delayed(requiredLifespan);
expect(_flutter.hasExited, equals(false));
});
test('fluter run does not terminate when a debugger is attached and pause-on-exceptions', () async {
testWithoutContext('fluter run does not terminate when a debugger is attached and pause-on-exceptions', () async {
await _flutter.run(withDebugger: true, pauseOnExceptions: true);
await Future<void>.delayed(requiredLifespan);
expect(_flutter.hasExited, equals(false));
......
......@@ -3,7 +3,6 @@
// found in the LICENSE file.
import 'dart:convert';
import 'dart:io' as io;
import 'package:file/file.dart';
import 'package:flutter_tools/src/base/file_system.dart';
......@@ -11,10 +10,9 @@ import 'package:flutter_tools/src/base/logger.dart';
import 'package:flutter_tools/src/base/platform.dart';
import 'package:flutter_tools/src/base/terminal.dart';
import 'package:flutter_tools/src/ios/plist_parser.dart';
import 'package:process/process.dart';
import '../src/common.dart';
import '../src/context.dart';
import 'test_utils.dart';
const String base64PlistXml =
'PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIHBsaXN0I'
......@@ -38,8 +36,6 @@ void main() {
// `ProcessManager` because doing so wouldn't actually test what we want to
// test, which is that the underlying tool we're using to parse Plist files
// works with the way we're calling it.
FileSystem fileSystem;
ProcessManager processManager;
File file;
PlistParser parser;
BufferLogger logger;
......@@ -52,8 +48,6 @@ void main() {
stdio: null,
),
);
fileSystem = LocalFileSystemBlockingSetCurrentDirectory();
processManager = const LocalProcessManager();
parser = PlistParser(
fileSystem: fileSystem,
processManager: processManager,
......@@ -73,7 +67,7 @@ void main() {
expect(parser.getValueFromFile(file.absolute.path, 'CFBundleIdentifier'), 'io.flutter.flutter.app');
expect(logger.statusText, isEmpty);
expect(logger.errorText, isEmpty);
}, skip: !io.Platform.isMacOS);
}, skip: !platform.isMacOS);
testWithoutContext('PlistParser.getValueFromFile works with binary file', () {
file.writeAsBytesSync(base64.decode(base64PlistBinary));
......@@ -82,7 +76,7 @@ void main() {
expect(parser.getValueFromFile(file.absolute.path, 'CFBundleIdentifier'), 'io.flutter.flutter.app');
expect(logger.statusText, isEmpty);
expect(logger.errorText, isEmpty);
}, skip: !io.Platform.isMacOS);
}, skip: !platform.isMacOS);
testWithoutContext('PlistParser.getValueFromFile works with json file', () {
file.writeAsBytesSync(base64.decode(base64PlistJson));
......@@ -91,13 +85,13 @@ void main() {
expect(parser.getValueFromFile(file.absolute.path, 'CFBundleIdentifier'), 'io.flutter.flutter.app');
expect(logger.statusText, isEmpty);
expect(logger.errorText, isEmpty);
}, skip: !io.Platform.isMacOS);
}, skip: !platform.isMacOS);
testWithoutContext('PlistParser.getValueFromFile returns null for non-existent plist file', () {
expect(parser.getValueFromFile('missing.plist', 'CFBundleIdentifier'), null);
expect(logger.statusText, isEmpty);
expect(logger.errorText, isEmpty);
}, skip: !io.Platform.isMacOS);
}, skip: !platform.isMacOS);
testWithoutContext('PlistParser.getValueFromFile returns null for non-existent key within plist', () {
file.writeAsBytesSync(base64.decode(base64PlistXml));
......@@ -106,7 +100,7 @@ void main() {
expect(parser.getValueFromFile(file.absolute.path, 'BadKey'), null);
expect(logger.statusText, isEmpty);
expect(logger.errorText, isEmpty);
}, skip: !io.Platform.isMacOS);
}, skip: !platform.isMacOS);
testWithoutContext('PlistParser.getValueFromFile returns null for malformed plist file', () {
file.writeAsBytesSync(const <int>[1, 2, 3, 4, 5, 6]);
......@@ -114,7 +108,7 @@ void main() {
expect(parser.getValueFromFile(file.path, 'CFBundleIdentifier'), null);
expect(logger.statusText, isNotEmpty);
expect(logger.errorText, isEmpty);
}, skip: !io.Platform.isMacOS);
}, skip: !platform.isMacOS);
testWithoutContext('PlistParser.getValueFromFile throws when /usr/bin/plutil is not found', () async {
expect(
......@@ -123,5 +117,5 @@ void main() {
);
expect(logger.statusText, isEmpty);
expect(logger.errorText, isEmpty);
}, skip: io.Platform.isMacOS);
}, skip: platform.isMacOS);
}
......@@ -5,7 +5,6 @@
import 'dart:async';
import 'package:file/file.dart';
import 'package:flutter_tools/src/base/file_system.dart';
import '../src/common.dart';
import 'test_data/stateless_stateful_project.dart';
......@@ -30,7 +29,7 @@ void main() {
tryToDelete(tempDir);
});
test('Can switch between stateless and stateful', () async {
testWithoutContext('Can switch between stateless and stateful', () async {
await _flutter.run();
await _flutter.hotReload();
final StringBuffer stdout = StringBuffer();
......
......@@ -2,26 +2,25 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'dart:io'; // ignore: dart_io_import
import 'package:path/path.dart' as path; // ignore: package_path_import
import 'package:file/file.dart';
import 'package:flutter_tools/src/convert.dart';
import '../src/common.dart';
import 'test_utils.dart';
/// Checks that all active template files are defined in the template_manifest.json file.
void main() {
test('Check template manifest is up to date', () {
testWithoutContext('Check template manifest is up to date', () {
final Map<String, Object> manifest = json.decode(
File('templates/template_manifest.json').readAsStringSync(),
fileSystem.file('templates/template_manifest.json').readAsStringSync(),
) as Map<String, Object>;
final Set<Uri> declaredFileList = Set<Uri>.from(
(manifest['files'] as List<Object>).cast<String>().map<Uri>(path.toUri));
(manifest['files'] as List<Object>).cast<String>().map<Uri>(fileSystem.path.toUri));
final Set<Uri> activeTemplateList = Directory('templates')
final Set<Uri> activeTemplateList = fileSystem.directory('templates')
.listSync(recursive: true)
.whereType<File>()
.where((File file) => path.basename(file.path) != 'template_manifest.json' &&
path.basename(file.path) != '.DS_Store')
.where((File file) => fileSystem.path.basename(file.path) != 'template_manifest.json' &&
fileSystem.path.basename(file.path) != '.DS_Store')
.map((File file) => file.uri)
.toSet();
......
......@@ -2,8 +2,6 @@
// 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/globals.dart' as globals;
import '../test_utils.dart';
import 'project.dart';
......@@ -53,7 +51,7 @@ class BackgroundProject extends Project {
void updateTestIsolatePhrase(String message) {
final String newMainContents = main.replaceFirst('Isolate thread', message);
writeFile(globals.fs.path.join(dir.path, 'lib', 'main.dart'), newMainContents);
writeFile(fileSystem.path.join(dir.path, 'lib', 'main.dart'), newMainContents);
}
}
......@@ -103,6 +101,6 @@ class RepeatingBackgroundProject extends Project {
void updateTestIsolatePhrase(String message) {
final String newMainContents = main.replaceFirst('Isolate thread', message);
writeFile(globals.fs.path.join(dir.path, 'lib', 'main.dart'), newMainContents);
writeFile(fileSystem.path.join(dir.path, 'lib', 'main.dart'), newMainContents);
}
}
......@@ -5,8 +5,6 @@
import 'dart:async';
import 'package:file/file.dart';
import 'package:flutter_tools/src/base/file_system.dart';
import 'package:flutter_tools/src/globals.dart' as globals;
import 'package:meta/meta.dart';
import '../test_utils.dart';
......@@ -19,16 +17,16 @@ class GenL10nProject extends Project {
bool useSyntheticPackage = false,
}) {
this.dir = dir;
writeFile(globals.fs.path.join(dir.path, 'lib', 'l10n', 'app_en.arb'), appEn);
writeFile(globals.fs.path.join(dir.path, 'lib', 'l10n', 'app_en_CA.arb'), appEnCa);
writeFile(globals.fs.path.join(dir.path, 'lib', 'l10n', 'app_en_GB.arb'), appEnGb);
writeFile(globals.fs.path.join(dir.path, 'lib', 'l10n', 'app_es.arb'), appEs);
writeFile(globals.fs.path.join(dir.path, 'lib', 'l10n', 'app_es_419.arb'), appEs419);
writeFile(globals.fs.path.join(dir.path, 'lib', 'l10n', 'app_zh.arb'), appZh);
writeFile(globals.fs.path.join(dir.path, 'lib', 'l10n', 'app_zh_Hant.arb'), appZhHant);
writeFile(globals.fs.path.join(dir.path, 'lib', 'l10n', 'app_zh_Hans.arb'), appZhHans);
writeFile(globals.fs.path.join(dir.path, 'lib', 'l10n', 'app_zh_Hant_TW.arb'), appZhHantTw);
writeFile(globals.fs.path.join(dir.path, 'l10n.yaml'), l10nYaml(
writeFile(fileSystem.path.join(dir.path, 'lib', 'l10n', 'app_en.arb'), appEn);
writeFile(fileSystem.path.join(dir.path, 'lib', 'l10n', 'app_en_CA.arb'), appEnCa);
writeFile(fileSystem.path.join(dir.path, 'lib', 'l10n', 'app_en_GB.arb'), appEnGb);
writeFile(fileSystem.path.join(dir.path, 'lib', 'l10n', 'app_es.arb'), appEs);
writeFile(fileSystem.path.join(dir.path, 'lib', 'l10n', 'app_es_419.arb'), appEs419);
writeFile(fileSystem.path.join(dir.path, 'lib', 'l10n', 'app_zh.arb'), appZh);
writeFile(fileSystem.path.join(dir.path, 'lib', 'l10n', 'app_zh_Hant.arb'), appZhHant);
writeFile(fileSystem.path.join(dir.path, 'lib', 'l10n', 'app_zh_Hans.arb'), appZhHans);
writeFile(fileSystem.path.join(dir.path, 'lib', 'l10n', 'app_zh_Hant_TW.arb'), appZhHantTw);
writeFile(fileSystem.path.join(dir.path, 'l10n.yaml'), l10nYaml(
useDeferredLoading: useDeferredLoading,
useSyntheticPackage: useSyntheticPackage,
));
......
......@@ -2,8 +2,6 @@
// 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/globals.dart' as globals;
import '../test_utils.dart';
import 'project.dart';
......@@ -86,6 +84,6 @@ class HotReloadProject extends Project {
'// printHotReloadWorked();',
'printHotReloadWorked();',
);
writeFile(globals.fs.path.join(dir.path, 'lib', 'main.dart'), newMainContents);
writeFile(fileSystem.path.join(dir.path, 'lib', 'main.dart'), newMainContents);
}
}
......@@ -5,8 +5,6 @@
import 'dart:async';
import 'package:file/file.dart';
import 'package:flutter_tools/src/base/file_system.dart';
import 'package:flutter_tools/src/globals.dart' as globals;
import '../test_utils.dart';
......@@ -33,17 +31,17 @@ abstract class Project {
Future<void> setUpIn(Directory dir) async {
this.dir = dir;
writeFile(globals.fs.path.join(dir.path, 'pubspec.yaml'), pubspec);
writeFile(fileSystem.path.join(dir.path, 'pubspec.yaml'), pubspec);
if (main != null) {
writeFile(globals.fs.path.join(dir.path, 'lib', 'main.dart'), main);
writeFile(fileSystem.path.join(dir.path, 'lib', 'main.dart'), main);
}
if (test != null) {
writeFile(globals.fs.path.join(dir.path, 'test', 'test.dart'), test);
writeFile(fileSystem.path.join(dir.path, 'test', 'test.dart'), test);
}
if (generatedFile != null) {
writeFile(globals.fs.path.join(dir.path, '.dart_tool', 'flutter_gen', 'flutter_gen.dart'), generatedFile);
writeFile(fileSystem.path.join(dir.path, '.dart_tool', 'flutter_gen', 'flutter_gen.dart'), generatedFile);
}
writeFile(globals.fs.path.join(dir.path, 'web', 'index.html'), _kDefaultHtml);
writeFile(fileSystem.path.join(dir.path, 'web', 'index.html'), _kDefaultHtml);
writePackages(dir.path);
await getPackages(dir.path);
}
......
......@@ -2,8 +2,6 @@
// 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/globals.dart' as globals;
import '../test_utils.dart';
import 'project.dart';
......@@ -74,6 +72,6 @@ class HotReloadProject extends Project {
void toggleState() {
stateful = !stateful;
writeFile(globals.fs.path.join(dir.path, 'lib', 'main.dart'), getCode(stateful));
writeFile(fileSystem.path.join(dir.path, 'lib', 'main.dart'), getCode(stateful));
}
}
......@@ -5,7 +5,6 @@
import 'package:file/file.dart';
import 'package:flutter_tools/src/base/file_system.dart';
import 'package:flutter_tools/src/globals.dart' as globals;
import '../test_utils.dart';
import 'project.dart';
......@@ -46,7 +45,7 @@ class TestsProject extends Project {
return super.setUpIn(dir);
}
String get testFilePath => globals.fs.path.join(dir.path, 'test', 'test.dart');
String get testFilePath => fileSystem.path.join(dir.path, 'test', 'test.dart');
Uri get breakpointUri => Uri.file(testFilePath);
Uri get breakpointAppUri => Uri.parse('org-dartlang-app:///test.dart');
......
......@@ -4,19 +4,20 @@
import 'dart:async';
import 'dart:convert';
import 'dart:io' as io; // ignore: dart_io_import
import 'package:file/file.dart';
import 'package:flutter_tools/src/base/common.dart';
import 'package:flutter_tools/src/base/file_system.dart';
import 'package:flutter_tools/src/base/io.dart';
import 'package:flutter_tools/src/base/utils.dart';
import 'package:flutter_tools/src/globals.dart' as globals;
import 'package:meta/meta.dart';
import 'package:process/process.dart';
import 'package:vm_service/vm_service.dart';
import 'package:vm_service/vm_service_io.dart';
import '../src/common.dart';
import 'test_utils.dart';
// Set this to true for debugging to get verbose logs written to stdout.
// The logs include the following:
......@@ -84,7 +85,7 @@ abstract class FlutterTestDriver {
bool withDebugger = false,
File pidFile,
}) async {
final String flutterBin = globals.fs.path.join(getFlutterRoot(), 'bin', 'flutter');
final String flutterBin = fileSystem.path.join(getFlutterRoot(), 'bin', 'flutter');
if (withDebugger) {
arguments.add('--start-paused');
}
......@@ -175,7 +176,7 @@ abstract class FlutterTestDriver {
.catchError((Object e) => _debugPrint('Ignoring failure to resume during shutdown'));
_debugPrint('Sending SIGTERM to $_processPid..');
ProcessSignal.SIGTERM.send(_processPid);
io.Process.killPid(_processPid, io.ProcessSignal.sigterm);
return _process.exitCode.timeout(quitTimeout, onTimeout: _killForcefully);
}
......
......@@ -4,36 +4,47 @@
import 'dart:async';
import 'package:flutter_tools/src/base/file_system.dart';
import 'package:file/file.dart';
import 'package:file/local.dart';
import 'package:flutter_tools/src/base/io.dart';
import 'package:flutter_tools/src/globals.dart' as globals;
import 'package:flutter_tools/src/base/platform.dart';
import 'package:process/process.dart';
import '../src/common.dart';
/// The [FileSystem] for the integration test environment.
const FileSystem fileSystem = LocalFileSystem();
/// The [Platform] for the integration test environment.
const Platform platform = LocalPlatform();
/// The [ProcessManager] for the integration test environment.
const ProcessManager processManager = LocalProcessManager();
/// Creates a temporary directory but resolves any symlinks to return the real
/// underlying path to avoid issues with breakpoints/hot reload.
/// https://github.com/flutter/flutter/pull/21741
Directory createResolvedTempDirectorySync(String prefix) {
assert(prefix.endsWith('.'));
final Directory tempDirectory = globals.fs.systemTempDirectory.createTempSync('flutter_$prefix');
return globals.fs.directory(tempDirectory.resolveSymbolicLinksSync());
final Directory tempDirectory = fileSystem.systemTempDirectory.createTempSync('flutter_$prefix');
return fileSystem.directory(tempDirectory.resolveSymbolicLinksSync());
}
void writeFile(String path, String content) {
globals.fs.file(path)
fileSystem.file(path)
..createSync(recursive: true)
..writeAsStringSync(content)
..setLastModifiedSync(DateTime.now().add(const Duration(seconds: 10)));
}
void writePackages(String folder) {
writeFile(globals.fs.path.join(folder, '.packages'), '''
test:${globals.fs.path.join(globals.fs.currentDirectory.path, 'lib')}/
writeFile(fileSystem.path.join(folder, '.packages'), '''
test:${fileSystem.path.join(fileSystem.currentDirectory.path, 'lib')}/
''');
}
void writePubspec(String folder) {
writeFile(globals.fs.path.join(folder, 'pubspec.yaml'), '''
writeFile(fileSystem.path.join(folder, 'pubspec.yaml'), '''
name: test
dependencies:
flutter:
......@@ -43,11 +54,11 @@ dependencies:
Future<void> getPackages(String folder) async {
final List<String> command = <String>[
globals.fs.path.join(getFlutterRoot(), 'bin', 'flutter'),
fileSystem.path.join(getFlutterRoot(), 'bin', 'flutter'),
'pub',
'get',
];
final ProcessResult result = await globals.processManager.run(command, workingDirectory: folder);
final ProcessResult result = await processManager.run(command, workingDirectory: folder);
if (result.exitCode != 0) {
throw Exception('flutter pub get failed: ${result.stderr}\n${result.stdout}');
}
......
......@@ -4,7 +4,6 @@
import 'package:flutter_tools/src/base/file_system.dart';
import 'package:flutter_tools/src/base/io.dart';
import 'package:flutter_tools/src/globals.dart' as globals;
import 'package:process/process.dart';
import '../src/common.dart';
......@@ -21,7 +20,7 @@ void main() {
tryToDelete(tempDir);
});
test('Can parse and output summaries for code coverage', () async {
testWithoutContext('Can parse and output summaries for code coverage', () async {
final File coverageFile = tempDir.childFile('info.lcov')
..writeAsStringSync('''
SF:lib/src/artifacts.dart
......@@ -51,8 +50,8 @@ LH:6
end_of_record
''');
final String dartScript = globals.fs.path.join(getFlutterRoot(), 'bin', 'dart');
final String coverageScript = globals.fs.path.join(getFlutterRoot(), 'packages', 'flutter_tools', 'tool', 'unit_coverage.dart');
final String dartScript = fileSystem.path.join(getFlutterRoot(), 'bin', 'dart');
final String coverageScript = fileSystem.path.join(getFlutterRoot(), 'packages', 'flutter_tools', 'tool', 'unit_coverage.dart');
final ProcessResult result = await const LocalProcessManager().run(<String>[
dartScript,
coverageScript,
......
......@@ -3,7 +3,6 @@
// found in the LICENSE file.
import 'dart:async';
import 'dart:io'; // ignore: dart_io_import
import 'package:file/file.dart';
import 'package:flutter_tools/src/base/dds.dart';
......@@ -40,7 +39,7 @@ void main() {
tryToDelete(tempDir);
});
test('getSupportedProtocols includes DDS', () async {
testWithoutContext('getSupportedProtocols includes DDS', () async {
final ProtocolList protocolList =
await vmService.getSupportedProtocols();
expect(protocolList.protocols, hasLength(2));
......@@ -49,7 +48,7 @@ void main() {
}
}, skip: DartDevelopmentService.ddsDisabled);
test('flutterVersion can be called', () async {
testWithoutContext('flutterVersion can be called', () async {
final Response response =
await vmService.callServiceExtension('s0.flutterVersion');
expect(response.type, 'Success');
......@@ -57,13 +56,13 @@ void main() {
expect(response.json, containsPair('engineRevisionShort', isNotNull));
});
test('flutterMemoryInfo can be called', () async {
testWithoutContext('flutterMemoryInfo can be called', () async {
final Response response =
await vmService.callServiceExtension('s0.flutterMemoryInfo');
expect(response.type, 'Success');
});
test('reloadSources can be called', () async {
testWithoutContext('reloadSources can be called', () async {
final VM vm = await vmService.getVM();
final IsolateRef isolateRef = vm.isolates.first;
......@@ -72,13 +71,13 @@ void main() {
expect(response.type, 'Success');
});
test('reloadSources fails on bad params', () async {
testWithoutContext('reloadSources fails on bad params', () async {
final Future<Response> response =
vmService.callMethod('s0.reloadSources', isolateId: '');
expect(response, throwsA(const TypeMatcher<RPCError>()));
});
test('hotRestart can be called', () async {
testWithoutContext('hotRestart can be called', () async {
final VM vm = await vmService.getVM();
final IsolateRef isolateRef = vm.isolates.first;
......@@ -87,19 +86,19 @@ void main() {
expect(response.type, 'Success');
});
test('hotRestart fails on bad params', () async {
testWithoutContext('hotRestart fails on bad params', () async {
final Future<Response> response = vmService.callMethod('s0.hotRestart',
args: <String, dynamic>{'pause': 'not_a_bool'});
expect(response, throwsA(const TypeMatcher<RPCError>()));
});
test('flutterGetSkSL can be called', () async {
testWithoutContext('flutterGetSkSL can be called', () async {
final Response response = await vmService.callMethod('s0.flutterGetSkSL');
expect(response.type, 'Success');
});
test('ext.flutter.brightnessOverride can toggle window brightness', () async {
testWithoutContext('ext.flutter.brightnessOverride can toggle window brightness', () async {
final Isolate isolate = await waitForExtension(vmService);
final Response response = await vmService.callServiceExtension(
'ext.flutter.brightnessOverride',
......@@ -138,5 +137,5 @@ void main() {
});
// TODO(devoncarew): These tests fail on cirrus-ci windows.
}, skip: Platform.isWindows);
}, skip: platform.isWindows);
}
......@@ -25,7 +25,7 @@ void main() {
tryToDelete(tempDir);
});
test('flutter run works on web devices with a unary main function', () async {
testWithoutContext('flutter run works on web devices with a unary main function', () async {
await flutter.run(chrome: true);
}, skip: 'Web CI skipped');
}
......@@ -7,8 +7,10 @@ import 'dart:async';
import 'package:args/args.dart';
import 'package:args/command_runner.dart';
import 'package:flutter_tools/src/base/logger.dart';
import 'package:flutter_tools/src/base/platform.dart';
import 'package:flutter_tools/src/convert.dart';
import 'package:vm_service/vm_service.dart' as vm_service;
import 'package:path/path.dart' as path; // ignore: package_path_import
import 'package:flutter_tools/src/base/common.dart';
import 'package:flutter_tools/src/base/context.dart';
......@@ -48,8 +50,9 @@ void tryToDelete(Directory directory) {
/// environment variable is set, it will be returned. Otherwise, this will
/// deduce the path from `platform.script`.
String getFlutterRoot() {
if (globals.platform.environment.containsKey('FLUTTER_ROOT')) {
return globals.platform.environment['FLUTTER_ROOT'];
const Platform platform = LocalPlatform();
if (platform.environment.containsKey('FLUTTER_ROOT')) {
return platform.environment['FLUTTER_ROOT'];
}
Error invalidScript() => StateError('Could not determine flutter_tools/ path from script URL (${globals.platform.script}); consider setting FLUTTER_ROOT explicitly.');
......@@ -71,13 +74,13 @@ String getFlutterRoot() {
throw invalidScript();
}
final List<String> parts = globals.fs.path.split(globals.fs.path.fromUri(scriptUri));
final List<String> parts = path.split(globals.fs.path.fromUri(scriptUri));
final int toolsIndex = parts.indexOf('flutter_tools');
if (toolsIndex == -1) {
throw invalidScript();
}
final String toolsPath = globals.fs.path.joinAll(parts.sublist(0, toolsIndex + 1));
return globals.fs.path.normalize(globals.fs.path.join(toolsPath, '..', '..'));
final String toolsPath = path.joinAll(parts.sublist(0, toolsIndex + 1));
return path.normalize(path.join(toolsPath, '..', '..'));
}
CommandRunner<void> createTestCommandRunner([ FlutterCommand command ]) {
......
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