blob: 53637741d6af7a1a9f8556df3fe4a14fd43208ac [file] [log] [blame]
// 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);
});
}