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

Side by Side Diff: pkg/barback/test/package_graph/group_test.dart

Issue 180473003: Barback transforms now pass through the primary input by default. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 9 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698