OLD | NEW |
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 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 | 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.pass_through_test; | 5 library barback.test.package_graph.transform.pass_through_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("passes an asset through a phase in which no transforms apply", () { | 14 test("passes an asset through a phase in which no transforms apply", () { |
15 initGraph([ | 15 initGraph([ |
16 "app|foo.in", | 16 "app|foo.in", |
17 "app|bar.zip", | 17 "app|bar.zip", |
18 ], {"app": [ | 18 ], { |
19 [new RewriteTransformer("in", "mid")], | 19 "app": [ |
20 [new RewriteTransformer("zip", "zap")], | 20 [new RewriteTransformer("in", "mid")], |
21 [new RewriteTransformer("mid", "out")], | 21 [new RewriteTransformer("zip", "zap")], |
22 ]}); | 22 [new RewriteTransformer("mid", "out")], |
| 23 ] |
| 24 }); |
23 | 25 |
24 updateSources(["app|foo.in", "app|bar.zip"]); | 26 updateSources(["app|foo.in", "app|bar.zip"]); |
25 expectAsset("app|foo.out", "foo.mid.out"); | 27 expectAsset("app|foo.out", "foo.mid.out"); |
26 expectAsset("app|bar.zap", "bar.zap"); | 28 expectAsset("app|bar.zap", "bar.zap"); |
27 buildShouldSucceed(); | 29 buildShouldSucceed(); |
28 }); | 30 }); |
29 | 31 |
30 test("passes an asset through a phase in which a transform uses it", () { | 32 test("passes an asset through a phase in which a transform uses it", () { |
31 initGraph([ | 33 initGraph([ |
32 "app|foo.in", | 34 "app|foo.in", |
33 ], {"app": [ | 35 ], { |
34 [new RewriteTransformer("in", "mid")], | 36 "app": [ |
35 [new RewriteTransformer("mid", "phase2")], | 37 [new RewriteTransformer("in", "mid")], |
36 [new RewriteTransformer("mid", "phase3")], | 38 [new RewriteTransformer("mid", "phase2")], |
37 ]}); | 39 [new RewriteTransformer("mid", "phase3")], |
| 40 ] |
| 41 }); |
38 | 42 |
39 updateSources(["app|foo.in"]); | 43 updateSources(["app|foo.in"]); |
40 expectAsset("app|foo.in", "foo"); | 44 expectAsset("app|foo.in", "foo"); |
41 expectAsset("app|foo.mid", "foo.mid"); | 45 expectAsset("app|foo.mid", "foo.mid"); |
42 expectAsset("app|foo.phase2", "foo.mid.phase2"); | 46 expectAsset("app|foo.phase2", "foo.mid.phase2"); |
43 expectAsset("app|foo.phase3", "foo.mid.phase3"); | 47 expectAsset("app|foo.phase3", "foo.mid.phase3"); |
44 buildShouldSucceed(); | 48 buildShouldSucceed(); |
45 }); | 49 }); |
46 | 50 |
47 // If the asset were to get passed through, it might either cause a collision | 51 // If the asset were to get passed through, it might either cause a collision |
48 // or silently supersede the overwriting asset. We want to assert that that | 52 // or silently supersede the overwriting asset. We want to assert that that |
49 // doesn't happen. | 53 // doesn't happen. |
50 test("doesn't pass an asset through a phase in which a transform " | 54 test( |
| 55 "doesn't pass an asset through a phase in which a transform " |
51 "overwrites it", () { | 56 "overwrites it", () { |
52 initGraph([ | 57 initGraph([ |
53 "app|foo.txt" | 58 "app|foo.txt" |
54 ], {"app": [[new RewriteTransformer("txt", "txt")]]}); | 59 ], { |
| 60 "app": [ |
| 61 [new RewriteTransformer("txt", "txt")] |
| 62 ] |
| 63 }); |
55 | 64 |
56 updateSources(["app|foo.txt"]); | 65 updateSources(["app|foo.txt"]); |
57 expectAsset("app|foo.txt", "foo.txt"); | 66 expectAsset("app|foo.txt", "foo.txt"); |
58 buildShouldSucceed(); | 67 buildShouldSucceed(); |
59 }); | 68 }); |
60 | 69 |
61 test("removes a pass-through asset when the source is removed", () { | 70 test("removes a pass-through asset when the source is removed", () { |
62 initGraph([ | 71 initGraph([ |
63 "app|foo.in", | 72 "app|foo.in", |
64 "app|bar.zip", | 73 "app|bar.zip", |
65 ], {"app": [ | 74 ], { |
66 [new RewriteTransformer("zip", "zap")], | 75 "app": [ |
67 [new RewriteTransformer("in", "out")], | 76 [new RewriteTransformer("zip", "zap")], |
68 ]}); | 77 [new RewriteTransformer("in", "out")], |
| 78 ] |
| 79 }); |
69 | 80 |
70 updateSources(["app|foo.in", "app|bar.zip"]); | 81 updateSources(["app|foo.in", "app|bar.zip"]); |
71 expectAsset("app|foo.out", "foo.out"); | 82 expectAsset("app|foo.out", "foo.out"); |
72 buildShouldSucceed(); | 83 buildShouldSucceed(); |
73 | 84 |
74 removeSources(["app|foo.in"]); | 85 removeSources(["app|foo.in"]); |
75 expectNoAsset("app|foo.in"); | 86 expectNoAsset("app|foo.in"); |
76 expectNoAsset("app|foo.out"); | 87 expectNoAsset("app|foo.out"); |
77 buildShouldSucceed(); | 88 buildShouldSucceed(); |
78 }); | 89 }); |
79 | 90 |
80 test("updates a pass-through asset when the source is updated", () { | 91 test("updates a pass-through asset when the source is updated", () { |
81 initGraph([ | 92 initGraph([ |
82 "app|foo.in", | 93 "app|foo.in", |
83 "app|bar.zip", | 94 "app|bar.zip", |
84 ], {"app": [ | 95 ], { |
85 [new RewriteTransformer("zip", "zap")], | 96 "app": [ |
86 [new RewriteTransformer("in", "out")], | 97 [new RewriteTransformer("zip", "zap")], |
87 ]}); | 98 [new RewriteTransformer("in", "out")], |
| 99 ] |
| 100 }); |
88 | 101 |
89 updateSources(["app|foo.in", "app|bar.zip"]); | 102 updateSources(["app|foo.in", "app|bar.zip"]); |
90 expectAsset("app|foo.out", "foo.out"); | 103 expectAsset("app|foo.out", "foo.out"); |
91 buildShouldSucceed(); | 104 buildShouldSucceed(); |
92 | 105 |
93 modifyAsset("app|foo.in", "boo"); | 106 modifyAsset("app|foo.in", "boo"); |
94 updateSources(["app|foo.in"]); | 107 updateSources(["app|foo.in"]); |
95 expectAsset("app|foo.out", "boo.out"); | 108 expectAsset("app|foo.out", "boo.out"); |
96 buildShouldSucceed(); | 109 buildShouldSucceed(); |
97 }); | 110 }); |
98 | 111 |
99 test("passes an asset through a phase in which transforms have ceased to " | 112 test( |
| 113 "passes an asset through a phase in which transforms have ceased to " |
100 "apply", () { | 114 "apply", () { |
101 initGraph([ | 115 initGraph([ |
102 "app|foo.in", | 116 "app|foo.in", |
103 ], {"app": [ | 117 ], { |
104 [new RewriteTransformer("in", "mid")], | 118 "app": [ |
105 [new CheckContentTransformer("foo.mid", ".phase2")], | 119 [new RewriteTransformer("in", "mid")], |
106 [new CheckContentTransformer(new RegExp(r"\.mid$"), ".phase3")], | 120 [new CheckContentTransformer("foo.mid", ".phase2")], |
107 ]}); | 121 [new CheckContentTransformer(new RegExp(r"\.mid$"), ".phase3")], |
| 122 ] |
| 123 }); |
108 | 124 |
109 updateSources(["app|foo.in"]); | 125 updateSources(["app|foo.in"]); |
110 expectAsset("app|foo.mid", "foo.mid.phase2"); | 126 expectAsset("app|foo.mid", "foo.mid.phase2"); |
111 buildShouldSucceed(); | 127 buildShouldSucceed(); |
112 | 128 |
113 modifyAsset("app|foo.in", "bar"); | 129 modifyAsset("app|foo.in", "bar"); |
114 updateSources(["app|foo.in"]); | 130 updateSources(["app|foo.in"]); |
115 expectAsset("app|foo.mid", "bar.mid.phase3"); | 131 expectAsset("app|foo.mid", "bar.mid.phase3"); |
116 buildShouldSucceed(); | 132 buildShouldSucceed(); |
117 }); | 133 }); |
118 | 134 |
119 test("doesn't pass an asset through a phase in which transforms have " | 135 test( |
| 136 "doesn't pass an asset through a phase in which transforms have " |
120 "started to apply", () { | 137 "started to apply", () { |
121 initGraph([ | 138 initGraph([ |
122 "app|foo.in", | 139 "app|foo.in", |
123 ], {"app": [ | 140 ], { |
124 [new RewriteTransformer("in", "mid")], | 141 "app": [ |
125 [new CheckContentTransformer("bar.mid", ".phase2")], | 142 [new RewriteTransformer("in", "mid")], |
126 [new CheckContentTransformer(new RegExp(r"\.mid$"), ".phase3")], | 143 [new CheckContentTransformer("bar.mid", ".phase2")], |
127 ]}); | 144 [new CheckContentTransformer(new RegExp(r"\.mid$"), ".phase3")], |
| 145 ] |
| 146 }); |
128 | 147 |
129 updateSources(["app|foo.in"]); | 148 updateSources(["app|foo.in"]); |
130 expectAsset("app|foo.mid", "foo.mid.phase3"); | 149 expectAsset("app|foo.mid", "foo.mid.phase3"); |
131 buildShouldSucceed(); | 150 buildShouldSucceed(); |
132 | 151 |
133 modifyAsset("app|foo.in", "bar"); | 152 modifyAsset("app|foo.in", "bar"); |
134 updateSources(["app|foo.in"]); | 153 updateSources(["app|foo.in"]); |
135 expectAsset("app|foo.mid", "bar.mid.phase2"); | 154 expectAsset("app|foo.mid", "bar.mid.phase2"); |
136 buildShouldSucceed(); | 155 buildShouldSucceed(); |
137 }); | 156 }); |
138 | 157 |
139 test("doesn't pass an asset through if it's removed during isPrimary", () { | 158 test("doesn't pass an asset through if it's removed during isPrimary", () { |
140 var check = new CheckContentTransformer("bar", " modified"); | 159 var check = new CheckContentTransformer("bar", " modified"); |
141 initGraph(["app|foo.txt"], {"app": [[check]]}); | 160 initGraph([ |
| 161 "app|foo.txt" |
| 162 ], { |
| 163 "app": [ |
| 164 [check] |
| 165 ] |
| 166 }); |
142 | 167 |
143 updateSources(["app|foo.txt"]); | 168 updateSources(["app|foo.txt"]); |
144 expectAsset("app|foo.txt", "foo"); | 169 expectAsset("app|foo.txt", "foo"); |
145 buildShouldSucceed(); | 170 buildShouldSucceed(); |
146 | 171 |
147 check.pauseIsPrimary("app|foo.txt"); | 172 check.pauseIsPrimary("app|foo.txt"); |
148 modifyAsset("app|foo.txt", "bar"); | 173 modifyAsset("app|foo.txt", "bar"); |
149 updateSources(["app|foo.txt"]); | 174 updateSources(["app|foo.txt"]); |
150 // Ensure we're waiting on [check.isPrimary] | 175 // Ensure we're waiting on [check.isPrimary] |
151 schedule(pumpEventQueue); | 176 schedule(pumpEventQueue); |
152 | 177 |
153 removeSources(["app|foo.txt"]); | 178 removeSources(["app|foo.txt"]); |
154 check.resumeIsPrimary("app|foo.txt"); | 179 check.resumeIsPrimary("app|foo.txt"); |
155 expectNoAsset("app|foo.txt"); | 180 expectNoAsset("app|foo.txt"); |
156 buildShouldSucceed(); | 181 buildShouldSucceed(); |
157 }); | 182 }); |
158 | 183 |
159 test("passes an asset through when its overwriting transform becomes " | 184 test( |
| 185 "passes an asset through when its overwriting transform becomes " |
160 "non-primary during apply", () { | 186 "non-primary during apply", () { |
161 var check = new CheckContentTransformer("yes", " modified"); | 187 var check = new CheckContentTransformer("yes", " modified"); |
162 initGraph({"app|foo.txt": "yes"}, {"app": [[check]]}); | 188 initGraph({ |
| 189 "app|foo.txt": "yes" |
| 190 }, { |
| 191 "app": [ |
| 192 [check] |
| 193 ] |
| 194 }); |
163 | 195 |
164 check.pauseApply(); | 196 check.pauseApply(); |
165 updateSources(["app|foo.txt"]); | 197 updateSources(["app|foo.txt"]); |
166 expectAssetDoesNotComplete("app|foo.txt"); | 198 expectAssetDoesNotComplete("app|foo.txt"); |
167 | 199 |
168 modifyAsset("app|foo.txt", "no"); | 200 modifyAsset("app|foo.txt", "no"); |
169 updateSources(["app|foo.txt"]); | 201 updateSources(["app|foo.txt"]); |
170 check.resumeApply(); | 202 check.resumeApply(); |
171 | 203 |
172 expectAsset("app|foo.txt", "no"); | 204 expectAsset("app|foo.txt", "no"); |
173 buildShouldSucceed(); | 205 buildShouldSucceed(); |
174 }); | 206 }); |
175 | 207 |
176 test("doesn't pass an asset through when its overwriting transform becomes " | 208 test( |
| 209 "doesn't pass an asset through when its overwriting transform becomes " |
177 "non-primary during apply if another transform overwrites it", () { | 210 "non-primary during apply if another transform overwrites it", () { |
178 var check = new CheckContentTransformer("yes", " modified"); | 211 var check = new CheckContentTransformer("yes", " modified"); |
179 initGraph({ | 212 initGraph({ |
180 "app|foo.txt": "yes" | 213 "app|foo.txt": "yes" |
181 }, { | 214 }, { |
182 "app": [[check, new RewriteTransformer("txt", "txt")]] | 215 "app": [ |
| 216 [check, new RewriteTransformer("txt", "txt")] |
| 217 ] |
183 }); | 218 }); |
184 | 219 |
185 check.pauseApply(); | 220 check.pauseApply(); |
186 updateSources(["app|foo.txt"]); | 221 updateSources(["app|foo.txt"]); |
187 // Ensure we're waiting on [check.apply] | 222 // Ensure we're waiting on [check.apply] |
188 schedule(pumpEventQueue); | 223 schedule(pumpEventQueue); |
189 | 224 |
190 modifyAsset("app|foo.txt", "no"); | 225 modifyAsset("app|foo.txt", "no"); |
191 updateSources(["app|foo.txt"]); | 226 updateSources(["app|foo.txt"]); |
192 check.resumeApply(); | 227 check.resumeApply(); |
193 | 228 |
194 expectAsset("app|foo.txt", "no.txt"); | 229 expectAsset("app|foo.txt", "no.txt"); |
195 buildShouldSucceed(); | 230 buildShouldSucceed(); |
196 }); | 231 }); |
197 | 232 |
198 test("doesn't pass an asset through when one overwriting transform becomes " | 233 test( |
| 234 "doesn't pass an asset through when one overwriting transform becomes " |
199 "non-primary if another transform still overwrites it", () { | 235 "non-primary if another transform still overwrites it", () { |
200 initGraph({ | 236 initGraph({ |
201 "app|foo.txt": "yes" | 237 "app|foo.txt": "yes" |
202 }, { | 238 }, { |
203 "app": [[ | 239 "app": [ |
204 new CheckContentTransformer("yes", " modified"), | 240 [ |
205 new RewriteTransformer("txt", "txt") | 241 new CheckContentTransformer("yes", " modified"), |
206 ]] | 242 new RewriteTransformer("txt", "txt") |
| 243 ] |
| 244 ] |
207 }); | 245 }); |
208 | 246 |
209 updateSources(["app|foo.txt"]); | 247 updateSources(["app|foo.txt"]); |
210 // This could be either the output of [CheckContentTransformer] or | 248 // This could be either the output of [CheckContentTransformer] or |
211 // [RewriteTransformer], depending which completes first. | 249 // [RewriteTransformer], depending which completes first. |
212 expectAsset("app|foo.txt", anything); | 250 expectAsset("app|foo.txt", anything); |
213 buildShouldFail([isAssetCollisionException("app|foo.txt")]); | 251 buildShouldFail([isAssetCollisionException("app|foo.txt")]); |
214 | 252 |
215 modifyAsset("app|foo.txt", "no"); | 253 modifyAsset("app|foo.txt", "no"); |
216 updateSources(["app|foo.txt"]); | 254 updateSources(["app|foo.txt"]); |
217 expectAsset("app|foo.txt", "no.txt"); | 255 expectAsset("app|foo.txt", "no.txt"); |
218 buildShouldSucceed(); | 256 buildShouldSucceed(); |
219 }); | 257 }); |
220 | 258 |
221 test("doesn't return a pass-through asset until we know it won't be " | 259 test( |
| 260 "doesn't return a pass-through asset until we know it won't be " |
222 "overwritten", () { | 261 "overwritten", () { |
223 var rewrite = new RewriteTransformer("txt", "txt"); | 262 var rewrite = new RewriteTransformer("txt", "txt"); |
224 initGraph(["app|foo.a"], {"app": [[rewrite]]}); | 263 initGraph([ |
| 264 "app|foo.a" |
| 265 ], { |
| 266 "app": [ |
| 267 [rewrite] |
| 268 ] |
| 269 }); |
225 | 270 |
226 rewrite.pauseIsPrimary("app|foo.a"); | 271 rewrite.pauseIsPrimary("app|foo.a"); |
227 updateSources(["app|foo.a"]); | 272 updateSources(["app|foo.a"]); |
228 expectAssetDoesNotComplete("app|foo.a"); | 273 expectAssetDoesNotComplete("app|foo.a"); |
229 | 274 |
230 rewrite.resumeIsPrimary("app|foo.a"); | 275 rewrite.resumeIsPrimary("app|foo.a"); |
231 expectAsset("app|foo.a", "foo"); | 276 expectAsset("app|foo.a", "foo"); |
232 buildShouldSucceed(); | 277 buildShouldSucceed(); |
233 }); | 278 }); |
234 | 279 |
235 test("doesn't return a pass-through asset until we know it won't be " | 280 test( |
| 281 "doesn't return a pass-through asset until we know it won't be " |
236 "overwritten when secondary inputs change", () { | 282 "overwritten when secondary inputs change", () { |
237 var manyToOne = new ManyToOneTransformer("txt"); | 283 var manyToOne = new ManyToOneTransformer("txt"); |
238 initGraph({ | 284 initGraph({ |
239 "app|foo.txt": "bar.in", | 285 "app|foo.txt": "bar.in", |
240 "app|bar.in": "bar" | 286 "app|bar.in": "bar" |
241 }, {"app": [[manyToOne]]}); | 287 }, { |
| 288 "app": [ |
| 289 [manyToOne] |
| 290 ] |
| 291 }); |
242 | 292 |
243 updateSources(["app|foo.txt", "app|bar.in"]); | 293 updateSources(["app|foo.txt", "app|bar.in"]); |
244 expectAsset("app|foo.txt", "bar.in"); | 294 expectAsset("app|foo.txt", "bar.in"); |
245 expectAsset("app|foo.out", "bar"); | 295 expectAsset("app|foo.out", "bar"); |
246 | 296 |
247 manyToOne.pauseApply(); | 297 manyToOne.pauseApply(); |
248 updateSources(["app|bar.in"]); | 298 updateSources(["app|bar.in"]); |
249 expectAssetDoesNotComplete("app|foo.txt"); | 299 expectAssetDoesNotComplete("app|foo.txt"); |
250 | 300 |
251 manyToOne.resumeApply(); | 301 manyToOne.resumeApply(); |
252 expectAsset("app|foo.txt", "bar.in"); | 302 expectAsset("app|foo.txt", "bar.in"); |
253 buildShouldSucceed(); | 303 buildShouldSucceed(); |
254 }); | 304 }); |
255 } | 305 } |
OLD | NEW |