31
31
import static org .mockito .Mockito .never ;
32
32
import static org .mockito .Mockito .times ;
33
33
import static org .mockito .Mockito .verify ;
34
+ import static rx .testing .TrustedObservableTester .assertTrustedObservable ;
34
35
35
36
/**
36
37
* Returns a specified number of contiguous values from the start of an observable sequence.
@@ -97,12 +98,16 @@ public ItemObserver(Observer<T> observer) {
97
98
98
99
@ Override
99
100
public void onCompleted () {
100
- observer .onCompleted ();
101
+ if (counter .getAndSet (num ) < num ) {
102
+ observer .onCompleted ();
103
+ }
101
104
}
102
105
103
106
@ Override
104
107
public void onError (Exception e ) {
105
- observer .onError (e );
108
+ if (counter .getAndSet (num ) < num ) {
109
+ observer .onError (e );
110
+ }
106
111
}
107
112
108
113
@ Override
@@ -129,7 +134,7 @@ public static class UnitTest {
129
134
@ Test
130
135
public void testTake1 () {
131
136
Observable <String > w = Observable .toObservable ("one" , "two" , "three" );
132
- Observable <String > take = Observable .create (take (w , 2 ));
137
+ Observable <String > take = Observable .create (assertTrustedObservable ( take (w , 2 ) ));
133
138
134
139
@ SuppressWarnings ("unchecked" )
135
140
Observer <String > aObserver = mock (Observer .class );
@@ -144,7 +149,7 @@ public void testTake1() {
144
149
@ Test
145
150
public void testTake2 () {
146
151
Observable <String > w = Observable .toObservable ("one" , "two" , "three" );
147
- Observable <String > take = Observable .create (take (w , 1 ));
152
+ Observable <String > take = Observable .create (assertTrustedObservable ( take (w , 1 ) ));
148
153
149
154
@ SuppressWarnings ("unchecked" )
150
155
Observer <String > aObserver = mock (Observer .class );
@@ -158,14 +163,23 @@ public void testTake2() {
158
163
159
164
@ Test
160
165
public void testTakeDoesntLeakErrors () {
161
- Observable <String > source = Observable .concat (Observable .from ("one" ), Observable .<String >error (new Exception ("test failed" )));
162
- Observable .create (take (source , 1 )).last ();
166
+ Observable <String > source = Observable .create (new Func1 <Observer <String >, Subscription >()
167
+ {
168
+ @ Override
169
+ public Subscription call (Observer <String > observer )
170
+ {
171
+ observer .onNext ("one" );
172
+ observer .onError (new Exception ("test failed" ));
173
+ return Subscriptions .empty ();
174
+ }
175
+ });
176
+ Observable .create (assertTrustedObservable (take (source , 1 ))).last ();
163
177
}
164
178
165
179
@ Test
166
180
public void testTakeZeroDoesntLeakError () {
167
- Observable <String > source = Observable .< String > error (new Exception ("test failed" ));
168
- Observable .create (take (source , 0 )).lastOrDefault ("ok" );
181
+ Observable <String > source = Observable .error (new Exception ("test failed" ));
182
+ Observable .create (assertTrustedObservable ( take (source , 0 ) )).lastOrDefault ("ok" );
169
183
}
170
184
171
185
@ Test
@@ -175,7 +189,7 @@ public void testUnsubscribeAfterTake() {
175
189
176
190
@ SuppressWarnings ("unchecked" )
177
191
Observer <String > aObserver = mock (Observer .class );
178
- Observable <String > take = Observable .create (take (w , 1 ));
192
+ Observable <String > take = Observable .create (assertTrustedObservable ( take (w , 1 ) ));
179
193
take .subscribe (aObserver );
180
194
181
195
// wait for the Observable to complete
0 commit comments