| Index: pkg/barback/test/package_graph/declaring_transformer_test.dart
 | 
| diff --git a/pkg/barback/test/package_graph/declaring_transformer_test.dart b/pkg/barback/test/package_graph/declaring_transformer_test.dart
 | 
| index dc180aee2151009b4dd7800b556320f97686b714..9a8535f7dd2487703df338e4a76d7bb6f416938b 100644
 | 
| --- a/pkg/barback/test/package_graph/declaring_transformer_test.dart
 | 
| +++ b/pkg/barback/test/package_graph/declaring_transformer_test.dart
 | 
| @@ -191,14 +191,16 @@ main() {
 | 
|        [declaring]
 | 
|      ]});
 | 
|  
 | 
| -    // Start [declaring] running, because its input became available.
 | 
|      declaring.pauseApply();
 | 
|      updateSources(["app|foo.in"]);
 | 
|      // Give the transformers time to declare their assets.
 | 
|      schedule(pumpEventQueue);
 | 
|  
 | 
| +    // Start [declaring] running, because its input became available.
 | 
|      expectAsset("app|out.one", "app|out.one");
 | 
| -    expectAssetDoesNotComplete("app|out.three");
 | 
| +
 | 
| +    // Make sure we're blocking on [declaring.apply].
 | 
| +    schedule(pumpEventQueue);
 | 
|  
 | 
|      // Now [declaring]'s input is dirty, so it shouldn't re-run without an
 | 
|      // explicit request.
 | 
| @@ -220,6 +222,42 @@ main() {
 | 
|      expect(declaring.numRuns, completion(equals(2)));
 | 
|    });
 | 
|  
 | 
| +  test("a declaring transformer following a lazy transformer does re-run if "
 | 
| +      "its input becomes available, it's forced, and then its input becomes "
 | 
| +      "unavailable", () {
 | 
| +    var declaring = new DeclaringRewriteTransformer("two", "three");
 | 
| +    initGraph(["app|foo.in"], {"app": [
 | 
| +      [new LazyAssetsTransformer(["app|out.one", "app|out.two"])],
 | 
| +      [declaring]
 | 
| +    ]});
 | 
| +
 | 
| +    declaring.pauseApply();
 | 
| +    updateSources(["app|foo.in"]);
 | 
| +
 | 
| +    // Give the transformers time to declare their assets.
 | 
| +    schedule(pumpEventQueue);
 | 
| +
 | 
| +    // Start [declaring] running, because its input became available.
 | 
| +    expectAsset("app|out.one", "app|out.one");
 | 
| +
 | 
| +    // This shouldn't complete because [declaring.apply] is paused, but it
 | 
| +    // should force the transformer.
 | 
| +    expectAssetDoesNotComplete("app|out.three");
 | 
| +
 | 
| +    // Make sure we're blocking on [declaring.apply]
 | 
| +    schedule(pumpEventQueue);
 | 
| +
 | 
| +    // Now [declaring]'s input is dirty, so it shouldn't re-run without an
 | 
| +    // explicit request.
 | 
| +    updateSources(["app|foo.in"]);
 | 
| +    declaring.resumeApply();
 | 
| +    buildShouldSucceed();
 | 
| +
 | 
| +    // [declaring] should have run twice, once for its original input and once
 | 
| +    // after the input changed because it was forced.
 | 
| +    expect(declaring.numRuns, completion(equals(2)));
 | 
| +  });
 | 
| +
 | 
|    group("with an error in declareOutputs", () {
 | 
|      test("still runs apply", () {
 | 
|        initGraph(["app|foo.txt"], {"app": [[
 | 
| 
 |