18
18
import static org .junit .Assert .assertTrue ;
19
19
import static org .junit .Assert .fail ;
20
20
21
+ import java .util .concurrent .atomic .AtomicInteger ;
22
+
21
23
import org .junit .Test ;
22
24
23
25
import rx .Observable ;
@@ -39,27 +41,13 @@ public void call(Integer t1) {
39
41
});
40
42
}
41
43
42
- @ Test ( expected = StackOverflowError . class )
43
- public void testStackOverflowIsThrown () {
44
+ @ Test
45
+ public void testStackOverflowWouldOccur () {
44
46
final PublishSubject <Integer > a = PublishSubject .create ();
45
47
final PublishSubject <Integer > b = PublishSubject .create ();
46
- new Observer <Integer >() {
47
-
48
- @ Override
49
- public void onCompleted () {
50
-
51
- }
52
-
53
- @ Override
54
- public void onError (Throwable e ) {
55
- e .printStackTrace ();
56
- }
57
-
58
- @ Override
59
- public void onNext (Integer args ) {
60
- System .out .println (args );
61
- }
62
- };
48
+ final int MAX_STACK_DEPTH = 1000 ;
49
+ final AtomicInteger depth = new AtomicInteger ();
50
+
63
51
a .subscribe (new Observer <Integer >() {
64
52
65
53
@ Override
@@ -73,12 +61,11 @@ public void onError(Throwable e) {
73
61
}
74
62
75
63
@ Override
76
- public void onNext (Integer args ) {
77
- System . out . println ( args );
64
+ public void onNext (Integer n ) {
65
+ b . onNext ( n + 1 );
78
66
}
79
67
});
80
- b .subscribe ();
81
- a .subscribe (new Observer <Integer >() {
68
+ b .subscribe (new Observer <Integer >() {
82
69
83
70
@ Override
84
71
public void onCompleted () {
@@ -91,11 +78,20 @@ public void onError(Throwable e) {
91
78
}
92
79
93
80
@ Override
94
- public void onNext (Integer args ) {
95
- b .onNext (args + 1 );
81
+ public void onNext (Integer n ) {
82
+ if (depth .get () < MAX_STACK_DEPTH ) {
83
+ depth .set (Thread .currentThread ().getStackTrace ().length );
84
+ a .onNext (n + 1 );
85
+ }
96
86
}
97
87
});
98
- b .subscribe (new Observer <Integer >() {
88
+ a .onNext (1 );
89
+ assertTrue (depth .get () > MAX_STACK_DEPTH );
90
+ }
91
+
92
+ @ Test (expected = StackOverflowError .class )
93
+ public void testStackOverflowErrorIsThrown () {
94
+ Observable .just (1 ).subscribe (new Observer <Integer >() {
99
95
100
96
@ Override
101
97
public void onCompleted () {
@@ -108,11 +104,11 @@ public void onError(Throwable e) {
108
104
}
109
105
110
106
@ Override
111
- public void onNext (Integer args ) {
112
- a . onNext ( args + 1 );
107
+ public void onNext (Integer t ) {
108
+ throw new StackOverflowError ( );
113
109
}
110
+
114
111
});
115
- a .onNext (1 );
116
112
}
117
113
118
114
@ Test (expected = ThreadDeath .class )
0 commit comments