| // 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. | |
| // Test the event/callback protocol of the stream implementations. | |
| library stream_state_test; | |
| import 'package:expect/legacy/async_minitest.dart'; // ignore: deprecated_member_use | |
| import 'stream_state_helper.dart'; | |
| const ms5 = const Duration(milliseconds: 5); | |
| main() { | |
| mainTest(sync: true, asBroadcast: false); | |
| mainTest(sync: true, asBroadcast: true); | |
| mainTest(sync: false, asBroadcast: false); | |
| mainTest(sync: false, asBroadcast: true); | |
| } | |
| void terminateWithDone(t, asBroadcast) { | |
| if (asBroadcast) { | |
| t | |
| ..expectCancel() | |
| ..expectDone() | |
| ..expectBroadcastCancel((_) => t.terminate()); | |
| } else { | |
| t | |
| ..expectCancel() | |
| ..expectDone(t.terminate); | |
| } | |
| } | |
| mainTest({required bool sync, required bool asBroadcast}) { | |
| var p = (sync ? "S" : "AS") + (asBroadcast ? "BC" : "SC"); | |
| test("$p-sub-data-done", () { | |
| var t = asBroadcast | |
| ? new StreamProtocolTest.asBroadcast(sync: sync) | |
| : new StreamProtocolTest(sync: sync); | |
| t | |
| ..expectListen() | |
| ..expectBroadcastListenOpt() | |
| ..expectData(42); | |
| terminateWithDone(t, asBroadcast); | |
| t | |
| ..listen() | |
| ..add(42) | |
| ..close(); | |
| }); | |
| test("$p-data-done-sub-sync", () { | |
| var t = asBroadcast | |
| ? new StreamProtocolTest.asBroadcast(sync: sync) | |
| : new StreamProtocolTest(sync: sync); | |
| t | |
| ..expectListen() | |
| ..expectBroadcastListenOpt() | |
| ..expectData(42); | |
| terminateWithDone(t, asBroadcast); | |
| t | |
| ..add(42) | |
| ..close() | |
| ..listen(); | |
| }); | |
| test("$p-data-done-sub-async", () { | |
| var t = asBroadcast | |
| ? new StreamProtocolTest.asBroadcast(sync: sync) | |
| : new StreamProtocolTest(sync: sync); | |
| t | |
| ..expectListen() | |
| ..expectBroadcastListenOpt() | |
| ..expectData(42); | |
| terminateWithDone(t, asBroadcast); | |
| t | |
| ..add(42) | |
| ..close() | |
| ..listen(); | |
| }); | |
| test("$p-sub-data/pause+resume-done", () { | |
| var t = asBroadcast | |
| ? new StreamProtocolTest.asBroadcast(sync: sync) | |
| : new StreamProtocolTest(sync: sync); | |
| t | |
| ..expectListen() | |
| ..expectBroadcastListenOpt() | |
| ..expectData(42, () { | |
| t.pause(); | |
| t.resume(); | |
| t.close(); | |
| }); | |
| terminateWithDone(t, asBroadcast); | |
| t | |
| ..listen() | |
| ..add(42); | |
| }); | |
| test("$p-sub-data-unsubonerror", () { | |
| var t = asBroadcast | |
| ? new StreamProtocolTest.asBroadcast(sync: sync) | |
| : new StreamProtocolTest(sync: sync); | |
| if (asBroadcast) { | |
| t | |
| ..expectListen() | |
| ..expectBroadcastListen() | |
| ..expectData(42) | |
| ..expectError("bad") | |
| ..expectBroadcastCancel() | |
| ..expectCancel(t.terminate); | |
| } else { | |
| t | |
| ..expectListen() | |
| ..expectData(42) | |
| ..expectCancel() | |
| ..expectError("bad", t.terminate); | |
| } | |
| t | |
| ..listen(cancelOnError: true) | |
| ..add(42) | |
| ..error("bad") | |
| ..add(43) | |
| ..close(); | |
| }); | |
| test("$p-sub-data-no-unsubonerror", () { | |
| var t = asBroadcast | |
| ? new StreamProtocolTest.asBroadcast(sync: sync) | |
| : new StreamProtocolTest(sync: sync); | |
| t | |
| ..expectListen() | |
| ..expectBroadcastListenOpt() | |
| ..expectData(42) | |
| ..expectError("bad") | |
| ..expectData(43); | |
| terminateWithDone(t, asBroadcast); | |
| t | |
| ..listen(cancelOnError: false) | |
| ..add(42) | |
| ..error("bad") | |
| ..add(43) | |
| ..close(); | |
| }); | |
| test("$p-pause-resume-during-event", () { | |
| var t = asBroadcast | |
| ? new StreamProtocolTest.broadcast(sync: sync) | |
| : new StreamProtocolTest(sync: sync); | |
| t | |
| ..expectListen() | |
| ..expectBroadcastListenOpt() | |
| ..expectData(42, () { | |
| t.pause(); | |
| t.resume(); | |
| }); | |
| if (!asBroadcast && !sync) { | |
| t..expectPause(); | |
| } | |
| if (asBroadcast && sync) { | |
| t | |
| ..expectDone() | |
| ..expectCancel(t.terminate); | |
| } else { | |
| t | |
| ..expectCancel() | |
| ..expectDone(t.terminate); | |
| } | |
| t | |
| ..listen() | |
| ..add(42) | |
| ..close(); | |
| }); | |
| test("$p-cancel-on-data", () { | |
| var t = asBroadcast | |
| ? new StreamProtocolTest.asBroadcast(sync: sync) | |
| : new StreamProtocolTest(sync: sync); | |
| t | |
| ..expectListen() | |
| ..expectBroadcastListenOpt() | |
| ..expectData(42, t.cancel) | |
| ..expectBroadcastCancelOpt() | |
| ..expectCancel(t.terminate); | |
| t | |
| ..listen(cancelOnError: false) | |
| ..add(42) | |
| ..close(); | |
| }); | |
| test("$p-cancel-on-error", () { | |
| var t = asBroadcast | |
| ? new StreamProtocolTest.asBroadcast(sync: sync) | |
| : new StreamProtocolTest(sync: sync); | |
| t | |
| ..expectListen() | |
| ..expectBroadcastListenOpt() | |
| ..expectError(42, t.cancel) | |
| ..expectBroadcastCancelOpt() | |
| ..expectCancel(t.terminate); | |
| t | |
| ..listen(cancelOnError: false) | |
| ..error(42) | |
| ..close(); | |
| }); | |
| } |