OLD | NEW |
| (Empty) |
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS d.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 pub_tests; | |
6 | |
7 import 'package:scheduled_test/scheduled_stream.dart'; | |
8 import 'package:scheduled_test/scheduled_test.dart'; | |
9 | |
10 import '../descriptor.dart' as d; | |
11 import '../test_pub.dart'; | |
12 import '../serve/utils.dart'; | |
13 | |
14 const REPLACE_FROM_LIBRARY_TRANSFORMER = """ | |
15 import 'dart:async'; | |
16 | |
17 import 'package:barback/barback.dart'; | |
18 import 'package:bar/bar.dart'; | |
19 | |
20 class ReplaceTransformer extends Transformer { | |
21 ReplaceTransformer.asPlugin(); | |
22 | |
23 String get allowedExtensions => '.dart'; | |
24 | |
25 Future apply(Transform transform) { | |
26 return transform.primaryInput.readAsString().then((contents) { | |
27 transform.addOutput(new Asset.fromString( | |
28 transform.primaryInput.id, | |
29 contents.replaceAll("Hello", replacement))); | |
30 }); | |
31 } | |
32 } | |
33 """; | |
34 | |
35 // TODO(nweiz): Currently scheduled_test.setUp doesn't play well with test_pub, | |
36 // since it only assigns the sandbox directory once the main test body has | |
37 // run. Fix this and move this to a real setUp call. | |
38 void setUp() { | |
39 servePackages((builder) { | |
40 builder.serveRepoPackage('barback'); | |
41 | |
42 builder.serve("foo", "1.2.3", deps: { | |
43 'barback': 'any' | |
44 }, | |
45 contents: [ | |
46 d.dir( | |
47 "lib", | |
48 [d.file("transformer.dart", replaceTransformer("Hello", "Goodbye
"))])]); | |
49 | |
50 builder.serve("bar", "1.2.3", deps: { | |
51 'barback': 'any' | |
52 }, | |
53 contents: [ | |
54 d.dir( | |
55 "lib", | |
56 [d.file("transformer.dart", replaceTransformer("Goodbye", "See y
a"))])]); | |
57 | |
58 builder.serve("baz", "1.2.3"); | |
59 }); | |
60 | |
61 d.dir(appPath, [d.pubspec({ | |
62 "name": "myapp", | |
63 "dependencies": { | |
64 "foo": "1.2.3", | |
65 "bar": "1.2.3" | |
66 }, | |
67 "transformers": ["foo"] | |
68 }), | |
69 d.dir("bin", [d.file("myapp.dart", "main() => print('Hello!');")])]).cre
ate(); | |
70 | |
71 pubGet(); | |
72 } | |
73 | |
74 main() { | |
75 initConfig(); | |
76 | |
77 integration("caches a transformer snapshot", () { | |
78 setUp(); | |
79 | |
80 var process = pubRun(args: ['myapp']); | |
81 process.stdout.expect("Goodbye!"); | |
82 process.shouldExit(); | |
83 | |
84 d.dir( | |
85 appPath, | |
86 [ | |
87 d.dir( | |
88 ".pub/transformers", | |
89 [ | |
90 d.file("manifest.txt", "0.1.2+3\nfoo"), | |
91 d.matcherFile("transformers.snapshot", isNot(isEmpty))])]).v
alidate(); | |
92 | |
93 // Run the executable again to make sure loading the transformer from the | |
94 // cache works. | |
95 process = pubRun(args: ['myapp']); | |
96 process.stdout.expect("Goodbye!"); | |
97 process.shouldExit(); | |
98 }); | |
99 | |
100 integration("recaches if the SDK version is out-of-date", () { | |
101 setUp(); | |
102 | |
103 d.dir( | |
104 appPath, | |
105 [ | |
106 d.dir( | |
107 ".pub/transformers", | |
108 [// The version 0.0.1 is different than the test version 0.1.2+3
. | |
109 d.file("manifest.txt", "0.0.1\nfoo"), | |
110 d.file("transformers.snapshot", "junk")])]).create(); | |
111 | |
112 var process = pubRun(args: ['myapp']); | |
113 process.stdout.expect("Goodbye!"); | |
114 process.shouldExit(); | |
115 | |
116 d.dir( | |
117 appPath, | |
118 [ | |
119 d.dir( | |
120 ".pub/transformers", | |
121 [ | |
122 d.file("manifest.txt", "0.1.2+3\nfoo"), | |
123 d.matcherFile("transformers.snapshot", isNot(isEmpty))])]).v
alidate(); | |
124 }); | |
125 | |
126 integration("recaches if the transformers change", () { | |
127 setUp(); | |
128 | |
129 var process = pubRun(args: ['myapp']); | |
130 process.stdout.expect("Goodbye!"); | |
131 process.shouldExit(); | |
132 | |
133 d.dir( | |
134 appPath, | |
135 [ | |
136 d.dir( | |
137 ".pub/transformers", | |
138 [ | |
139 d.file("manifest.txt", "0.1.2+3\nfoo"), | |
140 d.matcherFile("transformers.snapshot", isNot(isEmpty))])]).v
alidate(); | |
141 | |
142 d.dir(appPath, [d.pubspec({ | |
143 "name": "myapp", | |
144 "dependencies": { | |
145 "foo": "1.2.3", | |
146 "bar": "1.2.3" | |
147 }, | |
148 "transformers": ["foo", "bar"] | |
149 }), | |
150 d.dir("bin", [d.file("myapp.dart", "main() => print('Hello!');")])]).c
reate(); | |
151 | |
152 process = pubRun(args: ['myapp']); | |
153 process.stdout.expect("See ya!"); | |
154 process.shouldExit(); | |
155 | |
156 d.dir( | |
157 appPath, | |
158 [ | |
159 d.dir( | |
160 ".pub/transformers", | |
161 [ | |
162 d.file("manifest.txt", "0.1.2+3\nbar,foo"), | |
163 d.matcherFile("transformers.snapshot", isNot(isEmpty))])]).v
alidate(); | |
164 }); | |
165 | |
166 integration("recaches if the transformer version changes", () { | |
167 setUp(); | |
168 | |
169 var process = pubRun(args: ['myapp']); | |
170 process.stdout.expect("Goodbye!"); | |
171 process.shouldExit(); | |
172 | |
173 d.dir( | |
174 appPath, | |
175 [ | |
176 d.dir( | |
177 ".pub/transformers", | |
178 [ | |
179 d.file("manifest.txt", "0.1.2+3\nfoo"), | |
180 d.matcherFile("transformers.snapshot", isNot(isEmpty))])]).v
alidate(); | |
181 | |
182 servePackages((builder) { | |
183 builder.serve("foo", "2.0.0", deps: { | |
184 'barback': 'any' | |
185 }, | |
186 contents: [ | |
187 d.dir( | |
188 "lib", | |
189 [d.file("transformer.dart", replaceTransformer("Hello", "New")
)])]); | |
190 }); | |
191 | |
192 d.dir(appPath, [d.pubspec({ | |
193 "name": "myapp", | |
194 "dependencies": { | |
195 "foo": "any" | |
196 }, | |
197 "transformers": ["foo"] | |
198 })]).create(); | |
199 | |
200 pubUpgrade(); | |
201 | |
202 process = pubRun(args: ['myapp']); | |
203 process.stdout.expect("New!"); | |
204 process.shouldExit(); | |
205 | |
206 d.dir( | |
207 appPath, | |
208 [ | |
209 d.dir( | |
210 ".pub/transformers", | |
211 [ | |
212 d.file("manifest.txt", "0.1.2+3\nfoo"), | |
213 d.matcherFile("transformers.snapshot", isNot(isEmpty))])]).v
alidate(); | |
214 }); | |
215 | |
216 integration("recaches if a transitive dependency version changes", () { | |
217 servePackages((builder) { | |
218 builder.serveRepoPackage('barback'); | |
219 | |
220 builder.serve("foo", "1.2.3", deps: { | |
221 'barback': 'any', | |
222 'bar': 'any' | |
223 }, | |
224 contents: [ | |
225 d.dir("lib", [d.file("transformer.dart", REPLACE_FROM_LIBRARY_TRAN
SFORMER)])]); | |
226 | |
227 builder.serve( | |
228 "bar", | |
229 "1.2.3", | |
230 contents: [ | |
231 d.dir("lib", [d.file("bar.dart", "final replacement = 'Goodbye';")
])]); | |
232 }); | |
233 | |
234 d.dir(appPath, [d.pubspec({ | |
235 "name": "myapp", | |
236 "dependencies": { | |
237 "foo": "1.2.3" | |
238 }, | |
239 "transformers": ["foo"] | |
240 }), | |
241 d.dir("bin", [d.file("myapp.dart", "main() => print('Hello!');")])]).c
reate(); | |
242 | |
243 pubGet(); | |
244 | |
245 var process = pubRun(args: ['myapp']); | |
246 process.stdout.expect("Goodbye!"); | |
247 process.shouldExit(); | |
248 | |
249 servePackages((builder) { | |
250 builder.serve( | |
251 "bar", | |
252 "2.0.0", | |
253 contents: [ | |
254 d.dir("lib", [d.file("bar.dart", "final replacement = 'See ya';")]
)]); | |
255 }); | |
256 | |
257 d.dir(appPath, [d.pubspec({ | |
258 "name": "myapp", | |
259 "dependencies": { | |
260 "foo": "any" | |
261 }, | |
262 "transformers": ["foo"] | |
263 })]).create(); | |
264 | |
265 pubUpgrade(); | |
266 | |
267 process = pubRun(args: ['myapp']); | |
268 process.stdout.expect("See ya!"); | |
269 process.shouldExit(); | |
270 }); | |
271 | |
272 // Issue 21298. | |
273 integration("doesn't recache when a transformer is removed", () { | |
274 setUp(); | |
275 | |
276 d.dir(appPath, [d.pubspec({ | |
277 "name": "myapp", | |
278 "dependencies": { | |
279 "foo": "1.2.3", | |
280 "bar": "1.2.3" | |
281 }, | |
282 "transformers": ["foo", "bar"] | |
283 }), | |
284 d.dir("bin", [d.file("myapp.dart", "main() => print('Hello!');")])]).c
reate(); | |
285 | |
286 var process = pubRun(args: ['myapp']); | |
287 process.stdout.expect("See ya!"); | |
288 process.shouldExit(); | |
289 | |
290 d.dir(appPath, [d.pubspec({ | |
291 "name": "myapp", | |
292 "dependencies": { | |
293 "foo": "1.2.3", | |
294 // Add a new dependency to trigger another "pub get". This works | |
295 // around issue 20498. | |
296 "baz": "1.2.3" | |
297 }, | |
298 "transformers": ["foo"] | |
299 }), | |
300 d.dir("bin", [d.file("myapp.dart", "main() => print('Hello!');")])]).c
reate(); | |
301 | |
302 process = pubRun(args: ['myapp']); | |
303 process.stdout.expect( | |
304 "Your pubspec has changed, so we need to update your lockfile:"); | |
305 process.stdout.expect(consumeThrough("Goodbye!")); | |
306 process.shouldExit(); | |
307 | |
308 // "bar" should still be in the manifest, since there's no reason to | |
309 // recompile the cache. | |
310 d.dir( | |
311 appPath, | |
312 [ | |
313 d.dir( | |
314 ".pub/transformers", | |
315 [ | |
316 d.file("manifest.txt", "0.1.2+3\nbar,foo"), | |
317 d.matcherFile("transformers.snapshot", isNot(isEmpty))])]).v
alidate(); | |
318 }); | |
319 } | |
320 | |
321 String replaceTransformer(String input, String output) { | |
322 return """ | |
323 import 'dart:async'; | |
324 | |
325 import 'package:barback/barback.dart'; | |
326 | |
327 class ReplaceTransformer extends Transformer { | |
328 ReplaceTransformer.asPlugin(); | |
329 | |
330 String get allowedExtensions => '.dart'; | |
331 | |
332 Future apply(Transform transform) { | |
333 return transform.primaryInput.readAsString().then((contents) { | |
334 transform.addOutput(new Asset.fromString( | |
335 transform.primaryInput.id, | |
336 contents.replaceAll("$input", "$output"))); | |
337 }); | |
338 } | |
339 } | |
340 """; | |
341 } | |
OLD | NEW |