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

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

Issue 25376003: Add support for transformer clusters to barback. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Code review changes Created 7 years, 2 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
(Empty)
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
3 // BSD-style license that can be found in the LICENSE file.
4
5 library barback.test.package_graph.group_test;
6
7 import 'package:barback/barback.dart';
8 import 'package:scheduled_test/scheduled_test.dart';
9
10 import '../utils.dart';
11
12 main() {
13 initConfig();
14 test("runs transforms in a group", () {
15 initGraph(["app|foo.a"], {"app": [
16 [new TransformerGroup([
17 [new RewriteTransformer("a", "b")],
18 [new RewriteTransformer("b", "c")]
19 ])]
20 ]});
21 updateSources(["app|foo.a"]);
22 expectNoAsset("app|foo.b");
23 expectAsset("app|foo.c", "foo.b.c");
24 buildShouldSucceed();
25 });
26
27 test("passes the output of a group to the next phase", () {
28 initGraph(["app|foo.a"], {"app": [
29 [new TransformerGroup([
30 [new RewriteTransformer("a", "b")],
31 [new RewriteTransformer("b", "c")]
32 ])],
33 [new RewriteTransformer("c", "d")]
34 ]});
35 updateSources(["app|foo.a"]);
36 expectNoAsset("app|foo.c");
37 expectAsset("app|foo.d", "foo.b.c.d");
38 buildShouldSucceed();
39 });
40
41 test("passes the output of a previous phase to a group", () {
42 initGraph(["app|foo.a"], {"app": [
43 [new RewriteTransformer("a", "b")],
44 [new TransformerGroup([
45 [new RewriteTransformer("b", "c")],
46 [new RewriteTransformer("c", "d")]
47 ])]
48 ]});
49 updateSources(["app|foo.a"]);
50 expectNoAsset("app|foo.b");
51 expectAsset("app|foo.d", "foo.b.c.d");
52 buildShouldSucceed();
53 });
54
55 test("intermediate assets in a group are usable as secondary inputs within "
56 "that group", () {
57 initGraph({
58 "app|foo.a": "contents",
59 "app|bar.txt": "foo.inc"
60 }, {"app": [
61 [new TransformerGroup([
62 [new RewriteTransformer("a", "inc")],
63 [new ManyToOneTransformer("txt")]
64 ])]
65 ]});
66
67 updateSources(["app|foo.a", "app|bar.txt"]);
68 expectAsset("app|bar.out", "contents.inc");
69 buildShouldSucceed();
70 });
71
72 test("groups can be nested", () {
73 initGraph(["app|foo.a", "app|bar.x"], {"app": [
74 [new TransformerGroup([
75 [new TransformerGroup([
76 [new RewriteTransformer("a", "b")],
77 [new RewriteTransformer("b", "c")]
78 ]), new TransformerGroup([
79 [new RewriteTransformer("x", "y"), new RewriteTransformer("a", "y")],
80 [new RewriteTransformer("y", "z")]
81 ])],
82 [new RewriteTransformer("c", "d")]
83 ])]
84 ]});
85 updateSources(["app|foo.a", "app|bar.x"]);
86 expectAsset("app|foo.d", "foo.b.c.d");
87 expectAsset("app|foo.z", "foo.y.z");
88 expectAsset("app|bar.z", "bar.y.z");
89 buildShouldSucceed();
90 });
91
92 test("an updated asset is propagated through a group", () {
93 initGraph(["app|foo.a"], {"app": [
94 [new TransformerGroup([
95 [new RewriteTransformer("a", "b")],
96 [new RewriteTransformer("b", "c")]
97 ])]
98 ]});
99
100 updateSources(["app|foo.a"]);
101 expectNoAsset("app|foo.b");
102 expectAsset("app|foo.c", "foo.b.c");
103 buildShouldSucceed();
104
105 modifyAsset("app|foo.a", "new foo");
106 updateSources(["app|foo.a"]);
107 expectAsset("app|foo.c", "new foo.b.c");
108 buildShouldSucceed();
109 });
110
111 test("an updated asset only runs the necessary transforms in a group", () {
112 var rewriteA = new RewriteTransformer("a", "b");
113 var rewriteX = new RewriteTransformer("x", "b");
114 initGraph(["app|foo.a", "app|bar.x"], {"app": [
115 [new TransformerGroup([
116 [rewriteA, rewriteX],
117 [new RewriteTransformer("b", "c")]
118 ])]
119 ]});
120
121 updateSources(["app|foo.a", "app|bar.x"]);
122 expectNoAsset("app|foo.b");
123 expectAsset("app|foo.c", "foo.b.c");
124 expectAsset("app|bar.c", "bar.b.c");
125 buildShouldSucceed();
126
127 modifyAsset("app|foo.a", "new foo");
128 updateSources(["app|foo.a"]);
129 expectAsset("app|foo.c", "new foo.b.c");
130 buildShouldSucceed();
131
132 expect(rewriteA.numRuns, completion(equals(2)));
133 expect(rewriteX.numRuns, completion(equals(1)));
134 });
135
136 group("encapsulation", () {
137 test("a group can't see a parallel transform's outputs", () {
138 initGraph(["app|foo.x"], {"app": [[
139 new TransformerGroup([
140 [new RewriteTransformer("a", "b")],
141 [new RewriteTransformer("b", "c")]
142 ]),
143 new RewriteTransformer("x", "b")
144 ]]});
145 updateSources(["app|foo.x"]);
146 expectAsset("app|foo.b", "foo.b");
147 expectNoAsset("app|foo.c");
148 buildShouldSucceed();
149 });
150
151 test("a parallel transform can't see a group's outputs", () {
152 initGraph(["app|foo.a"], {"app": [[
153 new TransformerGroup([
154 [new RewriteTransformer("a", "b")],
155 [new RewriteTransformer("b", "c")]
156 ]),
157 new RewriteTransformer("c", "z")
158 ]]});
159 updateSources(["app|foo.a"]);
160 expectAsset("app|foo.c", "foo.b.c");
161 expectNoAsset("app|foo.z");
162 buildShouldSucceed();
163 });
164
165 test("a parallel transform can't see a group's intermediate assets", () {
166 initGraph(["app|foo.a"], {"app": [[
167 new TransformerGroup([
168 [new RewriteTransformer("a", "b")],
169 [new RewriteTransformer("b", "c")]
170 ]),
171 new RewriteTransformer("b", "z")
172 ]]});
173 updateSources(["app|foo.a"]);
174 expectAsset("app|foo.c", "foo.b.c");
175 expectNoAsset("app|foo.z");
176 buildShouldSucceed();
177 });
178
179 test("parallel groups can't see one another's intermediate assets", () {
180 initGraph(["app|foo.a", "app|bar.x"], {"app": [
181 [new TransformerGroup([
182 [new RewriteTransformer("a", "b")],
183 [new RewriteTransformer("b", "c")]
184 ]), new TransformerGroup([
185 [new RewriteTransformer("x", "b")],
186 [new RewriteTransformer("b", "z")]
187 ])]
188 ]});
189 updateSources(["app|foo.a", "app|bar.x"]);
190 expectAsset("app|foo.c", "foo.b.c");
191 expectAsset("app|bar.z", "bar.b.z");
192 expectNoAsset("app|foo.z");
193 expectNoAsset("app|bar.c");
194 buildShouldSucceed();
195 });
196
197 test("parallel groups' intermediate assets can't collide", () {
198 initGraph(["app|foo.a", "app|foo.x"], {"app": [
199 [new TransformerGroup([
200 [new RewriteTransformer("a", "b")],
201 [new RewriteTransformer("b", "c")]
202 ]), new TransformerGroup([
203 [new RewriteTransformer("x", "b")],
204 [new RewriteTransformer("b", "z")]
205 ])]
206 ]});
207 updateSources(["app|foo.a", "app|foo.x"]);
208 expectAsset("app|foo.c", "foo.b.c");
209 expectAsset("app|foo.z", "foo.b.z");
210 buildShouldSucceed();
211 });
212 });
213
214 group("pass-through", () {
215 test("passes an unused input through a group", () {
216 initGraph(["app|foo.x"], {"app": [
217 [new TransformerGroup([
218 [new RewriteTransformer("a", "b")],
219 [new RewriteTransformer("b", "c")]
220 ])]
221 ]});
222 updateSources(["app|foo.x"]);
223 expectNoAsset("app|foo.c");
224 expectAsset("app|foo.x", "foo");
225 buildShouldSucceed();
226 });
227
228 test("passes an unused input through parallel groups", () {
229 initGraph(["app|foo.x"], {"app": [
230 [new TransformerGroup([
231 [new RewriteTransformer("a", "b")],
232 [new RewriteTransformer("b", "c")]
233 ]), new TransformerGroup([
234 [new RewriteTransformer("1", "2")],
235 [new RewriteTransformer("2", "3")]
236 ])]
237 ]});
238 updateSources(["app|foo.x"]);
239 expectNoAsset("app|foo.c");
240 expectNoAsset("app|foo.3");
241 expectAsset("app|foo.x", "foo");
242 buildShouldSucceed();
243 });
244
245 test("passes an unused input through a group and a transform", () {
246 initGraph(["app|foo.x"], {"app": [[
247 new TransformerGroup([
248 [new RewriteTransformer("a", "b")],
249 [new RewriteTransformer("b", "c")]
250 ]),
251 new RewriteTransformer("1", "2")
252 ]]});
253 updateSources(["app|foo.x"]);
254 expectNoAsset("app|foo.c");
255 expectNoAsset("app|foo.2");
256 expectAsset("app|foo.x", "foo");
257 buildShouldSucceed();
258 });
259
260 test("doesn't pass through an input that's used by a group but not by "
261 "transformers", () {
262 initGraph(["app|foo.a"], {"app": [[
263 new TransformerGroup([
264 [new RewriteTransformer("a", "b")],
265 [new RewriteTransformer("b", "c")]
266 ]),
267 new RewriteTransformer("x", "y")
268 ]]});
269 updateSources(["app|foo.a"]);
270 expectNoAsset("app|foo.a");
271 expectNoAsset("app|foo.y");
272 expectAsset("app|foo.c", "foo.b.c");
273 buildShouldSucceed();
274 });
275
276 test("doesn't pass through an input that's used by transformers but not by "
277 "a group", () {
278 initGraph(["app|foo.x"], {"app": [[
279 new TransformerGroup([
280 [new RewriteTransformer("a", "b")],
281 [new RewriteTransformer("b", "c")]
282 ]),
283 new RewriteTransformer("x", "y")
284 ]]});
285 updateSources(["app|foo.x"]);
286 expectNoAsset("app|foo.x");
287 expectNoAsset("app|foo.c");
288 expectAsset("app|foo.y", "foo.y");
289 buildShouldSucceed();
290 });
291
292 test("doesn't detect a collision for an input that's modified in-place by "
293 "a transformer", () {
294 initGraph(["app|foo.x"], {"app": [[
295 new TransformerGroup([
296 [new RewriteTransformer("a", "b")],
297 [new RewriteTransformer("b", "c")]
298 ]),
299 new RewriteTransformer("x", "x")
300 ]]});
301 updateSources(["app|foo.x"]);
302 expectAsset("app|foo.x", "foo.x");
303 buildShouldSucceed();
304 });
305
306 test("doesn't detect a collision for an input that's modified in-place by "
307 "a group", () {
308 initGraph(["app|foo.a"], {"app": [[
309 new TransformerGroup([[new RewriteTransformer("a", "a")]]),
310 new RewriteTransformer("x", "y")
311 ]]});
312 updateSources(["app|foo.a"]);
313 expectAsset("app|foo.a", "foo.a");
314 buildShouldSucceed();
315 });
316 });
317
318 test("runs transforms in an added group", () {
319 var rewrite = new RewriteTransformer("a", "z");
320 initGraph(["app|foo.a"], {"app": [[rewrite]]});
321
322 updateSources(["app|foo.a"]);
323 expectAsset("app|foo.z", "foo.z");
324 buildShouldSucceed();
325
326 updateTransformers("app", [[
327 rewrite,
328 new TransformerGroup([
329 [new RewriteTransformer("a", "b")],
330 [new RewriteTransformer("b", "c")]
331 ])
332 ]]);
333 expectAsset("app|foo.z", "foo.z");
334 expectAsset("app|foo.c", "foo.b.c");
335 buildShouldSucceed();
336 });
337
338 test("doesn't re-run transforms in a re-added group", () {
339 var rewrite1 = new RewriteTransformer("a", "b");
340 var rewrite2 = new RewriteTransformer("b", "c");
341 var group = new TransformerGroup([[rewrite1], [rewrite2]]);
342 initGraph(["app|foo.a"], {"app": [[group]]});
343
344 updateSources(["app|foo.a"]);
345 expectAsset("app|foo.c", "foo.b.c");
346 buildShouldSucceed();
347
348 updateTransformers("app", [
349 [group, new RewriteTransformer("a", "z")]
350 ]);
351 expectAsset("app|foo.c", "foo.b.c");
352 expectAsset("app|foo.z", "foo.z");
353 buildShouldSucceed();
354
355 expect(rewrite1.numRuns, completion(equals(1)));
356 expect(rewrite2.numRuns, completion(equals(1)));
357 });
358
359 test("doesn't pass through an input that's used by an added group", () {
360 var rewrite = new RewriteTransformer("x", "z");
361 initGraph(["app|foo.a"], {"app": [[rewrite]]});
362
363 updateSources(["app|foo.a"]);
364 expectAsset("app|foo.a", "foo");
365 buildShouldSucceed();
366
367 updateTransformers("app", [
368 [rewrite, new TransformerGroup([
369 [new RewriteTransformer("a", "b")],
370 [new RewriteTransformer("b", "c")]
371 ])]
372 ]);
373 expectNoAsset("app|foo.a");
374 expectAsset("app|foo.c", "foo.b.c");
375 buildShouldSucceed();
376 });
377
378 // TODO(nweiz): make the collision error message nice
379 test("reports collisions within a group", () {
380 initGraph(["app|foo.a", "app|foo.x"], {"app": [
381 [new TransformerGroup([
382 [new RewriteTransformer("a", "b")],
383 [new RewriteTransformer("x", "b")]
384 ])]
385 ]});
386 updateSources(["app|foo.a", "app|foo.x"]);
387 buildShouldFail([isAssetCollisionException("app|foo.b")]);
388 });
389
390 test("reports collisions between a group and a non-grouped transform", () {
391 initGraph(["app|foo.a", "app|foo.x"], {"app": [[
392 new TransformerGroup([
393 [new RewriteTransformer("a", "b")],
394 [new RewriteTransformer("b", "c")]
395 ]),
396 new RewriteTransformer("x", "c")
397 ]]});
398 updateSources(["app|foo.a", "app|foo.x"]);
399 buildShouldFail([isAssetCollisionException("app|foo.c")]);
400 });
401 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698