Skip to content

Commit acc591f

Browse files
authored
Move many package and library tests from end2end to unit tests (#2345)
Move many package and library tests from end2end to unit tests
1 parent 2bef0f2 commit acc591f

8 files changed

+430
-271
lines changed

lib/src/package_config_provider.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ class FakePackageConfigProvider implements PackageConfigProvider {
3333

3434
@override
3535
Future<package_config.PackageConfig> findPackageConfig(Folder dir) async {
36+
assert(_packageConfigData[dir.path] != null,
37+
'Package config data at ${dir.path} should not be null');
3638
return package_config.PackageConfig(_packageConfigData[dir.path]);
3739
}
3840
}

lib/src/package_meta.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import 'package:analyzer/file_system/file_system.dart';
1212
import 'package:analyzer/file_system/physical_file_system.dart';
1313
import 'package:analyzer/src/generated/sdk.dart';
1414
import 'package:dartdoc/dartdoc.dart';
15+
import 'package:meta/meta.dart';
1516
import 'package:path/path.dart' as p;
1617
import 'package:yaml/yaml.dart';
1718

@@ -487,3 +488,8 @@ class _SdkMeta extends PubPackageMeta {
487488
@override
488489
File getChangelogContents() => null;
489490
}
491+
492+
@visibleForTesting
493+
void clearPackageMetaCache() {
494+
_packageMetaCache.clear();
495+
}

test/end2end/html_generator_test.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,6 @@ void main() {
121121
generator = await _initGeneratorForTest();
122122
packageGraph = await utils.bootBasicPackage(
123123
testPackageDuplicateDir.path,
124-
[],
125124
pubPackageMetaProvider,
126125
PhysicalPackageConfigProvider());
127126
tempOutput = await resourceProvider.createSystemTemp('doc_test_temp');

test/end2end/model_special_cases_test.dart

Lines changed: 45 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -27,27 +27,30 @@ final Version _platformVersion = Version.parse(_platformVersionString);
2727
final _testPackageGraphExperimentsMemo = AsyncMemoizer<PackageGraph>();
2828
Future<PackageGraph> get _testPackageGraphExperiments =>
2929
_testPackageGraphExperimentsMemo.runOnce(() => utils.bootBasicPackage(
30-
'testing/test_package_experiments',
31-
[],
32-
pubPackageMetaProvider,
33-
PhysicalPackageConfigProvider(),
34-
additionalArguments: [
35-
'--enable-experiment',
36-
'non-nullable',
37-
'--no-link-to-remote'
38-
]));
30+
'testing/test_package_experiments',
31+
pubPackageMetaProvider,
32+
PhysicalPackageConfigProvider(),
33+
additionalArguments: [
34+
'--enable-experiment',
35+
'non-nullable',
36+
'--no-link-to-remote'
37+
]));
3938

4039
final _testPackageGraphGinormousMemo = AsyncMemoizer<PackageGraph>();
4140
Future<PackageGraph> get _testPackageGraphGinormous =>
4241
_testPackageGraphGinormousMemo.runOnce(() => utils.bootBasicPackage(
43-
'testing/test_package',
44-
['css', 'code_in_commnets', 'excluded'],
45-
pubPackageMetaProvider,
46-
PhysicalPackageConfigProvider(),
47-
additionalArguments: [
48-
'--auto-include-dependencies',
49-
'--no-link-to-remote'
50-
]));
42+
'testing/test_package',
43+
pubPackageMetaProvider,
44+
PhysicalPackageConfigProvider(),
45+
excludeLibraries: [
46+
'css',
47+
'code_in_commnets',
48+
'excluded'
49+
],
50+
additionalArguments: [
51+
'--auto-include-dependencies',
52+
'--no-link-to-remote'
53+
]));
5154

5255
final _testPackageGraphSdkMemo = AsyncMemoizer<PackageGraph>();
5356
Future<PackageGraph> get _testPackageGraphSdk =>
@@ -261,9 +264,9 @@ void main() {
261264
setUpAll(() async {
262265
injectionPackageGraph = await utils.bootBasicPackage(
263266
'testing/test_package',
264-
['css', 'code_in_comments', 'excluded'],
265267
pubPackageMetaProvider,
266268
PhysicalPackageConfigProvider(),
269+
excludeLibraries: ['css', 'code_in_comments', 'excluded'],
267270
additionalArguments: ['--inject-html']);
268271

269272
injectionExLibrary =
@@ -429,79 +432,30 @@ void main() {
429432
sdkAsPackageGraph = await _testPackageGraphSdk;
430433
});
431434

432-
group('test package', () {
433-
test('sdk name', () {
434-
expect(sdkAsPackageGraph.defaultPackage.name, equals('Dart'));
435-
expect(sdkAsPackageGraph.defaultPackage.kind, equals('SDK'));
436-
});
437-
438-
test('sdk homepage', () {
439-
expect(sdkAsPackageGraph.defaultPackage.hasHomepage, isTrue);
440-
expect(sdkAsPackageGraph.defaultPackage.homepage,
441-
equals('https://github.com/dart-lang/sdk'));
442-
});
443-
444-
test('sdk version', () {
445-
expect(sdkAsPackageGraph.defaultPackage.version, isNotNull);
446-
});
447-
448-
test('sdk description', () {
449-
expect(sdkAsPackageGraph.defaultPackage.documentation,
450-
startsWith('Welcome'));
451-
});
452-
});
453-
454-
group('SDK-specific cases', () {
455-
test('Verify Interceptor is hidden from inheritance in docs', () {
456-
var htmlLibrary = sdkAsPackageGraph.libraries
457-
.singleWhere((l) => l.name == 'dart:html');
458-
var EventTarget =
459-
htmlLibrary.allClasses.singleWhere((c) => c.name == 'EventTarget');
460-
var hashCode = EventTarget.publicInstanceFields
461-
.singleWhere((f) => f.name == 'hashCode');
462-
var objectModelElement =
463-
sdkAsPackageGraph.specialClasses[SpecialClass.object];
464-
// If this fails, EventTarget might have been changed to no longer
465-
// inherit from Interceptor. If that's true, adjust test case to
466-
// another class that does.
467-
expect(
468-
hashCode.inheritance.any((c) => c.name == 'Interceptor'), isTrue);
469-
// If EventTarget really does start implementing hashCode, this will
470-
// fail.
471-
expect(hashCode.href,
472-
equals('${HTMLBASE_PLACEHOLDER}dart-core/Object/hashCode.html'));
473-
expect(
474-
hashCode.canonicalEnclosingContainer, equals(objectModelElement));
475-
expect(
476-
EventTarget.publicSuperChainReversed
477-
.any((et) => et.name == 'Interceptor'),
478-
isFalse);
479-
});
480-
481-
test('Verify pragma is hidden in SDK docs', () {
482-
var pragmaModelElement =
483-
sdkAsPackageGraph.specialClasses[SpecialClass.pragma];
484-
expect(pragmaModelElement.name, equals('pragma'));
485-
});
486-
});
487-
});
488-
489-
group('Library', () {
490-
Library dartAsyncLib;
491-
492-
setUpAll(() async {
493-
dartAsyncLib = (await _testPackageGraphSdk)
494-
.libraries
495-
.firstWhere((l) => l.name == 'dart:async');
496-
// Make sure the first library is dart:async
497-
expect(dartAsyncLib.name, 'dart:async');
498-
});
499-
500-
test('sdk library have formatted names', () {
501-
expect(dartAsyncLib.name, 'dart:async');
502-
expect(dartAsyncLib.dirName, 'dart-async');
503-
expect(dartAsyncLib.href,
504-
'${HTMLBASE_PLACEHOLDER}dart-async/dart-async-library.html');
435+
// Analyzer's MockSdk's html library doesn't conform to the expectations
436+
// of this test.
437+
test('Verify Interceptor is hidden from inheritance in docs', () {
438+
var htmlLibrary =
439+
sdkAsPackageGraph.libraries.singleWhere((l) => l.name == 'dart:html');
440+
var EventTarget =
441+
htmlLibrary.allClasses.singleWhere((c) => c.name == 'EventTarget');
442+
var hashCode = EventTarget.publicInstanceFields
443+
.singleWhere((f) => f.name == 'hashCode');
444+
var objectModelElement =
445+
sdkAsPackageGraph.specialClasses[SpecialClass.object];
446+
// If this fails, EventTarget might have been changed to no longer
447+
// inherit from Interceptor. If that's true, adjust test case to
448+
// another class that does.
449+
expect(hashCode.inheritance.any((c) => c.name == 'Interceptor'), isTrue);
450+
// If EventTarget really does start implementing hashCode, this will
451+
// fail.
452+
expect(hashCode.href,
453+
equals('${HTMLBASE_PLACEHOLDER}dart-core/Object/hashCode.html'));
454+
expect(hashCode.canonicalEnclosingContainer, equals(objectModelElement));
455+
expect(
456+
EventTarget.publicSuperChainReversed
457+
.any((et) => et.name == 'Interceptor'),
458+
isFalse);
505459
});
506460
});
507461
}

test/end2end/model_test.dart

Lines changed: 1 addition & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@ final _testPackageGraphMemo = AsyncMemoizer<PackageGraph>();
2424
Future<PackageGraph> get _testPackageGraph =>
2525
_testPackageGraphMemo.runOnce(() => utils.bootBasicPackage(
2626
'testing/test_package',
27-
['css', 'code_in_comments'],
2827
pubPackageMetaProvider,
2928
PhysicalPackageConfigProvider(),
29+
excludeLibraries: ['css', 'code_in_comments'],
3030
additionalArguments: ['--no-link-to-remote']));
3131

3232
/// For testing sort behavior.
@@ -70,7 +70,6 @@ void main() {
7070
Library exLibrary;
7171
Library fakeLibrary;
7272
Library twoExportsLib;
73-
Library interceptorsLib;
7473
Library baseClassLib;
7574
Library dartAsync;
7675

@@ -85,8 +84,6 @@ void main() {
8584
packageGraph.libraries.firstWhere((lib) => lib.name == 'dart:async');
8685
twoExportsLib =
8786
packageGraph.libraries.firstWhere((lib) => lib.name == 'two_exports');
88-
interceptorsLib = packageGraph.libraries
89-
.firstWhere((lib) => lib.name == 'dart:_interceptors');
9087
baseClassLib =
9188
packageGraph.libraries.firstWhere((lib) => lib.name == 'base_class');
9289
});
@@ -474,75 +471,6 @@ void main() {
474471
});
475472
});
476473

477-
group('Package', () {
478-
group('test package', () {
479-
test('name', () {
480-
expect(packageGraph.defaultPackage.name, 'test_package');
481-
});
482-
483-
test('libraries', () {
484-
expect(packageGraph.localPublicLibraries,
485-
hasLength(utils.kTestPackagePublicLibraries));
486-
expect(interceptorsLib.isPublic, isFalse);
487-
});
488-
489-
test('homepage', () {
490-
expect(packageGraph.defaultPackage.hasHomepage, true);
491-
expect(packageGraph.defaultPackage.homepage,
492-
equals('http://github.com/dart-lang'));
493-
});
494-
495-
test('packages', () {
496-
expect(packageGraph.localPackages, hasLength(1));
497-
498-
var package = packageGraph.localPackages.first;
499-
expect(package.name, 'test_package');
500-
expect(package.publicLibraries,
501-
hasLength(utils.kTestPackagePublicLibraries));
502-
});
503-
504-
test('is documented in library', () {
505-
expect(exLibrary.isDocumented, isTrue);
506-
});
507-
508-
test('has documentation', () {
509-
expect(packageGraph.defaultPackage.hasDocumentationFile, isTrue);
510-
expect(packageGraph.defaultPackage.hasDocumentation, isTrue);
511-
});
512-
513-
test('documentation exists', () {
514-
expect(
515-
packageGraph.defaultPackage.documentation
516-
.startsWith('# Best Package'),
517-
isTrue);
518-
});
519-
520-
test('documentation can be rendered as HTML', () {
521-
expect(packageGraph.defaultPackage.documentationAsHtml,
522-
contains('<h1 id="best-package">Best Package</h1>'));
523-
});
524-
525-
test('has anonymous libraries', () {
526-
expect(
527-
packageGraph.libraries
528-
.where((lib) => lib.name == 'anonymous_library'),
529-
hasLength(1));
530-
expect(
531-
packageGraph.libraries
532-
.where((lib) => lib.name == 'another_anonymous_lib'),
533-
hasLength(1));
534-
});
535-
});
536-
537-
group('SDK-specific cases', () {
538-
test('Verify pragma is hidden in docs', () {
539-
var HasPragma = fakeLibrary.allClasses
540-
.firstWhere((Class c) => c.name == 'HasPragma');
541-
expect(HasPragma.annotations, isEmpty);
542-
});
543-
});
544-
});
545-
546474
group('Library', () {
547475
Library anonLib,
548476
isDeprecated,

test/library_test.dart

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
2+
// for details. All rights reserved. Use of this source code is governed by a
3+
// BSD-style license that can be found in the LICENSE file.
4+
5+
import 'package:analyzer/file_system/file_system.dart';
6+
import 'package:analyzer/file_system/memory_file_system.dart';
7+
import 'package:analyzer/src/test_utilities/mock_sdk.dart';
8+
import 'package:dartdoc/src/dartdoc_options.dart';
9+
import 'package:dartdoc/src/model/model.dart';
10+
import 'package:dartdoc/src/package_config_provider.dart';
11+
import 'package:dartdoc/src/package_meta.dart';
12+
import 'package:test/test.dart';
13+
14+
import 'src/utils.dart' as utils;
15+
16+
void main() {
17+
MemoryResourceProvider resourceProvider;
18+
MockSdk mockSdk;
19+
Folder sdkFolder;
20+
21+
PackageMetaProvider packageMetaProvider;
22+
FakePackageConfigProvider packageConfigProvider;
23+
24+
setUp(() async {
25+
resourceProvider = MemoryResourceProvider();
26+
mockSdk = MockSdk(resourceProvider: resourceProvider);
27+
sdkFolder = utils.writeMockSdkFiles(mockSdk);
28+
29+
packageMetaProvider = PackageMetaProvider(
30+
PubPackageMeta.fromElement,
31+
PubPackageMeta.fromFilename,
32+
PubPackageMeta.fromDir,
33+
resourceProvider,
34+
sdkFolder,
35+
defaultSdk: mockSdk,
36+
);
37+
var optionSet = await DartdocOptionSet.fromOptionGenerators(
38+
'dartdoc', [createDartdocOptions], packageMetaProvider);
39+
optionSet.parseArguments([]);
40+
packageConfigProvider = FakePackageConfigProvider();
41+
// To build the package graph, we always ask package_config for a
42+
// [PackageConfig] for the SDK directory. Put a dummy entry in.
43+
packageConfigProvider.addPackageToConfigFor(
44+
sdkFolder.path, 'analyzer', Uri.file('/sdk/pkg/analyzer/'));
45+
});
46+
47+
test('libraries in SDK package have appropriate data', () async {
48+
var packageGraph = await utils.bootBasicPackage(
49+
sdkFolder.path, packageMetaProvider, packageConfigProvider,
50+
additionalArguments: [
51+
'--input',
52+
packageMetaProvider.defaultSdkDir.path,
53+
]);
54+
55+
var localPackages = packageGraph.localPackages;
56+
expect(localPackages, hasLength(1));
57+
var sdkPackage = localPackages.single;
58+
expect(sdkPackage.name, equals('Dart'));
59+
60+
var dartAsyncLib =
61+
sdkPackage.libraries.firstWhere((l) => l.name == 'dart:async');
62+
expect(dartAsyncLib.name, 'dart:async');
63+
expect(dartAsyncLib.dirName, 'dart-async');
64+
expect(dartAsyncLib.href,
65+
'${HTMLBASE_PLACEHOLDER}dart-async/dart-async-library.html');
66+
});
67+
}

0 commit comments

Comments
 (0)