blob: 1343c0a99f67264ce4c1e7875766617f7d47a324 [file] [log] [blame]
// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'dart:async';
// ignore: implementation_imports
import 'package:test_api/src/backend/live_test.dart';
// ignore: implementation_imports
import 'package:test_core/src/runner/engine.dart';
// ignore: implementation_imports
import 'package:test_core/src/runner/reporter.dart';
import '../common.dart';
import 'constants.dart';
/// A reporter that plugs into [directRunTests] from `package:test_core`.
class ResultReporter implements Reporter {
/// When the [_engine] has completed execution of tests, [_resultsCompleter]
/// will be completed with the test results.
ResultReporter(this._engine, this._resultsCompleter) {
_subscriptions.add(_engine.success.asStream().listen(_onDone));
}
final Engine _engine;
final Completer<List<TestResult>> _resultsCompleter;
final Set<StreamSubscription<Object>> _subscriptions = <StreamSubscription<Object>>{};
void _onDone(bool _) {
_cancel();
final List<TestResult> results = <TestResult>[
for (final LiveTest liveTest in _engine.liveTests)
liveTest.state.result.name == success
? Success(liveTest.test.name)
: Failure(
liveTest.test.name,
null,
errors: liveTest.errors,
)
];
_resultsCompleter.complete(results);
}
void _cancel() {
for (final StreamSubscription<Object> subscription in _subscriptions) {
subscription.cancel();
}
_subscriptions.clear();
}
@override
void pause() {}
@override
void resume() {}
}