33
33
import org .mockito .InOrder ;
34
34
import org .mockito .Mock ;
35
35
import org .mockito .MockitoAnnotations ;
36
+ import org .mockito .invocation .InvocationOnMock ;
37
+ import org .mockito .stubbing .Answer ;
36
38
37
39
import rx .Observable .OnSubscribeFunc ;
38
40
import rx .schedulers .TestScheduler ;
41
43
import rx .subscriptions .Subscriptions ;
42
44
import rx .util .functions .Action0 ;
43
45
import rx .util .functions .Action1 ;
46
+ import rx .util .functions .Func0 ;
44
47
import rx .util .functions .Func1 ;
45
48
import rx .util .functions .Func2 ;
46
49
@@ -947,4 +950,128 @@ public void testRangeWithScheduler() {
947
950
inOrder .verify (aObserver , times (1 )).onCompleted ();
948
951
inOrder .verifyNoMoreInteractions ();
949
952
}
950
- }
953
+
954
+ @ Test
955
+ public void testStartWithFunc () {
956
+ Func0 <String > func = new Func0 <String >() {
957
+ @ Override
958
+ public String call () {
959
+ return "one" ;
960
+ }
961
+ };
962
+ assertEquals ("one" , Observable .start (func ).toBlockingObservable ().single ());
963
+ }
964
+
965
+ @ Test (expected = RuntimeException .class )
966
+ public void testStartWithFuncError () {
967
+ Func0 <String > func = new Func0 <String >() {
968
+ @ Override
969
+ public String call () {
970
+ throw new RuntimeException ("Some error" );
971
+ }
972
+ };
973
+ Observable .start (func ).toBlockingObservable ().single ();
974
+ }
975
+
976
+ @ Test
977
+ public void testStartWhenSubscribeRunBeforeFunc () {
978
+ TestScheduler scheduler = new TestScheduler ();
979
+
980
+ Func0 <String > func = new Func0 <String >() {
981
+ @ Override
982
+ public String call () {
983
+ return "one" ;
984
+ }
985
+ };
986
+
987
+ Observable <String > observable = Observable .start (func , scheduler );
988
+
989
+ @ SuppressWarnings ("unchecked" )
990
+ Observer <String > observer = mock (Observer .class );
991
+ observable .subscribe (observer );
992
+
993
+ InOrder inOrder = inOrder (observer );
994
+ inOrder .verifyNoMoreInteractions ();
995
+
996
+ // Run func
997
+ scheduler .advanceTimeBy (100 , TimeUnit .MILLISECONDS );
998
+
999
+ inOrder .verify (observer , times (1 )).onNext ("one" );
1000
+ inOrder .verify (observer , times (1 )).onCompleted ();
1001
+ inOrder .verifyNoMoreInteractions ();
1002
+ }
1003
+
1004
+ @ Test
1005
+ public void testStartWhenSubscribeRunAfterFunc () {
1006
+ TestScheduler scheduler = new TestScheduler ();
1007
+
1008
+ Func0 <String > func = new Func0 <String >() {
1009
+ @ Override
1010
+ public String call () {
1011
+ return "one" ;
1012
+ }
1013
+ };
1014
+
1015
+ Observable <String > observable = Observable .start (func , scheduler );
1016
+
1017
+ // Run func
1018
+ scheduler .advanceTimeBy (100 , TimeUnit .MILLISECONDS );
1019
+
1020
+ @ SuppressWarnings ("unchecked" )
1021
+ Observer <String > observer = mock (Observer .class );
1022
+ observable .subscribe (observer );
1023
+
1024
+ InOrder inOrder = inOrder (observer );
1025
+ inOrder .verify (observer , times (1 )).onNext ("one" );
1026
+ inOrder .verify (observer , times (1 )).onCompleted ();
1027
+ inOrder .verifyNoMoreInteractions ();
1028
+ }
1029
+
1030
+ @ Test
1031
+ public void testStartWithFuncAndMultipleObservers () {
1032
+ TestScheduler scheduler = new TestScheduler ();
1033
+
1034
+ @ SuppressWarnings ("unchecked" )
1035
+ Func0 <String > func = (Func0 <String >) mock (Func0 .class );
1036
+ doAnswer (new Answer <String >() {
1037
+ @ Override
1038
+ public String answer (InvocationOnMock invocation ) throws Throwable {
1039
+ return "one" ;
1040
+ }
1041
+ }).when (func ).call ();
1042
+
1043
+ Observable <String > observable = Observable .start (func , scheduler );
1044
+
1045
+ scheduler .advanceTimeBy (100 , TimeUnit .MILLISECONDS );
1046
+
1047
+ @ SuppressWarnings ("unchecked" )
1048
+ Observer <String > observer1 = mock (Observer .class );
1049
+ @ SuppressWarnings ("unchecked" )
1050
+ Observer <String > observer2 = mock (Observer .class );
1051
+ @ SuppressWarnings ("unchecked" )
1052
+ Observer <String > observer3 = mock (Observer .class );
1053
+
1054
+ observable .subscribe (observer1 );
1055
+ observable .subscribe (observer2 );
1056
+ observable .subscribe (observer3 );
1057
+
1058
+ InOrder inOrder ;
1059
+ inOrder = inOrder (observer1 );
1060
+ inOrder .verify (observer1 , times (1 )).onNext ("one" );
1061
+ inOrder .verify (observer1 , times (1 )).onCompleted ();
1062
+ inOrder .verifyNoMoreInteractions ();
1063
+
1064
+ inOrder = inOrder (observer2 );
1065
+ inOrder .verify (observer2 , times (1 )).onNext ("one" );
1066
+ inOrder .verify (observer2 , times (1 )).onCompleted ();
1067
+ inOrder .verifyNoMoreInteractions ();
1068
+
1069
+ inOrder = inOrder (observer3 );
1070
+ inOrder .verify (observer3 , times (1 )).onNext ("one" );
1071
+ inOrder .verify (observer3 , times (1 )).onCompleted ();
1072
+ inOrder .verifyNoMoreInteractions ();
1073
+
1074
+ verify (func , times (1 )).call ();
1075
+ }
1076
+
1077
+ }
0 commit comments