| 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 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 112 currentSchedule.onComplete.schedule(_closeServer); | 112 currentSchedule.onComplete.schedule(_closeServer); |
| 113 return null; | 113 return null; |
| 114 }); | 114 }); |
| 115 }); | 115 }); |
| 116 }, 'starting a server serving:\n${baseDir.describe()}'); | 116 }, 'starting a server serving:\n${baseDir.describe()}'); |
| 117 } | 117 } |
| 118 | 118 |
| 119 /// Closes [_server]. Returns a [Future] that will complete after the [_server] | 119 /// Closes [_server]. Returns a [Future] that will complete after the [_server] |
| 120 /// is closed. | 120 /// is closed. |
| 121 Future _closeServer() { | 121 Future _closeServer() { |
| 122 if (_server == null) return new Future.immediate(null); | 122 if (_server == null) return new Future.value(); |
| 123 _server.close(); | 123 _server.close(); |
| 124 _server = null; | 124 _server = null; |
| 125 _portCompleterCache = null; | 125 _portCompleterCache = null; |
| 126 // TODO(nweiz): Remove this once issue 4155 is fixed. Pumping the event loop | 126 // TODO(nweiz): Remove this once issue 4155 is fixed. Pumping the event loop |
| 127 // *seems* to be enough to ensure that the server is actually closed, but I'm | 127 // *seems* to be enough to ensure that the server is actually closed, but I'm |
| 128 // putting this at 10ms to be safe. | 128 // putting this at 10ms to be safe. |
| 129 return sleep(10); | 129 return sleep(10); |
| 130 } | 130 } |
| 131 | 131 |
| 132 /// The [d.DirectoryDescriptor] describing the server layout of packages that | 132 /// The [d.DirectoryDescriptor] describing the server layout of packages that |
| (...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 349 dartBin = new File(dartBin).fullPathSync(); | 349 dartBin = new File(dartBin).fullPathSync(); |
| 350 } | 350 } |
| 351 | 351 |
| 352 // Find the main pub entrypoint. | 352 // Find the main pub entrypoint. |
| 353 var pubPath = path.join(testDirectory, '..', '..', 'pub', 'pub.dart'); | 353 var pubPath = path.join(testDirectory, '..', '..', 'pub', 'pub.dart'); |
| 354 | 354 |
| 355 var dartArgs = ['--package-root=$_packageRoot/', '--checked', pubPath, | 355 var dartArgs = ['--package-root=$_packageRoot/', '--checked', pubPath, |
| 356 '--trace']; | 356 '--trace']; |
| 357 dartArgs.addAll(args); | 357 dartArgs.addAll(args); |
| 358 | 358 |
| 359 if (tokenEndpoint == null) tokenEndpoint = new Future.immediate(null); | 359 if (tokenEndpoint == null) tokenEndpoint = new Future.value(); |
| 360 var optionsFuture = tokenEndpoint.then((tokenEndpoint) { | 360 var optionsFuture = tokenEndpoint.then((tokenEndpoint) { |
| 361 var options = new ProcessOptions(); | 361 var options = new ProcessOptions(); |
| 362 options.workingDirectory = pathInSandbox(appPath); | 362 options.workingDirectory = pathInSandbox(appPath); |
| 363 // TODO(nweiz): remove this when issue 9294 is fixed. | 363 // TODO(nweiz): remove this when issue 9294 is fixed. |
| 364 options.environment = new Map.from(Platform.environment); | 364 options.environment = new Map.from(Platform.environment); |
| 365 options.environment['PUB_CACHE'] = pathInSandbox(cachePath); | 365 options.environment['PUB_CACHE'] = pathInSandbox(cachePath); |
| 366 options.environment['DART_SDK'] = pathInSandbox(sdkPath); | 366 options.environment['DART_SDK'] = pathInSandbox(sdkPath); |
| 367 if (tokenEndpoint != null) { | 367 if (tokenEndpoint != null) { |
| 368 options.environment['_PUB_TEST_TOKEN_ENDPOINT'] = | 368 options.environment['_PUB_TEST_TOKEN_ENDPOINT'] = |
| 369 tokenEndpoint.toString(); | 369 tokenEndpoint.toString(); |
| (...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 581 /// A function that creates a [Validator] subclass. | 581 /// A function that creates a [Validator] subclass. |
| 582 typedef Validator ValidatorCreator(Entrypoint entrypoint); | 582 typedef Validator ValidatorCreator(Entrypoint entrypoint); |
| 583 | 583 |
| 584 /// Schedules a single [Validator] to run on the [appPath]. Returns a scheduled | 584 /// Schedules a single [Validator] to run on the [appPath]. Returns a scheduled |
| 585 /// Future that contains the errors and warnings produced by that validator. | 585 /// Future that contains the errors and warnings produced by that validator. |
| 586 Future<Pair<List<String>, List<String>>> schedulePackageValidation( | 586 Future<Pair<List<String>, List<String>>> schedulePackageValidation( |
| 587 ValidatorCreator fn) { | 587 ValidatorCreator fn) { |
| 588 return schedule(() { | 588 return schedule(() { |
| 589 var cache = new SystemCache.withSources(path.join(sandboxDir, cachePath)); | 589 var cache = new SystemCache.withSources(path.join(sandboxDir, cachePath)); |
| 590 | 590 |
| 591 return new Future.of(() { | 591 return new Future.sync(() { |
| 592 var validator = fn(new Entrypoint(path.join(sandboxDir, appPath), cache)); | 592 var validator = fn(new Entrypoint(path.join(sandboxDir, appPath), cache)); |
| 593 return validator.validate().then((_) { | 593 return validator.validate().then((_) { |
| 594 return new Pair(validator.errors, validator.warnings); | 594 return new Pair(validator.errors, validator.warnings); |
| 595 }); | 595 }); |
| 596 }); | 596 }); |
| 597 }, "validating package"); | 597 }, "validating package"); |
| 598 } | 598 } |
| 599 | 599 |
| 600 /// A matcher that matches a Pair. | 600 /// A matcher that matches a Pair. |
| 601 Matcher pairOf(Matcher firstMatcher, Matcher lastMatcher) => | 601 Matcher pairOf(Matcher firstMatcher, Matcher lastMatcher) => |
| 602 new _PairMatcher(firstMatcher, lastMatcher); | 602 new _PairMatcher(firstMatcher, lastMatcher); |
| 603 | 603 |
| 604 class _PairMatcher extends BaseMatcher { | 604 class _PairMatcher extends BaseMatcher { |
| 605 final Matcher _firstMatcher; | 605 final Matcher _firstMatcher; |
| 606 final Matcher _lastMatcher; | 606 final Matcher _lastMatcher; |
| 607 | 607 |
| 608 _PairMatcher(this._firstMatcher, this._lastMatcher); | 608 _PairMatcher(this._firstMatcher, this._lastMatcher); |
| 609 | 609 |
| 610 bool matches(item, MatchState matchState) { | 610 bool matches(item, MatchState matchState) { |
| 611 if (item is! Pair) return false; | 611 if (item is! Pair) return false; |
| 612 return _firstMatcher.matches(item.first, matchState) && | 612 return _firstMatcher.matches(item.first, matchState) && |
| 613 _lastMatcher.matches(item.last, matchState); | 613 _lastMatcher.matches(item.last, matchState); |
| 614 } | 614 } |
| 615 | 615 |
| 616 Description describe(Description description) { | 616 Description describe(Description description) { |
| 617 description.addAll("(", ", ", ")", [_firstMatcher, _lastMatcher]); | 617 description.addAll("(", ", ", ")", [_firstMatcher, _lastMatcher]); |
| 618 } | 618 } |
| 619 } | 619 } |
| OLD | NEW |