OLD | NEW |
---|---|
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, 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 import 'dart:async'; | 5 import 'dart:async'; |
6 import 'dart:io'; | 6 import 'dart:io'; |
7 | 7 |
8 import 'package:path/path.dart' as p; | 8 import 'package:path/path.dart' as p; |
9 import 'package:pub/src/exit_codes.dart' as exit_codes; | 9 import 'package:pub/src/exit_codes.dart' as exit_codes; |
10 import 'package:pub/src/io.dart'; | 10 import 'package:pub/src/io.dart'; |
(...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
279 d.appPubspec({"foo": "3.0.0"}) | 279 d.appPubspec({"foo": "3.0.0"}) |
280 ]).create(); | 280 ]).create(); |
281 | 281 |
282 pubGet(environment: {"_PUB_TEST_SDK_VERSION": "1.2.3+4"}); | 282 pubGet(environment: {"_PUB_TEST_SDK_VERSION": "1.2.3+4"}); |
283 }); | 283 }); |
284 | 284 |
285 _requiresPubGet("Dart 0.1.2+3 is incompatible with your dependencies' " | 285 _requiresPubGet("Dart 0.1.2+3 is incompatible with your dependencies' " |
286 "SDK constraints. Please run \"pub get\" again."); | 286 "SDK constraints. Please run \"pub get\" again."); |
287 }); | 287 }); |
288 | 288 |
289 integration("the lock file's Flutter SDK constraint doesn't match the curren t " | |
Bob Nystrom
2016/07/22 00:14:47
Long line.
nweiz
2016/07/22 00:45:01
Done.
| |
290 "Flutter SDK", () { | |
291 // Avoid using a path dependency because it triggers the full validation | |
292 // logic. We want to be sure SDK-validation works without that logic. | |
293 globalPackageServer.add((builder) { | |
294 builder.serve("foo", "3.0.0", pubspec: { | |
295 "environment": {"flutter": ">=1.0.0 <2.0.0"} | |
296 }); | |
297 }); | |
298 | |
299 d.dir('flutter', [ | |
300 d.file('version', '1.2.3') | |
301 ]).create(); | |
302 | |
303 d.dir(appPath, [ | |
304 d.appPubspec({"foo": "3.0.0"}) | |
305 ]).create(); | |
306 | |
307 pubGet(environment: {"FLUTTER_ROOT": p.join(sandboxDir, 'flutter')}); | |
308 | |
309 d.dir('flutter', [ | |
310 d.file('version', '2.4.6') | |
311 ]).create(); | |
312 | |
313 // Run pub manually here because otherwise we don't have access to | |
314 // sandboxDir. | |
315 schedulePub( | |
316 args: ["run", "script"], | |
317 environment: {"FLUTTER_ROOT": p.join(sandboxDir, 'flutter')}, | |
318 error: "Flutter 2.4.6 is incompatible with your dependencies' SDK " | |
319 "constraints. Please run \"pub get\" again.", | |
320 exitCode: exit_codes.DATA); | |
321 }); | |
322 | |
289 group("a path dependency's dependency doesn't match the lockfile", () { | 323 group("a path dependency's dependency doesn't match the lockfile", () { |
290 setUp(() { | 324 setUp(() { |
291 d.dir("bar", [ | 325 d.dir("bar", [ |
292 d.libPubspec("bar", "1.0.0", deps: {"foo": "1.0.0"}) | 326 d.libPubspec("bar", "1.0.0", deps: {"foo": "1.0.0"}) |
293 ]).create(); | 327 ]).create(); |
294 | 328 |
295 d.dir(appPath, [ | 329 d.dir(appPath, [ |
296 d.appPubspec({"bar": {"path": "../bar"}}) | 330 d.appPubspec({"bar": {"path": "../bar"}}) |
297 ]).create(); | 331 ]).create(); |
298 | 332 |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
387 }) | 421 }) |
388 ]).create(); | 422 ]).create(); |
389 | 423 |
390 pubGet(); | 424 pubGet(); |
391 | 425 |
392 _touch("pubspec.lock"); | 426 _touch("pubspec.lock"); |
393 }); | 427 }); |
394 | 428 |
395 _runsSuccessfully(); | 429 _runsSuccessfully(); |
396 }); | 430 }); |
431 | |
432 integration("the lock file has a Flutter SDK but Flutter is unavailable", | |
433 () { | |
434 // Avoid using a path dependency because it triggers the full validation | |
435 // logic. We want to be sure SDK-validation works without that logic. | |
436 globalPackageServer.add((builder) { | |
437 builder.serve("foo", "3.0.0", pubspec: { | |
438 "environment": {"flutter": ">=1.0.0 <2.0.0"} | |
439 }); | |
440 }); | |
441 | |
442 d.dir('flutter', [ | |
443 d.file('version', '1.2.3') | |
444 ]).create(); | |
445 | |
446 d.dir(appPath, [ | |
447 d.appPubspec({"foo": "3.0.0"}) | |
448 ]).create(); | |
449 | |
450 pubGet(environment: {"FLUTTER_ROOT": p.join(sandboxDir, 'flutter')}); | |
451 | |
452 d.dir('flutter', [ | |
453 d.file('version', '2.4.6') | |
454 ]).create(); | |
455 | |
456 // Run pub manually here because otherwise we don't have access to | |
457 // sandboxDir. | |
458 schedulePub(args: ["run", "bin/script.dart"]); | |
Bob Nystrom
2016/07/22 00:14:47
This isn't using sandboxDir. Can you just run pub
nweiz
2016/07/22 00:45:01
We use it above, in the initial pub get.
| |
459 }); | |
397 }); | 460 }); |
398 } | 461 } |
399 | 462 |
400 /// Runs every command that care about the world being up-to-date, and asserts | 463 /// Runs every command that care about the world being up-to-date, and asserts |
401 /// that it prints [message] as part of its error. | 464 /// that it prints [message] as part of its error. |
465 /// | |
466 /// If [environment] is passed, it's called to produce a map that's merged into | |
467 /// the OS environment for the pub commands. | |
402 void _requiresPubGet(String message) { | 468 void _requiresPubGet(String message) { |
403 for (var command in ["build", "serve", "run", "deps"]) { | 469 for (var command in ["build", "serve", "run", "deps"]) { |
404 integration("for pub $command", () { | 470 integration("for pub $command", () { |
405 var args = [command]; | 471 var args = [command]; |
406 if (command == "run") args.add("script"); | 472 if (command == "run") args.add("script"); |
407 | 473 |
408 schedulePub( | 474 schedulePub( |
409 args: args, | 475 args: args, |
410 error: contains(message), | 476 error: contains(message), |
411 exitCode: exit_codes.DATA); | 477 exitCode: exit_codes.DATA); |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
458 void _touch(String path) { | 524 void _touch(String path) { |
459 schedule(() async { | 525 schedule(() async { |
460 // Delay a bit to make sure the modification times are noticeably different. | 526 // Delay a bit to make sure the modification times are noticeably different. |
461 // 1s seems to be the finest granularity that dart:io reports. | 527 // 1s seems to be the finest granularity that dart:io reports. |
462 await new Future.delayed(new Duration(seconds: 1)); | 528 await new Future.delayed(new Duration(seconds: 1)); |
463 | 529 |
464 path = p.join(sandboxDir, "myapp", path); | 530 path = p.join(sandboxDir, "myapp", path); |
465 touch(path); | 531 touch(path); |
466 }, "touching $path"); | 532 }, "touching $path"); |
467 } | 533 } |
OLD | NEW |