Skip to content

Commit 7bae419

Browse files
Merge pull request #749 from wehjin/splittests
Separated Android test code from source.
2 parents 52db70c + 22233ac commit 7bae419

File tree

6 files changed

+379
-275
lines changed

6 files changed

+379
-275
lines changed

rxjava-contrib/rxjava-android/src/main/java/rx/android/observables/AndroidObservable.java

Lines changed: 0 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,6 @@
1515
*/
1616
package rx.android.observables;
1717

18-
import static org.mockito.Mockito.verify;
19-
20-
import org.junit.Before;
21-
import org.junit.Test;
22-
import org.junit.runner.RunWith;
23-
import org.mockito.Mock;
24-
import org.mockito.MockitoAnnotations;
25-
import org.robolectric.Robolectric;
26-
import org.robolectric.RobolectricTestRunner;
27-
import org.robolectric.annotation.Config;
2818
import rx.Observable;
2919
import rx.Observer;
3020
import rx.operators.OperationObserveFromAndroidComponent;
@@ -108,52 +98,4 @@ public static <T> Observable<T> fromFragment(Object fragment, Observable<T> sour
10898
throw new IllegalArgumentException("Target fragment is neither a native nor support library Fragment");
10999
}
110100
}
111-
112-
@RunWith(RobolectricTestRunner.class)
113-
@Config(manifest = Config.NONE)
114-
public static final class AndroidObservableTest {
115-
116-
// support library fragments
117-
private FragmentActivity fragmentActivity;
118-
private android.support.v4.app.Fragment supportFragment;
119-
120-
// native fragments
121-
private Activity activity;
122-
private Fragment fragment;
123-
124-
@Mock
125-
private Observer<String> observer;
126-
127-
@Before
128-
public void setup() {
129-
MockitoAnnotations.initMocks(this);
130-
supportFragment = new android.support.v4.app.Fragment();
131-
fragmentActivity = Robolectric.buildActivity(FragmentActivity.class).create().get();
132-
fragmentActivity.getSupportFragmentManager().beginTransaction().add(supportFragment, null).commit();
133-
134-
fragment = new Fragment();
135-
activity = Robolectric.buildActivity(Activity.class).create().get();
136-
activity.getFragmentManager().beginTransaction().add(fragment, null).commit();
137-
}
138-
139-
@Test
140-
public void itSupportsFragmentsFromTheSupportV4Library() {
141-
fromFragment(supportFragment, Observable.just("success")).subscribe(observer);
142-
verify(observer).onNext("success");
143-
verify(observer).onCompleted();
144-
}
145-
146-
@Test
147-
public void itSupportsNativeFragments() {
148-
fromFragment(fragment, Observable.just("success")).subscribe(observer);
149-
verify(observer).onNext("success");
150-
verify(observer).onCompleted();
151-
}
152-
153-
@Test(expected = IllegalArgumentException.class)
154-
public void itThrowsIfObjectPassedIsNotAFragment() {
155-
fromFragment("not a fragment", Observable.never());
156-
}
157-
}
158-
159101
}

rxjava-contrib/rxjava-android/src/main/java/rx/android/schedulers/HandlerThreadScheduler.java

Lines changed: 0 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -17,23 +17,13 @@
1717

1818
import android.os.Handler;
1919

20-
import org.junit.Test;
21-
import org.junit.runner.RunWith;
22-
import org.mockito.ArgumentCaptor;
23-
import org.robolectric.RobolectricTestRunner;
24-
import org.robolectric.annotation.Config;
25-
2620
import rx.Scheduler;
2721
import rx.Subscription;
2822
import rx.operators.SafeObservableSubscription;
2923
import rx.util.functions.Func2;
3024

3125
import java.util.concurrent.TimeUnit;
3226

33-
import static org.mockito.Matchers.eq;
34-
import static org.mockito.Mockito.mock;
35-
import static org.mockito.Mockito.verify;
36-
3727
/**
3828
* Schedules actions to run on an Android Handler thread.
3929
*/
@@ -84,49 +74,6 @@ public void run() {
8474
}, unit.toMillis(delayTime));
8575
return subscription;
8676
}
87-
88-
@RunWith(RobolectricTestRunner.class)
89-
@Config(manifest=Config.NONE)
90-
public static final class UnitTest {
91-
92-
@Test
93-
public void shouldScheduleImmediateActionOnHandlerThread() {
94-
final Handler handler = mock(Handler.class);
95-
final Object state = new Object();
96-
@SuppressWarnings("unchecked")
97-
final Func2<Scheduler, Object, Subscription> action = mock(Func2.class);
98-
99-
Scheduler scheduler = new HandlerThreadScheduler(handler);
100-
scheduler.schedule(state, action);
101-
102-
// verify that we post to the given Handler
103-
ArgumentCaptor<Runnable> runnable = ArgumentCaptor.forClass(Runnable.class);
104-
verify(handler).postDelayed(runnable.capture(), eq(0L));
105-
106-
// verify that the given handler delegates to our action
107-
runnable.getValue().run();
108-
verify(action).call(scheduler, state);
109-
}
110-
111-
@Test
112-
public void shouldScheduleDelayedActionOnHandlerThread() {
113-
final Handler handler = mock(Handler.class);
114-
final Object state = new Object();
115-
@SuppressWarnings("unchecked")
116-
final Func2<Scheduler, Object, Subscription> action = mock(Func2.class);
117-
118-
Scheduler scheduler = new HandlerThreadScheduler(handler);
119-
scheduler.schedule(state, action, 1L, TimeUnit.SECONDS);
120-
121-
// verify that we post to the given Handler
122-
ArgumentCaptor<Runnable> runnable = ArgumentCaptor.forClass(Runnable.class);
123-
verify(handler).postDelayed(runnable.capture(), eq(1000L));
124-
125-
// verify that the given handler delegates to our action
126-
runnable.getValue().run();
127-
verify(action).call(scheduler, state);
128-
}
129-
}
13077
}
13178

13279

rxjava-contrib/rxjava-android/src/main/java/rx/operators/OperationObserveFromAndroidComponent.java

Lines changed: 0 additions & 164 deletions
Original file line numberDiff line numberDiff line change
@@ -15,23 +15,6 @@
1515
*/
1616
package rx.operators;
1717

18-
import static org.mockito.Matchers.any;
19-
import static org.mockito.Matchers.anyInt;
20-
import static org.mockito.Mockito.mock;
21-
import static org.mockito.Mockito.never;
22-
import static org.mockito.Mockito.times;
23-
import static org.mockito.Mockito.verify;
24-
import static org.mockito.Mockito.verifyNoMoreInteractions;
25-
import static org.mockito.Mockito.when;
26-
27-
import org.junit.Before;
28-
import org.junit.Test;
29-
import org.junit.runner.RunWith;
30-
import org.mockito.Mock;
31-
import org.mockito.MockitoAnnotations;
32-
import org.robolectric.RobolectricTestRunner;
33-
import org.robolectric.annotation.Config;
34-
3518
import rx.Observable;
3619
import rx.Observer;
3720
import rx.Subscription;
@@ -42,7 +25,6 @@
4225
import android.os.Looper;
4326
import android.util.Log;
4427

45-
import java.lang.reflect.Field;
4628
import java.util.concurrent.Callable;
4729
import java.util.concurrent.Executors;
4830
import java.util.concurrent.Future;
@@ -164,150 +146,4 @@ protected boolean isComponentValid(android.support.v4.app.Fragment fragment) {
164146
return fragment.isAdded();
165147
}
166148
}
167-
168-
@RunWith(RobolectricTestRunner.class)
169-
@Config(manifest = Config.NONE)
170-
public static final class UnitTest {
171-
172-
@Mock
173-
private Observer<Integer> mockObserver;
174-
175-
@Mock
176-
private Fragment mockFragment;
177-
178-
@Mock
179-
private Activity mockActivity;
180-
181-
@Mock
182-
private Observable<Integer> mockObservable;
183-
184-
@Before
185-
public void setupMocks() {
186-
MockitoAnnotations.initMocks(this);
187-
when(mockFragment.isAdded()).thenReturn(true);
188-
}
189-
190-
@Test
191-
public void itThrowsIfObserverSubscribesFromBackgroundThread() throws Exception {
192-
final Future<Object> future = Executors.newSingleThreadExecutor().submit(new Callable<Object>() {
193-
@Override
194-
public Object call() throws Exception {
195-
OperationObserveFromAndroidComponent.observeFromAndroidComponent(
196-
mockObservable, mockFragment).subscribe(mockObserver);
197-
return null;
198-
}
199-
});
200-
future.get(1, TimeUnit.SECONDS);
201-
verify(mockObserver).onError(any(IllegalStateException.class));
202-
verifyNoMoreInteractions(mockObserver);
203-
}
204-
205-
@Test
206-
public void itObservesTheSourceSequenceOnTheMainUIThread() {
207-
OperationObserveFromAndroidComponent.observeFromAndroidComponent(mockObservable, mockFragment).subscribe(mockObserver);
208-
verify(mockObservable).observeOn(AndroidSchedulers.mainThread());
209-
}
210-
211-
@Test
212-
public void itForwardsOnNextOnCompletedSequenceToTargetObserver() {
213-
Observable<Integer> source = Observable.from(1, 2, 3);
214-
OperationObserveFromAndroidComponent.observeFromAndroidComponent(source, mockFragment).subscribe(mockObserver);
215-
verify(mockObserver, times(3)).onNext(anyInt());
216-
verify(mockObserver).onCompleted();
217-
verify(mockObserver, never()).onError(any(Exception.class));
218-
}
219-
220-
@Test
221-
public void itForwardsOnErrorToTargetObserver() {
222-
final Exception exception = new Exception();
223-
Observable<Integer> source = Observable.error(exception);
224-
OperationObserveFromAndroidComponent.observeFromAndroidComponent(source, mockFragment).subscribe(mockObserver);
225-
verify(mockObserver).onError(exception);
226-
verify(mockObserver, never()).onNext(anyInt());
227-
verify(mockObserver, never()).onCompleted();
228-
}
229-
230-
@Test
231-
public void itDropsOnNextOnCompletedSequenceIfTargetComponentIsGone() throws Throwable {
232-
PublishSubject<Integer> source = PublishSubject.create();
233-
234-
final OnSubscribeFragment<Integer> operator = new OnSubscribeFragment<Integer>(source, mockFragment);
235-
operator.onSubscribe(mockObserver);
236-
237-
source.onNext(1);
238-
releaseComponentRef(operator);
239-
240-
source.onNext(2);
241-
source.onNext(3);
242-
source.onCompleted();
243-
244-
verify(mockObserver).onNext(1);
245-
verifyNoMoreInteractions(mockObserver);
246-
}
247-
248-
@Test
249-
public void itDropsOnErrorIfTargetComponentIsGone() throws Throwable {
250-
PublishSubject<Integer> source = PublishSubject.create();
251-
252-
final OnSubscribeFragment<Integer> operator = new OnSubscribeFragment<Integer>(source, mockFragment);
253-
operator.onSubscribe(mockObserver);
254-
255-
source.onNext(1);
256-
releaseComponentRef(operator);
257-
258-
source.onError(new Exception());
259-
260-
verify(mockObserver).onNext(1);
261-
verifyNoMoreInteractions(mockObserver);
262-
}
263-
264-
private void releaseComponentRef(OnSubscribeFragment<Integer> operator) throws NoSuchFieldException, IllegalAccessException {
265-
final Field componentRef = operator.getClass().getSuperclass().getDeclaredField("componentRef");
266-
componentRef.setAccessible(true);
267-
componentRef.set(operator, null);
268-
}
269-
270-
@Test
271-
public void itDoesNotForwardOnNextOnCompletedSequenceIfFragmentIsDetached() {
272-
PublishSubject<Integer> source = PublishSubject.create();
273-
OperationObserveFromAndroidComponent.observeFromAndroidComponent(source, mockFragment).subscribe(mockObserver);
274-
275-
source.onNext(1);
276-
277-
when(mockFragment.isAdded()).thenReturn(false);
278-
source.onNext(2);
279-
source.onNext(3);
280-
source.onCompleted();
281-
282-
verify(mockObserver).onNext(1);
283-
verify(mockObserver, never()).onCompleted();
284-
}
285-
286-
@Test
287-
public void itDoesNotForwardOnErrorIfFragmentIsDetached() {
288-
PublishSubject<Integer> source = PublishSubject.create();
289-
OperationObserveFromAndroidComponent.observeFromAndroidComponent(source, mockFragment).subscribe(mockObserver);
290-
291-
source.onNext(1);
292-
293-
when(mockFragment.isAdded()).thenReturn(false);
294-
source.onError(new Exception());
295-
296-
verify(mockObserver).onNext(1);
297-
verify(mockObserver, never()).onError(any(Exception.class));
298-
}
299-
300-
@Test
301-
public void itUnsubscribesFromTheSourceSequence() {
302-
Subscription underlying = mock(Subscription.class);
303-
when(mockObservable.observeOn(AndroidSchedulers.mainThread())).thenReturn(mockObservable);
304-
when(mockObservable.subscribe(any(Observer.class))).thenReturn(underlying);
305-
306-
Subscription sub = OperationObserveFromAndroidComponent.observeFromAndroidComponent(
307-
mockObservable, mockActivity).subscribe(mockObserver);
308-
sub.unsubscribe();
309-
310-
verify(underlying).unsubscribe();
311-
}
312-
}
313149
}

0 commit comments

Comments
 (0)