blob: 78340009de10c6c82c5cfe477e0d5838eda3448f [file] [log] [blame]
// Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'package:analyzer/file_system/memory_file_system.dart';
import 'package:dartdoc/src/package_config_provider.dart';
import 'package:dartdoc/src/package_meta.dart';
import 'package:test/test.dart';
import 'src/test_descriptor_utils.dart' as d;
import 'src/utils.dart';
void main() {
const libraryName = 'multiply_defined';
late PackageMetaProvider packageMetaProvider;
late MemoryResourceProvider resourceProvider;
late FakePackageConfigProvider packageConfigProvider;
late String packagePath;
Future<void> setUpPackage(
String name, {
String? pubspec,
String? analysisOptions,
}) async {
packagePath = await d.createPackage(
name,
pubspec: pubspec,
analysisOptions: analysisOptions,
resourceProvider: resourceProvider,
);
packageConfigProvider =
getTestPackageConfigProvider(packageMetaProvider.defaultSdkDir.path);
packageConfigProvider.addPackageToConfigFor(
packagePath, name, Uri.file('$packagePath/'));
}
group('multiply-defined elements', () {
const placeholder = '%%__HTMLBASE_dartdoc_internal__%%';
setUp(() async {
packageMetaProvider = testPackageMetaProvider;
resourceProvider =
packageMetaProvider.resourceProvider as MemoryResourceProvider;
await setUpPackage(
libraryName,
pubspec: '''
name: multiply_defined
version: 0.0.1
environment:
sdk: '>=2.17.0-0 <3.0.0'
''',
);
});
test('referencing an erroneous, multiply-defined element does not crash',
() async {
await d.dir('lib', [
d.file('import1.dart', 'class C {}'),
d.file('import2.dart', 'class C {}'),
d.file('lib.dart', '''
library $libraryName;
import 'import1.dart';
import 'import2.dart';
/// Reference to [C].
void foo(C c) {}
'''),
]).createInMemory(resourceProvider, packagePath);
var packageGraph = await bootBasicPackage(
packagePath,
packageMetaProvider,
packageConfigProvider,
);
var library = packageGraph.libraries.named(libraryName);
var fooFunction = library.functions.named('foo');
expect(
fooFunction.documentationAsHtml,
'<p>Reference to <a href="${placeholder}import1/C-class.html">C</a>.</p>',
);
});
});
}