diff --git a/lib/dartdoc.dart b/lib/dartdoc.dart index df2e0bac74..4966dfff9f 100644 --- a/lib/dartdoc.dart +++ b/lib/dartdoc.dart @@ -66,8 +66,7 @@ class Dartdoc extends PackageBuilder { /// An asynchronous factory method that builds Dartdoc's file writers /// and returns a Dartdoc object with them. static withDefaultGenerators(DartdocGeneratorOptionContext config) async { - List generators = - await initGenerators(config); + List generators = await initGenerators(config); return new Dartdoc._(config, generators); } diff --git a/lib/src/model.dart b/lib/src/model.dart index ffb2aef65a..40edde8b6b 100644 --- a/lib/src/model.dart +++ b/lib/src/model.dart @@ -4396,7 +4396,7 @@ class PackageGraph extends Canonicalization return _inheritThrough; } - String get version => packageMeta.version; + String get version => packageMeta.version ?? '0.0.0-unknown'; /// Looks up some [Library] that is reexporting this [Element]; not /// necessarily the canonical [Library]. diff --git a/test/compare_output_test.dart b/test/compare_output_test.dart index 4d0f5e3b41..a85d7e9874 100644 --- a/test/compare_output_test.dart +++ b/test/compare_output_test.dart @@ -49,7 +49,8 @@ void main() { var result = Process.runSync(Platform.resolvedExecutable, args, workingDirectory: _testPackagePath); PackageMeta dartdocMeta = new PackageMeta.fromFilename(dartdocBin); - expect(result.stdout, equals('dartdoc version: ${dartdocMeta.version}\n')); + expect( + result.stdout, equals('dartdoc version: ${dartdocMeta.version}\n')); }); test("Validate html output of test_package", () async { diff --git a/test/dartdoc_test.dart b/test/dartdoc_test.dart index f03f0a676e..7bf6b1b3fe 100644 --- a/test/dartdoc_test.dart +++ b/test/dartdoc_test.dart @@ -28,13 +28,24 @@ void main() { delete(tempDir); }); - Future generatorContextFromArgvTemp(List argv) async { + Future generatorContextFromArgvTemp( + List argv) async { return await generatorContextFromArgv(argv..addAll(outputParam)); } + test('package without version produces valid semver in docs', () async { + Dartdoc dartdoc = await Dartdoc.withDefaultGenerators( + await generatorContextFromArgvTemp( + ['--input', testPackageMinimumDir.path])); + DartdocResults results = await dartdoc.generateDocs(); + PackageGraph p = results.packageGraph; + assert(p.version == '0.0.0-unknown'); + }); + test('basic interlinking test', () async { - Dartdoc dartdoc = await Dartdoc.withDefaultGenerators(await generatorContextFromArgvTemp( - ['--input', testPackageDir.path, '--link-to-remote'])); + Dartdoc dartdoc = await Dartdoc.withDefaultGenerators( + await generatorContextFromArgvTemp( + ['--input', testPackageDir.path, '--link-to-remote'])); DartdocResults results = await dartdoc.generateDocs(); PackageGraph p = results.packageGraph; Package tuple = p.publicPackages.firstWhere((p) => p.name == 'tuple'); @@ -60,7 +71,6 @@ void main() { contains(stringLink)); }); - test('generate docs for ${pathLib.basename(testPackageDir.path)} works', () async { Dartdoc dartdoc = await Dartdoc.withDefaultGenerators( @@ -79,7 +89,8 @@ void main() { test('generate docs for ${pathLib.basename(testPackageBadDir.path)} fails', () async { Dartdoc dartdoc = await Dartdoc.withDefaultGenerators( - await generatorContextFromArgvTemp(['--input', testPackageBadDir.path])); + await generatorContextFromArgvTemp( + ['--input', testPackageBadDir.path])); try { await dartdoc.generateDocs(); @@ -91,7 +102,8 @@ void main() { test('generate docs for a package that does not have a readme', () async { Dartdoc dartdoc = await Dartdoc.withDefaultGenerators( - await generatorContextFromArgvTemp(['--input', testPackageWithNoReadme.path])); + await generatorContextFromArgvTemp( + ['--input', testPackageWithNoReadme.path])); DartdocResults results = await dartdoc.generateDocs(); expect(results.packageGraph, isNotNull); @@ -104,8 +116,9 @@ void main() { }); test('generate docs including a single library', () async { - Dartdoc dartdoc = await Dartdoc.withDefaultGenerators(await generatorContextFromArgvTemp( - ['--input', testPackageDir.path, '--include', 'fake'])); + Dartdoc dartdoc = await Dartdoc.withDefaultGenerators( + await generatorContextFromArgvTemp( + ['--input', testPackageDir.path, '--include', 'fake'])); DartdocResults results = await dartdoc.generateDocs(); expect(results.packageGraph, isNotNull); @@ -118,8 +131,9 @@ void main() { }); test('generate docs excluding a single library', () async { - Dartdoc dartdoc = await Dartdoc.withDefaultGenerators(await generatorContextFromArgvTemp( - ['--input', testPackageDir.path, '--exclude', 'fake'])); + Dartdoc dartdoc = await Dartdoc.withDefaultGenerators( + await generatorContextFromArgvTemp( + ['--input', testPackageDir.path, '--exclude', 'fake'])); DartdocResults results = await dartdoc.generateDocs(); expect(results.packageGraph, isNotNull); @@ -135,8 +149,9 @@ void main() { test('generate docs for package with embedder yaml', () async { PackageMeta meta = new PackageMeta.fromDir(testPackageWithEmbedderYaml); if (meta.needsPubGet) meta.runPubGet(); - Dartdoc dartdoc = await Dartdoc.withDefaultGenerators(await generatorContextFromArgvTemp( - ['--input', testPackageWithEmbedderYaml.path])); + Dartdoc dartdoc = await Dartdoc.withDefaultGenerators( + await generatorContextFromArgvTemp( + ['--input', testPackageWithEmbedderYaml.path])); DartdocResults results = await dartdoc.generateDocs(); expect(results.packageGraph, isNotNull); diff --git a/test/src/utils.dart b/test/src/utils.dart index 993d0c0d72..9a650bd1c1 100644 --- a/test/src/utils.dart +++ b/test/src/utils.dart @@ -21,22 +21,23 @@ PackageGraph testPackageGraphSdk; final Directory testPackageBadDir = new Directory('testing/test_package_bad'); final Directory testPackageDir = new Directory('testing/test_package'); +final Directory testPackageMinimumDir = + new Directory('testing/test_package_minimum'); final Directory testPackageWithEmbedderYaml = new Directory('testing/test_package_embedder_yaml'); final Directory testPackageWithNoReadme = new Directory('testing/test_package_small'); - /// Convenience factory to build a [DartdocGeneratorOptionContext] and associate /// it with a [DartdocOptionSet] based on the current working directory. -Future generatorContextFromArgv(List argv) async { - DartdocOptionSet optionSet = await DartdocOptionSet - .fromOptionGenerators('dartdoc', [createDartdocOptions, createGeneratorOptions]); +Future generatorContextFromArgv( + List argv) async { + DartdocOptionSet optionSet = await DartdocOptionSet.fromOptionGenerators( + 'dartdoc', [createDartdocOptions, createGeneratorOptions]); optionSet.parseArguments(argv); return new DartdocGeneratorOptionContext(optionSet, Directory.current); } - /// Convenience factory to build a [DartdocOptionContext] and associate it with a /// [DartdocOptionSet] based on the current working directory. Future contextFromArgv(List argv) async { diff --git a/testing/test_package_minimum/.gitignore b/testing/test_package_minimum/.gitignore new file mode 100644 index 0000000000..70e751d287 --- /dev/null +++ b/testing/test_package_minimum/.gitignore @@ -0,0 +1,2 @@ +doc/api/ +pubspec.lock diff --git a/testing/test_package_minimum/lib/main.dart b/testing/test_package_minimum/lib/main.dart new file mode 100644 index 0000000000..e14d75224e --- /dev/null +++ b/testing/test_package_minimum/lib/main.dart @@ -0,0 +1 @@ +library small; diff --git a/testing/test_package_minimum/pubspec.yaml b/testing/test_package_minimum/pubspec.yaml new file mode 100644 index 0000000000..062b6ccd19 --- /dev/null +++ b/testing/test_package_minimum/pubspec.yaml @@ -0,0 +1 @@ +name: test_package_minimal diff --git a/tool/grind.dart b/tool/grind.dart index 2d38b541ab..e700b4a583 100644 --- a/tool/grind.dart +++ b/tool/grind.dart @@ -732,9 +732,8 @@ testPreviewDart2() async { List parameters = ['--preview-dart-2', '--enable-asserts']; // sdk#32901 is really bad on Windows. - for (File dartFile in testFiles - .where((f) => - !f.path.endsWith('html_generator_test.dart') && !Platform.isWindows)) { + for (File dartFile in testFiles.where((f) => + !f.path.endsWith('html_generator_test.dart') && !Platform.isWindows)) { // absolute path to work around dart-lang/sdk#32901 await testFutures.addFuture(new SubprocessLauncher( 'dart2-${pathLib.basename(dartFile.absolute.path)}')