|
15 | 15 | */
|
16 | 16 | package rx.schedulers;
|
17 | 17 |
|
| 18 | +import static org.junit.Assert.assertEquals; |
18 | 19 | import static org.junit.Assert.assertTrue;
|
19 | 20 |
|
| 21 | +import java.util.ArrayList; |
| 22 | +import java.util.Arrays; |
| 23 | + |
20 | 24 | import org.junit.Test;
|
21 | 25 |
|
22 | 26 | import rx.Observable;
|
23 | 27 | import rx.Scheduler;
|
| 28 | +import rx.Scheduler.Worker; |
| 29 | +import rx.functions.Action0; |
24 | 30 | import rx.functions.Action1;
|
25 | 31 | import rx.functions.Func1;
|
26 | 32 |
|
@@ -55,4 +61,62 @@ public void call(String t) {
|
55 | 61 | }
|
56 | 62 | });
|
57 | 63 | }
|
| 64 | + |
| 65 | + @Test |
| 66 | + public void testNestedTrampolineWithUnsubscribe() { |
| 67 | + final ArrayList<String> workDone = new ArrayList<String>(); |
| 68 | + Worker worker = Schedulers.trampoline().createWorker(); |
| 69 | + worker.schedule(new Action0() { |
| 70 | + |
| 71 | + @Override |
| 72 | + public void call() { |
| 73 | + doWorkOnNewTrampoline("A", workDone); |
| 74 | + } |
| 75 | + |
| 76 | + }); |
| 77 | + |
| 78 | + final Worker worker2 = Schedulers.trampoline().createWorker(); |
| 79 | + worker2.schedule(new Action0() { |
| 80 | + |
| 81 | + @Override |
| 82 | + public void call() { |
| 83 | + doWorkOnNewTrampoline("B", workDone); |
| 84 | + // we unsubscribe worker2 ... it should not affect work scheduled on a separate Trampline.Worker |
| 85 | + worker2.unsubscribe(); |
| 86 | + } |
| 87 | + |
| 88 | + }); |
| 89 | + |
| 90 | + assertEquals(6, workDone.size()); |
| 91 | + assertEquals(Arrays.asList("A.1", "A.B.1", "A.B.2", "B.1", "B.B.1", "B.B.2"), workDone); |
| 92 | + } |
| 93 | + |
| 94 | + private static void doWorkOnNewTrampoline(final String key, final ArrayList<String> workDone) { |
| 95 | + Worker worker = Schedulers.trampoline().createWorker(); |
| 96 | + worker.schedule(new Action0() { |
| 97 | + |
| 98 | + @Override |
| 99 | + public void call() { |
| 100 | + String msg = key + ".1"; |
| 101 | + workDone.add(msg); |
| 102 | + System.out.println(msg); |
| 103 | + Worker worker3 = Schedulers.trampoline().createWorker(); |
| 104 | + worker3.schedule(createPrintAction(key + ".B.1", workDone)); |
| 105 | + worker3.schedule(createPrintAction(key + ".B.2", workDone)); |
| 106 | + } |
| 107 | + |
| 108 | + }); |
| 109 | + } |
| 110 | + |
| 111 | + private static Action0 createPrintAction(final String message, final ArrayList<String> workDone) { |
| 112 | + return new Action0() { |
| 113 | + |
| 114 | + @Override |
| 115 | + public void call() { |
| 116 | + System.out.println(message); |
| 117 | + workDone.add(message); |
| 118 | + } |
| 119 | + |
| 120 | + }; |
| 121 | + } |
58 | 122 | }
|
0 commit comments