| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, 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. | 5 /// Test infrastructure for testing pub. |
| 6 /// | 6 /// |
| 7 /// Unlike typical unit tests, most pub tests are integration tests that stage | 7 /// Unlike typical unit tests, most pub tests are integration tests that stage |
| 8 /// some stuff on the file system, run pub, and then validate the results. This | 8 /// some stuff on the file system, run pub, and then validate the results. This |
| 9 /// library provides an API to build tests like that. | 9 /// library provides an API to build tests like that. |
| 10 library test_pub; | 10 library test_pub; |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 99 /// third_party/pkg. | 99 /// third_party/pkg. |
| 100 final _barbackDeps = { | 100 final _barbackDeps = { |
| 101 new VersionConstraint.parse("<0.15.0"): { | 101 new VersionConstraint.parse("<0.15.0"): { |
| 102 "source_maps": "0.9.4" | 102 "source_maps": "0.9.4" |
| 103 } | 103 } |
| 104 }; | 104 }; |
| 105 | 105 |
| 106 /// Populates [_barbackVersions]. | 106 /// Populates [_barbackVersions]. |
| 107 Map<Version, String> _findBarbackVersions() { | 107 Map<Version, String> _findBarbackVersions() { |
| 108 var versions = {}; | 108 var versions = {}; |
| 109 var currentBarback = p.join(repoRoot, 'pkg', 'barback'); | 109 var currentBarback = p.join(repoRoot, 'third_party', 'pkg', 'barback'); |
| 110 versions[new Pubspec.load(currentBarback, new SourceRegistry()).version] = | 110 versions[new Pubspec.load(currentBarback, new SourceRegistry()).version] = |
| 111 currentBarback; | 111 currentBarback; |
| 112 | 112 |
| 113 for (var dir in listDir(p.join(repoRoot, 'third_party', 'pkg'))) { | 113 for (var dir in listDir(p.join(repoRoot, 'third_party', 'pkg'))) { |
| 114 var basename = p.basename(dir); | 114 var basename = p.basename(dir); |
| 115 if (!basename.startsWith('barback')) continue; | 115 if (!basename.startsWith('barback-')) continue; |
| 116 versions[new Version.parse(split1(basename, '-').last)] = dir; | 116 versions[new Version.parse(split1(basename, '-').last)] = dir; |
| 117 } | 117 } |
| 118 | 118 |
| 119 return versions; | 119 return versions; |
| 120 } | 120 } |
| 121 | 121 |
| 122 /// Runs the tests in [callback] against all versions of barback in the repo | 122 /// Runs the tests in [callback] against all versions of barback in the repo |
| 123 /// that match [versionConstraint]. | 123 /// that match [versionConstraint]. |
| 124 /// | 124 /// |
| 125 /// This is used to test that pub doesn't accidentally break older versions of | 125 /// This is used to test that pub doesn't accidentally break older versions of |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 225 /// `true` if the current test spins up an HTTP server. | 225 /// `true` if the current test spins up an HTTP server. |
| 226 bool _hasServer = false; | 226 bool _hasServer = false; |
| 227 | 227 |
| 228 /// Converts [value] into a YAML string. | 228 /// Converts [value] into a YAML string. |
| 229 String yaml(value) => JSON.encode(value); | 229 String yaml(value) => JSON.encode(value); |
| 230 | 230 |
| 231 /// The full path to the created sandbox directory for an integration test. | 231 /// The full path to the created sandbox directory for an integration test. |
| 232 String get sandboxDir => _sandboxDir; | 232 String get sandboxDir => _sandboxDir; |
| 233 String _sandboxDir; | 233 String _sandboxDir; |
| 234 | 234 |
| 235 /// The path to the Dart repo's packages. | |
| 236 final String pkgPath = | |
| 237 p.absolute(p.join(p.dirname(Platform.executable), '../../../../pkg')); | |
| 238 | |
| 239 /// The path of the package cache directory used for tests, relative to the | 235 /// The path of the package cache directory used for tests, relative to the |
| 240 /// sandbox directory. | 236 /// sandbox directory. |
| 241 final String cachePath = "cache"; | 237 final String cachePath = "cache"; |
| 242 | 238 |
| 243 /// The path of the mock app directory used for tests, relative to the sandbox | 239 /// The path of the mock app directory used for tests, relative to the sandbox |
| 244 /// directory. | 240 /// directory. |
| 245 final String appPath = "myapp"; | 241 final String appPath = "myapp"; |
| 246 | 242 |
| 247 /// The path of the packages directory in the mock app used for tests, relative | 243 /// The path of the packages directory in the mock app used for tests, relative |
| 248 /// to the sandbox directory. | 244 /// to the sandbox directory. |
| (...skipping 507 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 756 if (sandbox != null) { | 752 if (sandbox != null) { |
| 757 for (var package in sandbox) { | 753 for (var package in sandbox) { |
| 758 dependencies[package] = '../$package'; | 754 dependencies[package] = '../$package'; |
| 759 } | 755 } |
| 760 } | 756 } |
| 761 | 757 |
| 762 if (pkg != null) { | 758 if (pkg != null) { |
| 763 _addPackage(String package) { | 759 _addPackage(String package) { |
| 764 if (dependencies.containsKey(package)) return; | 760 if (dependencies.containsKey(package)) return; |
| 765 | 761 |
| 766 var packagePath; | 762 var path; |
| 767 if (package == 'barback' && _packageOverrides == null) { | 763 if (package == 'barback' && _packageOverrides == null) { |
| 768 throw new StateError( | 764 throw new StateError( |
| 769 "createLockFile() can only create a lock file " | 765 "createLockFile() can only create a lock file " |
| 770 "with a barback dependency within a withBarbackVersions() " "blo
ck."); | 766 "with a barback dependency within a withBarbackVersions() " "blo
ck."); |
| 771 } | 767 } |
| 772 | 768 |
| 773 if (_packageOverrides.containsKey(package)) { | 769 if (_packageOverrides.containsKey(package)) { |
| 774 packagePath = _packageOverrides[package]; | 770 path = _packageOverrides[package]; |
| 775 } else { | 771 } else { |
| 776 packagePath = p.join(pkgPath, package); | 772 path = packagePath(package); |
| 777 } | 773 } |
| 778 | 774 |
| 779 dependencies[package] = packagePath; | 775 dependencies[package] = path; |
| 780 var pubspec = loadYaml(readTextFile(p.join(packagePath, 'pubspec.yaml'))); | 776 var pubspec = loadYaml(readTextFile(p.join(path, 'pubspec.yaml'))); |
| 781 var packageDeps = pubspec['dependencies']; | 777 var packageDeps = pubspec['dependencies']; |
| 782 if (packageDeps == null) return; | 778 if (packageDeps == null) return; |
| 783 packageDeps.keys.forEach(_addPackage); | 779 packageDeps.keys.forEach(_addPackage); |
| 784 } | 780 } |
| 785 | 781 |
| 786 pkg.forEach(_addPackage); | 782 pkg.forEach(_addPackage); |
| 787 } | 783 } |
| 788 | 784 |
| 789 var lockFile = new LockFile.empty(); | 785 var lockFile = new LockFile.empty(); |
| 790 dependencies.forEach((name, dependencyPath) { | 786 dependencies.forEach((name, dependencyPath) { |
| 791 var id = new PackageId(name, 'path', new Version(0, 0, 0), { | 787 var id = new PackageId(name, 'path', new Version(0, 0, 0), { |
| 792 'path': dependencyPath, | 788 'path': dependencyPath, |
| 793 'relative': p.isRelative(dependencyPath) | 789 'relative': p.isRelative(dependencyPath) |
| 794 }); | 790 }); |
| 795 lockFile.packages[name] = id; | 791 lockFile.packages[name] = id; |
| 796 }); | 792 }); |
| 797 | 793 |
| 798 if (hosted != null) { | 794 if (hosted != null) { |
| 799 hosted.forEach((name, version) { | 795 hosted.forEach((name, version) { |
| 800 var id = new PackageId(name, 'hosted', new Version.parse(version), name); | 796 var id = new PackageId(name, 'hosted', new Version.parse(version), name); |
| 801 lockFile.packages[name] = id; | 797 lockFile.packages[name] = id; |
| 802 }); | 798 }); |
| 803 } | 799 } |
| 804 | 800 |
| 805 return lockFile; | 801 return lockFile; |
| 806 } | 802 } |
| 807 | 803 |
| 804 /// Returns the path to [package] within the repo. |
| 805 String packagePath(String package) => |
| 806 dirExists(p.join(repoRoot, 'pkg', package)) ? |
| 807 p.join(repoRoot, 'pkg', package) : |
| 808 p.join(repoRoot, 'third_party', 'pkg', package); |
| 809 |
| 808 /// Uses [client] as the mock HTTP client for this test. | 810 /// Uses [client] as the mock HTTP client for this test. |
| 809 /// | 811 /// |
| 810 /// Note that this will only affect HTTP requests made via http.dart in the | 812 /// Note that this will only affect HTTP requests made via http.dart in the |
| 811 /// parent process. | 813 /// parent process. |
| 812 void useMockClient(MockClient client) { | 814 void useMockClient(MockClient client) { |
| 813 var oldInnerClient = innerHttpClient; | 815 var oldInnerClient = innerHttpClient; |
| 814 innerHttpClient = client; | 816 innerHttpClient = client; |
| 815 currentSchedule.onComplete.schedule(() { | 817 currentSchedule.onComplete.schedule(() { |
| 816 innerHttpClient = oldInnerClient; | 818 innerHttpClient = oldInnerClient; |
| 817 }, 'de-activating the mock client'); | 819 }, 'de-activating the mock client'); |
| (...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1003 _lastMatcher.matches(item.last, matchState); | 1005 _lastMatcher.matches(item.last, matchState); |
| 1004 } | 1006 } |
| 1005 | 1007 |
| 1006 Description describe(Description description) { | 1008 Description describe(Description description) { |
| 1007 return description.addAll("(", ", ", ")", [_firstMatcher, _lastMatcher]); | 1009 return description.addAll("(", ", ", ")", [_firstMatcher, _lastMatcher]); |
| 1008 } | 1010 } |
| 1009 } | 1011 } |
| 1010 | 1012 |
| 1011 /// A [StreamMatcher] that matches multiple lines of output. | 1013 /// A [StreamMatcher] that matches multiple lines of output. |
| 1012 StreamMatcher emitsLines(String output) => inOrder(output.split("\n")); | 1014 StreamMatcher emitsLines(String output) => inOrder(output.split("\n")); |
| OLD | NEW |