| // 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; |
| } |
| } |
| } |