| Index: tests/lib_strong/async/stream_transform_test.dart
 | 
| diff --git a/tests/lib_strong/async/stream_transform_test.dart b/tests/lib_strong/async/stream_transform_test.dart
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..15e21d1169f24f6e23d71cda96d75eeb02d111b2
 | 
| --- /dev/null
 | 
| +++ b/tests/lib_strong/async/stream_transform_test.dart
 | 
| @@ -0,0 +1,62 @@
 | 
| +// 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.
 | 
| +
 | 
| +library stream_transform_test;
 | 
| +
 | 
| +import "package:expect/expect.dart";
 | 
| +import 'dart:async';
 | 
| +import 'package:unittest/unittest.dart';
 | 
| +import 'event_helper.dart';
 | 
| +
 | 
| +
 | 
| +main() {
 | 
| +  // Regression tests for http://dartbug.com/8310 and 8311
 | 
| +
 | 
| +  test("simpleDone", () {
 | 
| +    StreamController c = new StreamController(sync: true);
 | 
| +    Stream out = c.stream.handleError((x){}).handleError((x){});
 | 
| +    out.listen((v){}, onDone: expectAsync(() {}));
 | 
| +    // Should not throw.
 | 
| +    c.close();
 | 
| +  });
 | 
| +
 | 
| +  test("with events", () {
 | 
| +    StreamController c = new StreamController(sync: true);
 | 
| +    Events expected = new Events.fromIterable([10, 12]);
 | 
| +    Events input = new Events.fromIterable([1, 2, 3, 4, 5, 6, 7]);
 | 
| +    Events actual = new Events.capture(
 | 
| +        c.stream.map((x) => x * 2).where((x) => x > 5).skip(2).take(2));
 | 
| +    actual.onDone(expectAsync(() {
 | 
| +      Expect.listEquals(expected.events, actual.events);
 | 
| +    }));
 | 
| +    input.replay(c);
 | 
| +  });
 | 
| +
 | 
| +  test("paused events", () {
 | 
| +    StreamController c = new StreamController(sync: true);
 | 
| +    Events expected = new Events.fromIterable([10, 12]);
 | 
| +    Events input = new Events.fromIterable([1, 2, 3, 4, 5, 6, 7]);
 | 
| +    Events actual = new Events.capture(
 | 
| +        c.stream.map((x) => x * 2).where((x) => x > 5).skip(2).take(2));
 | 
| +    actual.onDone(expectAsync(() {
 | 
| +      Expect.listEquals(expected.events, actual.events);
 | 
| +    }));
 | 
| +    actual.pause();
 | 
| +    input.replay(c);
 | 
| +    actual.resume();
 | 
| +  });
 | 
| +
 | 
| +  test("closing after done", () {
 | 
| +    var controller = new StreamController(sync: true);
 | 
| +    controller.stream.map((e) => e)
 | 
| +      .transform(new StreamTransformer.fromHandlers(
 | 
| +                     handleData: (element, sink) { sink.add(element); },
 | 
| +                     handleDone: (sink) { sink.close(); }))
 | 
| +      .listen(expectAsync((e) => expect(e, equals("foo"))));
 | 
| +
 | 
| +    controller.add("foo");
 | 
| +    // Should not crash.
 | 
| +    controller.close();
 | 
| +  });
 | 
| +}
 | 
| 
 |