23
23
import java .util .concurrent .CountDownLatch ;
24
24
import java .util .concurrent .atomic .AtomicInteger ;
25
25
26
+ import java .util .concurrent .atomic .AtomicReference ;
26
27
import org .junit .Test ;
27
28
29
+ import org .mockito .Mockito ;
28
30
import rx .*;
29
31
import rx .Observable ;
30
32
import rx .Scheduler .Worker ;
39
41
40
42
public class RxJavaHooksTest {
41
43
44
+ public static class TestExceptionWithUnknownCause extends RuntimeException {
45
+ TestExceptionWithUnknownCause () {
46
+ super ((Throwable ) null );
47
+ }
48
+ }
49
+
42
50
static Observable <Integer > createObservable () {
43
51
return Observable .range (1 , 5 ).map (new Func1 <Integer , Integer >() {
44
52
@ Override
@@ -48,6 +56,15 @@ public Integer call(Integer t) {
48
56
});
49
57
}
50
58
59
+ static Observable <Integer > createObservableThrowingUnknownCause () {
60
+ return Observable .range (1 , 5 ).map (new Func1 <Integer , Integer >() {
61
+ @ Override
62
+ public Integer call (Integer t ) {
63
+ throw new TestExceptionWithUnknownCause ();
64
+ }
65
+ });
66
+ }
67
+
51
68
@ Test
52
69
public void constructorShouldBePrivate () {
53
70
TestUtil .checkUtilityClass (RxJavaHooks .class );
@@ -89,6 +106,31 @@ public void assemblyTrackingObservable() {
89
106
}
90
107
}
91
108
109
+ @ Test
110
+ public void assemblyTrackingObservableUnknownCause () {
111
+ RxJavaHooks .enableAssemblyTracking ();
112
+ try {
113
+ final AtomicReference <Throwable > onErrorThrowableRef = new AtomicReference <Throwable >();
114
+ RxJavaHooks .setOnError (new Action1 <Throwable >() {
115
+ @ Override
116
+ public void call (Throwable throwable ) {
117
+ onErrorThrowableRef .set (throwable );
118
+ }
119
+ });
120
+ TestSubscriber <Integer > ts = TestSubscriber .create ();
121
+
122
+ createObservableThrowingUnknownCause ().subscribe (ts );
123
+
124
+ ts .assertError (TestExceptionWithUnknownCause .class );
125
+
126
+ Throwable receivedError = onErrorThrowableRef .get ();
127
+ assertNotNull (receivedError );
128
+ assertTrue (receivedError .getMessage ().contains ("cause set to null" ));
129
+ } finally {
130
+ RxJavaHooks .reset ();
131
+ }
132
+ }
133
+
92
134
static Single <Integer > createSingle () {
93
135
return Single .just (1 ).map (new Func1 <Integer , Integer >() {
94
136
@ Override
0 commit comments