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

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

Issue 808713003: Remove barback from the repo. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years 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
(Empty)
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
3 // BSD-style license that can be found in the LICENSE file.
4
5 library barback.test.package_graph.lazy_asset_test;
6
7 import 'package:barback/barback.dart';
8 import 'package:barback/src/utils.dart';
9 import 'package:scheduled_test/scheduled_test.dart';
10
11 import '../utils.dart';
12
13 main() {
14 initConfig();
15 test("requesting a lazy asset should cause it to be generated", () {
16 initGraph(["app|foo.blub"], {"app": [
17 [new LazyRewriteTransformer("blub", "blab")]
18 ]});
19 updateSources(["app|foo.blub"]);
20 expectAsset("app|foo.blab", "foo.blab");
21 buildShouldSucceed();
22 });
23
24 test("calling getAllAssets should cause a lazy asset to be generated", () {
25 var transformer = new LazyRewriteTransformer("blub", "blab");
26 initGraph(["app|foo.blub"], {"app": [[transformer]]});
27 updateSources(["app|foo.blub"]);
28 expectAllAssets(["app|foo.blub", "app|foo.blab"]);
29 buildShouldSucceed();
30 expect(transformer.numRuns, completion(equals(1)));
31 });
32
33 test("requesting a lazy asset multiple times should only cause it to be "
34 "generated once", () {
35 var transformer = new LazyRewriteTransformer("blub", "blab");
36 initGraph(["app|foo.blub"], {"app": [[transformer]]});
37 updateSources(["app|foo.blub"]);
38 expectAsset("app|foo.blab", "foo.blab");
39 expectAsset("app|foo.blab", "foo.blab");
40 expectAsset("app|foo.blab", "foo.blab");
41 buildShouldSucceed();
42 expect(transformer.numRuns, completion(equals(1)));
43 });
44
45 test("a lazy asset can be consumed by a non-lazy transformer", () {
46 initGraph(["app|foo.blub"], {"app": [
47 [new LazyRewriteTransformer("blub", "blab")],
48 [new RewriteTransformer("blab", "blib")]
49 ]});
50 updateSources(["app|foo.blub"]);
51 expectAsset("app|foo.blib", "foo.blab.blib");
52 buildShouldSucceed();
53 });
54
55 test("a lazy asset isn't eagerly compiled", () {
56 var transformer = new LazyRewriteTransformer("blub", "blab");
57 initGraph(["app|foo.blub"], {"app": [[transformer]]});
58 updateSources(["app|foo.blub"]);
59 buildShouldSucceed();
60 expect(transformer.numRuns, completion(equals(0)));
61 });
62
63 test("a lazy asset emitted by a group isn't eagerly compiled", () {
64 var transformer = new LazyRewriteTransformer("blub", "blab");
65 initGraph(["app|foo.blub"], {"app": [
66 [new TransformerGroup([[transformer]])]
67 ]});
68 updateSources(["app|foo.blub"]);
69 buildShouldSucceed();
70 expect(transformer.numRuns, completion(equals(0)));
71 });
72
73 test("a lazy asset piped into a non-lazy transformer is eagerly compiled",
74 () {
75 var transformer = new LazyRewriteTransformer("blub", "blab");
76 initGraph(["app|foo.blub"], {"app": [
77 [transformer],
78 [new RewriteTransformer("blab", "blib")]
79 ]});
80 updateSources(["app|foo.blub"]);
81 buildShouldSucceed();
82 expect(transformer.numRuns, completion(equals(1)));
83 });
84
85 test("a lazy asset piped into a declaring transformer isn't eagerly "
86 "compiled", () {
87 var transformer1 = new LazyRewriteTransformer("blub", "blab");
88 var transformer2 = new DeclaringRewriteTransformer("blab", "blib");
89 initGraph(["app|foo.blub"], {"app": [
90 [transformer1], [transformer2]
91 ]});
92 updateSources(["app|foo.blub"]);
93 buildShouldSucceed();
94 expect(transformer1.numRuns, completion(equals(0)));
95 expect(transformer2.numRuns, completion(equals(0)));
96 });
97
98 test("a lazy asset piped into a declaring transformer is compiled "
99 "on-demand", () {
100 initGraph(["app|foo.blub"], {"app": [
101 [new LazyRewriteTransformer("blub", "blab")],
102 [new DeclaringRewriteTransformer("blab", "blib")]
103 ]});
104 updateSources(["app|foo.blub"]);
105 expectAsset("app|foo.blib", "foo.blab.blib");
106 buildShouldSucceed();
107 });
108
109 test("a lazy asset piped through many declaring transformers isn't eagerly "
110 "compiled", () {
111 var transformer1 = new LazyRewriteTransformer("one", "two");
112 var transformer2 = new DeclaringRewriteTransformer("two", "three");
113 var transformer3 = new DeclaringRewriteTransformer("three", "four");
114 var transformer4 = new DeclaringRewriteTransformer("four", "five");
115 initGraph(["app|foo.one"], {"app": [
116 [transformer1], [transformer2], [transformer3], [transformer4]
117 ]});
118 updateSources(["app|foo.one"]);
119 buildShouldSucceed();
120 expect(transformer1.numRuns, completion(equals(0)));
121 expect(transformer2.numRuns, completion(equals(0)));
122 expect(transformer3.numRuns, completion(equals(0)));
123 expect(transformer4.numRuns, completion(equals(0)));
124 });
125
126 test("a lazy asset piped through many declaring transformers is compiled "
127 "on-demand", () {
128 initGraph(["app|foo.one"], {"app": [
129 [new LazyRewriteTransformer("one", "two")],
130 [new DeclaringRewriteTransformer("two", "three")],
131 [new DeclaringRewriteTransformer("three", "four")],
132 [new DeclaringRewriteTransformer("four", "five")]
133 ]});
134 updateSources(["app|foo.one"]);
135 expectAsset("app|foo.five", "foo.two.three.four.five");
136 buildShouldSucceed();
137 });
138
139 test("a lazy asset piped into a non-lazy transformer that doesn't use its "
140 "outputs isn't eagerly compiled", () {
141 var transformer = new LazyRewriteTransformer("blub", "blab");
142 initGraph(["app|foo.blub"], {"app": [
143 [transformer],
144 [new RewriteTransformer("txt", "out")]
145 ]});
146 updateSources(["app|foo.blub"]);
147 buildShouldSucceed();
148 expect(transformer.numRuns, completion(equals(0)));
149 });
150
151 test("a lazy asset piped into a non-lazy transformer that doesn't use its "
152 "outputs is compiled on-demand", () {
153 initGraph(["app|foo.blub"], {"app": [
154 [new LazyRewriteTransformer("blub", "blab")],
155 [new RewriteTransformer("txt", "out")]
156 ]});
157 updateSources(["app|foo.blub"]);
158 expectAsset("app|foo.blab", "foo.blab");
159 buildShouldSucceed();
160 });
161
162 test("a lazy transformer followed by a non-lazy transformer is re-run "
163 "eagerly", () {
164 var rewrite = new LazyRewriteTransformer("one", "two");
165 initGraph(["app|foo.one"], {"app": [
166 [rewrite],
167 [new RewriteTransformer("two", "three")]
168 ]});
169
170 updateSources(["app|foo.one"]);
171 expectAsset("app|foo.three", "foo.two.three");
172 buildShouldSucceed();
173
174 updateSources(["app|foo.one"]);
175 buildShouldSucceed();
176
177 expect(rewrite.numRuns, completion(equals(2)));
178 });
179
180 test("a lazy transformer followed by a declaring transformer isn't re-run "
181 "eagerly", () {
182 var rewrite = new LazyRewriteTransformer("one", "two");
183 initGraph(["app|foo.one"], {"app": [
184 [rewrite],
185 [new DeclaringRewriteTransformer("two", "three")]
186 ]});
187
188 updateSources(["app|foo.one"]);
189 expectAsset("app|foo.three", "foo.two.three");
190 buildShouldSucceed();
191
192 updateSources(["app|foo.one"]);
193 buildShouldSucceed();
194
195 expect(rewrite.numRuns, completion(equals(1)));
196 });
197
198 test("a declaring transformer added after a materialized lazy transformer "
199 "is still deferred", () {
200 var lazy = new LazyRewriteTransformer("one", "two");
201 var declaring = new DeclaringRewriteTransformer("two", "three");
202 initGraph(["app|foo.one"], {"app": [[lazy]]});
203
204 updateSources(["app|foo.one"]);
205 expectAsset("app|foo.two", "foo.two");
206 buildShouldSucceed();
207
208 updateTransformers("app", [[lazy], [declaring]]);
209 expectAsset("app|foo.three", "foo.two.three");
210 buildShouldSucceed();
211
212 updateSources(["app|foo.one"]);
213 buildShouldSucceed();
214
215 expect(lazy.numRuns, completion(equals(1)));
216 expect(declaring.numRuns, completion(equals(1)));
217 });
218
219 test("a lazy asset works as a cross-package input", () {
220 initGraph({
221 "pkg1|foo.blub": "foo",
222 "pkg2|a.txt": "pkg1|foo.blab"
223 }, {"pkg1": [
224 [new LazyRewriteTransformer("blub", "blab")],
225 ], "pkg2": [
226 [new ManyToOneTransformer("txt")]
227 ]});
228
229 updateSources(["pkg1|foo.blub", "pkg2|a.txt"]);
230 expectAsset("pkg2|a.out", "foo.blab");
231 buildShouldSucceed();
232 });
233
234 test("a lazy transformer can consume secondary inputs lazily", () {
235 initGraph({
236 "app|a.inc": "a",
237 "app|a.txt": "a.inc"
238 }, {"app": [
239 [new LazyManyToOneTransformer("txt")]
240 ]});
241
242 updateSources(["app|a.inc", "app|a.txt"]);
243 expectAsset("app|a.out", "a");
244 buildShouldSucceed();
245 });
246
247 test("after being materialized a lazy transformer is still lazy", () {
248 var transformer = new LazyRewriteTransformer("blub", "blab");
249 initGraph(["app|foo.blub"], {"app": [[transformer]]});
250
251 updateSources(["app|foo.blub"]);
252 buildShouldSucceed();
253
254 // Request the asset once to force it to be materialized.
255 expectAsset("app|foo.blab", "foo.blab");
256 buildShouldSucceed();
257
258 updateSources(["app|foo.blub"]);
259 buildShouldSucceed();
260
261 expect(transformer.numRuns, completion(equals(1)));
262 });
263
264 test("after being materialized a lazy transformer can be materialized again",
265 () {
266 var transformer = new LazyRewriteTransformer("blub", "blab");
267 initGraph(["app|foo.blub"], {"app": [[transformer]]});
268
269 updateSources(["app|foo.blub"]);
270 buildShouldSucceed();
271
272 // Request the asset once to force it to be materialized.
273 expectAsset("app|foo.blab", "foo.blab");
274 buildShouldSucceed();
275
276 modifyAsset("app|foo.blub", "bar");
277 updateSources(["app|foo.blub"]);
278 expectAsset("app|foo.blab", "bar.blab");
279 buildShouldSucceed();
280 });
281
282 test("an error emitted in a lazy transformer's declareOutputs method is "
283 "caught and reported", () {
284 initGraph(["app|foo.txt"], {"app": [
285 [new LazyBadTransformer("app|foo.out")]
286 ]});
287
288 updateSources(["app|foo.txt"]);
289 buildShouldFail([isTransformerException(equals(LazyBadTransformer.ERROR))]);
290 });
291
292 test("an error emitted in a lazy transformer's declareOuputs method prevents "
293 "it from being materialized", () {
294 var transformer = new LazyBadTransformer("app|foo.out");
295 initGraph(["app|foo.txt"], {"app": [[transformer]]});
296
297 updateSources(["app|foo.txt"]);
298 expectNoAsset("app|foo.out");
299 buildShouldFail([isTransformerException(equals(LazyBadTransformer.ERROR))]);
300 expect(transformer.numRuns, completion(equals(0)));
301 });
302
303 test("a lazy transformer passes through inputs it doesn't apply to", () {
304 initGraph(["app|foo.txt"], {"app": [
305 [new LazyRewriteTransformer("blub", "blab")]
306 ]});
307
308 updateSources(["app|foo.txt"]);
309 expectAsset("app|foo.txt");
310 buildShouldSucceed();
311 });
312
313 test("a lazy transformer passes through inputs it doesn't overwrite", () {
314 initGraph(["app|foo.txt"], {"app": [
315 [new LazyRewriteTransformer("txt", "out")]
316 ]});
317
318 updateSources(["app|foo.txt"]);
319 expectAsset("app|foo.txt");
320 buildShouldSucceed();
321 });
322
323 test("a lazy transformer doesn't pass through inputs it overwrites", () {
324 initGraph(["app|foo.txt"], {"app": [
325 [new LazyRewriteTransformer("txt", "txt")]
326 ]});
327
328 updateSources(["app|foo.txt"]);
329 expectAsset("app|foo.txt", "foo.txt");
330 buildShouldSucceed();
331 });
332
333 test("a lazy transformer doesn't pass through inputs it consumes", () {
334 initGraph(["app|foo.txt"], {"app": [
335 [new LazyRewriteTransformer("txt", "out")..consumePrimary = true]
336 ]});
337
338 updateSources(["app|foo.txt"]);
339 expectNoAsset("app|foo.txt");
340 buildShouldSucceed();
341 });
342
343 test("a lazy transformer that doesn't apply does nothing when forced", () {
344 initGraph(["app|foo.txt"], {"app": [
345 [new LazyRewriteTransformer("blub", "blab")]
346 ]});
347
348 updateSources(["app|foo.txt"]);
349 expectNoAsset("app|foo.blab");
350
351 // Getting all assets will force every lazy transformer. This shouldn't
352 // cause the rewrite to apply, because foo.txt isn't primary.
353 expectAllAssets(["app|foo.txt"]);
354 buildShouldSucceed();
355 });
356
357 test("a lazy transformer that generates fewer outputs than it declares is "
358 "forced when a declared but ungenerated output is requested", () {
359 initGraph({"app|foo.txt": "no"}, {"app": [
360 [new LazyCheckContentAndRenameTransformer(
361 oldExtension: "txt", oldContent: "yes",
362 newExtension: "out", newContent: "done")]
363 ]});
364
365 updateSources(["app|foo.txt"]);
366 expectNoAsset("app|foo.out");
367 buildShouldSucceed();
368
369 modifyAsset("app|foo.txt", "yes");
370 updateSources(["app|foo.txt"]);
371 expectAsset("app|foo.out", "done");
372 buildShouldSucceed();
373 });
374
375 // Regression tests.
376
377 test("a lazy transformer that doesn't apply updates its passed-through asset",
378 () {
379 initGraph(["app|foo.txt"], {"app": [
380 [new LazyRewriteTransformer("blub", "blab")]
381 ]});
382
383 // Pause the provider so that the transformer will start forwarding the
384 // asset while it's dirty.
385 pauseProvider();
386 updateSources(["app|foo.txt"]);
387 expectAssetDoesNotComplete("app|foo.txt");
388
389 resumeProvider();
390 expectAsset("app|foo.txt", "foo");
391 buildShouldSucceed();
392
393 modifyAsset("app|foo.txt", "bar");
394 updateSources(["app|foo.txt"]);
395 expectAsset("app|foo.txt", "bar");
396 buildShouldSucceed();
397 });
398
399 test("a lazy transformer is forced while the previous lazy transformer is "
400 "available, then the previous transformer becomes unavailable", () {
401 var assets = new LazyAssetsTransformer(["app|out.one", "app|out.two"]);
402 var rewrite = new LazyRewriteTransformer("two", "three");
403 initGraph(["app|foo.in"], {"app": [[assets], [rewrite]]});
404
405 updateSources(["app|foo.in"]);
406 // Request out.one so that [assets] runs but the second does not.
407 expectAsset("app|out.one", "app|out.one");
408 buildShouldSucceed();
409
410 // Start the [rewrite] running. The output from [assets] should still be
411 // available.
412 rewrite.pauseApply();
413 expectAssetDoesNotComplete("app|out.three");
414
415 // Mark [assets] as dirty. It should re-run, since [rewrite] still needs its
416 // input.
417 updateSources(["app|foo.in"]);
418 rewrite.resumeApply();
419
420 expectAsset("app|out.three", "app|out.two.three");
421 buildShouldSucceed();
422
423 // [assets] should run once for each time foo.in was updated.
424 expect(assets.numRuns, completion(equals(2)));
425
426 // [rewrite] should run once against [assets]'s original output and once
427 // against its new output.
428 expect(rewrite.numRuns, completion(equals(2)));
429 });
430 }
OLDNEW
« no previous file with comments | « pkg/barback/test/package_graph/group_test.dart ('k') | pkg/barback/test/package_graph/many_parallel_transformers_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698