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

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

Issue 21226004: Refactor the barback tests somewhat. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Code review changes. Created 7 years, 4 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
« no previous file with comments | « pkg/barback/test/cancelable_future_test.dart ('k') | pkg/barback/test/transformer/bad.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 'dart:async'; 7 import 'dart:async';
8 8
9 import 'package:barback/barback.dart'; 9 import 'package:barback/barback.dart';
10 import 'package:barback/src/utils.dart';
10 import 'package:scheduled_test/scheduled_test.dart'; 11 import 'package:scheduled_test/scheduled_test.dart';
11 12
12 import '../utils.dart'; 13 import '../utils.dart';
13 14
14 main() { 15 main() {
15 initConfig(); 16 initConfig();
16 test("gets a transformed asset with a different path", () { 17 test("gets a transformed asset with a different path", () {
17 initGraph(["app|foo.blub"], {"app": [ 18 initGraph(["app|foo.blub"], {"app": [
18 [new RewriteTransformer("blub", "blab")] 19 [new RewriteTransformer("blub", "blab")]
19 ]}); 20 ]});
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
97 schedule(() { 98 schedule(() {
98 expect(transformer.numRuns, equals(1)); 99 expect(transformer.numRuns, equals(1));
99 }); 100 });
100 }); 101 });
101 102
102 test("runs transforms in the same phase in parallel", () { 103 test("runs transforms in the same phase in parallel", () {
103 var transformerA = new RewriteTransformer("txt", "a"); 104 var transformerA = new RewriteTransformer("txt", "a");
104 var transformerB = new RewriteTransformer("txt", "b"); 105 var transformerB = new RewriteTransformer("txt", "b");
105 initGraph(["app|foo.txt"], {"app": [[transformerA, transformerB]]}); 106 initGraph(["app|foo.txt"], {"app": [[transformerA, transformerB]]});
106 107
107 transformerA.wait(); 108 transformerA.pauseApply();
108 transformerB.wait(); 109 transformerB.pauseApply();
109 110
110 schedule(() { 111 schedule(() {
111 updateSources(["app|foo.txt"]); 112 updateSources(["app|foo.txt"]);
112 113
113 // Wait for them both to start. 114 // Wait for them both to start.
114 return Future.wait([transformerA.started, transformerB.started]); 115 return Future.wait([transformerA.started, transformerB.started]);
115 }); 116 });
116 117
117 schedule(() { 118 schedule(() {
118 // They should both still be running. 119 // They should both still be running.
119 expect(transformerA.isRunning, isTrue); 120 expect(transformerA.isRunning, isTrue);
120 expect(transformerB.isRunning, isTrue); 121 expect(transformerB.isRunning, isTrue);
121 122
122 transformerA.complete(); 123 transformerA.resumeApply();
123 transformerB.complete(); 124 transformerB.resumeApply();
124 }); 125 });
125 126
126 expectAsset("app|foo.a", "foo.a"); 127 expectAsset("app|foo.a", "foo.a");
127 expectAsset("app|foo.b", "foo.b"); 128 expectAsset("app|foo.b", "foo.b");
128 buildShouldSucceed(); 129 buildShouldSucceed();
129 }); 130 });
130 131
131 test("does not reapply transform when inputs are not modified", () { 132 test("does not reapply transform when inputs are not modified", () {
132 var transformer = new RewriteTransformer("blub", "blab"); 133 var transformer = new RewriteTransformer("blub", "blab");
133 initGraph(["app|foo.blub"], {"app": [[transformer]]}); 134 initGraph(["app|foo.blub"], {"app": [[transformer]]});
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
179 "app|a.inc": "a", 180 "app|a.inc": "a",
180 "app|b.inc": "b" 181 "app|b.inc": "b"
181 }, {"app": [[transformer]]}); 182 }, {"app": [[transformer]]});
182 183
183 updateSources(["app|a.txt", "app|a.inc", "app|b.inc"]); 184 updateSources(["app|a.txt", "app|a.inc", "app|b.inc"]);
184 185
185 expectAsset("app|a.out", "ab"); 186 expectAsset("app|a.out", "ab");
186 buildShouldSucceed(); 187 buildShouldSucceed();
187 188
188 // Remove the dependency on the non-primary input. 189 // Remove the dependency on the non-primary input.
189 schedule(() { 190 modifyAsset("app|a.txt", "a.inc");
190 modifyAsset("app|a.txt", "a.inc"); 191 schedule(() => updateSources(["app|a.txt"]));
191 updateSources(["app|a.txt"]);
192 });
193 192
194 // Process it again. 193 // Process it again.
195 expectAsset("app|a.out", "a"); 194 expectAsset("app|a.out", "a");
196 buildShouldSucceed(); 195 buildShouldSucceed();
197 196
198 // Now touch the removed input. It should not trigger another build. 197 // Now touch the removed input. It should not trigger another build.
199 schedule(() { 198 schedule(() {
200 updateSources(["app|b.inc"]); 199 updateSources(["app|b.inc"]);
201 }); 200 });
202 201
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
263 262
264 schedule(() { 263 schedule(() {
265 removeSources(["app|foo.txt"]); 264 removeSources(["app|foo.txt"]);
266 }); 265 });
267 266
268 expectNoAsset("app|foo.out"); 267 expectNoAsset("app|foo.out");
269 buildShouldSucceed(); 268 buildShouldSucceed();
270 }); 269 });
271 270
272 test("reapplies a transform when a non-primary input changes", () { 271 test("reapplies a transform when a non-primary input changes", () {
273 initGraph({ 272 initGraph({
274 "app|a.txt": "a.inc", 273 "app|a.txt": "a.inc",
275 "app|a.inc": "a" 274 "app|a.inc": "a"
276 }, {"app": [[new ManyToOneTransformer("txt")]]}); 275 }, {"app": [[new ManyToOneTransformer("txt")]]});
277 276
278 updateSources(["app|a.txt", "app|a.inc"]); 277 updateSources(["app|a.txt", "app|a.inc"]);
279 expectAsset("app|a.out", "a"); 278 expectAsset("app|a.out", "a");
280 buildShouldSucceed(); 279 buildShouldSucceed();
281 280
282 schedule(() { 281 modifyAsset("app|a.inc", "after");
283 modifyAsset("app|a.inc", "after"); 282 schedule(() => updateSources(["app|a.inc"]));
284 updateSources(["app|a.inc"]);
285 });
286 283
287 expectAsset("app|a.out", "after"); 284 expectAsset("app|a.out", "after");
288 buildShouldSucceed(); 285 buildShouldSucceed();
289 }); 286 });
290 287
291 test("restarts processing if a change occurs during processing", () { 288 test("restarts processing if a change occurs during processing", () {
292 var transformer = new RewriteTransformer("txt", "out"); 289 var transformer = new RewriteTransformer("txt", "out");
293 initGraph(["app|foo.txt"], {"app": [[transformer]]}); 290 initGraph(["app|foo.txt"], {"app": [[transformer]]});
294 291
295 transformer.wait(); 292 transformer.pauseApply();
296 293
297 schedule(() { 294 schedule(() {
298 updateSources(["app|foo.txt"]); 295 updateSources(["app|foo.txt"]);
299 296
300 // Wait for the transform to start. 297 // Wait for the transform to start.
301 return transformer.started; 298 return transformer.started;
302 }); 299 });
303 300
304 schedule(() { 301 schedule(() {
305 // Now update the graph during it. 302 // Now update the graph during it.
306 updateSources(["app|foo.txt"]); 303 updateSources(["app|foo.txt"]);
307 }); 304 transformer.resumeApply();
308
309 schedule(() {
310 transformer.complete();
311 }); 305 });
312 306
313 expectAsset("app|foo.out", "foo.out"); 307 expectAsset("app|foo.out", "foo.out");
314 buildShouldSucceed(); 308 buildShouldSucceed();
315 309
316 schedule(() { 310 schedule(() {
317 expect(transformer.numRuns, equals(2)); 311 expect(transformer.numRuns, equals(2));
318 }); 312 });
319 }); 313 });
320 314
321 test("handles an output moving from one transformer to another", () { 315 test("handles an output moving from one transformer to another", () {
322 // In the first run, "shared.out" is created by the "a.a" transformer. 316 // In the first run, "shared.out" is created by the "a.a" transformer.
323 initGraph({ 317 initGraph({
324 "app|a.a": "a.out,shared.out", 318 "app|a.a": "a.out,shared.out",
325 "app|b.b": "b.out" 319 "app|b.b": "b.out"
326 }, {"app": [ 320 }, {"app": [
327 [new OneToManyTransformer("a"), new OneToManyTransformer("b")] 321 [new OneToManyTransformer("a"), new OneToManyTransformer("b")]
328 ]}); 322 ]});
329 323
330 updateSources(["app|a.a", "app|b.b"]); 324 updateSources(["app|a.a", "app|b.b"]);
331 325
332 expectAsset("app|a.out", "spread a"); 326 expectAsset("app|a.out", "spread a");
333 expectAsset("app|b.out", "spread b"); 327 expectAsset("app|b.out", "spread b");
334 expectAsset("app|shared.out", "spread a"); 328 expectAsset("app|shared.out", "spread a");
335 buildShouldSucceed(); 329 buildShouldSucceed();
336 330
337 // Now switch their contents so that "shared.out" will be output by "b.b"'s 331 // Now switch their contents so that "shared.out" will be output by "b.b"'s
338 // transformer. 332 // transformer.
339 schedule(() { 333 modifyAsset("app|a.a", "a.out");
340 modifyAsset("app|a.a", "a.out"); 334 modifyAsset("app|b.b", "b.out,shared.out");
341 modifyAsset("app|b.b", "b.out,shared.out"); 335 schedule(() => updateSources(["app|a.a", "app|b.b"]));
342 updateSources(["app|a.a", "app|b.b"]);
343 });
344 336
345 expectAsset("app|a.out", "spread a"); 337 expectAsset("app|a.out", "spread a");
346 expectAsset("app|b.out", "spread b"); 338 expectAsset("app|b.out", "spread b");
347 expectAsset("app|shared.out", "spread b"); 339 expectAsset("app|shared.out", "spread b");
348 buildShouldSucceed(); 340 buildShouldSucceed();
349 }); 341 });
350 342
351 test("restarts before finishing later phases when a change occurs", () { 343 test("restarts before finishing later phases when a change occurs", () {
352 var txtToInt = new RewriteTransformer("txt", "int"); 344 var txtToInt = new RewriteTransformer("txt", "int");
353 var intToOut = new RewriteTransformer("int", "out"); 345 var intToOut = new RewriteTransformer("int", "out");
354 initGraph(["app|foo.txt", "app|bar.txt"], 346 initGraph(["app|foo.txt", "app|bar.txt"],
355 {"app": [[txtToInt], [intToOut]]}); 347 {"app": [[txtToInt], [intToOut]]});
356 348
357 txtToInt.wait(); 349 txtToInt.pauseApply();
358 350
359 schedule(() { 351 schedule(() {
360 updateSources(["app|foo.txt"]); 352 updateSources(["app|foo.txt"]);
361 353
362 // Wait for the first transform to start. 354 // Wait for the first transform to start.
363 return txtToInt.started; 355 return txtToInt.started;
364 }); 356 });
365 357
366 schedule(() { 358 schedule(() {
367 // Now update the graph during it. 359 // Now update the graph during it.
368 updateSources(["app|bar.txt"]); 360 updateSources(["app|bar.txt"]);
369 }); 361 });
370 362
371 schedule(() { 363 schedule(() {
372 txtToInt.complete(); 364 txtToInt.resumeApply();
373 }); 365 });
374 366
375 expectAsset("app|foo.out", "foo.int.out"); 367 expectAsset("app|foo.out", "foo.int.out");
376 expectAsset("app|bar.out", "bar.int.out"); 368 expectAsset("app|bar.out", "bar.int.out");
377 buildShouldSucceed(); 369 buildShouldSucceed();
378 370
379 schedule(() { 371 schedule(() {
380 // Should only have run each transform once for each primary. 372 // Should only have run each transform once for each primary.
381 expect(txtToInt.numRuns, equals(2)); 373 expect(txtToInt.numRuns, equals(2));
382 expect(intToOut.numRuns, equals(2)); 374 expect(intToOut.numRuns, equals(2));
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
427 schedule(() => updateSources(["pkg2|foo.txt"])); 419 schedule(() => updateSources(["pkg2|foo.txt"]));
428 expectAsset("pkg1|foo.out", "foo.out"); 420 expectAsset("pkg1|foo.out", "foo.out");
429 buildShouldNotBeDone(); 421 buildShouldNotBeDone();
430 422
431 // Now that the provider is unpaused, pkg2's transforms finish and the 423 // Now that the provider is unpaused, pkg2's transforms finish and the
432 // overall build succeeds. 424 // overall build succeeds.
433 resumeProvider(); 425 resumeProvider();
434 buildShouldSucceed(); 426 buildShouldSucceed();
435 }); 427 });
436 } 428 }
OLDNEW
« no previous file with comments | « pkg/barback/test/cancelable_future_test.dart ('k') | pkg/barback/test/transformer/bad.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698