| // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| import 'package:collection/collection.dart'; |
| |
| import 'package:test_api/src/backend/live_test.dart'; // ignore: implementation_imports |
| |
| import 'runner_suite.dart'; |
| |
| /// A view of the execution of a test suite. |
| /// |
| /// This is distinct from [Suite] because it represents the progress of running |
| /// a suite rather than the suite's contents. It provides events and collections |
| /// that give the caller a view into the suite's current state. |
| abstract class LiveSuite { |
| /// The suite that's being run. |
| RunnerSuite get suite; |
| |
| /// Whether the suite has completed. |
| /// |
| /// Note that even if this returns `true`, the suite may still be running code |
| /// asynchronously. A suite is considered complete once all of its tests are |
| /// complete, but it's possible for a test to continue running even after it's |
| /// been marked complete—see [LiveTest.isComplete] for details. |
| /// |
| /// The [isClosed] getter can be used to determine whether the suite and its |
| /// tests are guaranteed to emit no more events. |
| bool get isComplete; |
| |
| /// A [Future] that completes once the suite is complete. |
| /// |
| /// Note that even once this completes, the suite may still be running code |
| /// asynchronously. A suite is considered complete once all of its tests are |
| /// complete, but it's possible for a test to continue running even after it's |
| /// been marked complete—see [LiveTest.isComplete] for details. |
| /// |
| /// The [onClose] future can be used to determine when the suite and its tests |
| /// are guaranteed to emit no more events. |
| Future get onComplete; |
| |
| /// Whether the suite has been closed. |
| /// |
| /// If this is `true`, no code is running for the suite or any of its tests. |
| /// At this point, the caller can be sure that the suites' tests are all in |
| /// fixed states that will not change in the future. |
| bool get isClosed; |
| |
| /// A [Future] that completes when the suite has been closed. |
| /// |
| /// Once this completes, no code is running for the suite or any of its tests. |
| /// At this point, the caller can be sure that the suites' tests are all in |
| /// fixed states that will not change in the future. |
| Future get onClose; |
| |
| /// All the currently-known tests in this suite that have run or are running. |
| /// |
| /// This is guaranteed to contain the same tests as the union of [passed], |
| /// [skipped], [failed], and [active]. |
| Set<LiveTest> get liveTests => UnionSet.from([ |
| passed, |
| skipped, |
| failed, |
| if (active != null) {active!} |
| ]); |
| |
| /// A stream that emits each [LiveTest] in this suite as it's about to start |
| /// running. |
| /// |
| /// This is guaranteed to fire before [LiveTest.onStateChange] first fires. It |
| /// will close once all tests the user has selected are run. |
| Stream<LiveTest> get onTestStarted; |
| |
| /// The set of tests in this suite that have completed and been marked as |
| /// passing. |
| Set<LiveTest> get passed; |
| |
| /// The set of tests in this suite that have completed and been marked as |
| /// skipped. |
| Set<LiveTest> get skipped; |
| |
| /// The set of tests in this suite that have completed and been marked as |
| /// failing or error. |
| Set<LiveTest> get failed; |
| |
| /// The currently running test in this suite, or `null` if no test is running. |
| LiveTest? get active; |
| } |