OLD | NEW |
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 // Test the basic StreamController and StreamController.singleSubscription. | 5 // Test the basic StreamController and StreamController.singleSubscription. |
6 library stream_controller_test; | 6 library stream_controller_test; |
7 | 7 |
8 import "package:expect/expect.dart"; | 8 import "package:expect/expect.dart"; |
9 import "package:async_helper/async_helper.dart"; | 9 import "package:async_helper/async_helper.dart"; |
10 import 'dart:async'; | 10 import 'dart:async'; |
(...skipping 701 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
712 }); | 712 }); |
713 asyncEnd(); | 713 asyncEnd(); |
714 }); | 714 }); |
715 } | 715 } |
716 c.add(42); | 716 c.add(42); |
717 c.addError(87); | 717 c.addError(87); |
718 } | 718 } |
719 asyncEnd(); | 719 asyncEnd(); |
720 } | 720 } |
721 | 721 |
| 722 void testSettingCallbacks() { |
| 723 const int initial = 0; |
| 724 const int running = 1; |
| 725 const int paused = 2; |
| 726 const int canceled = 3; |
| 727 |
| 728 var controller = new StreamController(); |
| 729 var stream = controller.stream; |
| 730 var state = initial; |
| 731 |
| 732 controller..onListen = () { state = running; } |
| 733 ..onPause = () { state = paused; } |
| 734 ..onResume = () { state = running; } |
| 735 ..onCancel = () { state = canceled; }; |
| 736 |
| 737 Expect.equals(initial, state); |
| 738 var sub = stream.listen(null); |
| 739 Expect.equals(running, state); |
| 740 sub.pause(); |
| 741 Expect.equals(paused, state); |
| 742 Expect.isTrue(controller.isPaused); |
| 743 sub.resume(); |
| 744 Expect.equals(running, state); |
| 745 Expect.isFalse(controller.isPaused); |
| 746 |
| 747 // Changing them later does make a difference. |
| 748 controller..onListen = () { throw "Second listen?"; } |
| 749 ..onPause = () { state = -paused; } |
| 750 ..onResume = () { state = -running; } |
| 751 ..onCancel = () { state = -canceled; }; |
| 752 |
| 753 Expect.equals(running, state); |
| 754 sub.pause(); |
| 755 Expect.equals(-paused, state); |
| 756 Expect.isTrue(controller.isPaused); |
| 757 sub.resume(); |
| 758 Expect.equals(-running, state); |
| 759 Expect.isFalse(controller.isPaused); |
| 760 sub.cancel(); |
| 761 Expect.equals(-canceled, state); |
| 762 } |
| 763 |
| 764 void testSettingNullCallbacks() { |
| 765 failCallback() => fail("Callback should not be called"); |
| 766 var controller = new StreamController(onListen: failCallback, |
| 767 onPause : failCallback, |
| 768 onResume: failCallback, |
| 769 onCancel: failCallback); |
| 770 |
| 771 var stream = controller.stream; |
| 772 |
| 773 Expect.isFalse(controller.hasListener); |
| 774 Expect.isTrue(controller.isPaused); |
| 775 |
| 776 controller.onListen = null; |
| 777 |
| 778 var sub = stream.listen(null); |
| 779 |
| 780 Expect.isTrue(controller.hasListener); |
| 781 Expect.isFalse(controller.isPaused); |
| 782 |
| 783 controller.onPause = null; |
| 784 |
| 785 sub.pause(); |
| 786 |
| 787 Expect.isTrue(controller.hasListener); |
| 788 Expect.isTrue(controller.isPaused); |
| 789 |
| 790 controller.onResume = null; |
| 791 |
| 792 sub.resume(); |
| 793 |
| 794 Expect.isTrue(controller.hasListener); |
| 795 Expect.isFalse(controller.isPaused); |
| 796 |
| 797 controller.onCancel = null; |
| 798 |
| 799 sub.cancel(); |
| 800 |
| 801 Expect.isFalse(controller.hasListener); |
| 802 Expect.isFalse(controller.isPaused); |
| 803 } |
| 804 |
| 805 void testBroadcastSettingCallbacks() { |
| 806 const int initial = 0; |
| 807 const int running = 1; |
| 808 const int canceled = 2; |
| 809 |
| 810 var controller = new StreamController.broadcast(); |
| 811 var stream = controller.stream; |
| 812 var state = initial; |
| 813 |
| 814 Expect.throws(() { controller.onPause = (){}; }, |
| 815 (e) => e is UnsupportedError); |
| 816 Expect.throws(() { controller.onResume = (){}; }, |
| 817 (e) => e is UnsupportedError); |
| 818 |
| 819 controller..onListen = () { state = running; } |
| 820 ..onCancel = () { state = canceled; }; |
| 821 |
| 822 Expect.equals(initial, state); |
| 823 var sub = stream.listen(null); |
| 824 Expect.equals(running, state); |
| 825 sub.cancel(); |
| 826 Expect.equals(canceled, state); |
| 827 |
| 828 // Changing them later does make a difference. |
| 829 controller..onListen = () { state = -running; } |
| 830 ..onCancel = () { state = -canceled; }; |
| 831 |
| 832 var sub2 = stream.listen(null); |
| 833 Expect.equals(-running, state); |
| 834 sub2.cancel(); |
| 835 Expect.equals(-canceled, state); |
| 836 } |
| 837 |
| 838 void testBroadcastSettingNullCallbacks() { |
| 839 failCallback() => fail("Callback should not be called"); |
| 840 var controller = new StreamController.broadcast(onListen: failCallback, |
| 841 onCancel: failCallback); |
| 842 |
| 843 var stream = controller.stream; |
| 844 |
| 845 Expect.isFalse(controller.hasListener); |
| 846 |
| 847 controller.onListen = null; |
| 848 |
| 849 var sub = stream.listen(null); |
| 850 |
| 851 Expect.isTrue(controller.hasListener); |
| 852 |
| 853 controller.onCancel = null; |
| 854 |
| 855 sub.cancel(); |
| 856 |
| 857 Expect.isFalse(controller.hasListener); |
| 858 } |
| 859 |
722 main() { | 860 main() { |
723 asyncStart(); | 861 asyncStart(); |
724 testMultiController(); | 862 testMultiController(); |
725 testSingleController(); | 863 testSingleController(); |
726 testExtraMethods(); | 864 testExtraMethods(); |
727 testClosed(); | 865 testClosed(); |
728 testCloseFuture(); | 866 testCloseFuture(); |
729 testCloseFuture2(); | 867 testCloseFuture2(); |
730 testCloseFuture3(); | 868 testCloseFuture3(); |
731 testStreamEquals(); | 869 testStreamEquals(); |
732 testCancelThrow(); | 870 testCancelThrow(); |
733 testCancelThrow2(); | 871 testCancelThrow2(); |
734 testCancelThrow3(); | 872 testCancelThrow3(); |
735 testBroadcastListenAfterClose(); | 873 testBroadcastListenAfterClose(); |
736 testBroadcastListenAfterClosePaused(); | 874 testBroadcastListenAfterClosePaused(); |
737 testAsBroadcastListenAfterClose(); | 875 testAsBroadcastListenAfterClose(); |
738 testAsBroadcastListenAfterClosePaused(); | 876 testAsBroadcastListenAfterClosePaused(); |
739 testEventInListen(); | 877 testEventInListen(); |
740 testSyncControllerNotReentrant(); | 878 testSyncControllerNotReentrant(); |
| 879 testSettingCallbacks(); |
| 880 testSettingNullCallbacks(); |
| 881 testBroadcastSettingCallbacks(); |
| 882 testBroadcastSettingNullCallbacks(); |
741 asyncEnd(); | 883 asyncEnd(); |
742 } | 884 } |
OLD | NEW |