blob: 5c472118f5aec4c6e6417fa4bd2f1e37496a5e0b [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)})
/// If the error is intercepted, the handle function can decide what to do with
/// it. It can throw if it wants to raise a new (or the same) error, or simply
/// return to make the stream forget the error.
/// @description Checks that if an error is rethrown, it appears in the returned
/// stream.
/// @author a.semenov@unipro.ru
library handleError_A03_t01;
import "dart:async";
import "../../../Utils/expect.dart";
void check(Stream s, void onError(error), List data, List intercepted, List expected) {
List actualIntercepted = [];
List actualErrors = [];
List actualData = [];
asyncStart();
s.handleError(
(error) {
actualIntercepted.add(error);
onError(error);
}
).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([], defVal: 42), (e) => throw e, [], [], []);
check(create([], isError:(x) => true, defVal: 42), (e) => throw e, [], [], []);
check(create([1, 2, 3, 4, 5], isError: (x) => true, defVal: 42),
(x) => throw x, [], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5]);
check(
create(
["a", 1, "b", 2, "c", 3, "d", 4, "e", 5, "f"],
isError: (x) => x is num, defVal: 42
),
(x) { if (x.isEven) { throw x; }}, // onError function
["a", "b", "c", "d", "e", "f"], // expected data
[1, 2, 3, 4, 5], // intercepted errors
[2,4] // rethrown errors
);
check(
create(
["a", 1, "b", 2, "c", 3, "d", 4, "e", 5, "f"],
isError: (x) => x is num, defVal: 42
),
(x) { if (x.isEven) { throw x + 10; }}, // onError function
["a", "b", "c", "d", "e", "f"], // expected data
[1, 2, 3, 4, 5], // intercepted errors
[12,14] // rethrown errors
);
}