blob: 889ae71ec2431b6cc89028781a883f9a6526fa7b [file] [log] [blame]
// Copyright (c) 2024, 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/file_system.dart';
import 'package:analyzer/file_system/memory_file_system.dart';
import 'package:path/path.dart' as path;
import '../dartdoc_test_base.dart';
import '../src/test_descriptor_utils.dart' as d;
import '../src/utils.dart';
abstract class TemplateTestBase extends DartdocTestBase {
String get packageName;
/// Creates a package on disk with the given singular library [content], and
/// generates the docs.
Future<void> createPackageWithLibrary(String content) async {
packagePath = await d.createPackage(
packageName,
pubspec: '''
name: $packageName
version: 0.0.1
environment:
sdk: '>=3.3.0-0 <4.0.0'
''',
libFiles: [
d.file('lib.dart', content),
],
resourceProvider: resourceProvider,
);
await writeDartdocResources(resourceProvider);
packageConfigProvider.addPackageToConfigFor(
packagePath, packageName, Uri.file('$packagePath/'));
await (await buildDartdoc()).generateDocs();
}
List<String> readLines(List<String> filePath) =>
resourceProvider.readLines([packagePath, 'doc', ...filePath]);
}
extension on MemoryResourceProvider {
List<String> readLines(List<String> pathParts) {
try {
return getFile(path.joinAll(pathParts)).readAsStringSync().split('\n');
} on FileSystemException {
void listRecursive(Folder folder, {required int indentDepth}) {
var indent = ' ${'' * indentDepth}';
var children = folder.getChildren();
for (var child in children) {
var pipes = child == children.last ? '└─' : '├─';
if (child is File) {
print('$indent$pipes ${child.shortName}');
} else if (child is Folder) {
print('$indent$pipes ${child.shortName}/');
listRecursive(child, indentDepth: indentDepth + 1);
}
}
}
// Attempt to show the files listed in the generated `doc/` directory.
var docIndex = pathParts.indexOf('doc');
if (docIndex > -1) {
var docPath = path.joinAll(pathParts.getRange(0, docIndex + 1));
print('$docPath/');
var docFolder = getFolder(docPath);
listRecursive(docFolder, indentDepth: 0);
}
rethrow;
}
}
}