8e2f9fe2a4
R=nweiz@google.com Review URL: https://codereview.chromium.org//15128002 git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@22642 260f80e4-7a28-3924-810f-c04153c831b5
136 lines
3.9 KiB
Dart
136 lines
3.9 KiB
Dart
// Copyright (c) 2013, 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.
|
|
|
|
library value_future_test;
|
|
|
|
import 'dart:async';
|
|
|
|
import 'package:scheduled_test/src/value_future.dart';
|
|
import 'package:unittest/unittest.dart';
|
|
|
|
void main() {
|
|
group('works like a normal Future for', () {
|
|
var completer;
|
|
var future;
|
|
|
|
setUp(() {
|
|
completer = new Completer();
|
|
future = new ValueFuture(completer.future);
|
|
});
|
|
|
|
test('.asStream on success', () {
|
|
expect(future.asStream().toList(), completion(equals(['success'])));
|
|
completer.complete('success');
|
|
});
|
|
|
|
test('.asStream on error', () {
|
|
expect(future.asStream().toList(), throwsA(equals('error')));
|
|
completer.completeError('error');
|
|
});
|
|
|
|
test('.then and .catchError on success', () {
|
|
expect(future.then((v) => "transformed $v")
|
|
.catchError((error) => "caught ${error}"),
|
|
completion(equals('transformed success')));
|
|
completer.complete('success');
|
|
});
|
|
|
|
test('.then and .catchError on error', () {
|
|
expect(future.then((v) => "transformed $v")
|
|
.catchError((error) => "caught ${error}"),
|
|
completion(equals('caught error')));
|
|
completer.completeError('error');
|
|
});
|
|
|
|
test('.then with onError on success', () {
|
|
expect(future.then((v) => "transformed $v",
|
|
onError: (error) => "caught ${error}"),
|
|
completion(equals('transformed success')));
|
|
completer.complete('success');
|
|
});
|
|
|
|
test('.then with onError on error', () {
|
|
expect(future.then((v) => "transformed $v",
|
|
onError: (error) => "caught ${error}"),
|
|
completion(equals('caught error')));
|
|
completer.completeError('error');
|
|
});
|
|
|
|
test('.whenComplete on success', () {
|
|
expect(future.whenComplete(() {
|
|
throw 'whenComplete';
|
|
}), throwsA(equals('whenComplete')));
|
|
completer.complete('success');
|
|
});
|
|
|
|
test('.whenComplete on error', () {
|
|
expect(future.whenComplete(() {
|
|
throw 'whenComplete';
|
|
}), throwsA(equals('whenComplete')));
|
|
completer.completeError('error');
|
|
});
|
|
});
|
|
|
|
group('before completion', () {
|
|
var future;
|
|
|
|
setUp(() {
|
|
future = new ValueFuture(new Completer().future);
|
|
});
|
|
|
|
test('.value is null', () {
|
|
expect(future.value, isNull);
|
|
});
|
|
|
|
test('.hasValue is false', () {
|
|
expect(future.hasValue, isFalse);
|
|
});
|
|
});
|
|
|
|
group('after successful completion', () {
|
|
var future;
|
|
|
|
setUp(() {
|
|
var completer = new Completer();
|
|
future = new ValueFuture(completer.future);
|
|
completer.complete(12);
|
|
});
|
|
|
|
test('.value is the result of the future', () {
|
|
// The completer calls its listeners asynchronously. We have to wait
|
|
// before we can access the value of the ValueFuture.
|
|
expect(future.then((_) => future.value), completion(equals(12)));
|
|
});
|
|
|
|
test('.hasValue is true', () {
|
|
// The completer calls its listeners asynchronously. We have to wait
|
|
// before we can access the value of the ValueFuture.
|
|
expect(future.then((_) => future.hasValue), completion(isTrue));
|
|
});
|
|
});
|
|
|
|
group('after an error completion', () {
|
|
var future;
|
|
// Since the completer completes asynchronously we need to wait before the
|
|
// ValueFuture has a value. The safeFuture will execute its callback when
|
|
// this is the case.
|
|
var safeFuture;
|
|
|
|
setUp(() {
|
|
var completer = new Completer();
|
|
future = new ValueFuture(completer.future);
|
|
safeFuture = future.catchError((e) {});
|
|
completer.completeError('bad');
|
|
});
|
|
|
|
test('.value is null', () {
|
|
expect(safeFuture.then((_) => future.value), completion(isNull));
|
|
});
|
|
|
|
test('.hasValue is false', () {
|
|
expect(safeFuture.then((_) => future.hasValue), completion(isFalse));
|
|
});
|
|
});
|
|
}
|