diff --git a/lib/src/dartdoc_options.dart b/lib/src/dartdoc_options.dart index 4edc9ebeb9..fcd9dba42f 100644 --- a/lib/src/dartdoc_options.dart +++ b/lib/src/dartdoc_options.dart @@ -1022,13 +1022,12 @@ Future> createDartdocOptions() async { // This could be a ArgOnly, but trying to not provide too many ways // to set the flutter root. new DartdocOptionSyntheticOnly( - 'flutterRoot', - (DartdocSyntheticOption option, Directory dir) => - resolveTildePath(Platform.environment['FLUTTER_ROOT']), - isDir: true, - help: 'Root of the Flutter SDK, specified from environment.', - mustExist: true, - ), + 'flutterRoot', + (DartdocSyntheticOption option, Directory dir) => + resolveTildePath(Platform.environment['FLUTTER_ROOT']), + isDir: true, + help: 'Root of the Flutter SDK, specified from environment.', + mustExist: true), new DartdocOptionArgOnly('hideSdkText', false, hide: true, help: @@ -1120,8 +1119,12 @@ Future> createDartdocOptions() async { if (!option.parent['sdkDocs'].valueAt(dir) && (option.root['topLevelPackageMeta'].valueAt(dir) as PackageMeta) .requiresFlutter) { - return pathLib.join(option.root['flutterRoot'].valueAt(dir), 'bin', - 'cache', 'dart-sdk'); + String flutterRoot = option.root['flutterRoot'].valueAt(dir); + if (flutterRoot == null) { + throw new DartdocOptionError( + 'Top level package requires Flutter but FLUTTER_ROOT environment variable not set'); + } + return pathLib.join(flutterRoot, 'bin', 'cache', 'dart-sdk'); } return defaultSdkDir.absolute.path; }, help: 'Path to the SDK directory.', isDir: true, mustExist: true), diff --git a/test/compare_output_test.dart b/test/compare_output_test.dart index a85d7e9874..3fcb718828 100644 --- a/test/compare_output_test.dart +++ b/test/compare_output_test.dart @@ -27,6 +27,9 @@ String get _testPackageDocsPath => String get _testPackagePath => pathLib.fromUri(_currentFileUri.resolve('../testing/test_package')); +String get _testPackageFlutterPluginPath => pathLib + .fromUri(_currentFileUri.resolve('../testing/test_package_flutter_plugin')); + void main() { group('compare outputs', () { Directory tempDir; @@ -44,6 +47,21 @@ void main() { } }); + test('Validate missing FLUTTER_ROOT exception is clean', () async { + var args = [dartdocBin]; + var result = Process.runSync(Platform.resolvedExecutable, args, + environment: new Map.from(Platform.environment) + ..remove('FLUTTER_ROOT'), + includeParentEnvironment: false, + workingDirectory: _testPackageFlutterPluginPath); + expect( + result.stderr, + contains(new RegExp( + 'Top level package requires Flutter but FLUTTER_ROOT environment variable not set|test_package_flutter_plugin requires the Flutter SDK, version solving failed'))); + expect(result.stderr, isNot(contains('asynchronous gap'))); + expect(result.exitCode, isNot(0)); + }); + test("Validate --version works", () async { var args = [dartdocBin, '--version']; var result = Process.runSync(Platform.resolvedExecutable, args,