blob: 71710054c27a2e2eaabae5c346a7cf714b543c4a [file] [log] [blame]
// Copyright (c) 2015, 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 'dart:async';
import 'package:async/async.dart';
import 'package:stack_trace/stack_trace.dart';
import 'package:test/test.dart';
void main() {
late Completer completer;
late ResultFuture future;
setUp(() {
completer = Completer();
future = ResultFuture(completer.future);
});
test('before completion, result is null', () {
expect(future.result, isNull);
});
test('after successful completion, result is the value of the future', () {
completer.complete(12);
// The completer calls its listeners asynchronously. We have to wait
// before we can access the result.
expect(future.then((_) => future.result!.asValue!.value),
completion(equals(12)));
});
test("after an error completion, result is the future's error", () {
var trace = Trace.current();
completer.completeError('error', trace);
// The completer calls its listeners asynchronously. We have to wait
// before we can access the result.
return future.catchError((_) {}).then((_) {
var error = future.result!.asError!;
expect(error.error, equals('error'));
expect(error.stackTrace, equals(trace));
});
});
}