Finish package-centered refactor of template data (#1699)
* Fix bug where --version didn't do anything
* Review comments
* Rebuild test package docs for retype deprecation in dev.55
* dartdoc_test as full integration test now
* Eliminate unused initializer and update pubspec
* allow unversioned
* Add test
* Add gitignore to test_package_minimum
* Squash changes
* fix tests
* dartfmt + fix class templating
* dartfmt
* Remove extra copy of contextFromArgvTemp introduced in merge resolution
diff --git a/lib/dartdoc.dart b/lib/dartdoc.dart
index 6f963c1..1861e48 100644
--- a/lib/dartdoc.dart
+++ b/lib/dartdoc.dart
@@ -219,7 +219,7 @@
}
if (referredFromElements.isEmpty && referredFrom == 'index.html')
- referredFromElements.add(packageGraph);
+ referredFromElements.add(packageGraph.defaultPackage);
String message = warnOn;
if (referredFrom == 'index.json') message = '$warnOn (from index.json)';
packageGraph.warnOnElement(warnOnElement, kind,
diff --git a/lib/src/html/html_generator_instance.dart b/lib/src/html/html_generator_instance.dart
index c4bc561..58c8ae3 100644
--- a/lib/src/html/html_generator_instance.dart
+++ b/lib/src/html/html_generator_instance.dart
@@ -87,7 +87,7 @@
void _generateDocs() {
if (_packageGraph == null) return;
- generatePackage();
+ generatePackage(_packageGraph, _packageGraph.defaultPackage);
for (var package in _packageGraph.localPackages) {
for (var lib in filterNonDocumented(package.libraries)) {
@@ -164,9 +164,10 @@
}
}
- void generatePackage() {
- TemplateData data = new PackageTemplateData(_options, _packageGraph);
- logInfo('documenting ${_packageGraph.name}');
+ void generatePackage(PackageGraph packageGraph, Package package) {
+ TemplateData data =
+ new PackageTemplateData(_options, packageGraph, package);
+ logInfo('documenting ${package.name}');
_build('index.html', _templates.indexTemplate, data);
}
diff --git a/lib/src/html/template_data.dart b/lib/src/html/template_data.dart
index 7014a5c..290640e 100644
--- a/lib/src/html/template_data.dart
+++ b/lib/src/html/template_data.dart
@@ -82,8 +82,10 @@
}
}
-class PackageTemplateData extends TemplateData<PackageGraph> {
- PackageTemplateData(HtmlOptions htmlOptions, PackageGraph packageGraph)
+class PackageTemplateData extends TemplateData<Package> {
+ final Package package;
+ PackageTemplateData(
+ HtmlOptions htmlOptions, PackageGraph packageGraph, this.package)
: super(htmlOptions, packageGraph);
@override
@@ -91,26 +93,25 @@
@override
List get navLinks => [];
@override
- String get title => '${packageGraph.name} - Dart API docs';
+ String get title => '${package.name} - Dart API docs';
@override
- PackageGraph get self => packageGraph;
+ Package get self => package;
@override
- String get layoutTitle => _layoutTitle(packageGraph.name, kind, false);
+ String get layoutTitle => _layoutTitle(package.name, kind, false);
@override
String get metaDescription =>
- '${packageGraph.name} API docs, for the Dart programming language.';
+ '${package.name} API docs, for the Dart programming language.';
@override
Iterable<Subnav> getSubNavItems() {
- return [new Subnav('Libraries', '${packageGraph.href}#libraries')];
+ return [new Subnav('Libraries', '${package.href}#libraries')];
}
@override
- bool get hasHomepage => packageGraph.hasHomepage;
+ bool get hasHomepage => package.hasHomepage;
@override
- String get homepage => packageGraph.homepage;
-
+ String get homepage => package.homepage;
@override
- String get kind => packageGraph.kind;
+ String get kind => package.kind;
/// `null` for packages because they are at the root – not needed
@override
@@ -134,7 +135,7 @@
String get metaDescription =>
'${library.name} library API docs, for the Dart programming language.';
@override
- List get navLinks => [packageGraph];
+ List get navLinks => [packageGraph.defaultPackage];
@override
Iterable<Subnav> getSubNavItems() sync* {
if (library.hasPublicClasses)
@@ -186,7 +187,7 @@
String get layoutTitle => _layoutTitle(
clazz.nameWithLinkedGenerics, clazz.fullkind, clazz.isDeprecated);
@override
- List get navLinks => [packageGraph, library];
+ List get navLinks => [packageGraph.defaultPackage, library];
@override
String get htmlBase => '..';
@override
@@ -238,7 +239,7 @@
String get layoutTitle => _layoutTitle(
constructor.name, constructor.fullKind, constructor.isDeprecated);
@override
- List get navLinks => [packageGraph, library];
+ List get navLinks => [packageGraph.defaultPackage, library];
@override
List get navLinksWithGenerics => [clazz];
@override
@@ -273,7 +274,7 @@
'API docs for the ${eNum.name} enum from the ${library.name} library, '
'for the Dart programming language.';
@override
- List get navLinks => [packageGraph, library];
+ List get navLinks => [packageGraph.defaultPackage, library];
@override
String get htmlBase => '..';
@override
@@ -306,7 +307,7 @@
'API docs for the ${function.name} function from the '
'${library.name} library, for the Dart programming language.';
@override
- List get navLinks => [packageGraph, library];
+ List get navLinks => [packageGraph.defaultPackage, library];
@override
Iterable<Subnav> getSubNavItems() => _gatherSubnavForInvokable(function);
@override
@@ -335,7 +336,7 @@
'API docs for the ${method.name} method from the ${clazz.name} class, '
'for the Dart programming language.';
@override
- List get navLinks => [packageGraph, library];
+ List get navLinks => [packageGraph.defaultPackage, library];
@override
List get navLinksWithGenerics => [clazz];
@override
@@ -367,7 +368,7 @@
'API docs for the ${property.name} $type from the ${clazz.name} class, '
'for the Dart programming language.';
@override
- List get navLinks => [packageGraph, library];
+ List get navLinks => [packageGraph.defaultPackage, library];
@override
List get navLinksWithGenerics => [clazz];
@override
@@ -407,7 +408,7 @@
'API docs for the ${typeDef.name} property from the '
'${library.name} library, for the Dart programming language.';
@override
- List get navLinks => [packageGraph, library];
+ List get navLinks => [packageGraph.defaultPackage, library];
@override
String get htmlBase => '..';
@override
@@ -436,7 +437,7 @@
'API docs for the ${property.name} $_type from the '
'${library.name} library, for the Dart programming language.';
@override
- List get navLinks => [packageGraph, library];
+ List get navLinks => [packageGraph.defaultPackage, library];
@override
String get htmlBase => '..';
diff --git a/lib/src/html/templates.dart b/lib/src/html/templates.dart
index 42189ef..c339092 100644
--- a/lib/src/html/templates.dart
+++ b/lib/src/html/templates.dart
@@ -13,6 +13,7 @@
const _partials = const <String>[
'callable',
'callable_multiline',
+ 'class',
'constant',
'footer',
'head',
diff --git a/lib/src/model.dart b/lib/src/model.dart
index 5d3750b..c41682a 100644
--- a/lib/src/model.dart
+++ b/lib/src/model.dart
@@ -1064,7 +1064,7 @@
o is Class &&
name == o.name &&
o.library.name == library.name &&
- o.library.packageGraph.name == library.packageGraph.name;
+ o.library.package.name == library.package.name;
}
class Constructor extends ModelElement
@@ -1222,7 +1222,7 @@
// Penalty for deprecated libraries.
if (lib.isDeprecated) scoredCandidate.alterScore(-1.0, 'is deprecated');
// Give a big boost if the library has the package name embedded in it.
- if (packageGraph.namePieces.intersection(lib.namePieces).length > 0) {
+ if (lib.package.namePieces.intersection(lib.namePieces).length > 0) {
scoredCandidate.alterScore(1.0, 'embeds package name');
}
// Give a tiny boost for libraries with long names, assuming they're
@@ -3928,8 +3928,7 @@
String get typeName => 'operator';
}
-class PackageGraph extends Canonicalization
- with Nameable, Warnable, LibraryContainer {
+class PackageGraph {
// TODO(jcollins-g): This constructor is convoluted. Clean this up by
// building Libraries and adding them to Packages, then adding Packages
// to this graph.
@@ -3952,6 +3951,10 @@
assert(!_elementToLibrary.containsKey(lib.element));
_elementToLibrary[element] = lib;
});
+
+ // Make sure the default package exists, even if it has no libraries.
+ // This can happen for packages that only contain embedder SDKs.
+ new Package.fromPackageMeta(packageMeta, this);
allLibrariesAdded = true;
// Go through docs of every ModelElement in package to pre-build the macros
@@ -3975,12 +3978,6 @@
/// is true.
bool allImplementorsAdded = false;
- @override
- List<String> get containerOrder => [];
-
- @override
- LibraryContainer get enclosingContainer => null;
-
Map<String, List<Class>> get implementors {
assert(allImplementorsAdded);
return _implementors;
@@ -4007,8 +4004,10 @@
/// PackageMeta for the default package.
final PackageMeta packageMeta;
+ /// Name of the default package.
+ String get defaultPackageName => packageMeta.name;
+
/// Dartdoc's configuration flags.
- @override
final DartdocOptionContext config;
Map<String, Map<String, dynamic>> __crossdartJson;
@@ -4032,16 +4031,14 @@
return __crossdartJson;
}
- @override
- Set<String> get locationPieces => new Set();
+ Package _defaultPackage;
+ Package get defaultPackage {
+ if (_defaultPackage == null) {
+ _defaultPackage = new Package.fromPackageMeta(packageMeta, this);
+ }
+ return _defaultPackage;
+ }
- @override
- Library get canonicalLibrary => null;
-
- Package get defaultPackage =>
- localPackages.firstWhere((p) => p.packageMeta == packageMeta);
-
- @override
PackageGraph get packageGraph => this;
/// Map of package name to Package.
@@ -4061,20 +4058,7 @@
return _sdkLibrarySources;
}
- @override
- bool get isDocumented => true;
-
- @override
- List<Locatable> get documentationFrom => [defaultPackage];
-
- @override
- Warnable get enclosingElement => null;
-
- @override
- bool get hasExtendedDocumentation => documentation.isNotEmpty;
-
final Map<Element, Library> _elementToLibrary = {};
- String _docsAsHtml;
final Map<String, String> _macros = {};
bool allLibrariesAdded = false;
bool _macrosAdded = false;
@@ -4092,12 +4076,6 @@
return (_allRootDirs.contains(element.library.packageMeta?.resolvedDir));
}
- @override
- Element get element => null;
-
- @override
- String get location => '(top level package)';
-
/// Flush out any warnings we might have collected while
/// [PackageWarningOptions.autoFlush] was false.
void flushWarnings() {
@@ -4106,25 +4084,8 @@
Tuple2<int, int> get lineAndColumn => null;
- @override
- String get fullyQualifiedName => name;
-
- @override
- bool get isCanonical => true;
-
PackageWarningCounter get packageWarningCounter => _packageWarningCounter;
- @override
- void warn(PackageWarning kind,
- {String message,
- Iterable<Locatable> referredFrom,
- Iterable<String> extendedDebug}) {
- warnOnElement(this, kind,
- message: message,
- referredFrom: referredFrom,
- extendedDebug: extendedDebug);
- }
-
/// Returns colon-stripped name and location of the given locatable.
static Tuple2<String, String> nameAndLocation(Locatable locatable) {
String locatableName = '<unknown>';
@@ -4358,11 +4319,6 @@
return _libraryElementReexportedBy;
}
- @override
- String get documentation {
- return hasDocumentationFile ? documentationFile.contents : null;
- }
-
/// A lookup index for hrefs to allow warnings to indicate where a broken
/// link or orphaned file may have come from. Not cached because
/// [ModelElement]s can be created at any time and we're basing this
@@ -4395,32 +4351,6 @@
return hrefMap;
}
- @override
- String get documentationAsHtml {
- if (_docsAsHtml != null) return _docsAsHtml;
- _docsAsHtml = new Documentation.forElement(this).asHtml;
-
- return _docsAsHtml;
- }
-
- FileContents get documentationFile => packageMeta.getReadmeContents();
-
- // TODO: make this work
- @override
- bool get hasDocumentation =>
- documentationFile != null && documentationFile.contents.isNotEmpty;
-
- // TODO: Clients should use [documentationFile] so they can act differently on
- // plain text or markdown.
- bool get hasDocumentationFile => documentationFile != null;
-
- // TODO: make this work
- @override
- String get href => 'index.html';
-
- @override
- bool get isSdk => packageMeta.isSdk;
-
void _addToImplementors(Class c) {
assert(!allImplementorsAdded);
_implementors.putIfAbsent(c.href, () => []);
@@ -4448,12 +4378,10 @@
}
}
- @override
List<Library> get libraries =>
packages.expand((p) => p.libraries).toList()..sort();
List<Library> _publicLibraries;
- @override
Iterable<Library> get publicLibraries {
if (_publicLibraries == null) {
assert(allLibrariesAdded);
@@ -4481,18 +4409,6 @@
return _localPublicLibraries;
}
- bool get hasHomepage =>
- packageMeta.homepage != null && packageMeta.homepage.isNotEmpty;
- String get homepage => packageMeta.homepage;
-
- @override
- String get name => packageMeta.name;
-
- String get kind => (packageGraph.isSdk) ? 'SDK' : 'package';
-
- @override
- String get oneLineDoc => '';
-
// Written from ModelElement.from.
ModelElement _objectElement;
@@ -4532,8 +4448,6 @@
return _inheritThrough;
}
- String get version => packageMeta.version ?? '0.0.0-unknown';
-
/// Looks up some [Library] that is reexporting this [Element]; not
/// necessarily the canonical [Library].
Library findLibraryFor(Element element) {
@@ -4556,7 +4470,7 @@
}
@override
- String toString() => isSdk ? 'SDK' : 'Package $name';
+ String toString() => 'PackageGraph built from ${defaultPackage.name}';
final Map<Element, Library> _canonicalLibraryFor = new Map();
@@ -4780,9 +4694,9 @@
implements Comparable<LibraryContainer> {
final List<Library> _libraries = [];
- /// An enclosing container's [libraries] must be a superset of this object's
- /// [libraries].
- LibraryContainer get enclosingContainer;
+ /// The name of the container or object that this LibraryContainer is a part
+ /// of. Used for sorting in [containerOrder].
+ String get enclosingName;
List<Library> get libraries => _libraries;
Iterable<Library> get publicLibraries => filterNonPublic(libraries);
@@ -4799,16 +4713,15 @@
/// Returns:
/// -1 if this container is listed in [containerOrder].
- /// 0 if this container is named the same as the [enclosingContainer].
+ /// 0 if this container is named the same as the [enclosingName].
/// 1 if this container represents the SDK.
- /// 2 if this group has a name that contains the name of the [enclosingContainer].
+ /// 2 if this group has a name that contains the name [enclosingName].
/// 3 otherwise.
int get _group {
if (containerOrder.contains(name)) return -1;
- if (equalsIgnoreAsciiCase(name, enclosingContainer.name)) return 0;
+ if (equalsIgnoreAsciiCase(name, enclosingName)) return 0;
if (isSdk) return 1;
- if (name.toLowerCase().contains(enclosingContainer.name.toLowerCase()))
- return 2;
+ if (name.toLowerCase().contains(enclosingName.toLowerCase())) return 2;
return 3;
}
@@ -4845,7 +4758,7 @@
List<String> get containerOrder => config.categoryOrder;
@override
- Package get enclosingContainer => package;
+ String get enclosingName => package.name;
PackageGraph get packageGraph => package.packageGraph;
}
@@ -4863,11 +4776,8 @@
/// A [LibraryContainer] that contains [Library] objects related to a particular
/// package.
class Package extends LibraryContainer
- with
- Locatable
- // TODO(jcollins-g): implements Documentable
- implements
- Privacy {
+ with Locatable, Canonicalization, Warnable
+ implements Privacy, Documentable {
String _name;
PackageGraph _packageGraph;
final _isLocal;
@@ -4898,9 +4808,26 @@
}
Package._(this._name, this._packageGraph, this._packageMeta, this._isLocal);
+ @override
+ bool get isCanonical => true;
+ @override
+ Library get canonicalLibrary => null;
+
+ /// Pieces of the location split by [locationSplitter] (removing package: and
+ /// slashes).
+ @override
+ Set<String> get locationPieces => new Set();
final Set<Library> _allLibraries = new Set();
+ bool get hasHomepage =>
+ packageMeta.homepage != null && packageMeta.homepage.isNotEmpty;
+ String get homepage => packageMeta.homepage;
+ String get kind => (isSdk) ? 'SDK' : 'package';
+
+ @override
+ List<Locatable> get documentationFrom => [this];
+
/// Returns all libraries added to this package. May include non-documented
/// libraries, but is not guaranteed to include a complete list of
/// non-documented libraries unless they are all referenced by documented ones.
@@ -4916,8 +4843,42 @@
LibraryContainer get defaultCategory => nameToCategory[null];
+ String _documentationAsHtml;
@override
- List<Locatable> get documentationFrom => [this];
+ String get documentationAsHtml {
+ if (_documentationAsHtml != null) return _documentationAsHtml;
+ _documentationAsHtml = new Documentation.forElement(this).asHtml;
+
+ return _documentationAsHtml;
+ }
+
+ @override
+ String get documentation {
+ return hasDocumentationFile ? documentationFile.contents : null;
+ }
+
+ @override
+ bool get hasDocumentation =>
+ documentationFile != null && documentationFile.contents.isNotEmpty;
+
+ @override
+ bool get hasExtendedDocumentation => documentation.isNotEmpty;
+
+ // TODO: Clients should use [documentationFile] so they can act differently on
+ // plain text or markdown.
+ bool get hasDocumentationFile => documentationFile != null;
+
+ FileContents get documentationFile => packageMeta.getReadmeContents();
+
+ @override
+ String get oneLineDoc => '';
+
+ @override
+ bool get isDocumented =>
+ isFirstPackage || documentedWhere != DocumentLocation.missing;
+
+ @override
+ Warnable get enclosingElement => null;
bool _isPublic;
@override
@@ -4942,7 +4903,7 @@
}
@override
- PackageGraph get enclosingContainer => packageGraph;
+ String get enclosingName => packageGraph.defaultPackageName;
@override
String get fullyQualifiedName => 'package:$name';
@@ -4990,6 +4951,7 @@
@override
String get name => _name;
+ @override
PackageGraph get packageGraph => _packageGraph;
// Workaround for mustache4dart issue where templates do not recognize
@@ -5024,6 +4986,7 @@
}
DartdocOptionContext _config;
+ @override
DartdocOptionContext get config {
if (_config == null) {
_config = new DartdocOptionContext.fromContext(
@@ -5047,11 +5010,27 @@
return _packagePath;
}
+ String get version => packageMeta.version ?? '0.0.0-unknown';
+
+ @override
+ void warn(PackageWarning kind,
+ {String message,
+ Iterable<Locatable> referredFrom,
+ Iterable<String> extendedDebug}) {
+ packageGraph.warnOnElement(this, kind,
+ message: message,
+ referredFrom: referredFrom,
+ extendedDebug: extendedDebug);
+ }
+
final PackageMeta _packageMeta;
PackageMeta get packageMeta => _packageMeta;
@override
String toString() => name;
+
+ @override
+ Element get element => null;
}
class Parameter extends ModelElement implements EnclosedElement {
diff --git a/lib/src/package_meta.dart b/lib/src/package_meta.dart
index a2949b9..b227f17 100644
--- a/lib/src/package_meta.dart
+++ b/lib/src/package_meta.dart
@@ -85,8 +85,7 @@
// [config] is only here for sdkDir, and it's OK that it is the wrong
// context since sdkDir is argOnly and this is supposed to be a temporary
// workaround.
- // Workaround for dart-lang/sdk#32707. Replace with isInSdk once that works.
- if (libraryElement.source.uri.scheme == 'dart')
+ if (libraryElement.isInSdk)
return new PackageMeta.fromDir(new Directory(config.sdkDir));
return new PackageMeta.fromDir(
new File(pathLib.canonicalize(libraryElement.source.fullName)).parent);
diff --git a/lib/templates/_class.html b/lib/templates/_class.html
new file mode 100644
index 0000000..11d3d82
--- /dev/null
+++ b/lib/templates/_class.html
@@ -0,0 +1,6 @@
+<dt id="{{htmlId}}">
+ <span class="name {{#isDeprecated}}deprecated{{/isDeprecated}}">{{{linkedName}}}{{{linkedGenericParameters}}}</span>
+</dt>
+<dd>
+ {{{ oneLineDoc }}}
+</dd>
diff --git a/lib/templates/_footer.html b/lib/templates/_footer.html
index c7a6d04..3aa83c9 100644
--- a/lib/templates/_footer.html
+++ b/lib/templates/_footer.html
@@ -2,7 +2,7 @@
<footer>
<span class="no-break">
- {{packageGraph.name}} {{packageGraph.version}}
+ {{packageGraph.defaultPackage.name}} {{packageGraph.defaultPackage.version}}
</span>
<!-- footer-text placeholder -->
diff --git a/lib/templates/index.html b/lib/templates/index.html
index 684448a..41a041f 100644
--- a/lib/templates/index.html
+++ b/lib/templates/index.html
@@ -6,9 +6,11 @@
</div>
<div class="col-xs-12 col-sm-9 col-md-8 main-content">
- {{#packageGraph}}
+ {{#packageGraph.defaultPackage}}
{{>documentation}}
+ {{/packageGraph.defaultPackage}}
+ {{#packageGraph}}
{{#localPackages}}
<section class="summary">
{{#isFirstPackage}}
diff --git a/lib/templates/library.html b/lib/templates/library.html
index 89e3eee..e735a4d 100644
--- a/lib/templates/library.html
+++ b/lib/templates/library.html
@@ -18,12 +18,7 @@
<dl>
{{#library.publicClasses}}
- <dt id="{{htmlId}}">
- <span class="name {{#isDeprecated}}deprecated{{/isDeprecated}}">{{{linkedName}}}{{{linkedGenericParameters}}}</span>
- </dt>
- <dd>
- {{{ oneLineDoc }}}
- </dd>
+ {{>class}}
{{/library.publicClasses}}
</dl>
</section>
@@ -71,12 +66,7 @@
<dl>
{{#library.publicEnums}}
- <dt id="{{htmlId}}">
- {{{linkedName}}}
- </dt>
- <dd>
- {{{ oneLineDoc }}}
- </dd>
+ {{>class}}
{{/library.publicEnums}}
</dl>
</section>
@@ -100,12 +90,7 @@
<dl>
{{#library.publicExceptions}}
- <dt id="{{htmlId}}">
- <span class="name {{#isDeprecated}}deprecated{{/isDeprecated}}">{{{linkedName}}}</span>
- </dt>
- <dd>
- {{{ oneLineDoc }}}
- </dd>
+ {{>class}}
{{/library.publicExceptions}}
</dl>
</section>
diff --git a/test/dartdoc_test.dart b/test/dartdoc_test.dart
index 7bf6b1b..df6c17c 100644
--- a/test/dartdoc_test.dart
+++ b/test/dartdoc_test.dart
@@ -39,7 +39,7 @@
['--input', testPackageMinimumDir.path]));
DartdocResults results = await dartdoc.generateDocs();
PackageGraph p = results.packageGraph;
- assert(p.version == '0.0.0-unknown');
+ assert(p.defaultPackage.version == '0.0.0-unknown');
});
test('basic interlinking test', () async {
@@ -79,11 +79,12 @@
DartdocResults results = await dartdoc.generateDocs();
expect(results.packageGraph, isNotNull);
- PackageGraph p = results.packageGraph;
+ PackageGraph packageGraph = results.packageGraph;
+ Package p = packageGraph.defaultPackage;
expect(p.name, 'test_package');
expect(p.hasDocumentationFile, isTrue);
- expect(p.defaultPackage.publicLibraries, hasLength(10));
- expect(p.localPackages.length, equals(1));
+ expect(packageGraph.defaultPackage.publicLibraries, hasLength(10));
+ expect(packageGraph.localPackages.length, equals(1));
});
test('generate docs for ${pathLib.basename(testPackageBadDir.path)} fails',
@@ -109,9 +110,9 @@
expect(results.packageGraph, isNotNull);
PackageGraph p = results.packageGraph;
- expect(p.name, 'test_package_small');
- expect(p.hasHomepage, isFalse);
- expect(p.hasDocumentationFile, isFalse);
+ expect(p.defaultPackage.name, 'test_package_small');
+ expect(p.defaultPackage.hasHomepage, isFalse);
+ expect(p.defaultPackage.hasDocumentationFile, isFalse);
expect(p.localPublicLibraries, hasLength(1));
});
@@ -124,8 +125,8 @@
expect(results.packageGraph, isNotNull);
PackageGraph p = results.packageGraph;
- expect(p.name, 'test_package');
- expect(p.hasDocumentationFile, isTrue);
+ expect(p.defaultPackage.name, 'test_package');
+ expect(p.defaultPackage.hasDocumentationFile, isTrue);
expect(p.libraries, hasLength(1));
expect(p.libraries.map((lib) => lib.name), contains('fake'));
});
@@ -139,8 +140,8 @@
expect(results.packageGraph, isNotNull);
PackageGraph p = results.packageGraph;
- expect(p.name, 'test_package');
- expect(p.hasDocumentationFile, isTrue);
+ expect(p.defaultPackage.name, 'test_package');
+ expect(p.defaultPackage.hasDocumentationFile, isTrue);
expect(p.localPublicLibraries, hasLength(9));
expect(p.localPublicLibraries.map((lib) => lib.name).contains('fake'),
isFalse);
@@ -157,16 +158,16 @@
expect(results.packageGraph, isNotNull);
PackageGraph p = results.packageGraph;
- expect(p.name, 'test_package_embedder_yaml');
- expect(p.hasDocumentationFile, isFalse);
+ expect(p.defaultPackage.name, 'test_package_embedder_yaml');
+ expect(p.defaultPackage.hasDocumentationFile, isFalse);
expect(p.libraries, hasLength(3));
expect(p.libraries.map((lib) => lib.name).contains('dart:core'), isTrue);
expect(p.libraries.map((lib) => lib.name).contains('dart:async'), isTrue);
expect(p.libraries.map((lib) => lib.name).contains('dart:bear'), isTrue);
- expect(p.packageMap.length, equals(1));
- // Things that do not override the core SDK do not belong in their own package.
+ expect(p.packageMap.length, equals(2));
+ // Things that do not override the core SDK belong in their own package.
expect(p.packageMap["Dart"].isSdk, isTrue);
- expect(p.packageMap["test_package_embedder_yaml"], isNull);
+ expect(p.packageMap["test_package_embedder_yaml"].isSdk, isFalse);
// Should be true once dart-lang/sdk#32707 is fixed.
//expect(
// p.publicLibraries,
@@ -174,9 +175,8 @@
// (l.element as LibraryElement).isInSdk == l.packageMeta.isSdk));
// Ensure that we actually parsed some source by checking for
// the 'Bear' class.
- Library dart_bear =
- p.libraries.firstWhere((lib) => lib.name == 'dart:bear');
- expect(dart_bear, isNotNull);
+ Library dart_bear = p.packageMap["Dart"].libraries
+ .firstWhere((lib) => lib.name == 'dart:bear');
expect(
dart_bear.allClasses.map((cls) => cls.name).contains('Bear'), isTrue);
expect(p.packageMap["Dart"].publicLibraries, hasLength(3));
diff --git a/test/model_test.dart b/test/model_test.dart
index 97cd678..f0a22ed 100644
--- a/test/model_test.dart
+++ b/test/model_test.dart
@@ -19,13 +19,16 @@
@override
final List<String> containerOrder;
@override
- final LibraryContainer enclosingContainer;
+ String enclosingName;
@override
final String name;
@override
bool get isSdk => false;
- TestLibraryContainer(this.name, this.containerOrder, this.enclosingContainer);
+ TestLibraryContainer(
+ this.name, this.containerOrder, LibraryContainer enclosingContainer) {
+ enclosingName = enclosingContainer?.name;
+ }
}
class TestLibraryContainerSdk extends TestLibraryContainer {
@@ -200,7 +203,7 @@
group('Package', () {
group('test package', () {
test('name', () {
- expect(packageGraph.name, 'test_package');
+ expect(packageGraph.defaultPackage.name, 'test_package');
});
test('libraries', () {
@@ -209,8 +212,9 @@
});
test('homepage', () {
- expect(packageGraph.hasHomepage, true);
- expect(packageGraph.homepage, equals('http://github.com/dart-lang'));
+ expect(packageGraph.defaultPackage.hasHomepage, true);
+ expect(packageGraph.defaultPackage.homepage,
+ equals('http://github.com/dart-lang'));
});
test('packages', () {
@@ -232,36 +236,39 @@
});
test('has documentation', () {
- expect(packageGraph.hasDocumentationFile, isTrue);
- expect(packageGraph.hasDocumentation, isTrue);
+ expect(packageGraph.defaultPackage.hasDocumentationFile, isTrue);
+ expect(packageGraph.defaultPackage.hasDocumentation, isTrue);
});
test('documentation exists', () {
- expect(packageGraph.documentation.startsWith('# Best Package'), isTrue);
+ expect(
+ packageGraph.defaultPackage.documentation
+ .startsWith('# Best Package'),
+ isTrue);
});
test('documentation can be rendered as HTML', () {
- expect(packageGraph.documentationAsHtml,
+ expect(packageGraph.defaultPackage.documentationAsHtml,
contains('<h1>Best Package</h1>'));
});
test('sdk name', () {
- expect(sdkAsPackageGraph.name, equals('Dart'));
- expect(sdkAsPackageGraph.kind, equals('SDK'));
+ expect(sdkAsPackageGraph.defaultPackage.name, equals('Dart'));
+ expect(sdkAsPackageGraph.defaultPackage.kind, equals('SDK'));
});
test('sdk homepage', () {
- expect(sdkAsPackageGraph.hasHomepage, isTrue);
- expect(sdkAsPackageGraph.homepage,
+ expect(sdkAsPackageGraph.defaultPackage.hasHomepage, isTrue);
+ expect(sdkAsPackageGraph.defaultPackage.homepage,
equals('https://github.com/dart-lang/sdk'));
});
test('sdk version', () {
- expect(sdkAsPackageGraph.version, isNotNull);
+ expect(sdkAsPackageGraph.defaultPackage.version, isNotNull);
});
test('sdk description', () {
- expect(sdkAsPackageGraph.documentation,
+ expect(sdkAsPackageGraph.defaultPackage.documentation,
startsWith('Welcome to the Dart API reference doc'));
});
@@ -279,10 +286,14 @@
group('test small package', () {
test('does not have documentation', () {
- expect(utils.testPackageGraphSmall.hasDocumentation, isFalse);
- expect(utils.testPackageGraphSmall.hasDocumentationFile, isFalse);
- expect(utils.testPackageGraphSmall.documentationFile, isNull);
- expect(utils.testPackageGraphSmall.documentation, isNull);
+ expect(utils.testPackageGraphSmall.defaultPackage.hasDocumentation,
+ isFalse);
+ expect(utils.testPackageGraphSmall.defaultPackage.hasDocumentationFile,
+ isFalse);
+ expect(utils.testPackageGraphSmall.defaultPackage.documentationFile,
+ isNull);
+ expect(
+ utils.testPackageGraphSmall.defaultPackage.documentation, isNull);
});
});
diff --git a/testing/test_package_docs/ex/ex-library.html b/testing/test_package_docs/ex/ex-library.html
index 1e707a0..443ea26 100644
--- a/testing/test_package_docs/ex/ex-library.html
+++ b/testing/test_package_docs/ex/ex-library.html
@@ -425,7 +425,7 @@
<dl>
<dt id="Animal">
- <a href="ex/Animal-class.html">Animal</a>
+ <span class="name "><a href="ex/Animal-class.html">Animal</a></span>
</dt>
<dd>
Referencing <a href="ex/processMessage.html">processMessage</a> (or other things) here should not break
diff --git a/testing/test_package_docs/fake/fake-library.html b/testing/test_package_docs/fake/fake-library.html
index 75e9a75..79f8d42 100644
--- a/testing/test_package_docs/fake/fake-library.html
+++ b/testing/test_package_docs/fake/fake-library.html
@@ -818,7 +818,7 @@
<dl>
<dt id="Color">
- <a href="fake/Color-class.html">Color</a>
+ <span class="name "><a href="fake/Color-class.html">Color</a></span>
</dt>
<dd>
An <code>enum</code> for ROYGBIV constants.