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 790 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
801 } | 801 } |
802 | 802 |
803 /// Validates that at least one file in [dir] matching [name] is valid | 803 /// Validates that at least one file in [dir] matching [name] is valid |
804 /// according to [validate]. [validate] should complete to an exception if | 804 /// according to [validate]. [validate] should complete to an exception if |
805 /// the input path is invalid. | 805 /// the input path is invalid. |
806 Future _validateOneMatch(String dir, Future validate(String path)) { | 806 Future _validateOneMatch(String dir, Future validate(String path)) { |
807 // Special-case strings to support multi-level names like "myapp/packages". | 807 // Special-case strings to support multi-level names like "myapp/packages". |
808 if (name is String) { | 808 if (name is String) { |
809 var path = join(dir, name); | 809 var path = join(dir, name); |
810 return exists(path).then((exists) { | 810 return exists(path).then((exists) { |
811 if (!exists) Expect.fail('File $name in $dir not found.'); | 811 if (!exists) { |
| 812 throw new ExpectException('File $name in $dir not found.'); |
| 813 } |
812 return validate(path); | 814 return validate(path); |
813 }); | 815 }); |
814 } | 816 } |
815 | 817 |
816 // TODO(nweiz): remove this when issue 4061 is fixed. | 818 // TODO(nweiz): remove this when issue 4061 is fixed. |
817 var stackTrace; | 819 var stackTrace; |
818 try { | 820 try { |
819 throw ""; | 821 throw ""; |
820 } catch (_, localStackTrace) { | 822 } catch (_, localStackTrace) { |
821 stackTrace = localStackTrace; | 823 stackTrace = localStackTrace; |
822 } | 824 } |
823 | 825 |
824 return listDir(dir).then((files) { | 826 return listDir(dir).then((files) { |
825 var matches = files.where((file) => endsWithPattern(file, name)).toList(); | 827 var matches = files.where((file) => endsWithPattern(file, name)).toList(); |
826 if (matches.isEmpty) { | 828 if (matches.isEmpty) { |
827 Expect.fail('No files in $dir match pattern $name.'); | 829 throw new ExpectException('No files in $dir match pattern $name.'); |
828 } | 830 } |
829 if (matches.length == 1) return validate(matches[0]); | 831 if (matches.length == 1) return validate(matches[0]); |
830 | 832 |
831 var failures = []; | 833 var failures = []; |
832 var successes = 0; | 834 var successes = 0; |
833 var completer = new Completer(); | 835 var completer = new Completer(); |
834 checkComplete() { | 836 checkComplete() { |
835 if (failures.length + successes != matches.length) return; | 837 if (failures.length + successes != matches.length) return; |
836 if (successes > 0) { | 838 if (successes > 0) { |
837 completer.complete(); | 839 completer.complete(); |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
881 Future delete(dir) { | 883 Future delete(dir) { |
882 return deleteFile(join(dir, _stringName)); | 884 return deleteFile(join(dir, _stringName)); |
883 } | 885 } |
884 | 886 |
885 /// Validates that this file correctly matches the actual file at [path]. | 887 /// Validates that this file correctly matches the actual file at [path]. |
886 Future validate(String path) { | 888 Future validate(String path) { |
887 return _validateOneMatch(path, (file) { | 889 return _validateOneMatch(path, (file) { |
888 return readTextFile(file).then((text) { | 890 return readTextFile(file).then((text) { |
889 if (text == contents) return null; | 891 if (text == contents) return null; |
890 | 892 |
891 Expect.fail('File $file should contain:\n\n$contents\n\n' | 893 throw new ExpectException( |
892 'but contained:\n\n$text'); | 894 'File $file should contain:\n\n$contents\n\n' |
| 895 'but contained:\n\n$text'); |
893 }); | 896 }); |
894 }); | 897 }); |
895 } | 898 } |
896 | 899 |
897 /// Loads the contents of the file. | 900 /// Loads the contents of the file. |
898 InputStream load(List<String> path) { | 901 InputStream load(List<String> path) { |
899 if (!path.isEmpty) { | 902 if (!path.isEmpty) { |
900 var joinedPath = Strings.join(path, '/'); | 903 var joinedPath = Strings.join(path, '/'); |
901 throw "Can't load $joinedPath from within $name: not a directory."; | 904 throw "Can't load $joinedPath from within $name: not a directory."; |
902 } | 905 } |
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1126 | 1129 |
1127 /// A descriptor that validates that no file exists with the given name. | 1130 /// A descriptor that validates that no file exists with the given name. |
1128 class NothingDescriptor extends Descriptor { | 1131 class NothingDescriptor extends Descriptor { |
1129 NothingDescriptor(String name) : super(name); | 1132 NothingDescriptor(String name) : super(name); |
1130 | 1133 |
1131 Future create(dir) => new Future.immediate(null); | 1134 Future create(dir) => new Future.immediate(null); |
1132 Future delete(dir) => new Future.immediate(null); | 1135 Future delete(dir) => new Future.immediate(null); |
1133 | 1136 |
1134 Future validate(String dir) { | 1137 Future validate(String dir) { |
1135 return exists(join(dir, name)).then((exists) { | 1138 return exists(join(dir, name)).then((exists) { |
1136 if (exists) Expect.fail('File $name in $dir should not exist.'); | 1139 if (exists) { |
| 1140 throw new ExpectException('File $name in $dir should not exist.'); |
| 1141 } |
1137 }); | 1142 }); |
1138 } | 1143 } |
1139 | 1144 |
1140 InputStream load(List<String> path) { | 1145 InputStream load(List<String> path) { |
1141 if (path.isEmpty) { | 1146 if (path.isEmpty) { |
1142 throw "Can't load the contents of $name: it doesn't exist."; | 1147 throw "Can't load the contents of $name: it doesn't exist."; |
1143 } else { | 1148 } else { |
1144 throw "Can't load ${Strings.join(path, '/')} from within $name: $name " | 1149 throw "Can't load ${Strings.join(path, '/')} from within $name: $name " |
1145 "doesn't exist."; | 1150 "doesn't exist."; |
1146 } | 1151 } |
(...skipping 399 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1546 /// calling [completion] is unnecessary. | 1551 /// calling [completion] is unnecessary. |
1547 void expectLater(Future actual, matcher, {String reason, | 1552 void expectLater(Future actual, matcher, {String reason, |
1548 FailureHandler failureHandler, bool verbose: false}) { | 1553 FailureHandler failureHandler, bool verbose: false}) { |
1549 _schedule((_) { | 1554 _schedule((_) { |
1550 return actual.then((value) { | 1555 return actual.then((value) { |
1551 expect(value, matcher, reason: reason, failureHandler: failureHandler, | 1556 expect(value, matcher, reason: reason, failureHandler: failureHandler, |
1552 verbose: false); | 1557 verbose: false); |
1553 }); | 1558 }); |
1554 }); | 1559 }); |
1555 } | 1560 } |
OLD | NEW |