Add a better error message when flutter drive --target
is used incorrectly. (#162023)
Closes https://github.com/flutter/flutter/issues/62626.
This commit is contained in:
parent
1083356201
commit
9c960ff7da
@ -284,6 +284,15 @@ class DriveCommand extends RunCommandBase {
|
|||||||
throwToolExit(null);
|
throwToolExit(null);
|
||||||
}
|
}
|
||||||
if (await _fileSystem.type(testFile) != FileSystemEntityType.file) {
|
if (await _fileSystem.type(testFile) != FileSystemEntityType.file) {
|
||||||
|
// A very common source of error is holding "flutter drive" wrong,
|
||||||
|
// and providing the "test_driver/foo_test.dart" as the target, when
|
||||||
|
// the intention was to provide "lib/foo.dart".
|
||||||
|
if (_fileSystem.path.isWithin('test_driver', targetFile)) {
|
||||||
|
_logger.printError(
|
||||||
|
'The file path passed to --target should be an app entrypoint that '
|
||||||
|
'contains a "main()". Did you mean "flutter drive --driver $targetFile"?',
|
||||||
|
);
|
||||||
|
}
|
||||||
throwToolExit('Test file not found: $testFile');
|
throwToolExit('Test file not found: $testFile');
|
||||||
}
|
}
|
||||||
final Device? device = await targetedDevice;
|
final Device? device = await targetedDevice;
|
||||||
|
@ -53,6 +53,94 @@ void main() {
|
|||||||
Cache.enableLocking();
|
Cache.enableLocking();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
testUsingContext(
|
||||||
|
'fails if the specified --target is not found',
|
||||||
|
() async {
|
||||||
|
final DriveCommand command = DriveCommand(
|
||||||
|
fileSystem: fileSystem,
|
||||||
|
logger: logger,
|
||||||
|
platform: platform,
|
||||||
|
signals: signals,
|
||||||
|
);
|
||||||
|
fileSystem.file('lib/main.dart').createSync(recursive: true);
|
||||||
|
fileSystem.file('test_driver/main_test.dart').createSync(recursive: true);
|
||||||
|
fileSystem.file('pubspec.yaml').createSync();
|
||||||
|
|
||||||
|
await expectLater(
|
||||||
|
() => createTestCommandRunner(
|
||||||
|
command,
|
||||||
|
).run(<String>['drive', '--no-pub', '--target', 'lib/app.dart']),
|
||||||
|
throwsToolExit(message: 'Target file "lib/app.dart" not found'),
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(logger.errorText, isEmpty);
|
||||||
|
expect(logger.statusText, isEmpty);
|
||||||
|
},
|
||||||
|
overrides: <Type, Generator>{
|
||||||
|
FileSystem: () => fileSystem,
|
||||||
|
ProcessManager: () => FakeProcessManager.empty(),
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
testUsingContext(
|
||||||
|
'fails if the default --target is not found',
|
||||||
|
() async {
|
||||||
|
final DriveCommand command = DriveCommand(
|
||||||
|
fileSystem: fileSystem,
|
||||||
|
logger: logger,
|
||||||
|
platform: platform,
|
||||||
|
signals: signals,
|
||||||
|
);
|
||||||
|
fileSystem.file('lib/app.dart').createSync(recursive: true);
|
||||||
|
fileSystem.file('test_driver/app_test.dart').createSync(recursive: true);
|
||||||
|
fileSystem.file('pubspec.yaml').createSync();
|
||||||
|
|
||||||
|
await expectLater(
|
||||||
|
() => createTestCommandRunner(command).run(<String>['drive', '--no-pub']),
|
||||||
|
throwsToolExit(message: 'Target file "lib/main.dart" not found'),
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(logger.errorText, isEmpty);
|
||||||
|
expect(logger.statusText, isEmpty);
|
||||||
|
},
|
||||||
|
overrides: <Type, Generator>{
|
||||||
|
FileSystem: () => fileSystem,
|
||||||
|
ProcessManager: () => FakeProcessManager.empty(),
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
testUsingContext(
|
||||||
|
'fails with an informative error message if --target looks like --driver',
|
||||||
|
() async {
|
||||||
|
final DriveCommand command = DriveCommand(
|
||||||
|
fileSystem: fileSystem,
|
||||||
|
logger: logger,
|
||||||
|
platform: platform,
|
||||||
|
signals: signals,
|
||||||
|
);
|
||||||
|
fileSystem.file('lib/main.dart').createSync(recursive: true);
|
||||||
|
fileSystem.file('test_driver/main_test.dart').createSync(recursive: true);
|
||||||
|
fileSystem.file('pubspec.yaml').createSync();
|
||||||
|
|
||||||
|
await expectLater(
|
||||||
|
() => createTestCommandRunner(
|
||||||
|
command,
|
||||||
|
).run(<String>['drive', '--no-pub', '--target', 'test_driver/main_test.dart']),
|
||||||
|
throwsToolExit(message: 'Test file not found: /test_driver/main_test_test.dart'),
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(
|
||||||
|
logger.errorText,
|
||||||
|
contains('The file path passed to --target should be an app entrypoint'),
|
||||||
|
);
|
||||||
|
expect(logger.statusText, isEmpty);
|
||||||
|
},
|
||||||
|
overrides: <Type, Generator>{
|
||||||
|
FileSystem: () => fileSystem,
|
||||||
|
ProcessManager: () => FakeProcessManager.empty(),
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
testUsingContext(
|
testUsingContext(
|
||||||
'warns if screenshot is not supported but continues test',
|
'warns if screenshot is not supported but continues test',
|
||||||
() async {
|
() async {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user