| Index: packages/barback/test/package_graph/transform/aggregate_test.dart
 | 
| diff --git a/packages/barback/test/package_graph/transform/aggregate_test.dart b/packages/barback/test/package_graph/transform/aggregate_test.dart
 | 
| index d6fb050d8cb739a9bc3f385bf46886fd54120b5d..eaca5477ba13e9053da99e8195a0c6a53503d505 100644
 | 
| --- a/packages/barback/test/package_graph/transform/aggregate_test.dart
 | 
| +++ b/packages/barback/test/package_graph/transform/aggregate_test.dart
 | 
| @@ -4,7 +4,6 @@
 | 
|  
 | 
|  library barback.test.package_graph.transform.aggregate_test;
 | 
|  
 | 
| -import 'package:barback/src/utils.dart';
 | 
|  import 'package:scheduled_test/scheduled_test.dart';
 | 
|  
 | 
|  import '../../utils.dart';
 | 
| @@ -21,9 +20,11 @@ main() {
 | 
|        "app|dir/subdir/zap.png"
 | 
|      ];
 | 
|  
 | 
| -    initGraph(sources, {"app": [
 | 
| -      [new AggregateManyToOneTransformer("txt", "out.txt")]
 | 
| -    ]});
 | 
| +    initGraph(sources, {
 | 
| +      "app": [
 | 
| +        [new AggregateManyToOneTransformer("txt", "out.txt")]
 | 
| +      ]
 | 
| +    });
 | 
|  
 | 
|      updateSources(sources);
 | 
|      expectAsset("app|dir/out.txt", "bar\nfoo");
 | 
| @@ -33,9 +34,14 @@ main() {
 | 
|  
 | 
|    test("an aggregate transformer isn't run if there are no primary inputs", () {
 | 
|      var transformer = new AggregateManyToOneTransformer("txt", "out.txt");
 | 
| -    initGraph(["app|foo.zip", "app|bar.zap"], {"app": [
 | 
| -      [transformer]
 | 
| -    ]});
 | 
| +    initGraph([
 | 
| +      "app|foo.zip",
 | 
| +      "app|bar.zap"
 | 
| +    ], {
 | 
| +      "app": [
 | 
| +        [transformer]
 | 
| +      ]
 | 
| +    });
 | 
|  
 | 
|      updateSources(["app|foo.zip", "app|bar.zap"]);
 | 
|      expectNoAsset("app|out.txt");
 | 
| @@ -45,9 +51,14 @@ main() {
 | 
|    });
 | 
|  
 | 
|    test("an aggregate transformer is re-run if a primary input changes", () {
 | 
| -    initGraph(["app|foo.txt", "app|bar.txt"], {"app": [
 | 
| -      [new AggregateManyToOneTransformer("txt", "out.txt")]
 | 
| -    ]});
 | 
| +    initGraph([
 | 
| +      "app|foo.txt",
 | 
| +      "app|bar.txt"
 | 
| +    ], {
 | 
| +      "app": [
 | 
| +        [new AggregateManyToOneTransformer("txt", "out.txt")]
 | 
| +      ]
 | 
| +    });
 | 
|  
 | 
|      updateSources(["app|foo.txt", "app|bar.txt"]);
 | 
|      expectAsset("app|out.txt", "bar\nfoo");
 | 
| @@ -60,9 +71,14 @@ main() {
 | 
|    });
 | 
|  
 | 
|    test("an aggregate transformer is re-run if a primary input is removed", () {
 | 
| -    initGraph(["app|foo.txt", "app|bar.txt"], {"app": [
 | 
| -      [new AggregateManyToOneTransformer("txt", "out.txt")]
 | 
| -    ]});
 | 
| +    initGraph([
 | 
| +      "app|foo.txt",
 | 
| +      "app|bar.txt"
 | 
| +    ], {
 | 
| +      "app": [
 | 
| +        [new AggregateManyToOneTransformer("txt", "out.txt")]
 | 
| +      ]
 | 
| +    });
 | 
|  
 | 
|      updateSources(["app|foo.txt", "app|bar.txt"]);
 | 
|      expectAsset("app|out.txt", "bar\nfoo");
 | 
| @@ -74,9 +90,15 @@ main() {
 | 
|    });
 | 
|  
 | 
|    test("an aggregate transformer is re-run if a primary input is added", () {
 | 
| -    initGraph(["app|foo.txt", "app|bar.txt", "app|baz.txt"], {"app": [
 | 
| -      [new AggregateManyToOneTransformer("txt", "out.txt")]
 | 
| -    ]});
 | 
| +    initGraph([
 | 
| +      "app|foo.txt",
 | 
| +      "app|bar.txt",
 | 
| +      "app|baz.txt"
 | 
| +    ], {
 | 
| +      "app": [
 | 
| +        [new AggregateManyToOneTransformer("txt", "out.txt")]
 | 
| +      ]
 | 
| +    });
 | 
|  
 | 
|      updateSources(["app|foo.txt", "app|bar.txt"]);
 | 
|      expectAsset("app|out.txt", "bar\nfoo");
 | 
| @@ -87,11 +109,17 @@ main() {
 | 
|      buildShouldSucceed();
 | 
|    });
 | 
|  
 | 
| -  test("an aggregate transformer ceases to run if all primary inputs are "
 | 
| +  test(
 | 
| +      "an aggregate transformer ceases to run if all primary inputs are "
 | 
|        "removed", () {
 | 
| -    initGraph(["app|foo.txt", "app|bar.txt"], {"app": [
 | 
| -      [new AggregateManyToOneTransformer("txt", "out.txt")]
 | 
| -    ]});
 | 
| +    initGraph([
 | 
| +      "app|foo.txt",
 | 
| +      "app|bar.txt"
 | 
| +    ], {
 | 
| +      "app": [
 | 
| +        [new AggregateManyToOneTransformer("txt", "out.txt")]
 | 
| +      ]
 | 
| +    });
 | 
|  
 | 
|      updateSources(["app|foo.txt", "app|bar.txt"]);
 | 
|      expectAsset("app|out.txt", "bar\nfoo");
 | 
| @@ -102,11 +130,17 @@ main() {
 | 
|      buildShouldSucceed();
 | 
|    });
 | 
|  
 | 
| -  test("an aggregate transformer starts to run if new primary inputs are "
 | 
| +  test(
 | 
| +      "an aggregate transformer starts to run if new primary inputs are "
 | 
|        "added", () {
 | 
| -    initGraph(["app|foo.txt", "app|bar.txt"], {"app": [
 | 
| -      [new AggregateManyToOneTransformer("txt", "out.txt")]
 | 
| -    ]});
 | 
| +    initGraph([
 | 
| +      "app|foo.txt",
 | 
| +      "app|bar.txt"
 | 
| +    ], {
 | 
| +      "app": [
 | 
| +        [new AggregateManyToOneTransformer("txt", "out.txt")]
 | 
| +      ]
 | 
| +    });
 | 
|  
 | 
|      updateSources([]);
 | 
|      expectNoAsset("app|out.txt");
 | 
| @@ -118,11 +152,17 @@ main() {
 | 
|    });
 | 
|  
 | 
|    group("pass-through", () {
 | 
| -    test("an aggregate transformer passes through its primary inputs by "
 | 
| +    test(
 | 
| +        "an aggregate transformer passes through its primary inputs by "
 | 
|          "default", () {
 | 
| -      initGraph(["app|foo.txt", "app|bar.txt"], {"app": [
 | 
| -        [new AggregateManyToOneTransformer("txt", "out.txt")]
 | 
| -      ]});
 | 
| +      initGraph([
 | 
| +        "app|foo.txt",
 | 
| +        "app|bar.txt"
 | 
| +      ], {
 | 
| +        "app": [
 | 
| +          [new AggregateManyToOneTransformer("txt", "out.txt")]
 | 
| +        ]
 | 
| +      });
 | 
|  
 | 
|        updateSources(["app|foo.txt", "app|bar.txt"]);
 | 
|        expectAsset("app|foo.txt", "foo");
 | 
| @@ -136,9 +176,14 @@ main() {
 | 
|      });
 | 
|  
 | 
|      test("an aggregate transformer can overwrite its primary inputs", () {
 | 
| -      initGraph(["app|foo.txt", "app|bar.txt"], {"app": [
 | 
| -        [new AggregateManyToManyTransformer("txt")]
 | 
| -      ]});
 | 
| +      initGraph([
 | 
| +        "app|foo.txt",
 | 
| +        "app|bar.txt"
 | 
| +      ], {
 | 
| +        "app": [
 | 
| +          [new AggregateManyToManyTransformer("txt")]
 | 
| +        ]
 | 
| +      });
 | 
|  
 | 
|        updateSources(["app|foo.txt", "app|bar.txt"]);
 | 
|        expectAsset("app|foo.txt", "modified foo");
 | 
| @@ -148,11 +193,16 @@ main() {
 | 
|  
 | 
|      test("an aggregate transformer can consume its primary inputs", () {
 | 
|        var transformer = new AggregateManyToOneTransformer("txt", "out.txt");
 | 
| -      transformer.consumePrimaries
 | 
| -          ..add("app|foo.txt")
 | 
| -          ..add("app|bar.txt");
 | 
| +      transformer.consumePrimaries..add("app|foo.txt")..add("app|bar.txt");
 | 
|  
 | 
| -      initGraph(["app|foo.txt", "app|bar.txt"], {"app": [[transformer]]});
 | 
| +      initGraph([
 | 
| +        "app|foo.txt",
 | 
| +        "app|bar.txt"
 | 
| +      ], {
 | 
| +        "app": [
 | 
| +          [transformer]
 | 
| +        ]
 | 
| +      });
 | 
|  
 | 
|        updateSources(["app|foo.txt", "app|bar.txt"]);
 | 
|        expectNoAsset("app|foo.txt");
 | 
| @@ -161,9 +211,14 @@ main() {
 | 
|      });
 | 
|  
 | 
|      test("an aggregate transformer passes through non-primary inputs", () {
 | 
| -      initGraph(["app|foo.jpg", "app|bar.png"], {"app": [
 | 
| -        [new AggregateManyToManyTransformer("txt")]
 | 
| -      ]});
 | 
| +      initGraph([
 | 
| +        "app|foo.jpg",
 | 
| +        "app|bar.png"
 | 
| +      ], {
 | 
| +        "app": [
 | 
| +          [new AggregateManyToManyTransformer("txt")]
 | 
| +        ]
 | 
| +      });
 | 
|  
 | 
|        updateSources(["app|foo.jpg", "app|bar.png"]);
 | 
|        expectAsset("app|foo.jpg", "foo");
 | 
| @@ -178,13 +233,19 @@ main() {
 | 
|    });
 | 
|  
 | 
|    group("apply() transform stream", () {
 | 
| -    test("the primary input stream doesn't close if a previous phase is still "
 | 
| +    test(
 | 
| +        "the primary input stream doesn't close if a previous phase is still "
 | 
|          "running", () {
 | 
|        var rewrite = new RewriteTransformer("a", "b");
 | 
| -      initGraph(["app|foo.txt", "app|bar.a"], {"app": [
 | 
| -        [rewrite],
 | 
| -        [new AggregateManyToOneTransformer("txt", "out.txt")]
 | 
| -      ]});
 | 
| +      initGraph([
 | 
| +        "app|foo.txt",
 | 
| +        "app|bar.a"
 | 
| +      ], {
 | 
| +        "app": [
 | 
| +          [rewrite],
 | 
| +          [new AggregateManyToOneTransformer("txt", "out.txt")]
 | 
| +        ]
 | 
| +      });
 | 
|  
 | 
|        rewrite.pauseApply();
 | 
|        updateSources(["app|foo.txt", "app|bar.a"]);
 | 
| @@ -195,13 +256,19 @@ main() {
 | 
|        buildShouldSucceed();
 | 
|      });
 | 
|  
 | 
| -    test("the primary input stream doesn't close if a previous phase is "
 | 
| +    test(
 | 
| +        "the primary input stream doesn't close if a previous phase is "
 | 
|          "materializing a primary input", () {
 | 
|        var rewrite = new DeclaringRewriteTransformer("in", "txt");
 | 
| -      initGraph(["app|foo.txt", "app|bar.in"], {"app": [
 | 
| -        [rewrite],
 | 
| -        [new AggregateManyToOneTransformer("txt", "out.txt")]
 | 
| -      ]});
 | 
| +      initGraph([
 | 
| +        "app|foo.txt",
 | 
| +        "app|bar.in"
 | 
| +      ], {
 | 
| +        "app": [
 | 
| +          [rewrite],
 | 
| +          [new AggregateManyToOneTransformer("txt", "out.txt")]
 | 
| +        ]
 | 
| +      });
 | 
|  
 | 
|        rewrite.pauseApply();
 | 
|        updateSources(["app|foo.txt", "app|bar.in"]);
 | 
| @@ -212,13 +279,19 @@ main() {
 | 
|        buildShouldSucceed();
 | 
|      });
 | 
|  
 | 
| -    test("the primary input stream closes if a previous phase is only "
 | 
| +    test(
 | 
| +        "the primary input stream closes if a previous phase is only "
 | 
|          "materializing non-primary inputs", () {
 | 
|        var rewrite = new DeclaringRewriteTransformer("a", "b");
 | 
| -      initGraph(["app|foo.txt", "app|bar.a"], {"app": [
 | 
| -        [rewrite],
 | 
| -        [new AggregateManyToOneTransformer("txt", "out.txt")]
 | 
| -      ]});
 | 
| +      initGraph([
 | 
| +        "app|foo.txt",
 | 
| +        "app|bar.a"
 | 
| +      ], {
 | 
| +        "app": [
 | 
| +          [rewrite],
 | 
| +          [new AggregateManyToOneTransformer("txt", "out.txt")]
 | 
| +        ]
 | 
| +      });
 | 
|  
 | 
|        rewrite.pauseApply();
 | 
|        updateSources(["app|foo.txt", "app|bar.a"]);
 | 
| @@ -228,14 +301,21 @@ main() {
 | 
|        buildShouldSucceed();
 | 
|      });
 | 
|  
 | 
| -    test("a new primary input that arrives before the stream closes doesn't "
 | 
| +    test(
 | 
| +        "a new primary input that arrives before the stream closes doesn't "
 | 
|          "cause apply to restart", () {
 | 
|        var rewrite = new RewriteTransformer("a", "b");
 | 
|        var aggregate = new AggregateManyToOneTransformer("txt", "out.txt");
 | 
| -      initGraph(["app|foo.txt", "app|bar.txt", "app|baz.a"], {"app": [
 | 
| -        [rewrite],
 | 
| -        [aggregate]
 | 
| -      ]});
 | 
| +      initGraph([
 | 
| +        "app|foo.txt",
 | 
| +        "app|bar.txt",
 | 
| +        "app|baz.a"
 | 
| +      ], {
 | 
| +        "app": [
 | 
| +          [rewrite],
 | 
| +          [aggregate]
 | 
| +        ]
 | 
| +      });
 | 
|  
 | 
|        // The stream won't close until [rewrite] finishes running `apply()`.
 | 
|        rewrite.pauseApply();
 | 
| @@ -253,10 +333,18 @@ main() {
 | 
|        expect(aggregate.numRuns, completion(equals(1)));
 | 
|      });
 | 
|  
 | 
| -    test("a new primary input that arrives after the stream closes causes "
 | 
| +    test(
 | 
| +        "a new primary input that arrives after the stream closes causes "
 | 
|          "apply to restart", () {
 | 
|        var aggregate = new AggregateManyToOneTransformer("txt", "out.txt");
 | 
| -      initGraph(["app|foo.txt", "app|bar.txt"], {"app": [[aggregate]]});
 | 
| +      initGraph([
 | 
| +        "app|foo.txt",
 | 
| +        "app|bar.txt"
 | 
| +      ], {
 | 
| +        "app": [
 | 
| +          [aggregate]
 | 
| +        ]
 | 
| +      });
 | 
|  
 | 
|        aggregate.pauseApply();
 | 
|        updateSources(["app|foo.txt"]);
 | 
| @@ -272,14 +360,20 @@ main() {
 | 
|        expect(aggregate.numRuns, completion(equals(2)));
 | 
|      });
 | 
|  
 | 
| -    test("a primary input that's modified before the stream closes causes "
 | 
| +    test(
 | 
| +        "a primary input that's modified before the stream closes causes "
 | 
|          "apply to restart", () {
 | 
|        var rewrite = new RewriteTransformer("a", "b");
 | 
|        var aggregate = new AggregateManyToOneTransformer("txt", "out.txt");
 | 
| -      initGraph(["app|foo.txt", "app|bar.a"], {"app": [
 | 
| -        [rewrite],
 | 
| -        [aggregate]
 | 
| -      ]});
 | 
| +      initGraph([
 | 
| +        "app|foo.txt",
 | 
| +        "app|bar.a"
 | 
| +      ], {
 | 
| +        "app": [
 | 
| +          [rewrite],
 | 
| +          [aggregate]
 | 
| +        ]
 | 
| +      });
 | 
|  
 | 
|        // The stream won't close until [rewrite] finishes running `apply()`.
 | 
|        rewrite.pauseApply();
 | 
| @@ -298,14 +392,21 @@ main() {
 | 
|        expect(aggregate.numRuns, completion(equals(2)));
 | 
|      });
 | 
|  
 | 
| -    test("a primary input that's removed before the stream closes causes apply "
 | 
| +    test(
 | 
| +        "a primary input that's removed before the stream closes causes apply "
 | 
|          "to restart", () {
 | 
|        var rewrite = new RewriteTransformer("a", "b");
 | 
|        var aggregate = new AggregateManyToOneTransformer("txt", "out.txt");
 | 
| -      initGraph(["app|foo.txt", "app|bar.txt", "app|baz.a"], {"app": [
 | 
| -        [rewrite],
 | 
| -        [aggregate]
 | 
| -      ]});
 | 
| +      initGraph([
 | 
| +        "app|foo.txt",
 | 
| +        "app|bar.txt",
 | 
| +        "app|baz.a"
 | 
| +      ], {
 | 
| +        "app": [
 | 
| +          [rewrite],
 | 
| +          [aggregate]
 | 
| +        ]
 | 
| +      });
 | 
|  
 | 
|        // The stream won't close until [rewrite] finishes running `apply()`.
 | 
|        rewrite.pauseApply();
 | 
| @@ -323,4 +424,4 @@ main() {
 | 
|        expect(aggregate.numRuns, completion(equals(2)));
 | 
|      });
 | 
|    });
 | 
| -}
 | 
| +}
 | 
| 
 |