| Index: sdk/lib/_internal/pub/test/transformers_needed_by_transformers/utils.dart
|
| diff --git a/sdk/lib/_internal/pub/test/transformers_needed_by_transformers/utils.dart b/sdk/lib/_internal/pub/test/transformers_needed_by_transformers/utils.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..47e1cf7894ed4af132ea576318a8b48a0b7f7603
|
| --- /dev/null
|
| +++ b/sdk/lib/_internal/pub/test/transformers_needed_by_transformers/utils.dart
|
| @@ -0,0 +1,112 @@
|
| +// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS d.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.
|
| +
|
| +library pub_tests;
|
| +
|
| +import 'package:path/path.dart' as p;
|
| +import 'package:scheduled_test/scheduled_test.dart';
|
| +
|
| +import '../../lib/src/barback/cycle_exception.dart';
|
| +import '../../lib/src/barback/transformers_needed_by_transformers.dart';
|
| +import '../../lib/src/entrypoint.dart';
|
| +import '../../lib/src/io.dart';
|
| +import '../../lib/src/package.dart';
|
| +import '../../lib/src/package_graph.dart';
|
| +import '../../lib/src/source/path.dart';
|
| +import '../../lib/src/system_cache.dart';
|
| +import '../../lib/src/utils.dart';
|
| +import '../descriptor.dart' as d;
|
| +import '../test_pub.dart';
|
| +
|
| +/// Expects that [computeTransformersNeededByTransformers] will return a graph
|
| +/// matching [expected] when run on the package graph defined by packages in
|
| +/// the sandbox.
|
| +void expectDependencies(Map<String, Iterable<String>> expected) {
|
| + expected = mapMap(expected, value: (_, ids) => ids.toSet());
|
| +
|
| + schedule(() {
|
| + var result = mapMap(
|
| + computeTransformersNeededByTransformers(_loadPackageGraph()),
|
| + key: (id, _) => id.toString(),
|
| + value: (_, ids) => ids.map((id) => id.toString()).toSet());
|
| + expect(result, equals(expected));
|
| + }, "expect dependencies to match $expected");
|
| +}
|
| +
|
| +/// Expects that [computeTransformersNeededByTransformers] will throw an
|
| +/// exception matching [matcher] when run on the package graph defiend by
|
| +/// packages in the sandbox.
|
| +void expectException(matcher) {
|
| + schedule(() {
|
| + expect(() => computeTransformersNeededByTransformers(_loadPackageGraph()),
|
| + throwsA(matcher));
|
| + }, "expect an exception: $matcher");
|
| +}
|
| +
|
| +/// Expects that [computeTransformersNeededByTransformers] will throw a
|
| +/// [CycleException] with the given [steps] when run on the package graph
|
| +/// defiend by packages in the sandbox.
|
| +void expectCycleException(Iterable<String> steps) {
|
| + expectException(predicate((error) {
|
| + expect(error, new isInstanceOf<CycleException>());
|
| + expect(error.steps, equals(steps));
|
| + return true;
|
| + }, "cycle exception:\n${steps.map((step) => " $step").join("\n")}"));
|
| +}
|
| +
|
| +/// Loads a [PackageGraph] from the packages in the sandbox.
|
| +///
|
| +/// This graph will also include barback and its transitive dependencies from
|
| +/// the repo.
|
| +PackageGraph _loadPackageGraph() {
|
| + // Load the sandbox packages.
|
| + var packages = {};
|
| +
|
| + var systemCache = new SystemCache(p.join(sandboxDir, cachePath));
|
| + systemCache.sources
|
| + ..register(new PathSource())
|
| + ..setDefault('path');
|
| + var entrypoint = new Entrypoint(p.join(sandboxDir, appPath), systemCache);
|
| +
|
| + for (var package in listDir(sandboxDir)) {
|
| + if (!fileExists(p.join(package, 'pubspec.yaml'))) continue;
|
| + var packageName = p.basename(package);
|
| + packages[packageName] = new Package.load(
|
| + packageName, package, systemCache.sources);
|
| + }
|
| +
|
| + loadPackage(packageName) {
|
| + if (packages.containsKey(packageName)) return;
|
| + packages[packageName] = new Package.load(
|
| + packageName, p.join(pkgPath, packageName), systemCache.sources);
|
| + for (var dep in packages[packageName].dependencies) {
|
| + loadPackage(dep.name);
|
| + }
|
| + }
|
| +
|
| + loadPackage('barback');
|
| +
|
| + return new PackageGraph(entrypoint, null, packages);
|
| +}
|
| +
|
| +/// Returns the contents of a no-op transformer that imports each URL in
|
| +/// [imports].
|
| +String transformer([Iterable<String> imports]) {
|
| + if (imports == null) imports = [];
|
| +
|
| + var buffer = new StringBuffer()
|
| + ..writeln('import "package:barback/barback.dart";');
|
| + for (var import in imports) {
|
| + buffer.writeln('import "$import";');
|
| + }
|
| +
|
| + buffer.writeln("""
|
| +NoOpTransformer extends Transformer {
|
| + bool isPrimary(AssetId id) => true;
|
| + void apply(Transform transform) {}
|
| +}
|
| +""");
|
| +
|
| + return buffer.toString();
|
| +}
|
|
|