Chromium Code Reviews| 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. 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 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 211 | 211 |
| 212 /// A map from package names to parsed pubspec maps for those packages. This | 212 /// A map from package names to parsed pubspec maps for those packages. This |
| 213 /// represents the packages currently being served by [servePackages], and is | 213 /// represents the packages currently being served by [servePackages], and is |
| 214 /// `null` if [servePackages] has not yet been called for this test. | 214 /// `null` if [servePackages] has not yet been called for this test. |
| 215 Map<String, List<Map>> _servedPackages; | 215 Map<String, List<Map>> _servedPackages; |
| 216 | 216 |
| 217 /// Creates an HTTP server that replicates the structure of pub.dartlang.org. | 217 /// Creates an HTTP server that replicates the structure of pub.dartlang.org. |
| 218 /// [pubspecs] is a list of unserialized pubspecs representing the packages to | 218 /// [pubspecs] is a list of unserialized pubspecs representing the packages to |
| 219 /// serve. | 219 /// serve. |
| 220 /// | 220 /// |
| 221 /// Subsequent calls to [servePackages] will add to the set of packages that | 221 /// If [overwrite] is false, subsequent calls to [servePackages] will add to the |
| 222 /// are being served. Previous packages will continue to be served. | 222 /// set of packages that are being served. Previous packages will continue to be |
| 223 void servePackages(List<Map> pubspecs) { | 223 /// served. Otherwise, the previous packages will no longer be served. |
| 224 void servePackages(List<Map> pubspecs, {bool overwrite: false}) { | |
|
Bob Nystrom
2014/06/17 20:09:26
overwrite -> replace.
nweiz
2014/06/17 21:12:45
Done.
| |
| 224 if (_servedPackages == null || _servedPackageDir == null) { | 225 if (_servedPackages == null || _servedPackageDir == null) { |
| 225 _servedPackages = <String, List<Map>>{}; | 226 _servedPackages = <String, List<Map>>{}; |
| 226 _servedApiPackageDir = d.dir('packages', []); | 227 _servedApiPackageDir = d.dir('packages', []); |
| 227 _servedPackageDir = d.dir('packages', []); | 228 _servedPackageDir = d.dir('packages', []); |
| 228 serve([ | 229 serve([ |
| 229 d.dir('api', [_servedApiPackageDir]), | 230 d.dir('api', [_servedApiPackageDir]), |
| 230 _servedPackageDir | 231 _servedPackageDir |
| 231 ]); | 232 ]); |
| 232 | 233 |
| 233 currentSchedule.onComplete.schedule(() { | 234 currentSchedule.onComplete.schedule(() { |
| 234 _servedPackages = null; | 235 _servedPackages = null; |
| 235 _servedApiPackageDir = null; | 236 _servedApiPackageDir = null; |
| 236 _servedPackageDir = null; | 237 _servedPackageDir = null; |
| 237 }, 'cleaning up served packages'); | 238 }, 'cleaning up served packages'); |
| 238 } | 239 } |
| 239 | 240 |
| 240 schedule(() { | 241 schedule(() { |
| 241 return awaitObject(pubspecs).then((resolvedPubspecs) { | 242 return awaitObject(pubspecs).then((resolvedPubspecs) { |
| 243 if (overwrite) _servedPackages.clear(); | |
| 244 | |
| 242 for (var spec in resolvedPubspecs) { | 245 for (var spec in resolvedPubspecs) { |
| 243 var name = spec['name']; | 246 var name = spec['name']; |
| 244 var version = spec['version']; | 247 var version = spec['version']; |
| 245 var versions = _servedPackages.putIfAbsent(name, () => []); | 248 var versions = _servedPackages.putIfAbsent(name, () => []); |
| 246 versions.add(spec); | 249 versions.add(spec); |
| 247 } | 250 } |
| 248 | 251 |
| 249 _servedApiPackageDir.contents.clear(); | 252 _servedApiPackageDir.contents.clear(); |
| 250 _servedPackageDir.contents.clear(); | 253 _servedPackageDir.contents.clear(); |
| 251 for (var name in _servedPackages.keys) { | 254 for (var name in _servedPackages.keys) { |
| (...skipping 656 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 908 _lastMatcher.matches(item.last, matchState); | 911 _lastMatcher.matches(item.last, matchState); |
| 909 } | 912 } |
| 910 | 913 |
| 911 Description describe(Description description) { | 914 Description describe(Description description) { |
| 912 return description.addAll("(", ", ", ")", [_firstMatcher, _lastMatcher]); | 915 return description.addAll("(", ", ", ")", [_firstMatcher, _lastMatcher]); |
| 913 } | 916 } |
| 914 } | 917 } |
| 915 | 918 |
| 916 /// A [StreamMatcher] that matches multiple lines of output. | 919 /// A [StreamMatcher] that matches multiple lines of output. |
| 917 StreamMatcher emitsLines(String output) => inOrder(output.split("\n")); | 920 StreamMatcher emitsLines(String output) => inOrder(output.split("\n")); |
| OLD | NEW |