blob: 53aa23cef9f050aa59a074243dcb33587772ab64 [file] [log] [blame]
// Copyright (c) 2011, 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.
/// @assertion Stream<T> handleError(Function onError, {bool test(error)})
/// Creates a wrapper Stream that intercepts some errors from this stream.
/// If this stream sends an error that matches test, then it is intercepted by
/// the onError function.
/// An asynchronous error e is matched by a test function if test(e) returns
/// true.
/// @description Checks that an error e intercepted by [onError] function
/// if test(e) returns true.
/// @author a.semenov@unipro.ru
library handleError_A01_t01;
import "dart:async";
import "../../../Utils/expect.dart";
void check(
Stream s, bool test(error), List data, List intercepted, List expected) {
List actualIntercepted = [];
List actualErrors = [];
List actualData = [];
asyncStart();
s.handleError((error) => actualIntercepted.add(error), test: test).listen(
(data) {
actualData.add(data);
}, onError: (error) {
actualErrors.add(error);
}, onDone: () {
Expect.listEquals(data, actualData);
Expect.listEquals(intercepted, actualIntercepted);
Expect.listEquals(expected, actualErrors);
asyncEnd();
});
}
void test(CreateStreamWithErrorsFunction create) {
check(create([], defaultValue: 42), (x) => true, [], [], []);
check(create([], isError: (x) => true, defaultValue: 42),
(x) => true, [], [], []);
check(create([1, 2, 3, 4, 5], isError: (x) => true, defaultValue: 42),
(x) => x.isEven, [], [2, 4], [1, 3, 5]);
check(
create(["a", 1, "b", 2, "c", 3, "d", 4, "e", 5, "f"],
isError: (x) => x is int, defaultValue: 42),
(x) => (x is int && x.isEven), // test function
["a", "b", "c", "d", "e", "f"], // expected data
[2, 4], // intercepted errors
[1, 3, 5] // passed through errors
);
}