OLD | NEW |
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'; | |
8 | |
9 import 'package:barback/barback.dart'; | 7 import 'package:barback/barback.dart'; |
10 import 'package:scheduled_test/scheduled_test.dart'; | 8 import 'package:scheduled_test/scheduled_test.dart'; |
11 | 9 |
12 import '../utils.dart'; | 10 import '../utils.dart'; |
13 | 11 |
14 main() { | 12 main() { |
15 initConfig(); | 13 initConfig(); |
16 test("runs transforms in a group", () { | 14 test("runs transforms in a group", () { |
17 initGraph(["app|foo.a"], {"app": [ | 15 initGraph([ |
18 [new TransformerGroup([ | 16 "app|foo.a" |
19 [new RewriteTransformer("a", "b")], | 17 ], { |
20 [new RewriteTransformer("b", "c")] | 18 "app": [ |
21 ])] | 19 [ |
22 ]}); | 20 new TransformerGroup([ |
| 21 [new RewriteTransformer("a", "b")], |
| 22 [new RewriteTransformer("b", "c")] |
| 23 ]) |
| 24 ] |
| 25 ] |
| 26 }); |
23 updateSources(["app|foo.a"]); | 27 updateSources(["app|foo.a"]); |
24 expectAsset("app|foo.c", "foo.b.c"); | 28 expectAsset("app|foo.c", "foo.b.c"); |
25 buildShouldSucceed(); | 29 buildShouldSucceed(); |
26 }); | 30 }); |
27 | 31 |
28 test("passes the output of a group to the next phase", () { | 32 test("passes the output of a group to the next phase", () { |
29 initGraph(["app|foo.a"], {"app": [ | 33 initGraph([ |
30 [new TransformerGroup([ | 34 "app|foo.a" |
31 [new RewriteTransformer("a", "b")], | 35 ], { |
32 [new RewriteTransformer("b", "c")] | 36 "app": [ |
33 ])], | 37 [ |
34 [new RewriteTransformer("c", "d")] | 38 new TransformerGroup([ |
35 ]}); | 39 [new RewriteTransformer("a", "b")], |
| 40 [new RewriteTransformer("b", "c")] |
| 41 ]) |
| 42 ], |
| 43 [new RewriteTransformer("c", "d")] |
| 44 ] |
| 45 }); |
36 updateSources(["app|foo.a"]); | 46 updateSources(["app|foo.a"]); |
37 expectAsset("app|foo.d", "foo.b.c.d"); | 47 expectAsset("app|foo.d", "foo.b.c.d"); |
38 buildShouldSucceed(); | 48 buildShouldSucceed(); |
39 }); | 49 }); |
40 | 50 |
41 test("passes the output of a previous phase to a group", () { | 51 test("passes the output of a previous phase to a group", () { |
42 initGraph(["app|foo.a"], {"app": [ | 52 initGraph([ |
43 [new RewriteTransformer("a", "b")], | 53 "app|foo.a" |
44 [new TransformerGroup([ | 54 ], { |
45 [new RewriteTransformer("b", "c")], | 55 "app": [ |
46 [new RewriteTransformer("c", "d")] | 56 [new RewriteTransformer("a", "b")], |
47 ])] | 57 [ |
48 ]}); | 58 new TransformerGroup([ |
| 59 [new RewriteTransformer("b", "c")], |
| 60 [new RewriteTransformer("c", "d")] |
| 61 ]) |
| 62 ] |
| 63 ] |
| 64 }); |
49 updateSources(["app|foo.a"]); | 65 updateSources(["app|foo.a"]); |
50 expectAsset("app|foo.d", "foo.b.c.d"); | 66 expectAsset("app|foo.d", "foo.b.c.d"); |
51 buildShouldSucceed(); | 67 buildShouldSucceed(); |
52 }); | 68 }); |
53 | 69 |
54 test("intermediate assets in a group are usable as secondary inputs within " | 70 test( |
| 71 "intermediate assets in a group are usable as secondary inputs within " |
55 "that group", () { | 72 "that group", () { |
56 initGraph({ | 73 initGraph({ |
57 "app|foo.a": "contents", | 74 "app|foo.a": "contents", |
58 "app|bar.txt": "foo.inc" | 75 "app|bar.txt": "foo.inc" |
59 }, {"app": [ | 76 }, { |
60 [new TransformerGroup([ | 77 "app": [ |
61 [new RewriteTransformer("a", "inc")], | 78 [ |
62 [new ManyToOneTransformer("txt")] | 79 new TransformerGroup([ |
63 ])] | 80 [new RewriteTransformer("a", "inc")], |
64 ]}); | 81 [new ManyToOneTransformer("txt")] |
| 82 ]) |
| 83 ] |
| 84 ] |
| 85 }); |
65 | 86 |
66 updateSources(["app|foo.a", "app|bar.txt"]); | 87 updateSources(["app|foo.a", "app|bar.txt"]); |
67 expectAsset("app|bar.out", "contents.inc"); | 88 expectAsset("app|bar.out", "contents.inc"); |
68 buildShouldSucceed(); | 89 buildShouldSucceed(); |
69 }); | 90 }); |
70 | 91 |
71 test("groups can be nested", () { | 92 test("groups can be nested", () { |
72 initGraph(["app|foo.a", "app|bar.x"], {"app": [ | 93 initGraph([ |
73 [new TransformerGroup([ | 94 "app|foo.a", |
74 [new TransformerGroup([ | 95 "app|bar.x" |
75 [new RewriteTransformer("a", "b")], | 96 ], { |
76 [new RewriteTransformer("b", "c")] | 97 "app": [ |
77 ]), new TransformerGroup([ | 98 [ |
78 [new RewriteTransformer("x", "y"), new RewriteTransformer("a", "y")], | 99 new TransformerGroup([ |
79 [new RewriteTransformer("y", "z")] | 100 [ |
80 ])], | 101 new TransformerGroup([ |
81 [new RewriteTransformer("c", "d")] | 102 [new RewriteTransformer("a", "b")], |
82 ])] | 103 [new RewriteTransformer("b", "c")] |
83 ]}); | 104 ]), |
| 105 new TransformerGroup([ |
| 106 [ |
| 107 new RewriteTransformer("x", "y"), |
| 108 new RewriteTransformer("a", "y") |
| 109 ], |
| 110 [new RewriteTransformer("y", "z")] |
| 111 ]) |
| 112 ], |
| 113 [new RewriteTransformer("c", "d")] |
| 114 ]) |
| 115 ] |
| 116 ] |
| 117 }); |
84 updateSources(["app|foo.a", "app|bar.x"]); | 118 updateSources(["app|foo.a", "app|bar.x"]); |
85 expectAsset("app|foo.d", "foo.b.c.d"); | 119 expectAsset("app|foo.d", "foo.b.c.d"); |
86 expectAsset("app|foo.z", "foo.y.z"); | 120 expectAsset("app|foo.z", "foo.y.z"); |
87 expectAsset("app|bar.z", "bar.y.z"); | 121 expectAsset("app|bar.z", "bar.y.z"); |
88 buildShouldSucceed(); | 122 buildShouldSucceed(); |
89 }); | 123 }); |
90 | 124 |
91 test("an updated asset is propagated through a group", () { | 125 test("an updated asset is propagated through a group", () { |
92 initGraph(["app|foo.a"], {"app": [ | 126 initGraph([ |
93 [new TransformerGroup([ | 127 "app|foo.a" |
94 [new RewriteTransformer("a", "b")], | 128 ], { |
95 [new RewriteTransformer("b", "c")] | 129 "app": [ |
96 ])] | 130 [ |
97 ]}); | 131 new TransformerGroup([ |
| 132 [new RewriteTransformer("a", "b")], |
| 133 [new RewriteTransformer("b", "c")] |
| 134 ]) |
| 135 ] |
| 136 ] |
| 137 }); |
98 | 138 |
99 updateSources(["app|foo.a"]); | 139 updateSources(["app|foo.a"]); |
100 expectAsset("app|foo.c", "foo.b.c"); | 140 expectAsset("app|foo.c", "foo.b.c"); |
101 buildShouldSucceed(); | 141 buildShouldSucceed(); |
102 | 142 |
103 modifyAsset("app|foo.a", "new foo"); | 143 modifyAsset("app|foo.a", "new foo"); |
104 updateSources(["app|foo.a"]); | 144 updateSources(["app|foo.a"]); |
105 expectAsset("app|foo.c", "new foo.b.c"); | 145 expectAsset("app|foo.c", "new foo.b.c"); |
106 buildShouldSucceed(); | 146 buildShouldSucceed(); |
107 }); | 147 }); |
108 | 148 |
109 test("an updated asset only runs the necessary transforms in a group", () { | 149 test("an updated asset only runs the necessary transforms in a group", () { |
110 var rewriteA = new RewriteTransformer("a", "b"); | 150 var rewriteA = new RewriteTransformer("a", "b"); |
111 var rewriteX = new RewriteTransformer("x", "b"); | 151 var rewriteX = new RewriteTransformer("x", "b"); |
112 initGraph(["app|foo.a", "app|bar.x"], {"app": [ | 152 initGraph([ |
113 [new TransformerGroup([ | 153 "app|foo.a", |
114 [rewriteA, rewriteX], | 154 "app|bar.x" |
115 [new RewriteTransformer("b", "c")] | 155 ], { |
116 ])] | 156 "app": [ |
117 ]}); | 157 [ |
| 158 new TransformerGroup([ |
| 159 [rewriteA, rewriteX], |
| 160 [new RewriteTransformer("b", "c")] |
| 161 ]) |
| 162 ] |
| 163 ] |
| 164 }); |
118 | 165 |
119 updateSources(["app|foo.a", "app|bar.x"]); | 166 updateSources(["app|foo.a", "app|bar.x"]); |
120 expectAsset("app|foo.c", "foo.b.c"); | 167 expectAsset("app|foo.c", "foo.b.c"); |
121 expectAsset("app|bar.c", "bar.b.c"); | 168 expectAsset("app|bar.c", "bar.b.c"); |
122 buildShouldSucceed(); | 169 buildShouldSucceed(); |
123 | 170 |
124 modifyAsset("app|foo.a", "new foo"); | 171 modifyAsset("app|foo.a", "new foo"); |
125 updateSources(["app|foo.a"]); | 172 updateSources(["app|foo.a"]); |
126 expectAsset("app|foo.c", "new foo.b.c"); | 173 expectAsset("app|foo.c", "new foo.b.c"); |
127 buildShouldSucceed(); | 174 buildShouldSucceed(); |
128 | 175 |
129 expect(rewriteA.numRuns, completion(equals(2))); | 176 expect(rewriteA.numRuns, completion(equals(2))); |
130 expect(rewriteX.numRuns, completion(equals(1))); | 177 expect(rewriteX.numRuns, completion(equals(1))); |
131 }); | 178 }); |
132 | 179 |
133 group("encapsulation", () { | 180 group("encapsulation", () { |
134 test("a group can't see a parallel transform's outputs", () { | 181 test("a group can't see a parallel transform's outputs", () { |
135 initGraph(["app|foo.x"], {"app": [[ | 182 initGraph([ |
136 new TransformerGroup([ | 183 "app|foo.x" |
137 [new RewriteTransformer("a", "b")], | 184 ], { |
138 [new RewriteTransformer("b", "c")] | 185 "app": [ |
139 ]), | 186 [ |
140 new RewriteTransformer("x", "b") | 187 new TransformerGroup([ |
141 ]]}); | 188 [new RewriteTransformer("a", "b")], |
| 189 [new RewriteTransformer("b", "c")] |
| 190 ]), |
| 191 new RewriteTransformer("x", "b") |
| 192 ] |
| 193 ] |
| 194 }); |
142 updateSources(["app|foo.x"]); | 195 updateSources(["app|foo.x"]); |
143 expectAsset("app|foo.b", "foo.b"); | 196 expectAsset("app|foo.b", "foo.b"); |
144 expectNoAsset("app|foo.c"); | 197 expectNoAsset("app|foo.c"); |
145 buildShouldSucceed(); | 198 buildShouldSucceed(); |
146 }); | 199 }); |
147 | 200 |
148 test("a parallel transform can't see a group's outputs", () { | 201 test("a parallel transform can't see a group's outputs", () { |
149 initGraph(["app|foo.a"], {"app": [[ | 202 initGraph([ |
150 new TransformerGroup([ | 203 "app|foo.a" |
151 [new RewriteTransformer("a", "b")], | 204 ], { |
152 [new RewriteTransformer("b", "c")] | 205 "app": [ |
153 ]), | 206 [ |
154 new RewriteTransformer("c", "z") | 207 new TransformerGroup([ |
155 ]]}); | 208 [new RewriteTransformer("a", "b")], |
| 209 [new RewriteTransformer("b", "c")] |
| 210 ]), |
| 211 new RewriteTransformer("c", "z") |
| 212 ] |
| 213 ] |
| 214 }); |
156 updateSources(["app|foo.a"]); | 215 updateSources(["app|foo.a"]); |
157 expectAsset("app|foo.c", "foo.b.c"); | 216 expectAsset("app|foo.c", "foo.b.c"); |
158 expectNoAsset("app|foo.z"); | 217 expectNoAsset("app|foo.z"); |
159 buildShouldSucceed(); | 218 buildShouldSucceed(); |
160 }); | 219 }); |
161 | 220 |
162 test("a parallel transform can't see a group's intermediate assets", () { | 221 test("a parallel transform can't see a group's intermediate assets", () { |
163 initGraph(["app|foo.a"], {"app": [[ | 222 initGraph([ |
164 new TransformerGroup([ | 223 "app|foo.a" |
165 [new RewriteTransformer("a", "b")], | 224 ], { |
166 [new RewriteTransformer("b", "c")] | 225 "app": [ |
167 ]), | 226 [ |
168 new RewriteTransformer("b", "z") | 227 new TransformerGroup([ |
169 ]]}); | 228 [new RewriteTransformer("a", "b")], |
| 229 [new RewriteTransformer("b", "c")] |
| 230 ]), |
| 231 new RewriteTransformer("b", "z") |
| 232 ] |
| 233 ] |
| 234 }); |
170 updateSources(["app|foo.a"]); | 235 updateSources(["app|foo.a"]); |
171 expectAsset("app|foo.c", "foo.b.c"); | 236 expectAsset("app|foo.c", "foo.b.c"); |
172 expectNoAsset("app|foo.z"); | 237 expectNoAsset("app|foo.z"); |
173 buildShouldSucceed(); | 238 buildShouldSucceed(); |
174 }); | 239 }); |
175 | 240 |
176 test("parallel groups can't see one another's intermediate assets", () { | 241 test("parallel groups can't see one another's intermediate assets", () { |
177 initGraph(["app|foo.a", "app|bar.x"], {"app": [ | 242 initGraph([ |
178 [new TransformerGroup([ | 243 "app|foo.a", |
179 [new RewriteTransformer("a", "b")], | 244 "app|bar.x" |
180 [new RewriteTransformer("b", "c")] | 245 ], { |
181 ]), new TransformerGroup([ | 246 "app": [ |
182 [new RewriteTransformer("x", "b")], | 247 [ |
183 [new RewriteTransformer("b", "z")] | 248 new TransformerGroup([ |
184 ])] | 249 [new RewriteTransformer("a", "b")], |
185 ]}); | 250 [new RewriteTransformer("b", "c")] |
| 251 ]), |
| 252 new TransformerGroup([ |
| 253 [new RewriteTransformer("x", "b")], |
| 254 [new RewriteTransformer("b", "z")] |
| 255 ]) |
| 256 ] |
| 257 ] |
| 258 }); |
186 updateSources(["app|foo.a", "app|bar.x"]); | 259 updateSources(["app|foo.a", "app|bar.x"]); |
187 expectAsset("app|foo.c", "foo.b.c"); | 260 expectAsset("app|foo.c", "foo.b.c"); |
188 expectAsset("app|bar.z", "bar.b.z"); | 261 expectAsset("app|bar.z", "bar.b.z"); |
189 expectNoAsset("app|foo.z"); | 262 expectNoAsset("app|foo.z"); |
190 expectNoAsset("app|bar.c"); | 263 expectNoAsset("app|bar.c"); |
191 buildShouldSucceed(); | 264 buildShouldSucceed(); |
192 }); | 265 }); |
193 | 266 |
194 test("parallel groups' intermediate assets can't collide", () { | 267 test("parallel groups' intermediate assets can't collide", () { |
195 initGraph(["app|foo.a", "app|foo.x"], {"app": [ | 268 initGraph([ |
196 [new TransformerGroup([ | 269 "app|foo.a", |
197 [new RewriteTransformer("a", "b")], | 270 "app|foo.x" |
198 [new RewriteTransformer("b", "c")..consumePrimary = true] | 271 ], { |
199 ]), new TransformerGroup([ | 272 "app": [ |
200 [new RewriteTransformer("x", "b")], | 273 [ |
201 [new RewriteTransformer("b", "z")..consumePrimary = true] | 274 new TransformerGroup([ |
202 ])] | 275 [new RewriteTransformer("a", "b")], |
203 ]}); | 276 [new RewriteTransformer("b", "c")..consumePrimary = true] |
| 277 ]), |
| 278 new TransformerGroup([ |
| 279 [new RewriteTransformer("x", "b")], |
| 280 [new RewriteTransformer("b", "z")..consumePrimary = true] |
| 281 ]) |
| 282 ] |
| 283 ] |
| 284 }); |
204 updateSources(["app|foo.a", "app|foo.x"]); | 285 updateSources(["app|foo.a", "app|foo.x"]); |
205 expectAsset("app|foo.a"); | 286 expectAsset("app|foo.a"); |
206 expectAsset("app|foo.x"); | 287 expectAsset("app|foo.x"); |
207 expectAsset("app|foo.c", "foo.b.c"); | 288 expectAsset("app|foo.c", "foo.b.c"); |
208 expectAsset("app|foo.z", "foo.b.z"); | 289 expectAsset("app|foo.z", "foo.b.z"); |
209 buildShouldSucceed(); | 290 buildShouldSucceed(); |
210 }); | 291 }); |
211 }); | 292 }); |
212 | 293 |
213 group("pass-through", () { | 294 group("pass-through", () { |
214 test("passes an unused input through a group", () { | 295 test("passes an unused input through a group", () { |
215 initGraph(["app|foo.x"], {"app": [ | 296 initGraph([ |
216 [new TransformerGroup([ | 297 "app|foo.x" |
217 [new RewriteTransformer("a", "b")], | 298 ], { |
218 [new RewriteTransformer("b", "c")] | 299 "app": [ |
219 ])] | 300 [ |
220 ]}); | 301 new TransformerGroup([ |
| 302 [new RewriteTransformer("a", "b")], |
| 303 [new RewriteTransformer("b", "c")] |
| 304 ]) |
| 305 ] |
| 306 ] |
| 307 }); |
221 updateSources(["app|foo.x"]); | 308 updateSources(["app|foo.x"]); |
222 expectNoAsset("app|foo.c"); | 309 expectNoAsset("app|foo.c"); |
223 expectAsset("app|foo.x", "foo"); | 310 expectAsset("app|foo.x", "foo"); |
224 buildShouldSucceed(); | 311 buildShouldSucceed(); |
225 }); | 312 }); |
226 | 313 |
227 test("passes non-overwritten inputs through a group", () { | 314 test("passes non-overwritten inputs through a group", () { |
228 initGraph(["app|foo.a"], {"app": [ | 315 initGraph([ |
229 [new TransformerGroup([ | 316 "app|foo.a" |
230 [new RewriteTransformer("a", "b")], | 317 ], { |
231 [new RewriteTransformer("b", "c")] | 318 "app": [ |
232 ])] | 319 [ |
233 ]}); | 320 new TransformerGroup([ |
| 321 [new RewriteTransformer("a", "b")], |
| 322 [new RewriteTransformer("b", "c")] |
| 323 ]) |
| 324 ] |
| 325 ] |
| 326 }); |
234 updateSources(["app|foo.a"]); | 327 updateSources(["app|foo.a"]); |
235 expectAsset("app|foo.a", "foo"); | 328 expectAsset("app|foo.a", "foo"); |
236 expectAsset("app|foo.b", "foo.b"); | 329 expectAsset("app|foo.b", "foo.b"); |
237 expectAsset("app|foo.c", "foo.b.c"); | 330 expectAsset("app|foo.c", "foo.b.c"); |
238 buildShouldSucceed(); | 331 buildShouldSucceed(); |
239 }); | 332 }); |
240 | 333 |
241 test("passes an unused input through parallel groups", () { | 334 test("passes an unused input through parallel groups", () { |
242 initGraph(["app|foo.x"], {"app": [ | 335 initGraph([ |
243 [new TransformerGroup([ | 336 "app|foo.x" |
244 [new RewriteTransformer("a", "b")], | 337 ], { |
245 [new RewriteTransformer("b", "c")] | 338 "app": [ |
246 ]), new TransformerGroup([ | 339 [ |
247 [new RewriteTransformer("1", "2")], | 340 new TransformerGroup([ |
248 [new RewriteTransformer("2", "3")] | 341 [new RewriteTransformer("a", "b")], |
249 ])] | 342 [new RewriteTransformer("b", "c")] |
250 ]}); | 343 ]), |
| 344 new TransformerGroup([ |
| 345 [new RewriteTransformer("1", "2")], |
| 346 [new RewriteTransformer("2", "3")] |
| 347 ]) |
| 348 ] |
| 349 ] |
| 350 }); |
251 updateSources(["app|foo.x"]); | 351 updateSources(["app|foo.x"]); |
252 expectNoAsset("app|foo.c"); | 352 expectNoAsset("app|foo.c"); |
253 expectNoAsset("app|foo.3"); | 353 expectNoAsset("app|foo.3"); |
254 expectAsset("app|foo.x", "foo"); | 354 expectAsset("app|foo.x", "foo"); |
255 buildShouldSucceed(); | 355 buildShouldSucceed(); |
256 }); | 356 }); |
257 | 357 |
258 test("passes an unused input through a group and a transform", () { | 358 test("passes an unused input through a group and a transform", () { |
259 initGraph(["app|foo.x"], {"app": [[ | 359 initGraph([ |
260 new TransformerGroup([ | 360 "app|foo.x" |
261 [new RewriteTransformer("a", "b")], | 361 ], { |
262 [new RewriteTransformer("b", "c")] | 362 "app": [ |
263 ]), | 363 [ |
264 new RewriteTransformer("1", "2") | 364 new TransformerGroup([ |
265 ]]}); | 365 [new RewriteTransformer("a", "b")], |
| 366 [new RewriteTransformer("b", "c")] |
| 367 ]), |
| 368 new RewriteTransformer("1", "2") |
| 369 ] |
| 370 ] |
| 371 }); |
266 updateSources(["app|foo.x"]); | 372 updateSources(["app|foo.x"]); |
267 expectNoAsset("app|foo.c"); | 373 expectNoAsset("app|foo.c"); |
268 expectNoAsset("app|foo.2"); | 374 expectNoAsset("app|foo.2"); |
269 expectAsset("app|foo.x", "foo"); | 375 expectAsset("app|foo.x", "foo"); |
270 buildShouldSucceed(); | 376 buildShouldSucceed(); |
271 }); | 377 }); |
272 | 378 |
273 test("doesn't pass through an input that's overwritten by a group but not " | 379 test( |
| 380 "doesn't pass through an input that's overwritten by a group but not " |
274 "by transformers", () { | 381 "by transformers", () { |
275 initGraph(["app|foo.a"], {"app": [[ | 382 initGraph([ |
276 new TransformerGroup([ | 383 "app|foo.a" |
277 [new RewriteTransformer("a", "a")], | 384 ], { |
278 ]), | 385 "app": [ |
279 new RewriteTransformer("x", "y") | 386 [ |
280 ]]}); | 387 new TransformerGroup([ |
| 388 [new RewriteTransformer("a", "a")], |
| 389 ]), |
| 390 new RewriteTransformer("x", "y") |
| 391 ] |
| 392 ] |
| 393 }); |
281 updateSources(["app|foo.a"]); | 394 updateSources(["app|foo.a"]); |
282 expectNoAsset("app|foo.y"); | 395 expectNoAsset("app|foo.y"); |
283 expectAsset("app|foo.a", "foo.a"); | 396 expectAsset("app|foo.a", "foo.a"); |
284 buildShouldSucceed(); | 397 buildShouldSucceed(); |
285 }); | 398 }); |
286 | 399 |
287 test("doesn't pass through an input that's overwritten by transformers but " | 400 test( |
| 401 "doesn't pass through an input that's overwritten by transformers but " |
288 "not by a group", () { | 402 "not by a group", () { |
289 initGraph(["app|foo.x"], {"app": [[ | 403 initGraph([ |
290 new TransformerGroup([ | 404 "app|foo.x" |
291 [new RewriteTransformer("a", "b")], | 405 ], { |
292 [new RewriteTransformer("b", "c")] | 406 "app": [ |
293 ]), | 407 [ |
294 new RewriteTransformer("x", "x") | 408 new TransformerGroup([ |
295 ]]}); | 409 [new RewriteTransformer("a", "b")], |
| 410 [new RewriteTransformer("b", "c")] |
| 411 ]), |
| 412 new RewriteTransformer("x", "x") |
| 413 ] |
| 414 ] |
| 415 }); |
296 updateSources(["app|foo.x"]); | 416 updateSources(["app|foo.x"]); |
297 expectNoAsset("app|foo.c"); | 417 expectNoAsset("app|foo.c"); |
298 expectAsset("app|foo.x", "foo.x"); | 418 expectAsset("app|foo.x", "foo.x"); |
299 buildShouldSucceed(); | 419 buildShouldSucceed(); |
300 }); | 420 }); |
301 | 421 |
302 test("doesn't pass through an input that's consumed by a group but not " | 422 test( |
| 423 "doesn't pass through an input that's consumed by a group but not " |
303 "by transformers", () { | 424 "by transformers", () { |
304 initGraph(["app|foo.a"], {"app": [[ | 425 initGraph([ |
305 new TransformerGroup([ | 426 "app|foo.a" |
306 [new RewriteTransformer("a", "b")..consumePrimary = true], | 427 ], { |
307 ]), | 428 "app": [ |
308 new RewriteTransformer("x", "y") | 429 [ |
309 ]]}); | 430 new TransformerGroup([ |
| 431 [new RewriteTransformer("a", "b")..consumePrimary = true], |
| 432 ]), |
| 433 new RewriteTransformer("x", "y") |
| 434 ] |
| 435 ] |
| 436 }); |
310 updateSources(["app|foo.a"]); | 437 updateSources(["app|foo.a"]); |
311 expectNoAsset("app|foo.a"); | 438 expectNoAsset("app|foo.a"); |
312 expectAsset("app|foo.b", "foo.b"); | 439 expectAsset("app|foo.b", "foo.b"); |
313 buildShouldSucceed(); | 440 buildShouldSucceed(); |
314 }); | 441 }); |
315 | 442 |
316 test("doesn't pass through an input that's consumed by transformers but " | 443 test( |
| 444 "doesn't pass through an input that's consumed by transformers but " |
317 "not by a group", () { | 445 "not by a group", () { |
318 initGraph(["app|foo.x"], {"app": [[ | 446 initGraph([ |
319 new TransformerGroup([ | 447 "app|foo.x" |
320 [new RewriteTransformer("a", "b")], | 448 ], { |
321 [new RewriteTransformer("b", "c")] | 449 "app": [ |
322 ]), | 450 [ |
323 new RewriteTransformer("x", "y")..consumePrimary = true | 451 new TransformerGroup([ |
324 ]]}); | 452 [new RewriteTransformer("a", "b")], |
| 453 [new RewriteTransformer("b", "c")] |
| 454 ]), |
| 455 new RewriteTransformer("x", "y")..consumePrimary = true |
| 456 ] |
| 457 ] |
| 458 }); |
325 updateSources(["app|foo.x"]); | 459 updateSources(["app|foo.x"]); |
326 expectNoAsset("app|foo.x"); | 460 expectNoAsset("app|foo.x"); |
327 expectAsset("app|foo.y", "foo.y"); | 461 expectAsset("app|foo.y", "foo.y"); |
328 buildShouldSucceed(); | 462 buildShouldSucceed(); |
329 }); | 463 }); |
330 | 464 |
331 test("doesn't detect a collision for an input that's modified in-place by " | 465 test( |
| 466 "doesn't detect a collision for an input that's modified in-place by " |
332 "a transformer", () { | 467 "a transformer", () { |
333 initGraph(["app|foo.x"], {"app": [[ | 468 initGraph([ |
334 new TransformerGroup([ | 469 "app|foo.x" |
335 [new RewriteTransformer("a", "b")], | 470 ], { |
336 [new RewriteTransformer("b", "c")] | 471 "app": [ |
337 ]), | 472 [ |
338 new RewriteTransformer("x", "x") | 473 new TransformerGroup([ |
339 ]]}); | 474 [new RewriteTransformer("a", "b")], |
| 475 [new RewriteTransformer("b", "c")] |
| 476 ]), |
| 477 new RewriteTransformer("x", "x") |
| 478 ] |
| 479 ] |
| 480 }); |
340 updateSources(["app|foo.x"]); | 481 updateSources(["app|foo.x"]); |
341 expectAsset("app|foo.x", "foo.x"); | 482 expectAsset("app|foo.x", "foo.x"); |
342 buildShouldSucceed(); | 483 buildShouldSucceed(); |
343 }); | 484 }); |
344 | 485 |
345 test("doesn't detect a collision for an input that's modified in-place by " | 486 test( |
| 487 "doesn't detect a collision for an input that's modified in-place by " |
346 "a group", () { | 488 "a group", () { |
347 initGraph(["app|foo.a"], {"app": [[ | 489 initGraph([ |
348 new TransformerGroup([[new RewriteTransformer("a", "a")]]), | 490 "app|foo.a" |
349 new RewriteTransformer("x", "y") | 491 ], { |
350 ]]}); | 492 "app": [ |
| 493 [ |
| 494 new TransformerGroup([ |
| 495 [new RewriteTransformer("a", "a")] |
| 496 ]), |
| 497 new RewriteTransformer("x", "y") |
| 498 ] |
| 499 ] |
| 500 }); |
351 updateSources(["app|foo.a"]); | 501 updateSources(["app|foo.a"]); |
352 expectAsset("app|foo.a", "foo.a"); | 502 expectAsset("app|foo.a", "foo.a"); |
353 buildShouldSucceed(); | 503 buildShouldSucceed(); |
354 }); | 504 }); |
355 }); | 505 }); |
356 | 506 |
357 test("runs transforms in an added group", () { | 507 test("runs transforms in an added group", () { |
358 var rewrite = new RewriteTransformer("a", "z"); | 508 var rewrite = new RewriteTransformer("a", "z"); |
359 initGraph(["app|foo.a"], {"app": [[rewrite]]}); | 509 initGraph([ |
| 510 "app|foo.a" |
| 511 ], { |
| 512 "app": [ |
| 513 [rewrite] |
| 514 ] |
| 515 }); |
360 | 516 |
361 updateSources(["app|foo.a"]); | 517 updateSources(["app|foo.a"]); |
362 expectAsset("app|foo.z", "foo.z"); | 518 expectAsset("app|foo.z", "foo.z"); |
363 buildShouldSucceed(); | 519 buildShouldSucceed(); |
364 | 520 |
365 updateTransformers("app", [[ | 521 updateTransformers("app", [ |
366 rewrite, | 522 [ |
367 new TransformerGroup([ | 523 rewrite, |
368 [new RewriteTransformer("a", "b")], | 524 new TransformerGroup([ |
369 [new RewriteTransformer("b", "c")] | 525 [new RewriteTransformer("a", "b")], |
370 ]) | 526 [new RewriteTransformer("b", "c")] |
371 ]]); | 527 ]) |
| 528 ] |
| 529 ]); |
372 expectAsset("app|foo.z", "foo.z"); | 530 expectAsset("app|foo.z", "foo.z"); |
373 expectAsset("app|foo.c", "foo.b.c"); | 531 expectAsset("app|foo.c", "foo.b.c"); |
374 buildShouldSucceed(); | 532 buildShouldSucceed(); |
375 }); | 533 }); |
376 | 534 |
377 test("doesn't re-run transforms in a re-added group", () { | 535 test("doesn't re-run transforms in a re-added group", () { |
378 var rewrite1 = new RewriteTransformer("a", "b"); | 536 var rewrite1 = new RewriteTransformer("a", "b"); |
379 var rewrite2 = new RewriteTransformer("b", "c"); | 537 var rewrite2 = new RewriteTransformer("b", "c"); |
380 var group = new TransformerGroup([[rewrite1], [rewrite2]]); | 538 var group = new TransformerGroup([ |
381 initGraph(["app|foo.a"], {"app": [[group]]}); | 539 [rewrite1], |
| 540 [rewrite2] |
| 541 ]); |
| 542 initGraph([ |
| 543 "app|foo.a" |
| 544 ], { |
| 545 "app": [ |
| 546 [group] |
| 547 ] |
| 548 }); |
382 | 549 |
383 updateSources(["app|foo.a"]); | 550 updateSources(["app|foo.a"]); |
384 expectAsset("app|foo.c", "foo.b.c"); | 551 expectAsset("app|foo.c", "foo.b.c"); |
385 buildShouldSucceed(); | 552 buildShouldSucceed(); |
386 | 553 |
387 updateTransformers("app", [ | 554 updateTransformers("app", [ |
388 [group, new RewriteTransformer("a", "z")] | 555 [group, new RewriteTransformer("a", "z")] |
389 ]); | 556 ]); |
390 expectAsset("app|foo.c", "foo.b.c"); | 557 expectAsset("app|foo.c", "foo.b.c"); |
391 expectAsset("app|foo.z", "foo.z"); | 558 expectAsset("app|foo.z", "foo.z"); |
392 buildShouldSucceed(); | 559 buildShouldSucceed(); |
393 | 560 |
394 expect(rewrite1.numRuns, completion(equals(1))); | 561 expect(rewrite1.numRuns, completion(equals(1))); |
395 expect(rewrite2.numRuns, completion(equals(1))); | 562 expect(rewrite2.numRuns, completion(equals(1))); |
396 }); | 563 }); |
397 | 564 |
398 test("doesn't run transforms in a removed group", () { | 565 test("doesn't run transforms in a removed group", () { |
399 var rewrite1 = new RewriteTransformer("a", "b"); | 566 var rewrite1 = new RewriteTransformer("a", "b"); |
400 var rewrite2 = new RewriteTransformer("b", "c"); | 567 var rewrite2 = new RewriteTransformer("b", "c"); |
401 var group = new TransformerGroup([[rewrite1], [rewrite2]]); | 568 var group = new TransformerGroup([ |
402 initGraph(["app|foo.a"], {"app": [[group]]}); | 569 [rewrite1], |
| 570 [rewrite2] |
| 571 ]); |
| 572 initGraph([ |
| 573 "app|foo.a" |
| 574 ], { |
| 575 "app": [ |
| 576 [group] |
| 577 ] |
| 578 }); |
403 | 579 |
404 updateSources(["app|foo.a"]); | 580 updateSources(["app|foo.a"]); |
405 expectAsset("app|foo.c", "foo.b.c"); | 581 expectAsset("app|foo.c", "foo.b.c"); |
406 buildShouldSucceed(); | 582 buildShouldSucceed(); |
407 | 583 |
408 updateTransformers("app", []); | 584 updateTransformers("app", []); |
409 expectNoAsset("app|foo.c"); | 585 expectNoAsset("app|foo.c"); |
410 buildShouldSucceed(); | 586 buildShouldSucceed(); |
411 }); | 587 }); |
412 | 588 |
413 test("doesn't pass through an input that's overwritten by an added group", | 589 test("doesn't pass through an input that's overwritten by an added group", |
414 () { | 590 () { |
415 var rewrite = new RewriteTransformer("x", "z"); | 591 var rewrite = new RewriteTransformer("x", "z"); |
416 initGraph(["app|foo.a"], {"app": [[rewrite]]}); | 592 initGraph([ |
| 593 "app|foo.a" |
| 594 ], { |
| 595 "app": [ |
| 596 [rewrite] |
| 597 ] |
| 598 }); |
417 | 599 |
418 updateSources(["app|foo.a"]); | 600 updateSources(["app|foo.a"]); |
419 expectAsset("app|foo.a", "foo"); | 601 expectAsset("app|foo.a", "foo"); |
420 buildShouldSucceed(); | 602 buildShouldSucceed(); |
421 | 603 |
422 updateTransformers("app", [ | 604 updateTransformers("app", [ |
423 [rewrite, new TransformerGroup([[new RewriteTransformer("a", "a")]])] | 605 [ |
| 606 rewrite, |
| 607 new TransformerGroup([ |
| 608 [new RewriteTransformer("a", "a")] |
| 609 ]) |
| 610 ] |
424 ]); | 611 ]); |
425 expectAsset("app|foo.a", "foo.a"); | 612 expectAsset("app|foo.a", "foo.a"); |
426 buildShouldSucceed(); | 613 buildShouldSucceed(); |
427 }); | 614 }); |
428 | 615 |
429 // TODO(nweiz): make the collision error message nice | 616 // TODO(nweiz): make the collision error message nice |
430 test("reports collisions within a group", () { | 617 test("reports collisions within a group", () { |
431 initGraph(["app|foo.a", "app|foo.x"], {"app": [ | 618 initGraph([ |
432 [new TransformerGroup([ | 619 "app|foo.a", |
433 [new RewriteTransformer("a", "b")], | 620 "app|foo.x" |
434 [new RewriteTransformer("x", "b")] | 621 ], { |
435 ])] | 622 "app": [ |
436 ]}); | 623 [ |
| 624 new TransformerGroup([ |
| 625 [new RewriteTransformer("a", "b")], |
| 626 [new RewriteTransformer("x", "b")] |
| 627 ]) |
| 628 ] |
| 629 ] |
| 630 }); |
437 updateSources(["app|foo.a", "app|foo.x"]); | 631 updateSources(["app|foo.a", "app|foo.x"]); |
438 buildShouldFail([isAssetCollisionException("app|foo.b")]); | 632 buildShouldFail([isAssetCollisionException("app|foo.b")]); |
439 }); | 633 }); |
440 | 634 |
441 test("reports collisions between a group and a non-grouped transform", () { | 635 test("reports collisions between a group and a non-grouped transform", () { |
442 initGraph(["app|foo.a", "app|foo.x"], {"app": [[ | 636 initGraph([ |
443 new TransformerGroup([ | 637 "app|foo.a", |
444 [new RewriteTransformer("a", "b")], | 638 "app|foo.x" |
445 [new RewriteTransformer("b", "c")] | 639 ], { |
446 ]), | 640 "app": [ |
447 new RewriteTransformer("x", "c") | 641 [ |
448 ]]}); | 642 new TransformerGroup([ |
| 643 [new RewriteTransformer("a", "b")], |
| 644 [new RewriteTransformer("b", "c")] |
| 645 ]), |
| 646 new RewriteTransformer("x", "c") |
| 647 ] |
| 648 ] |
| 649 }); |
449 updateSources(["app|foo.a", "app|foo.x"]); | 650 updateSources(["app|foo.a", "app|foo.x"]); |
450 buildShouldFail([isAssetCollisionException("app|foo.c")]); | 651 buildShouldFail([isAssetCollisionException("app|foo.c")]); |
451 }); | 652 }); |
452 | 653 |
453 // Regression test for issue 18872. | 654 // Regression test for issue 18872. |
454 test("a multi-phase group's outputs should be visible as secondary inputs " | 655 test( |
| 656 "a multi-phase group's outputs should be visible as secondary inputs " |
455 "for a following group", () { | 657 "for a following group", () { |
456 initGraph({ | 658 initGraph({ |
457 "app|foo.txt": "bar.c", | 659 "app|foo.txt": "bar.c", |
458 "app|bar.a": "bar" | 660 "app|bar.a": "bar" |
459 }, {"app": [ | 661 }, { |
460 [new TransformerGroup([ | 662 "app": [ |
461 [new RewriteTransformer("a", "b")], | 663 [ |
462 [new RewriteTransformer("b", "c")] | 664 new TransformerGroup([ |
463 ])], | 665 [new RewriteTransformer("a", "b")], |
464 [new TransformerGroup([ | 666 [new RewriteTransformer("b", "c")] |
465 [new ManyToOneTransformer("txt")] | 667 ]) |
466 ])] | 668 ], |
467 ]}); | 669 [ |
| 670 new TransformerGroup([ |
| 671 [new ManyToOneTransformer("txt")] |
| 672 ]) |
| 673 ] |
| 674 ] |
| 675 }); |
468 | 676 |
469 updateSources(["app|foo.txt", "app|bar.a"]); | 677 updateSources(["app|foo.txt", "app|bar.a"]); |
470 expectAsset("app|foo.out", "bar.b.c"); | 678 expectAsset("app|foo.out", "bar.b.c"); |
471 buildShouldSucceed(); | 679 buildShouldSucceed(); |
472 }); | 680 }); |
473 } | 681 } |
OLD | NEW |