Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(700)

Unified Diff: sdk/lib/_internal/pub/test/transformers_needed_by_transformers/utils.dart

Issue 331263002: Improve parallelism when loading transformer plugins. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: code review Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « sdk/lib/_internal/pub/test/transformers_needed_by_transformers/no_dependencies_test.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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();
+}
« no previous file with comments | « sdk/lib/_internal/pub/test/transformers_needed_by_transformers/no_dependencies_test.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698