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