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

Side by Side Diff: pkg/barback/test/package_graph/add_remove_transform_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.transform_test; 5 library barback.test.package_graph.transform_test;
6 6
7 import 'package:barback/src/utils.dart'; 7 import 'package:barback/src/utils.dart';
8 import 'package:scheduled_test/scheduled_test.dart'; 8 import 'package:scheduled_test/scheduled_test.dart';
9 9
10 import '../utils.dart'; 10 import '../utils.dart';
11 11
12 main() { 12 main() {
13 initConfig(); 13 initConfig();
14 test("a new transformer is applied to a matching asset", () { 14 test("a new transformer is applied to a matching asset", () {
15 initGraph(["app|foo.blub"]); 15 initGraph(["app|foo.blub"]);
16 16
17 updateSources(["app|foo.blub"]); 17 updateSources(["app|foo.blub"]);
18 expectAsset("app|foo.blub", "foo"); 18 expectAsset("app|foo.blub", "foo");
19 buildShouldSucceed(); 19 buildShouldSucceed();
20 20
21 updateTransformers("app", [[new RewriteTransformer("blub", "blab")]]); 21 updateTransformers("app", [[new RewriteTransformer("blub", "blab")]]);
22 expectAsset("app|foo.blab", "foo.blab"); 22 expectAsset("app|foo.blab", "foo.blab");
23 expectNoAsset("app|foo.blub");
Bob Nystrom 2014/02/26 01:09:15 How about changing these to positive expectations
nweiz 2014/02/26 19:37:14 They're not really relevant to the tests they're i
24 buildShouldSucceed(); 23 buildShouldSucceed();
25 }); 24 });
26 25
27 test("a new transformer is not applied to a non-matching asset", () { 26 test("a new transformer is not applied to a non-matching asset", () {
28 initGraph(["app|foo.blub"]); 27 initGraph(["app|foo.blub"]);
29 28
30 updateSources(["app|foo.blub"]); 29 updateSources(["app|foo.blub"]);
31 expectAsset("app|foo.blub", "foo"); 30 expectAsset("app|foo.blub", "foo");
32 buildShouldSucceed(); 31 buildShouldSucceed();
33 32
34 updateTransformers("app", [[new RewriteTransformer("zip", "zap")]]); 33 updateTransformers("app", [[new RewriteTransformer("zip", "zap")]]);
35 expectAsset("app|foo.blub", "foo"); 34 expectAsset("app|foo.blub", "foo");
36 expectNoAsset("app|foo.zap"); 35 expectNoAsset("app|foo.zap");
37 buildShouldSucceed(); 36 buildShouldSucceed();
38 }); 37 });
39 38
40 test("updateTransformers doesn't re-run an old transformer", () { 39 test("updateTransformers doesn't re-run an old transformer", () {
41 var rewrite = new RewriteTransformer("blub", "blab"); 40 var rewrite = new RewriteTransformer("blub", "blab");
42 initGraph(["app|foo.blub"], {"app": [[rewrite]]}); 41 initGraph(["app|foo.blub"], {"app": [[rewrite]]});
43 42
44 updateSources(["app|foo.blub"]); 43 updateSources(["app|foo.blub"]);
45 expectAsset("app|foo.blab", "foo.blab"); 44 expectAsset("app|foo.blab", "foo.blab");
46 expectNoAsset("app|foo.blub");
47 buildShouldSucceed(); 45 buildShouldSucceed();
48 46
49 updateTransformers("app", [[rewrite]]); 47 updateTransformers("app", [[rewrite]]);
50 expectAsset("app|foo.blab", "foo.blab"); 48 expectAsset("app|foo.blab", "foo.blab");
51 expectNoAsset("app|foo.blub");
52 buildShouldSucceed(); 49 buildShouldSucceed();
53 50
54 expect(rewrite.numRuns, completion(equals(1))); 51 expect(rewrite.numRuns, completion(equals(1)));
55 }); 52 });
56 53
57 test("updateTransformers re-runs old transformers in a new phase", () { 54 test("updateTransformers re-runs old transformers in a new phase", () {
58 var rewrite1 = new RewriteTransformer("txt", "blub"); 55 var rewrite1 = new RewriteTransformer("txt", "blub");
59 var rewrite2 = new RewriteTransformer("blub", "blab"); 56 var rewrite2 = new RewriteTransformer("blub", "blab");
60 initGraph(["app|foo.txt"], {"app": [[rewrite1], [rewrite2]]}); 57 initGraph(["app|foo.txt"], {"app": [[rewrite1], [rewrite2]]});
61 58
62 updateSources(["app|foo.txt"]); 59 updateSources(["app|foo.txt"]);
63 expectAsset("app|foo.blab", "foo.blub.blab"); 60 expectAsset("app|foo.blab", "foo.blub.blab");
64 expectNoAsset("app|foo.blub");
65 buildShouldSucceed(); 61 buildShouldSucceed();
66 62
67 updateTransformers("app", [[rewrite2], [rewrite1]]); 63 updateTransformers("app", [[rewrite2], [rewrite1]]);
68 expectAsset("app|foo.blub", "foo.blub"); 64 expectAsset("app|foo.blub", "foo.blub");
69 expectNoAsset("app|foo.blab"); 65 expectNoAsset("app|foo.blab");
70 buildShouldSucceed(); 66 buildShouldSucceed();
71 }); 67 });
72 68
73 test("updateTransformers re-runs an old transformer when a previous phase " 69 test("updateTransformers re-runs an old transformer when a previous phase "
74 "changes", () { 70 "changes", () {
(...skipping 12 matching lines...) Expand all
87 buildShouldSucceed(); 83 buildShouldSucceed();
88 }); 84 });
89 85
90 test("a removed transformer is no longer applied", () { 86 test("a removed transformer is no longer applied", () {
91 initGraph(["app|foo.blub"], {"app": [ 87 initGraph(["app|foo.blub"], {"app": [
92 [new RewriteTransformer("blub", "blab")] 88 [new RewriteTransformer("blub", "blab")]
93 ]}); 89 ]});
94 90
95 updateSources(["app|foo.blub"]); 91 updateSources(["app|foo.blub"]);
96 expectAsset("app|foo.blab", "foo.blab"); 92 expectAsset("app|foo.blab", "foo.blab");
97 expectNoAsset("app|foo.blub");
98 buildShouldSucceed(); 93 buildShouldSucceed();
99 94
100 updateTransformers("app", []); 95 updateTransformers("app", []);
101 expectAsset("app|foo.blub", "foo"); 96 expectAsset("app|foo.blub", "foo");
102 expectNoAsset("app|foo.blab"); 97 expectNoAsset("app|foo.blab");
103 buildShouldSucceed(); 98 buildShouldSucceed();
104 }); 99 });
105 100
106 test("a new transformer is pipelined", () { 101 test("a new transformer is pipelined", () {
107 var rewrite1 = new RewriteTransformer("source", "phase1"); 102 var rewrite1 = new RewriteTransformer("source", "phase1");
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
185 180
186 updateTransformers("app", [ 181 updateTransformers("app", [
187 [rewrite, new RewriteTransformer("blib", "blob")] 182 [rewrite, new RewriteTransformer("blib", "blob")]
188 ]); 183 ]);
189 rewrite.resumeIsPrimary("app|foo.blub"); 184 rewrite.resumeIsPrimary("app|foo.blub");
190 expectAsset("app|foo.blab", "foo.blab"); 185 expectAsset("app|foo.blab", "foo.blab");
191 expectAsset("app|bar.blob", "bar.blob"); 186 expectAsset("app|bar.blob", "bar.blob");
192 buildShouldSucceed(); 187 buildShouldSucceed();
193 }); 188 });
194 189
195 test("a new transformer can see pass-through assets", () {
196 var rewrite = new RewriteTransformer("zip", "zap");
197 initGraph(["app|foo.blub"], {"app": [[rewrite]]});
198
199 updateSources(["app|foo.blub"]);
200 buildShouldSucceed();
201
202 updateTransformers("app", [
203 [rewrite],
204 [new RewriteTransformer("blub", "blab")]
205 ]);
206 expectAsset("app|foo.blab", "foo.blab");
207 expectNoAsset("app|foo.blub");
208 buildShouldSucceed();
209 });
210
211 test("a cross-package transform sees a new transformer in a new phase", () { 190 test("a cross-package transform sees a new transformer in a new phase", () {
212 var rewrite = new RewriteTransformer("inc", "inc"); 191 var rewrite = new RewriteTransformer("inc", "inc");
213 initGraph({ 192 initGraph({
214 "pkg1|foo.txt": "pkg2|foo.inc", 193 "pkg1|foo.txt": "pkg2|foo.inc",
215 "pkg2|foo.inc": "foo" 194 "pkg2|foo.inc": "foo"
216 }, { 195 }, {
217 "pkg1": [[new ManyToOneTransformer("txt")]], 196 "pkg1": [[new ManyToOneTransformer("txt")]],
218 "pkg2": [[rewrite]] 197 "pkg2": [[rewrite]]
219 }); 198 });
220 199
(...skipping 25 matching lines...) Expand all
246 225
247 updateSources(["pkg1|foo.txt", "pkg2|foo.inc"]); 226 updateSources(["pkg1|foo.txt", "pkg2|foo.inc"]);
248 expectAsset("pkg1|foo.out", "foo.inc.inc"); 227 expectAsset("pkg1|foo.out", "foo.inc.inc");
249 buildShouldSucceed(); 228 buildShouldSucceed();
250 229
251 updateTransformers("pkg2", [[rewrite]]); 230 updateTransformers("pkg2", [[rewrite]]);
252 expectAsset("pkg1|foo.out", "foo.inc"); 231 expectAsset("pkg1|foo.out", "foo.inc");
253 buildShouldSucceed(); 232 buildShouldSucceed();
254 }); 233 });
255 234
235 group("pass-through", () {
236 test("a new transformer can see pass-through assets", () {
237 var rewrite = new RewriteTransformer("zip", "zap");
238 initGraph(["app|foo.blub"], {"app": [[rewrite]]});
239
240 updateSources(["app|foo.blub"]);
241 buildShouldSucceed();
242
243 updateTransformers("app", [
244 [rewrite],
245 [new RewriteTransformer("blub", "blab")]
246 ]);
247 expectAsset("app|foo.blab", "foo.blab");
248 buildShouldSucceed();
249 });
250
251 test("a new transformer can overwrite an old asset", () {
252 var rewrite = new RewriteTransformer("zip", "zap");
253 initGraph(["app|foo.txt"], {"app": [[rewrite]]});
254
255 updateSources(["app|foo.txt"]);
256 expectAsset("app|foo.txt", "foo");
257 buildShouldSucceed();
258
259 updateTransformers("app", [
260 [rewrite, new RewriteTransformer("txt", "txt")]
Bob Nystrom 2014/02/26 01:09:15 I'm not clear on what's going on here. Are you try
nweiz 2014/02/26 19:37:14 I'm asserting that a transform that's added to an
Bob Nystrom 2014/02/26 20:28:50 OK, add some docs to clarify.
nweiz 2014/02/27 21:04:20 Done.
261 ]);
262 expectAsset("app|foo.txt", "foo.txt");
263 buildShouldSucceed();
264 });
265
266 test("passes an asset through when an overwriting transform is removed",
267 () {
268 initGraph(["app|foo.txt"], {
269 "app": [[new RewriteTransformer("txt", "txt")]]
270 });
271
272 updateSources(["app|foo.txt"]);
273 expectAsset("app|foo.txt", "foo.txt");
274 buildShouldSucceed();
275
276 updateTransformers("app", [[]]);
277 expectAsset("app|foo.txt", "foo");
278 buildShouldSucceed();
279 });
280
281 test("passes an asset through when its overwriting transform is removed "
282 "during apply", () {
283 var rewrite = new RewriteTransformer("txt", "txt");
284 initGraph(["app|foo.txt"], {"app": [[rewrite]]});
285
286 rewrite.pauseApply();
287 updateSources(["app|foo.txt"]);
288 expectAssetDoesNotComplete("app|foo.txt");
289
290 updateTransformers("app", [[]]);
291 rewrite.resumeApply();
292 expectAsset("app|foo.txt", "foo");
293 buildShouldSucceed();
294 });
295
296 test("doesn't pass an asset through when its overwriting transform is "
297 "removed during apply if another transform overwrites it", () {
298 var rewrite1 = new RewriteTransformer("txt", "txt");
299 var rewrite2 = new RewriteTransformer("txt", "txt");
300 initGraph(["app|foo.txt"], {"app": [[rewrite1, rewrite2]]});
301
302 rewrite1.pauseApply();
303 updateSources(["app|foo.txt"]);
304 expectAssetDoesNotComplete("app|foo.txt");
305 // Ensure we're waiting on [rewrite1.apply]
306 schedule(pumpEventQueue);
307
308 updateTransformers("app", [[rewrite2]]);
309 rewrite1.resumeApply();
310 expectAsset("app|foo.txt", "foo.txt");
311 buildShouldSucceed();
312 });
313
314 test("doesn't pass an asset through when one overwriting transform is "
315 "removed if another transform still overwrites it", () {
316 var rewrite = new RewriteTransformer("txt", "txt");
317 initGraph(["app|foo.txt"], {"app": [[
318 rewrite,
319 new RewriteTransformer("txt", "txt")
320 ]]});
321
322 updateSources(["app|foo.txt"]);
323 // This could be either the output of [CheckContentTransformer] or
324 // [RewriteTransformer], depending which completes first.
325 expectAsset("app|foo.txt", anything);
326 buildShouldFail([isAssetCollisionException("app|foo.txt")]);
327
328 updateTransformers("app", [[rewrite]]);
329 expectAsset("app|foo.txt", "foo.txt");
330 buildShouldSucceed();
331 });
332 });
333
256 // Regression test. 334 // Regression test.
257 test("a phase is added, then an input is removed and re-added", () { 335 test("a phase is added, then an input is removed and re-added", () {
258 var rewrite = new RewriteTransformer("txt", "mid"); 336 var rewrite = new RewriteTransformer("txt", "mid");
259 initGraph(["app|foo.txt"], { 337 initGraph(["app|foo.txt"], {
260 "app": [[rewrite]] 338 "app": [[rewrite]]
261 }); 339 });
262 340
263 updateSources(["app|foo.txt"]); 341 updateSources(["app|foo.txt"]);
264 expectAsset("app|foo.mid", "foo.mid"); 342 expectAsset("app|foo.mid", "foo.mid");
265 buildShouldSucceed(); 343 buildShouldSucceed();
266 344
267 updateTransformers("app", [ 345 updateTransformers("app", [
268 [rewrite], 346 [rewrite],
269 [new RewriteTransformer("mid", "out")] 347 [new RewriteTransformer("mid", "out")]
270 ]); 348 ]);
271 expectAsset("app|foo.out", "foo.mid.out"); 349 expectAsset("app|foo.out", "foo.mid.out");
272 buildShouldSucceed(); 350 buildShouldSucceed();
273 351
274 removeSources(["app|foo.txt"]); 352 removeSources(["app|foo.txt"]);
275 expectNoAsset("app|foo.out"); 353 expectNoAsset("app|foo.out");
276 buildShouldSucceed(); 354 buildShouldSucceed();
277 355
278 updateSources(["app|foo.txt"]); 356 updateSources(["app|foo.txt"]);
279 expectAsset("app|foo.out", "foo.mid.out"); 357 expectAsset("app|foo.out", "foo.mid.out");
280 buildShouldSucceed(); 358 buildShouldSucceed();
281 }); 359 });
282 } 360 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698