| OLD | NEW | 
|---|
| 1 // Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file | 
| 2 // for details. All rights reserved. Use of this source code is governed by a | 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. | 3 // BSD-style license that can be found in the LICENSE file. | 
| 4 | 4 | 
| 5 library barback.test.package_graph.declaring_transformer_test; | 5 library barback.test.package_graph.declaring_transformer_test; | 
| 6 | 6 | 
| 7 import 'package:barback/barback.dart'; |  | 
| 8 import 'package:barback/src/utils.dart'; | 7 import 'package:barback/src/utils.dart'; | 
| 9 import 'package:scheduled_test/scheduled_test.dart'; | 8 import 'package:scheduled_test/scheduled_test.dart'; | 
| 10 | 9 | 
| 11 import '../utils.dart'; | 10 import '../utils.dart'; | 
| 12 | 11 | 
| 13 main() { | 12 main() { | 
| 14   initConfig(); | 13   initConfig(); | 
| 15 | 14 | 
| 16   test("gets a declared output with a different path", () { | 15   test("gets a declared output with a different path", () { | 
| 17     initGraph(["app|foo.blub"], {"app": [ | 16     initGraph([ | 
| 18       [new DeclaringRewriteTransformer("blub", "blab")] | 17       "app|foo.blub" | 
| 19     ]}); | 18     ], { | 
|  | 19       "app": [ | 
|  | 20         [new DeclaringRewriteTransformer("blub", "blab")] | 
|  | 21       ] | 
|  | 22     }); | 
| 20     updateSources(["app|foo.blub"]); | 23     updateSources(["app|foo.blub"]); | 
| 21     expectAsset("app|foo.blab", "foo.blab"); | 24     expectAsset("app|foo.blab", "foo.blab"); | 
| 22     buildShouldSucceed(); | 25     buildShouldSucceed(); | 
| 23   }); | 26   }); | 
| 24 | 27 | 
| 25   test("gets a declared output with the same path", () { | 28   test("gets a declared output with the same path", () { | 
| 26     initGraph(["app|foo.blub"], {"app": [ | 29     initGraph([ | 
| 27       [new DeclaringRewriteTransformer("blub", "blub")] | 30       "app|foo.blub" | 
| 28     ]}); | 31     ], { | 
|  | 32       "app": [ | 
|  | 33         [new DeclaringRewriteTransformer("blub", "blub")] | 
|  | 34       ] | 
|  | 35     }); | 
| 29     updateSources(["app|foo.blub"]); | 36     updateSources(["app|foo.blub"]); | 
| 30     expectAsset("app|foo.blub", "foo.blub"); | 37     expectAsset("app|foo.blub", "foo.blub"); | 
| 31     buildShouldSucceed(); | 38     buildShouldSucceed(); | 
| 32   }); | 39   }); | 
| 33 | 40 | 
| 34   test("gets a passed-through asset", () { | 41   test("gets a passed-through asset", () { | 
| 35     initGraph(["app|foo.blub"], {"app": [ | 42     initGraph([ | 
| 36       [new DeclaringRewriteTransformer("blub", "blab")] | 43       "app|foo.blub" | 
| 37     ]}); | 44     ], { | 
|  | 45       "app": [ | 
|  | 46         [new DeclaringRewriteTransformer("blub", "blab")] | 
|  | 47       ] | 
|  | 48     }); | 
| 38     updateSources(["app|foo.blub"]); | 49     updateSources(["app|foo.blub"]); | 
| 39     expectAsset("app|foo.blub", "foo"); | 50     expectAsset("app|foo.blub", "foo"); | 
| 40     buildShouldSucceed(); | 51     buildShouldSucceed(); | 
| 41   }); | 52   }); | 
| 42 | 53 | 
| 43   test("doesn't get a consumed asset", () { | 54   test("doesn't get a consumed asset", () { | 
| 44     initGraph(["app|foo.blub"], {"app": [ | 55     initGraph([ | 
| 45       [new DeclaringRewriteTransformer("blub", "blab")..consumePrimary = true] | 56       "app|foo.blub" | 
| 46     ]}); | 57     ], { | 
|  | 58       "app": [ | 
|  | 59         [new DeclaringRewriteTransformer("blub", "blab")..consumePrimary = true] | 
|  | 60       ] | 
|  | 61     }); | 
| 47     updateSources(["app|foo.blub"]); | 62     updateSources(["app|foo.blub"]); | 
| 48     expectNoAsset("app|foo.blub"); | 63     expectNoAsset("app|foo.blub"); | 
| 49     buildShouldSucceed(); | 64     buildShouldSucceed(); | 
| 50   }); | 65   }); | 
| 51 | 66 | 
| 52   test("gets a passed-through asset before apply is finished", () { | 67   test("gets a passed-through asset before apply is finished", () { | 
| 53     var transformer = new DeclaringRewriteTransformer("blub", "blab"); | 68     var transformer = new DeclaringRewriteTransformer("blub", "blab"); | 
| 54     initGraph(["app|foo.blub"], {"app": [[transformer]]}); | 69     initGraph([ | 
|  | 70       "app|foo.blub" | 
|  | 71     ], { | 
|  | 72       "app": [ | 
|  | 73         [transformer] | 
|  | 74       ] | 
|  | 75     }); | 
| 55 | 76 | 
| 56     transformer.pauseApply(); | 77     transformer.pauseApply(); | 
| 57     updateSources(["app|foo.blub"]); | 78     updateSources(["app|foo.blub"]); | 
| 58     expectAsset("app|foo.blub", "foo"); | 79     expectAsset("app|foo.blub", "foo"); | 
| 59 | 80 | 
| 60     transformer.resumeApply(); | 81     transformer.resumeApply(); | 
| 61     buildShouldSucceed(); | 82     buildShouldSucceed(); | 
| 62   }); | 83   }); | 
| 63 | 84 | 
| 64   test("fails to get a consumed asset before apply is finished", () { | 85   test("fails to get a consumed asset before apply is finished", () { | 
| 65     var transformer = new DeclaringRewriteTransformer("blub", "blab") | 86     var transformer = new DeclaringRewriteTransformer("blub", "blab") | 
| 66         ..consumePrimary = true; | 87       ..consumePrimary = true; | 
| 67     initGraph(["app|foo.blub"], {"app": [[transformer]]}); | 88     initGraph([ | 
| 68 | 89       "app|foo.blub" | 
|  | 90     ], { | 
|  | 91       "app": [ | 
|  | 92         [transformer] | 
|  | 93       ] | 
|  | 94     }); | 
|  | 95 | 
| 69     transformer.pauseApply(); | 96     transformer.pauseApply(); | 
| 70     updateSources(["app|foo.blub"]); | 97     updateSources(["app|foo.blub"]); | 
| 71     expectNoAsset("app|foo.blub"); | 98     expectNoAsset("app|foo.blub"); | 
| 72 | 99 | 
| 73     transformer.resumeApply(); | 100     transformer.resumeApply(); | 
| 74     buildShouldSucceed(); | 101     buildShouldSucceed(); | 
| 75   }); | 102   }); | 
| 76 | 103 | 
| 77   test("blocks on getting a declared asset that wasn't generated last run", () { | 104   test("blocks on getting a declared asset that wasn't generated last run", () { | 
| 78     var transformer = new DeclaringCheckContentAndRenameTransformer( | 105     var transformer = new DeclaringCheckContentAndRenameTransformer( | 
| 79           oldExtension: "txt", oldContent: "yes", | 106         oldExtension: "txt", | 
| 80           newExtension: "out", newContent: "done"); | 107         oldContent: "yes", | 
| 81     initGraph({"app|foo.txt": "no"}, {"app": [[transformer]]}); | 108         newExtension: "out", | 
|  | 109         newContent: "done"); | 
|  | 110     initGraph({ | 
|  | 111       "app|foo.txt": "no" | 
|  | 112     }, { | 
|  | 113       "app": [ | 
|  | 114         [transformer] | 
|  | 115       ] | 
|  | 116     }); | 
| 82 | 117 | 
| 83     updateSources(["app|foo.txt"]); | 118     updateSources(["app|foo.txt"]); | 
| 84     expectNoAsset("app|foo.out"); | 119     expectNoAsset("app|foo.out"); | 
| 85     buildShouldSucceed(); | 120     buildShouldSucceed(); | 
| 86 | 121 | 
| 87     // The transform should remember that foo.out was declared, so it should | 122     // The transform should remember that foo.out was declared, so it should | 
| 88     // expect that it might still be generated even though it wasn't last time. | 123     // expect that it might still be generated even though it wasn't last time. | 
| 89     transformer.pauseApply(); | 124     transformer.pauseApply(); | 
| 90     modifyAsset("app|foo.txt", "yes"); | 125     modifyAsset("app|foo.txt", "yes"); | 
| 91     updateSources(["app|foo.txt"]); | 126     updateSources(["app|foo.txt"]); | 
| 92     expectAssetDoesNotComplete("app|foo.out"); | 127     expectAssetDoesNotComplete("app|foo.out"); | 
| 93 | 128 | 
| 94     transformer.resumeApply(); | 129     transformer.resumeApply(); | 
| 95     expectAsset("app|foo.out", "done"); | 130     expectAsset("app|foo.out", "done"); | 
| 96     buildShouldSucceed(); | 131     buildShouldSucceed(); | 
| 97   }); | 132   }); | 
| 98 | 133 | 
| 99   test("doesn't block on on getting an undeclared asset that wasn't generated " | 134   test( | 
|  | 135       "doesn't block on on getting an undeclared asset that wasn't generated " | 
| 100       "last run", () { | 136       "last run", () { | 
| 101     var transformer = new DeclaringCheckContentAndRenameTransformer( | 137     var transformer = new DeclaringCheckContentAndRenameTransformer( | 
| 102           oldExtension: "txt", oldContent: "yes", | 138         oldExtension: "txt", | 
| 103           newExtension: "out", newContent: "done"); | 139         oldContent: "yes", | 
| 104     initGraph({"app|foo.txt": "no"}, {"app": [[transformer]]}); | 140         newExtension: "out", | 
|  | 141         newContent: "done"); | 
|  | 142     initGraph({ | 
|  | 143       "app|foo.txt": "no" | 
|  | 144     }, { | 
|  | 145       "app": [ | 
|  | 146         [transformer] | 
|  | 147       ] | 
|  | 148     }); | 
| 105 | 149 | 
| 106     updateSources(["app|foo.txt"]); | 150     updateSources(["app|foo.txt"]); | 
| 107     expectNoAsset("app|foo.out"); | 151     expectNoAsset("app|foo.out"); | 
| 108     buildShouldSucceed(); | 152     buildShouldSucceed(); | 
| 109 | 153 | 
| 110     transformer.pauseApply(); | 154     transformer.pauseApply(); | 
| 111     modifyAsset("app|foo.txt", "yes"); | 155     modifyAsset("app|foo.txt", "yes"); | 
| 112     updateSources(["app|foo.txt"]); | 156     updateSources(["app|foo.txt"]); | 
| 113     expectNoAsset("app|undeclared.out"); | 157     expectNoAsset("app|undeclared.out"); | 
| 114 | 158 | 
| 115     transformer.resumeApply(); | 159     transformer.resumeApply(); | 
| 116     buildShouldSucceed(); | 160     buildShouldSucceed(); | 
| 117   }); | 161   }); | 
| 118 | 162 | 
| 119   test("fails to get a consumed asset before apply is finished when a sibling " | 163   test( | 
|  | 164       "fails to get a consumed asset before apply is finished when a sibling " | 
| 120       "has finished applying", () { | 165       "has finished applying", () { | 
| 121     var transformer = new DeclaringRewriteTransformer("blub", "blab") | 166     var transformer = new DeclaringRewriteTransformer("blub", "blab") | 
| 122         ..consumePrimary = true; | 167       ..consumePrimary = true; | 
| 123     initGraph(["app|foo.blub", "app|foo.txt"], {"app": [[ | 168     initGraph([ | 
| 124       transformer, | 169       "app|foo.blub", | 
| 125       new RewriteTransformer("txt", "out") | 170       "app|foo.txt" | 
| 126     ]]}); | 171     ], { | 
| 127 | 172       "app": [ | 
|  | 173         [transformer, new RewriteTransformer("txt", "out")] | 
|  | 174       ] | 
|  | 175     }); | 
|  | 176 | 
| 128     transformer.pauseApply(); | 177     transformer.pauseApply(); | 
| 129     updateSources(["app|foo.blub", "app|foo.txt"]); | 178     updateSources(["app|foo.blub", "app|foo.txt"]); | 
| 130     expectAsset("app|foo.out", "foo.out"); | 179     expectAsset("app|foo.out", "foo.out"); | 
| 131     expectNoAsset("app|foo.blub"); | 180     expectNoAsset("app|foo.blub"); | 
| 132 | 181 | 
| 133     transformer.resumeApply(); | 182     transformer.resumeApply(); | 
| 134     buildShouldSucceed(); | 183     buildShouldSucceed(); | 
| 135   }); | 184   }); | 
| 136 | 185 | 
| 137   test("blocks getting a consumed asset before apply is finished when a " | 186   test( | 
|  | 187       "blocks getting a consumed asset before apply is finished when a " | 
| 138       "sibling hasn't finished applying", () { | 188       "sibling hasn't finished applying", () { | 
| 139     var declaring = new DeclaringRewriteTransformer("blub", "blab") | 189     var declaring = new DeclaringRewriteTransformer("blub", "blab") | 
| 140         ..consumePrimary = true; | 190       ..consumePrimary = true; | 
| 141     var eager = new RewriteTransformer("txt", "out"); | 191     var eager = new RewriteTransformer("txt", "out"); | 
| 142     initGraph(["app|foo.blub", "app|foo.txt"], {"app": [[declaring, eager]]}); | 192     initGraph([ | 
| 143 | 193       "app|foo.blub", | 
|  | 194       "app|foo.txt" | 
|  | 195     ], { | 
|  | 196       "app": [ | 
|  | 197         [declaring, eager] | 
|  | 198       ] | 
|  | 199     }); | 
|  | 200 | 
| 144     declaring.pauseApply(); | 201     declaring.pauseApply(); | 
| 145     eager.pauseApply(); | 202     eager.pauseApply(); | 
| 146     updateSources(["app|foo.blub", "app|foo.txt"]); | 203     updateSources(["app|foo.blub", "app|foo.txt"]); | 
| 147     expectAssetDoesNotComplete("app|foo.blub"); | 204     expectAssetDoesNotComplete("app|foo.blub"); | 
| 148 | 205 | 
| 149     declaring.resumeApply(); | 206     declaring.resumeApply(); | 
| 150     eager.resumeApply(); | 207     eager.resumeApply(); | 
| 151     expectNoAsset("app|foo.blub"); | 208     expectNoAsset("app|foo.blub"); | 
| 152     buildShouldSucceed(); | 209     buildShouldSucceed(); | 
| 153   }); | 210   }); | 
| 154 | 211 | 
| 155   test("waits until apply is finished to get an overwritten asset", () { | 212   test("waits until apply is finished to get an overwritten asset", () { | 
| 156     var transformer = new DeclaringRewriteTransformer("blub", "blub"); | 213     var transformer = new DeclaringRewriteTransformer("blub", "blub"); | 
| 157     initGraph(["app|foo.blub"], {"app": [[transformer]]}); | 214     initGraph([ | 
|  | 215       "app|foo.blub" | 
|  | 216     ], { | 
|  | 217       "app": [ | 
|  | 218         [transformer] | 
|  | 219       ] | 
|  | 220     }); | 
| 158 | 221 | 
| 159     transformer.pauseApply(); | 222     transformer.pauseApply(); | 
| 160     updateSources(["app|foo.blub"]); | 223     updateSources(["app|foo.blub"]); | 
| 161     expectAssetDoesNotComplete("app|foo.blub"); | 224     expectAssetDoesNotComplete("app|foo.blub"); | 
| 162 | 225 | 
| 163     transformer.resumeApply(); | 226     transformer.resumeApply(); | 
| 164     expectAsset("app|foo.blub", "foo.blub"); | 227     expectAsset("app|foo.blub", "foo.blub"); | 
| 165     buildShouldSucceed(); | 228     buildShouldSucceed(); | 
| 166   }); | 229   }); | 
| 167 | 230 | 
| 168   // Regression test for #64. | 231   // Regression test for #64. | 
| 169   test("a declaring transformer's output passes through a lazy transformer", | 232   test("a declaring transformer's output passes through a lazy transformer", | 
| 170       () { | 233       () { | 
| 171     var declaring = new DeclaringRewriteTransformer("one", "two"); | 234     var declaring = new DeclaringRewriteTransformer("one", "two"); | 
| 172     initGraph(["app|foo.one"], {"app": [ | 235     initGraph([ | 
| 173       [declaring], | 236       "app|foo.one" | 
| 174       [new LazyRewriteTransformer("two", "three")] | 237     ], { | 
| 175     ]}); | 238       "app": [ | 
|  | 239         [declaring], | 
|  | 240         [new LazyRewriteTransformer("two", "three")] | 
|  | 241       ] | 
|  | 242     }); | 
| 176 | 243 | 
| 177     updateSources(["app|foo.one"]); | 244     updateSources(["app|foo.one"]); | 
| 178     // Give the transformers time to declare their assets. | 245     // Give the transformers time to declare their assets. | 
| 179     schedule(pumpEventQueue); | 246     schedule(pumpEventQueue); | 
| 180 | 247 | 
| 181     expectAsset("app|foo.one", "foo"); | 248     expectAsset("app|foo.one", "foo"); | 
| 182     expectAsset("app|foo.two", "foo.two"); | 249     expectAsset("app|foo.two", "foo.two"); | 
| 183     expectAsset("app|foo.three", "foo.two.three"); | 250     expectAsset("app|foo.three", "foo.two.three"); | 
| 184     buildShouldSucceed(); | 251     buildShouldSucceed(); | 
| 185 | 252 | 
| 186     modifyAsset("app|foo.one", "bar"); | 253     modifyAsset("app|foo.one", "bar"); | 
| 187     updateSources(["app|foo.one"]); | 254     updateSources(["app|foo.one"]); | 
| 188 | 255 | 
| 189     expectAsset("app|foo.one", "bar"); | 256     expectAsset("app|foo.one", "bar"); | 
| 190     expectAsset("app|foo.two", "bar.two"); | 257     expectAsset("app|foo.two", "bar.two"); | 
| 191     expectAsset("app|foo.three", "bar.two.three"); | 258     expectAsset("app|foo.three", "bar.two.three"); | 
| 192     buildShouldSucceed(); | 259     buildShouldSucceed(); | 
| 193 | 260 | 
| 194     expect(declaring.numRuns, completion(equals(2))); | 261     expect(declaring.numRuns, completion(equals(2))); | 
| 195   }); | 262   }); | 
| 196 | 263 | 
| 197   test("a declaring transformer following a lazy transformer runs eagerly once " | 264   test( | 
|  | 265       "a declaring transformer following a lazy transformer runs eagerly once " | 
| 198       "its input is available", () { | 266       "its input is available", () { | 
| 199     var declaring = new DeclaringRewriteTransformer("two", "three"); | 267     var declaring = new DeclaringRewriteTransformer("two", "three"); | 
| 200     initGraph(["app|foo.in"], {"app": [ | 268     initGraph([ | 
| 201       [new LazyAssetsTransformer(["app|out.one", "app|out.two"])], | 269       "app|foo.in" | 
| 202       [declaring] | 270     ], { | 
| 203     ]}); | 271       "app": [ | 
|  | 272         [ | 
|  | 273           new LazyAssetsTransformer(["app|out.one", "app|out.two"]) | 
|  | 274         ], | 
|  | 275         [declaring] | 
|  | 276       ] | 
|  | 277     }); | 
| 204 | 278 | 
| 205     updateSources(["app|foo.in"]); | 279     updateSources(["app|foo.in"]); | 
| 206     // Give the transformers time to declare their assets. | 280     // Give the transformers time to declare their assets. | 
| 207     schedule(pumpEventQueue); | 281     schedule(pumpEventQueue); | 
| 208 | 282 | 
| 209     expectAsset("app|out.one", "app|out.one"); | 283     expectAsset("app|out.one", "app|out.one"); | 
| 210     buildShouldSucceed(); | 284     buildShouldSucceed(); | 
| 211 | 285 | 
| 212     expect(declaring.numRuns, completion(equals(1))); | 286     expect(declaring.numRuns, completion(equals(1))); | 
| 213   }); | 287   }); | 
| 214 | 288 | 
| 215   test("a declaring transformer following a lazy transformer doesn't re-run if " | 289   test( | 
|  | 290       "a declaring transformer following a lazy transformer doesn't re-run if " | 
| 216       "its input becomes available and then unavailable", () { | 291       "its input becomes available and then unavailable", () { | 
| 217     var declaring = new DeclaringRewriteTransformer("two", "three"); | 292     var declaring = new DeclaringRewriteTransformer("two", "three"); | 
| 218     initGraph(["app|foo.in"], {"app": [ | 293     initGraph([ | 
| 219       [new LazyAssetsTransformer(["app|out.one", "app|out.two"])], | 294       "app|foo.in" | 
| 220       [declaring] | 295     ], { | 
| 221     ]}); | 296       "app": [ | 
|  | 297         [ | 
|  | 298           new LazyAssetsTransformer(["app|out.one", "app|out.two"]) | 
|  | 299         ], | 
|  | 300         [declaring] | 
|  | 301       ] | 
|  | 302     }); | 
| 222 | 303 | 
| 223     declaring.pauseApply(); | 304     declaring.pauseApply(); | 
| 224     updateSources(["app|foo.in"]); | 305     updateSources(["app|foo.in"]); | 
| 225     // Give the transformers time to declare their assets. | 306     // Give the transformers time to declare their assets. | 
| 226     schedule(pumpEventQueue); | 307     schedule(pumpEventQueue); | 
| 227 | 308 | 
| 228     // Start [declaring] running, because its input became available. | 309     // Start [declaring] running, because its input became available. | 
| 229     expectAsset("app|out.one", "app|out.one"); | 310     expectAsset("app|out.one", "app|out.one"); | 
| 230 | 311 | 
| 231     // Make sure we're blocking on [declaring.apply]. | 312     // Make sure we're blocking on [declaring.apply]. | 
| (...skipping 12 matching lines...) Expand all  Loading... | 
| 244     // Once we make a request, [declaring] should force the lazy transformer and | 325     // Once we make a request, [declaring] should force the lazy transformer and | 
| 245     // then run itself. | 326     // then run itself. | 
| 246     expectAsset("app|out.three", "app|out.two.three"); | 327     expectAsset("app|out.three", "app|out.two.three"); | 
| 247     buildShouldSucceed(); | 328     buildShouldSucceed(); | 
| 248 | 329 | 
| 249     // Now [declaring] should have run twice. This ensures that it didn't use | 330     // Now [declaring] should have run twice. This ensures that it didn't use | 
| 250     // its original output for some reason. | 331     // its original output for some reason. | 
| 251     expect(declaring.numRuns, completion(equals(2))); | 332     expect(declaring.numRuns, completion(equals(2))); | 
| 252   }); | 333   }); | 
| 253 | 334 | 
| 254   test("a declaring transformer following a lazy transformer does re-run if " | 335   test( | 
|  | 336       "a declaring transformer following a lazy transformer does re-run if " | 
| 255       "its input becomes available, it's forced, and then its input becomes " | 337       "its input becomes available, it's forced, and then its input becomes " | 
| 256       "unavailable", () { | 338       "unavailable", () { | 
| 257     var declaring = new DeclaringRewriteTransformer("two", "three"); | 339     var declaring = new DeclaringRewriteTransformer("two", "three"); | 
| 258     initGraph(["app|foo.in"], {"app": [ | 340     initGraph([ | 
| 259       [new LazyAssetsTransformer(["app|out.one", "app|out.two"])], | 341       "app|foo.in" | 
| 260       [declaring] | 342     ], { | 
| 261     ]}); | 343       "app": [ | 
|  | 344         [ | 
|  | 345           new LazyAssetsTransformer(["app|out.one", "app|out.two"]) | 
|  | 346         ], | 
|  | 347         [declaring] | 
|  | 348       ] | 
|  | 349     }); | 
| 262 | 350 | 
| 263     declaring.pauseApply(); | 351     declaring.pauseApply(); | 
| 264     updateSources(["app|foo.in"]); | 352     updateSources(["app|foo.in"]); | 
| 265 | 353 | 
| 266     // Give the transformers time to declare their assets. | 354     // Give the transformers time to declare their assets. | 
| 267     schedule(pumpEventQueue); | 355     schedule(pumpEventQueue); | 
| 268 | 356 | 
| 269     // Start [declaring] running, because its input became available. | 357     // Start [declaring] running, because its input became available. | 
| 270     expectAsset("app|out.one", "app|out.one"); | 358     expectAsset("app|out.one", "app|out.one"); | 
| 271 | 359 | 
| (...skipping 10 matching lines...) Expand all  Loading... | 
| 282     declaring.resumeApply(); | 370     declaring.resumeApply(); | 
| 283     buildShouldSucceed(); | 371     buildShouldSucceed(); | 
| 284 | 372 | 
| 285     // [declaring] should have run twice, once for its original input and once | 373     // [declaring] should have run twice, once for its original input and once | 
| 286     // after the input changed because it was forced. | 374     // after the input changed because it was forced. | 
| 287     expect(declaring.numRuns, completion(equals(2))); | 375     expect(declaring.numRuns, completion(equals(2))); | 
| 288   }); | 376   }); | 
| 289 | 377 | 
| 290   group("with an error in declareOutputs", () { | 378   group("with an error in declareOutputs", () { | 
| 291     test("still runs apply", () { | 379     test("still runs apply", () { | 
| 292       initGraph(["app|foo.txt"], {"app": [[ | 380       initGraph([ | 
| 293         new DeclaringBadTransformer("app|out.txt", | 381         "app|foo.txt" | 
| 294             declareError: true, applyError: false) | 382       ], { | 
| 295       ]]}); | 383         "app": [ | 
|  | 384           [ | 
|  | 385             new DeclaringBadTransformer("app|out.txt", | 
|  | 386                 declareError: true, applyError: false) | 
|  | 387           ] | 
|  | 388         ] | 
|  | 389       }); | 
| 296 | 390 | 
| 297       updateSources(["app|foo.txt"]); | 391       updateSources(["app|foo.txt"]); | 
| 298       expectAsset("app|out.txt", "bad out"); | 392       expectAsset("app|out.txt", "bad out"); | 
| 299       expectAsset("app|foo.txt", "foo"); | 393       expectAsset("app|foo.txt", "foo"); | 
| 300       buildShouldFail([isTransformerException(BadTransformer.ERROR)]); | 394       buildShouldFail([isTransformerException(BadTransformer.ERROR)]); | 
| 301     }); | 395     }); | 
| 302 | 396 | 
| 303     test("waits for apply to complete before passing through the input even if " | 397     test( | 
|  | 398         "waits for apply to complete before passing through the input even if " | 
| 304         "consumePrimary was called", () { | 399         "consumePrimary was called", () { | 
| 305       var transformer = new DeclaringBadTransformer("app|out.txt", | 400       var transformer = new DeclaringBadTransformer("app|out.txt", | 
| 306             declareError: true, applyError: false)..consumePrimary = true; | 401           declareError: true, applyError: false) | 
| 307       initGraph(["app|foo.txt"], {"app": [[transformer]]}); | 402         ..consumePrimary = true; | 
|  | 403       initGraph([ | 
|  | 404         "app|foo.txt" | 
|  | 405       ], { | 
|  | 406         "app": [ | 
|  | 407           [transformer] | 
|  | 408         ] | 
|  | 409       }); | 
| 308 | 410 | 
| 309       transformer.pauseApply(); | 411       transformer.pauseApply(); | 
| 310       updateSources(["app|foo.txt"]); | 412       updateSources(["app|foo.txt"]); | 
| 311       expectAssetDoesNotComplete("app|out.txt"); | 413       expectAssetDoesNotComplete("app|out.txt"); | 
| 312       expectAssetDoesNotComplete("app|foo.txt"); | 414       expectAssetDoesNotComplete("app|foo.txt"); | 
| 313 | 415 | 
| 314       transformer.resumeApply(); | 416       transformer.resumeApply(); | 
| 315       expectAsset("app|out.txt", "bad out"); | 417       expectAsset("app|out.txt", "bad out"); | 
| 316       expectNoAsset("app|foo.txt"); | 418       expectNoAsset("app|foo.txt"); | 
| 317       buildShouldFail([isTransformerException(BadTransformer.ERROR)]); | 419       buildShouldFail([isTransformerException(BadTransformer.ERROR)]); | 
| 318     }); | 420     }); | 
| 319   }); | 421   }); | 
| 320 | 422 | 
| 321   test("with an error in apply still passes through the input", () { | 423   test("with an error in apply still passes through the input", () { | 
| 322    initGraph(["app|foo.txt"], {"app": [[ | 424     initGraph([ | 
| 323      new DeclaringBadTransformer("app|out.txt", | 425       "app|foo.txt" | 
| 324          declareError: false, applyError: true) | 426     ], { | 
| 325    ]]}); | 427       "app": [ | 
|  | 428         [ | 
|  | 429           new DeclaringBadTransformer("app|out.txt", | 
|  | 430               declareError: false, applyError: true) | 
|  | 431         ] | 
|  | 432       ] | 
|  | 433     }); | 
| 326 | 434 | 
| 327    updateSources(["app|foo.txt"]); | 435     updateSources(["app|foo.txt"]); | 
| 328    expectNoAsset("app|out.txt"); | 436     expectNoAsset("app|out.txt"); | 
| 329    expectAsset("app|foo.txt", "foo"); | 437     expectAsset("app|foo.txt", "foo"); | 
| 330    buildShouldFail([isTransformerException(BadTransformer.ERROR)]); | 438     buildShouldFail([isTransformerException(BadTransformer.ERROR)]); | 
| 331   }); | 439   }); | 
| 332 | 440 | 
| 333   test("can emit outputs it didn't declare", () { | 441   test("can emit outputs it didn't declare", () { | 
| 334     initGraph(["app|foo.txt"], {"app": [ | 442     initGraph([ | 
| 335       [new DeclareAssetsTransformer([], emitted: ["app|out.txt"])] | 443       "app|foo.txt" | 
| 336     ]}); | 444     ], { | 
|  | 445       "app": [ | 
|  | 446         [ | 
|  | 447           new DeclareAssetsTransformer([], emitted: ["app|out.txt"]) | 
|  | 448         ] | 
|  | 449       ] | 
|  | 450     }); | 
| 337 | 451 | 
| 338     updateSources(["app|foo.txt"]); | 452     updateSources(["app|foo.txt"]); | 
| 339     // There's probably going to be some time when "out.txt" is unavailable, | 453     // There's probably going to be some time when "out.txt" is unavailable, | 
| 340     // since it was undeclared. | 454     // since it was undeclared. | 
| 341     schedule(pumpEventQueue); | 455     schedule(pumpEventQueue); | 
| 342     expectAsset("app|out.txt", "app|out.txt"); | 456     expectAsset("app|out.txt", "app|out.txt"); | 
| 343     buildShouldSucceed(); | 457     buildShouldSucceed(); | 
| 344   }); | 458   }); | 
| 345 | 459 | 
| 346   test("can overwrite the primary input even if it declared that it wouldn't", | 460   test("can overwrite the primary input even if it declared that it wouldn't", | 
| 347       () { | 461       () { | 
| 348     var transformer = new DeclareAssetsTransformer( | 462     var transformer = | 
| 349         [], emitted: ["app|foo.txt"]); | 463         new DeclareAssetsTransformer([], emitted: ["app|foo.txt"]); | 
| 350     initGraph(["app|foo.txt"], {"app": [[transformer]]}); | 464     initGraph([ | 
|  | 465       "app|foo.txt" | 
|  | 466     ], { | 
|  | 467       "app": [ | 
|  | 468         [transformer] | 
|  | 469       ] | 
|  | 470     }); | 
| 351 | 471 | 
| 352     transformer.pauseApply(); | 472     transformer.pauseApply(); | 
| 353     updateSources(["app|foo.txt"]); | 473     updateSources(["app|foo.txt"]); | 
| 354     expectAsset("app|foo.txt", "foo"); | 474     expectAsset("app|foo.txt", "foo"); | 
| 355 | 475 | 
| 356     transformer.resumeApply(); | 476     transformer.resumeApply(); | 
| 357     schedule(pumpEventQueue); | 477     schedule(pumpEventQueue); | 
| 358     expectAsset("app|foo.txt", "app|foo.txt"); | 478     expectAsset("app|foo.txt", "app|foo.txt"); | 
| 359     buildShouldSucceed(); | 479     buildShouldSucceed(); | 
| 360   }); | 480   }); | 
| 361 | 481 | 
| 362   test("can declare outputs it doesn't emit", () { | 482   test("can declare outputs it doesn't emit", () { | 
| 363     initGraph(["app|foo.txt"], {"app": [ | 483     initGraph([ | 
| 364       [new DeclareAssetsTransformer(["app|out.txt"], emitted: [])] | 484       "app|foo.txt" | 
| 365     ]}); | 485     ], { | 
|  | 486       "app": [ | 
|  | 487         [ | 
|  | 488           new DeclareAssetsTransformer(["app|out.txt"], emitted: []) | 
|  | 489         ] | 
|  | 490       ] | 
|  | 491     }); | 
| 366 | 492 | 
| 367     updateSources(["app|foo.txt"]); | 493     updateSources(["app|foo.txt"]); | 
| 368     expectNoAsset("app|out.txt"); | 494     expectNoAsset("app|out.txt"); | 
| 369     buildShouldSucceed(); | 495     buildShouldSucceed(); | 
| 370   }); | 496   }); | 
| 371 } | 497 } | 
| OLD | NEW | 
|---|