Skip to content

Commit da6ef51

Browse files
Fixed TestSubject bug in onError and onCompleted
1 parent 2b4fc37 commit da6ef51

File tree

2 files changed

+79
-10
lines changed

2 files changed

+79
-10
lines changed

src/main/java/rx/subjects/TestSubject.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -68,11 +68,11 @@ protected TestSubject(OnSubscribe<T> onSubscribe, SubjectSubscriptionManager<T>
6868
}
6969

7070
/**
71-
* Schedule a call to {@code onCompleted} at relative time of "now()" on TestScheduler.
71+
* Schedule a call to {@code onCompleted} on TestScheduler.
7272
*/
7373
@Override
7474
public void onCompleted() {
75-
onCompleted(innerScheduler.now());
75+
onCompleted(0);
7676
}
7777

7878
private void _onCompleted() {
@@ -86,26 +86,26 @@ private void _onCompleted() {
8686
/**
8787
* Schedule a call to {@code onCompleted} relative to "now()" +n milliseconds in the future.
8888
*
89-
* @param timeInMilliseconds
89+
* @param delayTime
9090
* the number of milliseconds in the future relative to "now()" at which to call {@code onCompleted}
9191
*/
92-
public void onCompleted(long timeInMilliseconds) {
92+
public void onCompleted(long delayTime) {
9393
innerScheduler.schedule(new Action0() {
9494

9595
@Override
9696
public void call() {
9797
_onCompleted();
9898
}
9999

100-
}, timeInMilliseconds, TimeUnit.MILLISECONDS);
100+
}, delayTime, TimeUnit.MILLISECONDS);
101101
}
102102

103103
/**
104-
* Schedule a call to {@code onError} at relative time of "now()" on TestScheduler.
104+
* Schedule a call to {@code onError} on TestScheduler.
105105
*/
106106
@Override
107107
public void onError(final Throwable e) {
108-
onError(e, innerScheduler.now());
108+
onError(e, 0);
109109
}
110110

111111
private void _onError(final Throwable e) {
@@ -121,18 +121,18 @@ private void _onError(final Throwable e) {
121121
*
122122
* @param e
123123
* the {@code Throwable} to pass to the {@code onError} method
124-
* @param timeInMilliseconds
124+
* @param dalayTime
125125
* the number of milliseconds in the future relative to "now()" at which to call {@code onError}
126126
*/
127-
public void onError(final Throwable e, long timeInMilliseconds) {
127+
public void onError(final Throwable e, long dalayTime) {
128128
innerScheduler.schedule(new Action0() {
129129

130130
@Override
131131
public void call() {
132132
_onError(e);
133133
}
134134

135-
}, timeInMilliseconds, TimeUnit.MILLISECONDS);
135+
}, dalayTime, TimeUnit.MILLISECONDS);
136136
}
137137

138138
/**

src/test/java/rx/subjects/TestSubjectTest.java

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import rx.Observer;
2020
import rx.schedulers.TestScheduler;
2121

22+
import java.io.IOException;
2223
import java.util.concurrent.TimeUnit;
2324

2425
import static org.mockito.Mockito.*;
@@ -55,4 +56,72 @@ public void testObserverPropagateValueInFutureTimeAfterTriggeringActions() {
5556

5657
verify(observer, times(1)).onNext(1);
5758
}
59+
60+
61+
62+
@Test
63+
public void testObserverPropagateErrorAfterTriggeringActions() {
64+
final IOException e = new IOException();
65+
final TestScheduler scheduler = new TestScheduler();
66+
67+
final TestSubject<Integer> subject = TestSubject.create(scheduler);
68+
@SuppressWarnings("unchecked")
69+
Observer<Integer> observer = mock(Observer.class);
70+
subject.subscribe(observer);
71+
72+
subject.onError(e);
73+
scheduler.triggerActions();
74+
75+
verify(observer, times(1)).onError(e);
76+
}
77+
78+
@Test
79+
public void testObserverPropagateErrorInFutureTimeAfterTriggeringActions() {
80+
final IOException e = new IOException();
81+
final TestScheduler scheduler = new TestScheduler();
82+
scheduler.advanceTimeTo(100, TimeUnit.SECONDS);
83+
84+
final TestSubject<Integer> subject = TestSubject.create(scheduler);
85+
@SuppressWarnings("unchecked")
86+
Observer<Integer> observer = mock(Observer.class);
87+
subject.subscribe(observer);
88+
89+
subject.onError(e);
90+
scheduler.triggerActions();
91+
92+
verify(observer, times(1)).onError(e);
93+
}
94+
95+
96+
97+
@Test
98+
public void testObserverPropagateCompletedAfterTriggeringActions() {
99+
final TestScheduler scheduler = new TestScheduler();
100+
101+
final TestSubject<Integer> subject = TestSubject.create(scheduler);
102+
@SuppressWarnings("unchecked")
103+
Observer<Integer> observer = mock(Observer.class);
104+
subject.subscribe(observer);
105+
106+
subject.onCompleted();
107+
scheduler.triggerActions();
108+
109+
verify(observer, times(1)).onCompleted();
110+
}
111+
112+
@Test
113+
public void testObserverPropagateCompletedInFutureTimeAfterTriggeringActions() {
114+
final TestScheduler scheduler = new TestScheduler();
115+
scheduler.advanceTimeTo(100, TimeUnit.SECONDS);
116+
117+
final TestSubject<Integer> subject = TestSubject.create(scheduler);
118+
@SuppressWarnings("unchecked")
119+
Observer<Integer> observer = mock(Observer.class);
120+
subject.subscribe(observer);
121+
122+
subject.onCompleted();
123+
scheduler.triggerActions();
124+
125+
verify(observer, times(1)).onCompleted();
126+
}
58127
}

0 commit comments

Comments
 (0)