| OLD | NEW | 
|---|
| 1 // Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file | 1 // Copyright (c) 2015, 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 import 'dart:async'; | 5 import 'dart:async'; | 
| 6 import 'dart:collection'; | 6 import 'dart:collection'; | 
| 7 | 7 | 
| 8 import 'package:async/async.dart' hide Result; | 8 import 'package:async/async.dart' hide Result; | 
| 9 import 'package:collection/collection.dart'; | 9 import 'package:collection/collection.dart'; | 
| 10 import 'package:pool/pool.dart'; | 10 import 'package:pool/pool.dart'; | 
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 66 | 66 | 
| 67   /// A pool that limits the number of test suites running concurrently. | 67   /// A pool that limits the number of test suites running concurrently. | 
| 68   final Pool _runPool; | 68   final Pool _runPool; | 
| 69 | 69 | 
| 70   /// A pool that limits the number of test suites loaded concurrently. | 70   /// A pool that limits the number of test suites loaded concurrently. | 
| 71   /// | 71   /// | 
| 72   /// Once this reaches its limit, loading any additional test suites will cause | 72   /// Once this reaches its limit, loading any additional test suites will cause | 
| 73   /// previous suites to be unloaded in the order they completed. | 73   /// previous suites to be unloaded in the order they completed. | 
| 74   final Pool _loadPool; | 74   final Pool _loadPool; | 
| 75 | 75 | 
| 76   /// Whether all tests passed. | 76   /// Whether all tests passed or were skipped. | 
| 77   /// | 77   /// | 
| 78   /// This fires once all tests have completed and [suiteSink] has been closed. | 78   /// This fires once all tests have completed and [suiteSink] has been closed. | 
| 79   /// This will be `null` if [close] was called before all the tests finished | 79   /// This will be `null` if [close] was called before all the tests finished | 
| 80   /// running. | 80   /// running. | 
| 81   Future<bool> get success async { | 81   Future<bool> get success async { | 
| 82     await _group.future; | 82     await _group.future; | 
| 83     if (_closedBeforeDone) return null; | 83     if (_closedBeforeDone) return null; | 
| 84     return liveTests.every((liveTest) => | 84     return liveTests.every((liveTest) => liveTest.state.result.isPassing); | 
| 85         liveTest.state.result == Result.success); |  | 
| 86   } | 85   } | 
| 87 | 86 | 
| 88   /// A group of futures for each test suite. | 87   /// A group of futures for each test suite. | 
| 89   final _group = new FutureGroup(); | 88   final _group = new FutureGroup(); | 
| 90 | 89 | 
| 91   /// A sink used to pass [RunnerSuite]s in to the engine to run. | 90   /// A sink used to pass [RunnerSuite]s in to the engine to run. | 
| 92   /// | 91   /// | 
| 93   /// Suites may be added as quickly as they're available; the Engine will only | 92   /// Suites may be added as quickly as they're available; the Engine will only | 
| 94   /// run as many as necessary at a time based on its concurrency settings. | 93   /// run as many as necessary at a time based on its concurrency settings. | 
| 95   /// | 94   /// | 
| (...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 279       if (group.metadata.skip) { | 278       if (group.metadata.skip) { | 
| 280         await _runSkippedTest(suiteController, group, parents); | 279         await _runSkippedTest(suiteController, group, parents); | 
| 281         return; | 280         return; | 
| 282       } | 281       } | 
| 283 | 282 | 
| 284       var setUpAllSucceeded = true; | 283       var setUpAllSucceeded = true; | 
| 285       if (group.setUpAll != null) { | 284       if (group.setUpAll != null) { | 
| 286         var liveTest = group.setUpAll.load(suiteController.liveSuite.suite, | 285         var liveTest = group.setUpAll.load(suiteController.liveSuite.suite, | 
| 287             groups: parents); | 286             groups: parents); | 
| 288         await _runLiveTest(suiteController, liveTest, countSuccess: false); | 287         await _runLiveTest(suiteController, liveTest, countSuccess: false); | 
| 289         setUpAllSucceeded = liveTest.state.result == Result.success; | 288         setUpAllSucceeded = liveTest.state.result.isPassing; | 
| 290       } | 289       } | 
| 291 | 290 | 
| 292       if (!_closed && setUpAllSucceeded) { | 291       if (!_closed && setUpAllSucceeded) { | 
| 293         for (var entry in group.entries) { | 292         for (var entry in group.entries) { | 
| 294           if (_closed) return; | 293           if (_closed) return; | 
| 295 | 294 | 
| 296           if (entry is Group) { | 295           if (entry is Group) { | 
| 297             await _runGroup(suiteController, entry, parents); | 296             await _runGroup(suiteController, entry, parents); | 
| 298           } else if (entry.metadata.skip) { | 297           } else if (entry.metadata.skip) { | 
| 299             await _runSkippedTest(suiteController, entry, parents); | 298             await _runSkippedTest(suiteController, entry, parents); | 
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 365   Future _runSkippedTest(LiveSuiteController suiteController, GroupEntry entry, | 364   Future _runSkippedTest(LiveSuiteController suiteController, GroupEntry entry, | 
| 366       List<Group> parents) { | 365       List<Group> parents) { | 
| 367     // The netry name will be `null` for the root group. | 366     // The netry name will be `null` for the root group. | 
| 368     var test = new LocalTest(entry.name ?? "(suite)", entry.metadata, () {}, | 367     var test = new LocalTest(entry.name ?? "(suite)", entry.metadata, () {}, | 
| 369         trace: entry.trace); | 368         trace: entry.trace); | 
| 370 | 369 | 
| 371     var controller; | 370     var controller; | 
| 372     controller = new LiveTestController( | 371     controller = new LiveTestController( | 
| 373         suiteController.liveSuite.suite, test, () { | 372         suiteController.liveSuite.suite, test, () { | 
| 374       controller.setState(const State(Status.running, Result.success)); | 373       controller.setState(const State(Status.running, Result.success)); | 
| 375       controller.setState(const State(Status.complete, Result.success)); | 374       controller.setState(const State(Status.running, Result.skipped)); | 
|  | 375       controller.setState(const State(Status.complete, Result.skipped)); | 
| 376       controller.completer.complete(); | 376       controller.completer.complete(); | 
| 377     }, () {}, groups: parents); | 377     }, () {}, groups: parents); | 
| 378 | 378 | 
| 379     return _runLiveTest(suiteController, controller.liveTest); | 379     return _runLiveTest(suiteController, controller.liveTest); | 
| 380   } | 380   } | 
| 381 | 381 | 
| 382   /// Closes [liveTest] and tells the engine to re-run it once it's done | 382   /// Closes [liveTest] and tells the engine to re-run it once it's done | 
| 383   /// running. | 383   /// running. | 
| 384   /// | 384   /// | 
| 385   /// Returns the same future as [LiveTest.close]. | 385   /// Returns the same future as [LiveTest.close]. | 
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 481     var futures = allLiveTests.map((liveTest) => liveTest.close()).toList(); | 481     var futures = allLiveTests.map((liveTest) => liveTest.close()).toList(); | 
| 482 | 482 | 
| 483     // Closing the load pool will close the test suites as soon as their tests | 483     // Closing the load pool will close the test suites as soon as their tests | 
| 484     // are done. For browser suites this is effectively immediate since their | 484     // are done. For browser suites this is effectively immediate since their | 
| 485     // tests shut down as soon as they're closed, but for VM suites we may need | 485     // tests shut down as soon as they're closed, but for VM suites we may need | 
| 486     // to wait for tearDowns or tearDownAlls to run. | 486     // to wait for tearDowns or tearDownAlls to run. | 
| 487     futures.add(_loadPool.close()); | 487     futures.add(_loadPool.close()); | 
| 488     await Future.wait(futures, eagerError: true); | 488     await Future.wait(futures, eagerError: true); | 
| 489   } | 489   } | 
| 490 } | 490 } | 
| OLD | NEW | 
|---|