Skip to content

Commit 668ec62

Browse files
committed
3.1 Added asObservable examples
1 parent 9fbaf84 commit 668ec62

File tree

1 file changed

+176
-0
lines changed

1 file changed

+176
-0
lines changed
Lines changed: 176 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,176 @@
1+
package itrx.chapter3.sideeffects;
2+
3+
import static org.junit.Assert.*;
4+
5+
import java.util.Arrays;
6+
7+
import org.junit.Test;
8+
9+
import rx.Observable;
10+
import rx.observers.TestSubscriber;
11+
import rx.subjects.BehaviorSubject;
12+
import rx.subjects.Subject;
13+
14+
public class AsObservableTest {
15+
16+
public static class BrakeableService {
17+
public BehaviorSubject<String> items = BehaviorSubject.create("Greet");
18+
19+
public void play() {
20+
items.onNext("Hello");
21+
items.onNext("and");
22+
items.onNext("goodbye");
23+
}
24+
}
25+
26+
public static class BrakeableService2 {
27+
private final BehaviorSubject<String> items = BehaviorSubject.create("Greet");
28+
29+
public BehaviorSubject<String> getValuesUnsafe() {
30+
return items;
31+
}
32+
33+
public Observable<String> getValuesUnsafe2() {
34+
return items;
35+
}
36+
37+
public void play() {
38+
items.onNext("Hello");
39+
items.onNext("and");
40+
items.onNext("goodbye");
41+
}
42+
}
43+
44+
public static class SafeService {
45+
private final BehaviorSubject<String> items = BehaviorSubject.create("Greet");
46+
47+
public Observable<String> getValues() {
48+
return items.asObservable();
49+
}
50+
51+
public void play() {
52+
items.onNext("Hello");
53+
items.onNext("and");
54+
items.onNext("goodbye");
55+
}
56+
}
57+
58+
public void exampleModifyReference() {
59+
BrakeableService service = new BrakeableService();
60+
service.items.subscribe((i) -> System.out.println("Before: " + i));
61+
service.items = BehaviorSubject.create("Later");
62+
service.items.subscribe((i) -> System.out.println("After: " + i));
63+
service.play();
64+
65+
// Before: Greet
66+
// After: Greet
67+
// After: Hello
68+
// After: and
69+
// After: goodbye
70+
}
71+
72+
public void examplePush() {
73+
BrakeableService2 service = new BrakeableService2();
74+
75+
service.getValuesUnsafe().subscribe(System.out::println);
76+
service.getValuesUnsafe().onNext("GARBAGE");
77+
service.play();
78+
79+
// Greet
80+
// GARBAGE
81+
// Hello
82+
// and
83+
// goodbye
84+
}
85+
86+
public void examplePush2() {
87+
BrakeableService2 service = new BrakeableService2();
88+
89+
service.getValuesUnsafe2().subscribe(System.out::println);
90+
if (service.getValuesUnsafe2() instanceof Subject<?, ?>) {
91+
@SuppressWarnings("unchecked")
92+
Subject<String, String> subject = (Subject<String, String>) service.getValuesUnsafe2();
93+
subject.onNext("GARBAGE");
94+
}
95+
service.play();
96+
97+
// Greet
98+
// GARBAGE
99+
// Hello
100+
// and
101+
// goodbye
102+
}
103+
104+
public void exampleSafe() {
105+
SafeService service = new SafeService();
106+
107+
service.getValues().subscribe(System.out::println);
108+
if (service.getValues() instanceof Subject<?, ?>) {
109+
System.out.println("Not safe!");
110+
}
111+
service.play();
112+
113+
// Greet
114+
// Hello
115+
// and
116+
// goodbye
117+
}
118+
119+
120+
//
121+
// Tests
122+
//
123+
124+
@Test
125+
public void testModifyReference() {
126+
TestSubscriber<String> testerBefore = new TestSubscriber<>();
127+
TestSubscriber<String> testerAfter = new TestSubscriber<>();
128+
129+
BrakeableService service = new BrakeableService();
130+
service.items.subscribe(testerBefore);
131+
service.items = BehaviorSubject.create("Later");
132+
service.items.subscribe(testerAfter);
133+
service.play();
134+
135+
testerBefore.assertReceivedOnNext(Arrays.asList("Greet"));
136+
testerAfter.assertReceivedOnNext(Arrays.asList(
137+
"Later",
138+
"Hello",
139+
"and",
140+
"goodbye"
141+
));
142+
}
143+
144+
@Test
145+
public void testPush() {
146+
TestSubscriber<String> tester = new TestSubscriber<>();
147+
148+
BrakeableService2 service = new BrakeableService2();
149+
service.getValuesUnsafe().subscribe(tester);
150+
service.getValuesUnsafe().onNext("GARBAGE");
151+
service.play();
152+
153+
tester.assertReceivedOnNext(Arrays.asList(
154+
"Greet",
155+
"GARBAGE",
156+
"Hello",
157+
"and",
158+
"goodbye"
159+
));
160+
}
161+
162+
@Test
163+
public void testPush2() {
164+
BrakeableService2 service = new BrakeableService2();
165+
166+
assertTrue(service.getValuesUnsafe2() instanceof Subject<?,?>);
167+
}
168+
169+
@Test
170+
public void testSafe() {
171+
SafeService service = new SafeService();
172+
173+
assertFalse(service.getValues() instanceof Subject<?,?>);
174+
}
175+
176+
}

0 commit comments

Comments
 (0)