dart-sdk/tests/lib/async/stream_transformer_from_handlers_test.dart
Robert Nystrom a2b556b937 Migrate lib_2/async to NNBD.
Change-Id: Ia5c41dda6503e1fbb8cc6099835d07588425e2ba
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/128310
Commit-Queue: Bob Nystrom <rnystrom@google.com>
Auto-Submit: Bob Nystrom <rnystrom@google.com>
Reviewed-by: Lasse R.H. Nielsen <lrn@google.com>
2020-01-09 22:04:37 +00:00

61 lines
1.6 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.
import 'package:expect/expect.dart';
import 'package:async_helper/async_helper.dart';
import 'dart:async';
import 'event_helper.dart';
get currentStackTrace {
try {
throw 0;
} catch (e, st) {
return st;
}
}
// In most cases the callback will be 'asyncEnd'. Errors are reported
// asynchronously. We want to give them time to surface before reporting
// asynchronous tests as done.
void delayCycles(callback, int nbCycles) {
if (nbCycles == 0) {
callback();
return;
}
Timer.run(() {
delayCycles(callback, nbCycles - 1);
});
}
main() {
// Make sure the generic types are correct.
asyncStart();
var stackTrace = currentStackTrace;
var events = [];
var controller;
controller = new StreamController<int>(onListen: () {
controller.add(499);
controller.addError(42, stackTrace);
controller.close();
});
controller.stream
.transform(new StreamTransformer<int, String>.fromHandlers(
handleData: (int data, EventSink<String> sink) {
sink.add(data.toString());
}, handleError: (e, st, EventSink<String> sink) {
sink.add(e.toString());
sink.addError(e, st);
}, handleDone: (EventSink<String> sink) {
sink.add("done");
sink.close();
}))
.listen((data) => events.add(data), onError: (e, st) {
events.add(e);
events.add(st);
}, onDone: () {
Expect.listEquals(["499", "42", 42, stackTrace, "done"], events);
delayCycles(asyncEnd, 3);
});
}