| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS d.file | |
| 2 // for details. All rights reserved. Use of this source code is governed by a | |
| 3 // BSD-style license that can be found in the LICENSE file. | |
| 4 | |
| 5 library pub_tests; | |
| 6 | |
| 7 import 'package:barback/barback.dart'; | |
| 8 import 'package:path/path.dart' as p; | |
| 9 import 'package:scheduled_test/scheduled_test.dart'; | |
| 10 | |
| 11 import '../../lib/src/barback/cycle_exception.dart'; | |
| 12 import '../../lib/src/barback/dependency_computer.dart'; | |
| 13 import '../../lib/src/entrypoint.dart'; | |
| 14 import '../../lib/src/io.dart'; | |
| 15 import '../../lib/src/package.dart'; | |
| 16 import '../../lib/src/package_graph.dart'; | |
| 17 import '../../lib/src/source/path.dart'; | |
| 18 import '../../lib/src/system_cache.dart'; | |
| 19 import '../../lib/src/utils.dart'; | |
| 20 import '../test_pub.dart'; | |
| 21 | |
| 22 /// Expects that [DependencyComputer.transformersNeededByTransformers] will | |
| 23 /// return a graph matching [expected] when run on the package graph defined by | |
| 24 /// packages in the sandbox. | |
| 25 void expectDependencies(Map<String, Iterable<String>> expected) { | |
| 26 expected = mapMap(expected, value: (_, ids) => ids.toSet()); | |
| 27 | |
| 28 schedule(() { | |
| 29 var computer = new DependencyComputer(_loadPackageGraph()); | |
| 30 var result = mapMap( | |
| 31 computer.transformersNeededByTransformers(), | |
| 32 key: (id, _) => id.toString(), | |
| 33 value: (_, ids) => ids.map((id) => id.toString()).toSet()); | |
| 34 expect(result, equals(expected)); | |
| 35 }, "expect dependencies to match $expected"); | |
| 36 } | |
| 37 | |
| 38 /// Expects that [computeTransformersNeededByTransformers] will throw an | |
| 39 /// exception matching [matcher] when run on the package graph defiend by | |
| 40 /// packages in the sandbox. | |
| 41 void expectException(matcher) { | |
| 42 schedule(() { | |
| 43 expect(() { | |
| 44 var computer = new DependencyComputer(_loadPackageGraph()); | |
| 45 computer.transformersNeededByTransformers(); | |
| 46 }, throwsA(matcher)); | |
| 47 }, "expect an exception: $matcher"); | |
| 48 } | |
| 49 | |
| 50 /// Expects that [computeTransformersNeededByTransformers] will throw a | |
| 51 /// [CycleException] with the given [steps] when run on the package graph | |
| 52 /// defiend by packages in the sandbox. | |
| 53 void expectCycleException(Iterable<String> steps) { | |
| 54 expectException(predicate((error) { | |
| 55 expect(error, new isInstanceOf<CycleException>()); | |
| 56 expect(error.steps, equals(steps)); | |
| 57 return true; | |
| 58 }, "cycle exception:\n${steps.map((step) => " $step").join("\n")}")); | |
| 59 } | |
| 60 | |
| 61 /// Expects that [DependencyComputer.transformersNeededByLibrary] will return | |
| 62 /// transformer ids matching [expected] when run on the library identified by | |
| 63 /// [id]. | |
| 64 void expectLibraryDependencies(String id, Iterable<String> expected) { | |
| 65 expected = expected.toSet(); | |
| 66 | |
| 67 schedule(() { | |
| 68 var computer = new DependencyComputer(_loadPackageGraph()); | |
| 69 var result = computer.transformersNeededByLibrary(new AssetId.parse(id)) | |
| 70 .map((id) => id.toString()).toSet(); | |
| 71 expect(result, equals(expected)); | |
| 72 }, "expect dependencies to match $expected"); | |
| 73 } | |
| 74 | |
| 75 /// Loads a [PackageGraph] from the packages in the sandbox. | |
| 76 /// | |
| 77 /// This graph will also include barback and its transitive dependencies from | |
| 78 /// the repo. | |
| 79 PackageGraph _loadPackageGraph() { | |
| 80 // Load the sandbox packages. | |
| 81 var packages = {}; | |
| 82 | |
| 83 var systemCache = new SystemCache(p.join(sandboxDir, cachePath)); | |
| 84 systemCache.sources | |
| 85 ..register(new PathSource()) | |
| 86 ..setDefault('path'); | |
| 87 var entrypoint = new Entrypoint(p.join(sandboxDir, appPath), systemCache); | |
| 88 | |
| 89 for (var package in listDir(sandboxDir)) { | |
| 90 if (!fileExists(p.join(package, 'pubspec.yaml'))) continue; | |
| 91 var packageName = p.basename(package); | |
| 92 packages[packageName] = new Package.load( | |
| 93 packageName, package, systemCache.sources); | |
| 94 } | |
| 95 | |
| 96 loadPackage(packageName) { | |
| 97 if (packages.containsKey(packageName)) return; | |
| 98 packages[packageName] = new Package.load( | |
| 99 packageName, packagePath(packageName), systemCache.sources); | |
| 100 for (var dep in packages[packageName].dependencies) { | |
| 101 loadPackage(dep.name); | |
| 102 } | |
| 103 } | |
| 104 | |
| 105 loadPackage('barback'); | |
| 106 | |
| 107 return new PackageGraph(entrypoint, null, packages); | |
| 108 } | |
| 109 | |
| 110 /// Returns the contents of a no-op transformer that imports each URL in | |
| 111 /// [imports]. | |
| 112 String transformer([Iterable<String> imports]) { | |
| 113 if (imports == null) imports = []; | |
| 114 | |
| 115 var buffer = new StringBuffer() | |
| 116 ..writeln('import "package:barback/barback.dart";'); | |
| 117 for (var import in imports) { | |
| 118 buffer.writeln('import "$import";'); | |
| 119 } | |
| 120 | |
| 121 buffer.writeln(""" | |
| 122 NoOpTransformer extends Transformer { | |
| 123 bool isPrimary(AssetId id) => true; | |
| 124 void apply(Transform transform) {} | |
| 125 } | |
| 126 """); | |
| 127 | |
| 128 return buffer.toString(); | |
| 129 } | |
| OLD | NEW |