@@ -2,6 +2,7 @@ package mono
2
2
3
3
import (
4
4
"context"
5
+ "io"
5
6
"testing"
6
7
"time"
7
8
@@ -33,3 +34,87 @@ func TestMonoTimeout_SubscribeWith(t *testing.T) {
33
34
newMonoTimeout (source , 20 * time .Millisecond ).SubscribeWith (context .Background (), s )
34
35
time .Sleep (30 * time .Millisecond )
35
36
}
37
+
38
+ func TestTimeoutSubscriber (t * testing.T ) {
39
+ t .Run ("ErrorCompleteNext" , func (t * testing.T ) {
40
+ ctrl := gomock .NewController (t )
41
+ defer ctrl .Finish ()
42
+
43
+ ms := NewMockSubscription (ctrl )
44
+
45
+ ms .EXPECT ().Request (gomock .Any ()).AnyTimes ()
46
+ ms .EXPECT ().Cancel ().AnyTimes ()
47
+
48
+ msub := NewMockSubscriber (ctrl )
49
+ msub .EXPECT ().OnSubscribe (gomock .Any (), gomock .Any ()).Do (MockRequestInfinite ).Times (1 )
50
+ msub .EXPECT ().OnError (gomock .Any ()).Times (1 )
51
+ msub .EXPECT ().OnNext (gomock .Any ()).Times (0 )
52
+ msub .EXPECT ().OnComplete ().Times (0 )
53
+
54
+ sub := & timeoutSubscriber {
55
+ actual : msub ,
56
+ done : make (chan struct {}),
57
+ }
58
+
59
+ sub .OnSubscribe (context .Background (), ms )
60
+
61
+ sub .OnError (io .EOF )
62
+ sub .OnComplete ()
63
+ sub .OnNext (1 )
64
+ })
65
+
66
+ t .Run ("CompleteErrorNext" , func (t * testing.T ) {
67
+ ctrl := gomock .NewController (t )
68
+ defer ctrl .Finish ()
69
+
70
+ ms := NewMockSubscription (ctrl )
71
+
72
+ ms .EXPECT ().Request (gomock .Any ()).AnyTimes ()
73
+ ms .EXPECT ().Cancel ().AnyTimes ()
74
+
75
+ msub := NewMockSubscriber (ctrl )
76
+ msub .EXPECT ().OnSubscribe (gomock .Any (), gomock .Any ()).Do (MockRequestInfinite ).Times (1 )
77
+ msub .EXPECT ().OnError (gomock .Any ()).Times (0 )
78
+ msub .EXPECT ().OnNext (gomock .Any ()).Times (0 )
79
+ msub .EXPECT ().OnComplete ().Times (1 )
80
+
81
+ sub := & timeoutSubscriber {
82
+ actual : msub ,
83
+ done : make (chan struct {}),
84
+ }
85
+
86
+ sub .OnSubscribe (context .Background (), ms )
87
+
88
+ sub .OnComplete ()
89
+ sub .OnError (io .EOF )
90
+ sub .OnNext (1 )
91
+ })
92
+
93
+ t .Run ("NextErrorComplete" , func (t * testing.T ) {
94
+ ctrl := gomock .NewController (t )
95
+ defer ctrl .Finish ()
96
+
97
+ ms := NewMockSubscription (ctrl )
98
+
99
+ ms .EXPECT ().Request (gomock .Any ()).AnyTimes ()
100
+ ms .EXPECT ().Cancel ().AnyTimes ()
101
+
102
+ msub := NewMockSubscriber (ctrl )
103
+ msub .EXPECT ().OnSubscribe (gomock .Any (), gomock .Any ()).Do (MockRequestInfinite ).Times (1 )
104
+ msub .EXPECT ().OnError (gomock .Any ()).Times (0 )
105
+ msub .EXPECT ().OnNext (gomock .Any ()).Times (1 )
106
+ msub .EXPECT ().OnComplete ().Times (1 )
107
+
108
+ sub := & timeoutSubscriber {
109
+ actual : msub ,
110
+ done : make (chan struct {}),
111
+ }
112
+
113
+ sub .OnSubscribe (context .Background (), ms )
114
+
115
+ sub .OnNext (1 )
116
+ sub .OnError (io .EOF )
117
+ sub .OnComplete ()
118
+ })
119
+
120
+ }
0 commit comments