| // Copyright (c) 2019, 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 'dart:convert'; | |
| import 'dart:typed_data'; | |
| import 'package:test/test.dart'; | |
| /// Creates a package: URI. | |
| Uri pkg(String packageName, String packagePath) { | |
| var path = | |
| "$packageName${packagePath.startsWith('/') ? "" : "/"}$packagePath"; | |
| return Uri(scheme: 'package', path: path); | |
| } | |
| // Remove if not used. | |
| String configFromPackages(List<List<String>> packages) => | |
| """ | |
| { | |
| "configVersion": 2, | |
| "packages": [ | |
| ${packages.map((nu) => """ | |
| { | |
| "name": "${nu[0]}", | |
| "rootUri": "${nu[1]}" | |
| }""").join(",\n")} | |
| ] | |
| } | |
| """; | |
| /// Mimics a directory structure of [description] and runs [loaderTest]. | |
| /// | |
| /// Description is a map, each key is a file entry. If the value is a map, | |
| /// it's a subdirectory, otherwise it's a file and the value is the content | |
| /// as a string. | |
| void loaderTest( | |
| String name, | |
| Map<String, Object> description, | |
| void Function(Uri root, Future<Uint8List?> Function(Uri) loader) loaderTest, | |
| ) { | |
| var root = Uri(scheme: 'test', path: '/'); | |
| Future<Uint8List?> loader(Uri uri) async { | |
| var path = uri.path; | |
| if (!uri.isScheme('test') || !path.startsWith('/')) return null; | |
| var parts = path.split('/'); | |
| Object? value = description; | |
| for (var i = 1; i < parts.length; i++) { | |
| if (value is! Map<String, Object?>) return null; | |
| value = value[parts[i]]; | |
| } | |
| if (value is String) return utf8.encode(value); | |
| return null; | |
| } | |
| test(name, () => loaderTest(root, loader)); | |
| } |