mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
[flutter_tool] Catch a yaml parse failure during project creation (#36105)
This commit is contained in:
parent
aa6cc07164
commit
13382f41c0
@ -16,6 +16,7 @@ import 'bundle.dart' as bundle;
|
||||
import 'cache.dart';
|
||||
import 'desktop.dart';
|
||||
import 'flutter_manifest.dart';
|
||||
import 'globals.dart';
|
||||
import 'ios/ios_workflow.dart';
|
||||
import 'ios/plist_utils.dart' as plist;
|
||||
import 'ios/xcodeproj.dart' as xcode;
|
||||
@ -177,9 +178,16 @@ class FlutterProject {
|
||||
/// Completes with an empty [FlutterManifest], if the file does not exist.
|
||||
/// Completes with a ToolExit on validation error.
|
||||
static FlutterManifest _readManifest(String path) {
|
||||
final FlutterManifest manifest = FlutterManifest.createFromPath(path);
|
||||
if (manifest == null)
|
||||
FlutterManifest manifest;
|
||||
try {
|
||||
manifest = FlutterManifest.createFromPath(path);
|
||||
} on YamlException catch (e) {
|
||||
printStatus('Error detected in pubspec.yaml:', emphasis: true);
|
||||
printError('$e');
|
||||
}
|
||||
if (manifest == null) {
|
||||
throwToolExit('Please correct the pubspec.yaml file at $path');
|
||||
}
|
||||
return manifest;
|
||||
}
|
||||
|
||||
|
||||
@ -40,7 +40,19 @@ void main() {
|
||||
|
||||
expect(
|
||||
() => FlutterProject.fromDirectory(directory),
|
||||
throwsA(isInstanceOf<Exception>()),
|
||||
throwsA(isInstanceOf<ToolExit>()),
|
||||
);
|
||||
});
|
||||
|
||||
testInMemory('fails on pubspec.yaml parse failure', () async {
|
||||
final Directory directory = fs.directory('myproject');
|
||||
directory.childFile('pubspec.yaml')
|
||||
..createSync(recursive: true)
|
||||
..writeAsStringSync(parseErrorPubspec);
|
||||
|
||||
expect(
|
||||
() => FlutterProject.fromDirectory(directory),
|
||||
throwsA(isInstanceOf<ToolExit>()),
|
||||
);
|
||||
});
|
||||
|
||||
@ -52,7 +64,7 @@ void main() {
|
||||
|
||||
expect(
|
||||
() => FlutterProject.fromDirectory(directory),
|
||||
throwsA(isInstanceOf<Exception>()),
|
||||
throwsA(isInstanceOf<ToolExit>()),
|
||||
);
|
||||
});
|
||||
|
||||
@ -575,6 +587,14 @@ flutter:
|
||||
invalid:
|
||||
''';
|
||||
|
||||
String get parseErrorPubspec => '''
|
||||
name: hello
|
||||
# Whitespace is important.
|
||||
flutter:
|
||||
something:
|
||||
something_else:
|
||||
''';
|
||||
|
||||
String projectFileWithBundleId(String id, {String qualifier}) {
|
||||
return '''
|
||||
97C147061CF9000F007C117D /* Debug */ = {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user