OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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 /// Test infrastructure for testing pub. Unlike typical unit tests, most pub | 5 /// Test infrastructure for testing pub. Unlike typical unit tests, most pub |
6 /// tests are integration tests that stage some stuff on the file system, run | 6 /// tests are integration tests that stage some stuff on the file system, run |
7 /// pub, and then validate the results. This library provides an API to build | 7 /// pub, and then validate the results. This library provides an API to build |
8 /// tests like that. | 8 /// tests like that. |
9 library test_pub; | 9 library test_pub; |
10 | 10 |
(...skipping 414 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
425 final String sdkPath = "sdk"; | 425 final String sdkPath = "sdk"; |
426 | 426 |
427 /// The path of the mock app directory used for tests. Relative to the sandbox | 427 /// The path of the mock app directory used for tests. Relative to the sandbox |
428 /// directory. | 428 /// directory. |
429 final String appPath = "myapp"; | 429 final String appPath = "myapp"; |
430 | 430 |
431 /// The path of the packages directory in the mock app used for tests. Relative | 431 /// The path of the packages directory in the mock app used for tests. Relative |
432 /// to the sandbox directory. | 432 /// to the sandbox directory. |
433 final String packagesPath = "$appPath/packages"; | 433 final String packagesPath = "$appPath/packages"; |
434 | 434 |
435 /// The type for callbacks that will be fired during [runPub]. Takes the | 435 /// The type for callbacks that will be fired during [schedulePub]. Takes the |
436 /// sandbox directory as a parameter. | 436 /// sandbox directory as a parameter. |
437 typedef Future _ScheduledEvent(Directory parentDir); | 437 typedef Future _ScheduledEvent(Directory parentDir); |
438 | 438 |
439 /// The list of events that are scheduled to run as part of the test case. | 439 /// The list of events that are scheduled to run as part of the test case. |
440 List<_ScheduledEvent> _scheduled; | 440 List<_ScheduledEvent> _scheduled; |
441 | 441 |
442 /// The list of events that are scheduled to run after the test case, even if | 442 /// The list of events that are scheduled to run after the test case, even if |
443 /// it failed. | 443 /// it failed. |
444 List<_ScheduledEvent> _scheduledCleanup; | 444 List<_ScheduledEvent> _scheduledCleanup; |
445 | 445 |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
531 } | 531 } |
532 | 532 |
533 throw new ExpectException(Strings.join(failures, '\n')); | 533 throw new ExpectException(Strings.join(failures, '\n')); |
534 } | 534 } |
535 | 535 |
536 return null; | 536 return null; |
537 }); | 537 }); |
538 }); | 538 }); |
539 } | 539 } |
540 | 540 |
541 /// A shorthand for [schedulePub] and [run] when no validation needs to be done | |
542 /// after Pub has been run. | |
543 /// | |
544 /// Any futures in [args] will be resolved before the process is started. | |
545 void runPub({List args, Pattern output, Pattern error, int exitCode: 0}) { | |
546 schedulePub(args: args, output: output, error: error, exitCode: exitCode); | |
547 _run(); | |
548 } | |
549 | |
550 /// Starts a Pub process and returns a [ScheduledProcess] that supports | 541 /// Starts a Pub process and returns a [ScheduledProcess] that supports |
551 /// interaction with that process. | 542 /// interaction with that process. |
552 /// | 543 /// |
553 /// Any futures in [args] will be resolved before the process is started. | 544 /// Any futures in [args] will be resolved before the process is started. |
554 ScheduledProcess startPub({List args, Future<Uri> tokenEndpoint}) { | 545 ScheduledProcess startPub({List args, Future<Uri> tokenEndpoint}) { |
555 var process = _scheduleValue((sandboxDir) => | 546 var process = _scheduleValue((sandboxDir) => |
556 _doPub(startProcess, sandboxDir, args, tokenEndpoint)); | 547 _doPub(startProcess, sandboxDir, args, tokenEndpoint)); |
557 return new ScheduledProcess("pub", process); | 548 return new ScheduledProcess("pub", process); |
558 } | 549 } |
559 | 550 |
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
779 Future validate(String dir); | 770 Future validate(String dir); |
780 | 771 |
781 /// Deletes the file or directory within [dir]. Returns a [Future] that is | 772 /// Deletes the file or directory within [dir]. Returns a [Future] that is |
782 /// completed after the deletion is done. | 773 /// completed after the deletion is done. |
783 Future delete(String dir); | 774 Future delete(String dir); |
784 | 775 |
785 /// Loads the file at [path] from within this descriptor. If [path] is empty, | 776 /// Loads the file at [path] from within this descriptor. If [path] is empty, |
786 /// loads the contents of the descriptor itself. | 777 /// loads the contents of the descriptor itself. |
787 InputStream load(List<String> path); | 778 InputStream load(List<String> path); |
788 | 779 |
789 /// Schedules the directory to be created before Pub is run with [runPub]. | 780 /// Schedules the directory to be created before Pub is run with |
790 /// The directory will be created relative to the sandbox directory. | 781 /// [schedulePub]. The directory will be created relative to the sandbox |
| 782 /// directory. |
791 // TODO(nweiz): Use implicit closurization once issue 2984 is fixed. | 783 // TODO(nweiz): Use implicit closurization once issue 2984 is fixed. |
792 void scheduleCreate() => _schedule((dir) => this.create(dir)); | 784 void scheduleCreate() => _schedule((dir) => this.create(dir)); |
793 | 785 |
794 /// Schedules the file or directory to be deleted recursively. | 786 /// Schedules the file or directory to be deleted recursively. |
795 void scheduleDelete() => _schedule((dir) => this.delete(dir)); | 787 void scheduleDelete() => _schedule((dir) => this.delete(dir)); |
796 | 788 |
797 /// Schedules the directory to be validated after Pub is run with [runPub]. | 789 /// Schedules the directory to be validated after Pub is run with |
798 /// The directory will be validated relative to the sandbox directory. | 790 /// [schedulePub]. The directory will be validated relative to the sandbox |
| 791 /// directory. |
799 void scheduleValidate() => _schedule((parentDir) => validate(parentDir.path)); | 792 void scheduleValidate() => _schedule((parentDir) => validate(parentDir.path)); |
800 | 793 |
801 /// Asserts that the name of the descriptor is a [String] and returns it. | 794 /// Asserts that the name of the descriptor is a [String] and returns it. |
802 String get _stringName { | 795 String get _stringName { |
803 if (name is String) return name; | 796 if (name is String) return name; |
804 throw 'Pattern $name must be a string.'; | 797 throw 'Pattern $name must be a string.'; |
805 } | 798 } |
806 | 799 |
807 /// Validates that at least one file in [dir] matching [name] is valid | 800 /// Validates that at least one file in [dir] matching [name] is valid |
808 /// according to [validate]. [validate] should complete to an exception if | 801 /// according to [validate]. [validate] should complete to an exception if |
(...skipping 748 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1557 /// calling [completion] is unnecessary. | 1550 /// calling [completion] is unnecessary. |
1558 void expectLater(Future actual, matcher, {String reason, | 1551 void expectLater(Future actual, matcher, {String reason, |
1559 FailureHandler failureHandler, bool verbose: false}) { | 1552 FailureHandler failureHandler, bool verbose: false}) { |
1560 _schedule((_) { | 1553 _schedule((_) { |
1561 return actual.then((value) { | 1554 return actual.then((value) { |
1562 expect(value, matcher, reason: reason, failureHandler: failureHandler, | 1555 expect(value, matcher, reason: reason, failureHandler: failureHandler, |
1563 verbose: false); | 1556 verbose: false); |
1564 }); | 1557 }); |
1565 }); | 1558 }); |
1566 } | 1559 } |
OLD | NEW |