Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, 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.group_test; | 5 library barback.test.package_graph.group_test; |
| 6 | 6 |
| 7 import 'dart:async'; | 7 import 'dart:async'; |
| 8 | 8 |
| 9 import 'package:barback/barback.dart'; | 9 import 'package:barback/barback.dart'; |
| 10 import 'package:scheduled_test/scheduled_test.dart'; | 10 import 'package:scheduled_test/scheduled_test.dart'; |
| 11 | 11 |
| 12 import '../utils.dart'; | 12 import '../utils.dart'; |
| 13 | 13 |
| 14 main() { | 14 main() { |
| 15 initConfig(); | 15 initConfig(); |
| 16 test("runs transforms in a group", () { | 16 test("runs transforms in a group", () { |
| 17 initGraph(["app|foo.a"], {"app": [ | 17 initGraph(["app|foo.a"], {"app": [ |
| 18 [new TransformerGroup([ | 18 [new TransformerGroup([ |
| 19 [new RewriteTransformer("a", "b")], | 19 [new RewriteTransformer("a", "b")], |
| 20 [new RewriteTransformer("b", "c")] | 20 [new RewriteTransformer("b", "c")] |
| 21 ])] | 21 ])] |
| 22 ]}); | 22 ]}); |
| 23 updateSources(["app|foo.a"]); | 23 updateSources(["app|foo.a"]); |
| 24 expectNoAsset("app|foo.b"); | 24 expectAsset("app|foo.b", "foo.b"); |
|
Bob Nystrom
2014/02/26 01:09:15
Why keep this one but delete the others?
nweiz
2014/02/26 19:37:14
I want to assert that a pass-through asset makes i
Bob Nystrom
2014/02/26 20:28:50
That's not what this test description is about. If
nweiz
2014/02/27 21:04:20
Done.
| |
| 25 expectAsset("app|foo.c", "foo.b.c"); | 25 expectAsset("app|foo.c", "foo.b.c"); |
| 26 buildShouldSucceed(); | 26 buildShouldSucceed(); |
| 27 }); | 27 }); |
| 28 | 28 |
| 29 test("passes the output of a group to the next phase", () { | 29 test("passes the output of a group to the next phase", () { |
| 30 initGraph(["app|foo.a"], {"app": [ | 30 initGraph(["app|foo.a"], {"app": [ |
| 31 [new TransformerGroup([ | 31 [new TransformerGroup([ |
| 32 [new RewriteTransformer("a", "b")], | 32 [new RewriteTransformer("a", "b")], |
| 33 [new RewriteTransformer("b", "c")] | 33 [new RewriteTransformer("b", "c")] |
| 34 ])], | 34 ])], |
| 35 [new RewriteTransformer("c", "d")] | 35 [new RewriteTransformer("c", "d")] |
| 36 ]}); | 36 ]}); |
| 37 updateSources(["app|foo.a"]); | 37 updateSources(["app|foo.a"]); |
| 38 expectNoAsset("app|foo.c"); | |
| 39 expectAsset("app|foo.d", "foo.b.c.d"); | 38 expectAsset("app|foo.d", "foo.b.c.d"); |
| 40 buildShouldSucceed(); | 39 buildShouldSucceed(); |
| 41 }); | 40 }); |
| 42 | 41 |
| 43 test("passes the output of a previous phase to a group", () { | 42 test("passes the output of a previous phase to a group", () { |
| 44 initGraph(["app|foo.a"], {"app": [ | 43 initGraph(["app|foo.a"], {"app": [ |
| 45 [new RewriteTransformer("a", "b")], | 44 [new RewriteTransformer("a", "b")], |
| 46 [new TransformerGroup([ | 45 [new TransformerGroup([ |
| 47 [new RewriteTransformer("b", "c")], | 46 [new RewriteTransformer("b", "c")], |
| 48 [new RewriteTransformer("c", "d")] | 47 [new RewriteTransformer("c", "d")] |
| 49 ])] | 48 ])] |
| 50 ]}); | 49 ]}); |
| 51 updateSources(["app|foo.a"]); | 50 updateSources(["app|foo.a"]); |
| 52 expectNoAsset("app|foo.b"); | |
| 53 expectAsset("app|foo.d", "foo.b.c.d"); | 51 expectAsset("app|foo.d", "foo.b.c.d"); |
| 54 buildShouldSucceed(); | 52 buildShouldSucceed(); |
| 55 }); | 53 }); |
| 56 | 54 |
| 57 test("intermediate assets in a group are usable as secondary inputs within " | 55 test("intermediate assets in a group are usable as secondary inputs within " |
| 58 "that group", () { | 56 "that group", () { |
| 59 initGraph({ | 57 initGraph({ |
| 60 "app|foo.a": "contents", | 58 "app|foo.a": "contents", |
| 61 "app|bar.txt": "foo.inc" | 59 "app|bar.txt": "foo.inc" |
| 62 }, {"app": [ | 60 }, {"app": [ |
| (...skipping 30 matching lines...) Expand all Loading... | |
| 93 | 91 |
| 94 test("an updated asset is propagated through a group", () { | 92 test("an updated asset is propagated through a group", () { |
| 95 initGraph(["app|foo.a"], {"app": [ | 93 initGraph(["app|foo.a"], {"app": [ |
| 96 [new TransformerGroup([ | 94 [new TransformerGroup([ |
| 97 [new RewriteTransformer("a", "b")], | 95 [new RewriteTransformer("a", "b")], |
| 98 [new RewriteTransformer("b", "c")] | 96 [new RewriteTransformer("b", "c")] |
| 99 ])] | 97 ])] |
| 100 ]}); | 98 ]}); |
| 101 | 99 |
| 102 updateSources(["app|foo.a"]); | 100 updateSources(["app|foo.a"]); |
| 103 expectNoAsset("app|foo.b"); | |
| 104 expectAsset("app|foo.c", "foo.b.c"); | 101 expectAsset("app|foo.c", "foo.b.c"); |
| 105 buildShouldSucceed(); | 102 buildShouldSucceed(); |
| 106 | 103 |
| 107 modifyAsset("app|foo.a", "new foo"); | 104 modifyAsset("app|foo.a", "new foo"); |
| 108 updateSources(["app|foo.a"]); | 105 updateSources(["app|foo.a"]); |
| 109 expectAsset("app|foo.c", "new foo.b.c"); | 106 expectAsset("app|foo.c", "new foo.b.c"); |
| 110 buildShouldSucceed(); | 107 buildShouldSucceed(); |
| 111 }); | 108 }); |
| 112 | 109 |
| 113 test("an updated asset only runs the necessary transforms in a group", () { | 110 test("an updated asset only runs the necessary transforms in a group", () { |
| 114 var rewriteA = new RewriteTransformer("a", "b"); | 111 var rewriteA = new RewriteTransformer("a", "b"); |
| 115 var rewriteX = new RewriteTransformer("x", "b"); | 112 var rewriteX = new RewriteTransformer("x", "b"); |
| 116 initGraph(["app|foo.a", "app|bar.x"], {"app": [ | 113 initGraph(["app|foo.a", "app|bar.x"], {"app": [ |
| 117 [new TransformerGroup([ | 114 [new TransformerGroup([ |
| 118 [rewriteA, rewriteX], | 115 [rewriteA, rewriteX], |
| 119 [new RewriteTransformer("b", "c")] | 116 [new RewriteTransformer("b", "c")] |
| 120 ])] | 117 ])] |
| 121 ]}); | 118 ]}); |
| 122 | 119 |
| 123 updateSources(["app|foo.a", "app|bar.x"]); | 120 updateSources(["app|foo.a", "app|bar.x"]); |
| 124 expectNoAsset("app|foo.b"); | |
| 125 expectAsset("app|foo.c", "foo.b.c"); | 121 expectAsset("app|foo.c", "foo.b.c"); |
| 126 expectAsset("app|bar.c", "bar.b.c"); | 122 expectAsset("app|bar.c", "bar.b.c"); |
| 127 buildShouldSucceed(); | 123 buildShouldSucceed(); |
| 128 | 124 |
| 129 modifyAsset("app|foo.a", "new foo"); | 125 modifyAsset("app|foo.a", "new foo"); |
| 130 updateSources(["app|foo.a"]); | 126 updateSources(["app|foo.a"]); |
| 131 expectAsset("app|foo.c", "new foo.b.c"); | 127 expectAsset("app|foo.c", "new foo.b.c"); |
| 132 buildShouldSucceed(); | 128 buildShouldSucceed(); |
| 133 | 129 |
| 134 expect(rewriteA.numRuns, completion(equals(2))); | 130 expect(rewriteA.numRuns, completion(equals(2))); |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 189 ])] | 185 ])] |
| 190 ]}); | 186 ]}); |
| 191 updateSources(["app|foo.a", "app|bar.x"]); | 187 updateSources(["app|foo.a", "app|bar.x"]); |
| 192 expectAsset("app|foo.c", "foo.b.c"); | 188 expectAsset("app|foo.c", "foo.b.c"); |
| 193 expectAsset("app|bar.z", "bar.b.z"); | 189 expectAsset("app|bar.z", "bar.b.z"); |
| 194 expectNoAsset("app|foo.z"); | 190 expectNoAsset("app|foo.z"); |
| 195 expectNoAsset("app|bar.c"); | 191 expectNoAsset("app|bar.c"); |
| 196 buildShouldSucceed(); | 192 buildShouldSucceed(); |
| 197 }); | 193 }); |
| 198 | 194 |
| 199 test("parallel groups' intermediate assets can't collide", () { | 195 // TODO(nweiz): re-enable this test when a transformer can consume its |
| 200 initGraph(["app|foo.a", "app|foo.x"], {"app": [ | 196 // primary input (issue 16612). |
| 201 [new TransformerGroup([ | 197 // test("parallel groups' intermediate assets can't collide", () { |
| 202 [new RewriteTransformer("a", "b")], | 198 // initGraph(["app|foo.a", "app|foo.x"], {"app": [ |
| 203 [new RewriteTransformer("b", "c")] | 199 // [new TransformerGroup([ |
| 204 ]), new TransformerGroup([ | 200 // [new RewriteTransformer("a", "b")], |
| 205 [new RewriteTransformer("x", "b")], | 201 // [new RewriteTransformer("b", "c")] |
| 206 [new RewriteTransformer("b", "z")] | 202 // ]), new TransformerGroup([ |
| 207 ])] | 203 // [new RewriteTransformer("x", "b")], |
| 208 ]}); | 204 // [new RewriteTransformer("b", "z")] |
| 209 updateSources(["app|foo.a", "app|foo.x"]); | 205 // ])] |
| 210 expectAsset("app|foo.c", "foo.b.c"); | 206 // ]}); |
| 211 expectAsset("app|foo.z", "foo.b.z"); | 207 // updateSources(["app|foo.a", "app|foo.x"]); |
| 212 buildShouldSucceed(); | 208 // expectAsset("app|foo.c", "foo.b.c"); |
| 213 }); | 209 // expectAsset("app|foo.z", "foo.b.z"); |
| 210 // buildShouldSucceed(); | |
| 211 // }); | |
| 214 }); | 212 }); |
| 215 | 213 |
| 216 group("pass-through", () { | 214 group("pass-through", () { |
| 217 test("passes an unused input through a group", () { | 215 test("passes an unused input through a group", () { |
| 218 initGraph(["app|foo.x"], {"app": [ | 216 initGraph(["app|foo.x"], {"app": [ |
| 219 [new TransformerGroup([ | 217 [new TransformerGroup([ |
| 220 [new RewriteTransformer("a", "b")], | 218 [new RewriteTransformer("a", "b")], |
| 221 [new RewriteTransformer("b", "c")] | 219 [new RewriteTransformer("b", "c")] |
| 222 ])] | 220 ])] |
| 223 ]}); | 221 ]}); |
| (...skipping 28 matching lines...) Expand all Loading... | |
| 252 ]), | 250 ]), |
| 253 new RewriteTransformer("1", "2") | 251 new RewriteTransformer("1", "2") |
| 254 ]]}); | 252 ]]}); |
| 255 updateSources(["app|foo.x"]); | 253 updateSources(["app|foo.x"]); |
| 256 expectNoAsset("app|foo.c"); | 254 expectNoAsset("app|foo.c"); |
| 257 expectNoAsset("app|foo.2"); | 255 expectNoAsset("app|foo.2"); |
| 258 expectAsset("app|foo.x", "foo"); | 256 expectAsset("app|foo.x", "foo"); |
| 259 buildShouldSucceed(); | 257 buildShouldSucceed(); |
| 260 }); | 258 }); |
| 261 | 259 |
| 262 test("doesn't pass through an input that's used by a group but not by " | 260 test("doesn't pass through an input that's overwritten by a group but not " |
| 263 "transformers", () { | 261 "by transformers", () { |
|
Bob Nystrom
2014/02/26 01:09:15
It does pass it through now.
nweiz
2014/02/26 19:37:14
No, the output is "foo.a", which is the overwritte
Bob Nystrom
2014/02/26 20:28:50
I guess I just don't understand the utility of thi
nweiz
2014/02/27 21:04:20
It shouldn't be able to; if it did, it might cause
Bob Nystrom
2014/02/27 21:33:40
SGTM, though a comment to this affect would be nic
nweiz
2014/02/27 21:47:56
I'll add one to the simplest/most general test cas
| |
| 264 initGraph(["app|foo.a"], {"app": [[ | 262 initGraph(["app|foo.a"], {"app": [[ |
| 265 new TransformerGroup([ | 263 new TransformerGroup([ |
| 266 [new RewriteTransformer("a", "b")], | 264 [new RewriteTransformer("a", "a")], |
| 267 [new RewriteTransformer("b", "c")] | |
| 268 ]), | 265 ]), |
| 269 new RewriteTransformer("x", "y") | 266 new RewriteTransformer("x", "y") |
| 270 ]]}); | 267 ]]}); |
| 271 updateSources(["app|foo.a"]); | 268 updateSources(["app|foo.a"]); |
| 272 expectNoAsset("app|foo.a"); | |
| 273 expectNoAsset("app|foo.y"); | 269 expectNoAsset("app|foo.y"); |
| 274 expectAsset("app|foo.c", "foo.b.c"); | 270 expectAsset("app|foo.a", "foo.a"); |
| 275 buildShouldSucceed(); | 271 buildShouldSucceed(); |
| 276 }); | 272 }); |
| 277 | 273 |
| 278 test("doesn't pass through an input that's used by transformers but not by " | 274 test("doesn't pass through an input that's overwritten by transformers but " |
|
Bob Nystrom
2014/02/26 01:09:15
Does.
nweiz
2014/02/26 19:37:14
See above.
| |
| 279 "a group", () { | 275 "not by a group", () { |
| 280 initGraph(["app|foo.x"], {"app": [[ | 276 initGraph(["app|foo.x"], {"app": [[ |
| 281 new TransformerGroup([ | 277 new TransformerGroup([ |
| 282 [new RewriteTransformer("a", "b")], | 278 [new RewriteTransformer("a", "b")], |
| 283 [new RewriteTransformer("b", "c")] | 279 [new RewriteTransformer("b", "c")] |
| 284 ]), | 280 ]), |
| 285 new RewriteTransformer("x", "y") | 281 new RewriteTransformer("x", "x") |
| 286 ]]}); | 282 ]]}); |
| 287 updateSources(["app|foo.x"]); | 283 updateSources(["app|foo.x"]); |
| 288 expectNoAsset("app|foo.x"); | |
| 289 expectNoAsset("app|foo.c"); | 284 expectNoAsset("app|foo.c"); |
| 290 expectAsset("app|foo.y", "foo.y"); | 285 expectAsset("app|foo.x", "foo.x"); |
| 291 buildShouldSucceed(); | 286 buildShouldSucceed(); |
| 292 }); | 287 }); |
| 293 | 288 |
| 294 test("doesn't detect a collision for an input that's modified in-place by " | 289 test("doesn't detect a collision for an input that's modified in-place by " |
| 295 "a transformer", () { | 290 "a transformer", () { |
| 296 initGraph(["app|foo.x"], {"app": [[ | 291 initGraph(["app|foo.x"], {"app": [[ |
| 297 new TransformerGroup([ | 292 new TransformerGroup([ |
| 298 [new RewriteTransformer("a", "b")], | 293 [new RewriteTransformer("a", "b")], |
| 299 [new RewriteTransformer("b", "c")] | 294 [new RewriteTransformer("b", "c")] |
| 300 ]), | 295 ]), |
| 301 new RewriteTransformer("x", "x") | 296 new RewriteTransformer("x", "x") |
| 302 ]]}); | 297 ]]}); |
| 303 updateSources(["app|foo.x"]); | 298 updateSources(["app|foo.x"]); |
| 304 expectAsset("app|foo.x", "foo.x"); | 299 expectAsset("app|foo.x", "foo.x"); |
| 305 buildShouldSucceed(); | 300 buildShouldSucceed(); |
| 306 }); | 301 }); |
| 307 | 302 |
| 308 test("doesn't detect a collision for an input that's modified in-place by " | 303 test("doesn't detect a collision for an input that's modified in-place by " |
| 309 "a group", () { | 304 "a group", () { |
| 310 initGraph(["app|foo.a"], {"app": [[ | 305 initGraph(["app|foo.a"], {"app": [[ |
| 311 new TransformerGroup([[new RewriteTransformer("a", "a")]]), | 306 new TransformerGroup([[new RewriteTransformer("a", "a")]]), |
| 312 new RewriteTransformer("x", "y") | 307 new RewriteTransformer("x", "y") |
| 313 ]]}); | 308 ]]}); |
| 314 updateSources(["app|foo.a"]); | 309 updateSources(["app|foo.a"]); |
| 315 expectAsset("app|foo.a", "foo.a"); | 310 expectAsset("app|foo.a", "foo.a"); |
| 316 buildShouldSucceed(); | 311 buildShouldSucceed(); |
| 317 }); | 312 }); |
| 318 | |
| 319 test("doesn't pass-through an asset that ceases to be forwarded due to a " | |
| 320 "resolved collision", () { | |
| 321 initGraph({ | |
| 322 "app|foo.a": "foo.a", | |
| 323 "app|foo.x": "foo.x" | |
| 324 }, {"app": [ | |
| 325 [new TransformerGroup([[ | |
| 326 new CheckContentAndRenameTransformer( | |
| 327 "a", "new foo.a", "z", "modified foo.a"), | |
| 328 new RewriteTransformer('x', 'a') | |
| 329 ]])] | |
| 330 ]}); | |
| 331 | |
| 332 updateSources(["app|foo.a", "app|foo.x"]); | |
| 333 expectAsset("app|foo.a", "foo.a"); | |
| 334 expectNoAsset("app|foo.z"); | |
| 335 buildShouldFail([isAssetCollisionException("app|foo.a")]); | |
| 336 | |
| 337 modifyAsset('app|foo.a', 'new foo.a'); | |
| 338 updateSources(["app|foo.a"]); | |
| 339 expectAsset("app|foo.a", "foo.x.a"); | |
| 340 expectAsset("app|foo.z", "modified foo.a"); | |
| 341 buildShouldSucceed(); | |
| 342 }); | |
| 343 }); | 313 }); |
| 344 | 314 |
| 345 test("runs transforms in an added group", () { | 315 test("runs transforms in an added group", () { |
| 346 var rewrite = new RewriteTransformer("a", "z"); | 316 var rewrite = new RewriteTransformer("a", "z"); |
| 347 initGraph(["app|foo.a"], {"app": [[rewrite]]}); | 317 initGraph(["app|foo.a"], {"app": [[rewrite]]}); |
| 348 | 318 |
| 349 updateSources(["app|foo.a"]); | 319 updateSources(["app|foo.a"]); |
| 350 expectAsset("app|foo.z", "foo.z"); | 320 expectAsset("app|foo.z", "foo.z"); |
| 351 buildShouldSucceed(); | 321 buildShouldSucceed(); |
| 352 | 322 |
| (...skipping 23 matching lines...) Expand all Loading... | |
| 376 [group, new RewriteTransformer("a", "z")] | 346 [group, new RewriteTransformer("a", "z")] |
| 377 ]); | 347 ]); |
| 378 expectAsset("app|foo.c", "foo.b.c"); | 348 expectAsset("app|foo.c", "foo.b.c"); |
| 379 expectAsset("app|foo.z", "foo.z"); | 349 expectAsset("app|foo.z", "foo.z"); |
| 380 buildShouldSucceed(); | 350 buildShouldSucceed(); |
| 381 | 351 |
| 382 expect(rewrite1.numRuns, completion(equals(1))); | 352 expect(rewrite1.numRuns, completion(equals(1))); |
| 383 expect(rewrite2.numRuns, completion(equals(1))); | 353 expect(rewrite2.numRuns, completion(equals(1))); |
| 384 }); | 354 }); |
| 385 | 355 |
| 386 test("doesn't pass through an input that's used by an added group", () { | 356 test("doesn't pass through an input that's overwritten by an added group", |
| 357 () { | |
| 387 var rewrite = new RewriteTransformer("x", "z"); | 358 var rewrite = new RewriteTransformer("x", "z"); |
| 388 initGraph(["app|foo.a"], {"app": [[rewrite]]}); | 359 initGraph(["app|foo.a"], {"app": [[rewrite]]}); |
| 389 | 360 |
| 390 updateSources(["app|foo.a"]); | 361 updateSources(["app|foo.a"]); |
| 391 expectAsset("app|foo.a", "foo"); | 362 expectAsset("app|foo.a", "foo"); |
| 392 buildShouldSucceed(); | 363 buildShouldSucceed(); |
| 393 | 364 |
| 394 updateTransformers("app", [ | 365 updateTransformers("app", [ |
| 395 [rewrite, new TransformerGroup([ | 366 [rewrite, new TransformerGroup([[new RewriteTransformer("a", "a")]])] |
| 396 [new RewriteTransformer("a", "b")], | |
| 397 [new RewriteTransformer("b", "c")] | |
| 398 ])] | |
| 399 ]); | 367 ]); |
| 400 expectNoAsset("app|foo.a"); | 368 expectAsset("app|foo.a", "foo.a"); |
| 401 expectAsset("app|foo.c", "foo.b.c"); | |
| 402 buildShouldSucceed(); | 369 buildShouldSucceed(); |
| 403 }); | 370 }); |
| 404 | 371 |
| 405 // TODO(nweiz): make the collision error message nice | 372 // TODO(nweiz): make the collision error message nice |
| 406 test("reports collisions within a group", () { | 373 test("reports collisions within a group", () { |
| 407 initGraph(["app|foo.a", "app|foo.x"], {"app": [ | 374 initGraph(["app|foo.a", "app|foo.x"], {"app": [ |
| 408 [new TransformerGroup([ | 375 [new TransformerGroup([ |
| 409 [new RewriteTransformer("a", "b")], | 376 [new RewriteTransformer("a", "b")], |
| 410 [new RewriteTransformer("x", "b")] | 377 [new RewriteTransformer("x", "b")] |
| 411 ])] | 378 ])] |
| 412 ]}); | 379 ]}); |
| 413 updateSources(["app|foo.a", "app|foo.x"]); | 380 updateSources(["app|foo.a", "app|foo.x"]); |
| 414 buildShouldFail([isAssetCollisionException("app|foo.b")]); | 381 buildShouldFail([isAssetCollisionException("app|foo.b")]); |
| 415 }); | 382 }); |
| 416 | 383 |
| 417 test("reports collisions between a group and a non-grouped transform", () { | 384 test("reports collisions between a group and a non-grouped transform", () { |
| 418 initGraph(["app|foo.a", "app|foo.x"], {"app": [[ | 385 initGraph(["app|foo.a", "app|foo.x"], {"app": [[ |
| 419 new TransformerGroup([ | 386 new TransformerGroup([ |
| 420 [new RewriteTransformer("a", "b")], | 387 [new RewriteTransformer("a", "b")], |
| 421 [new RewriteTransformer("b", "c")] | 388 [new RewriteTransformer("b", "c")] |
| 422 ]), | 389 ]), |
| 423 new RewriteTransformer("x", "c") | 390 new RewriteTransformer("x", "c") |
| 424 ]]}); | 391 ]]}); |
| 425 updateSources(["app|foo.a", "app|foo.x"]); | 392 updateSources(["app|foo.a", "app|foo.x"]); |
| 426 buildShouldFail([isAssetCollisionException("app|foo.c")]); | 393 buildShouldFail([isAssetCollisionException("app|foo.c")]); |
| 427 }); | 394 }); |
| 428 } | 395 } |
| OLD | NEW |