• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package com.xtremelabs.robolectric.util;
2 
3 import org.junit.Before;
4 import org.junit.Test;
5 
6 import static org.hamcrest.CoreMatchers.equalTo;
7 import static org.junit.Assert.assertThat;
8 
9 public class SchedulerTest {
10     private Transcript transcript;
11     private Scheduler scheduler;
12 
13     @Before
setUp()14     public void setUp() throws Exception {
15         scheduler = new Scheduler();
16         scheduler.pause();
17         transcript = new Transcript();
18     }
19 
20     @Test
testTick_ReturnsTrueIffSomeJobWasRun()21     public void testTick_ReturnsTrueIffSomeJobWasRun() throws Exception {
22         scheduler.postDelayed(new AddToTranscript("one"), 0);
23         scheduler.postDelayed(new AddToTranscript("two"), 0);
24         scheduler.postDelayed(new AddToTranscript("three"), 1000);
25 
26         assertThat(scheduler.advanceBy(0), equalTo(true));
27         transcript.assertEventsSoFar("one", "two");
28 
29         assertThat(scheduler.advanceBy(0), equalTo(false));
30         transcript.assertNoEventsSoFar();
31 
32         assertThat(scheduler.advanceBy(1000), equalTo(true));
33         transcript.assertEventsSoFar("three");
34     }
35 
36     @Test
testShadowPostDelayed()37     public void testShadowPostDelayed() throws Exception {
38         scheduler.postDelayed(new AddToTranscript("one"), 1000);
39         scheduler.postDelayed(new AddToTranscript("two"), 2000);
40         scheduler.postDelayed(new AddToTranscript("three"), 3000);
41 
42         scheduler.advanceBy(1000);
43         transcript.assertEventsSoFar("one");
44 
45         scheduler.advanceBy(500);
46         transcript.assertNoEventsSoFar();
47 
48         scheduler.advanceBy(501);
49         transcript.assertEventsSoFar("two");
50 
51         scheduler.advanceBy(999);
52         transcript.assertEventsSoFar("three");
53     }
54 
55     @Test
testShadowPostAtFrontOfQueue()56     public void testShadowPostAtFrontOfQueue() throws Exception {
57         scheduler.post(new AddToTranscript("one"));
58         scheduler.post(new AddToTranscript("two"));
59         scheduler.postAtFrontOfQueue(new AddToTranscript("three"));
60 
61         scheduler.runOneTask();
62         transcript.assertEventsSoFar("three");
63 
64         scheduler.runOneTask();
65         transcript.assertEventsSoFar("one");
66 
67         scheduler.runOneTask();
68         transcript.assertEventsSoFar("two");
69     }
70 
71     @Test
testShadowPostAtFrontOfQueue_whenUnpaused()72     public void testShadowPostAtFrontOfQueue_whenUnpaused() throws Exception {
73         scheduler.unPause();
74         scheduler.postAtFrontOfQueue(new AddToTranscript("three"));
75         transcript.assertEventsSoFar("three");
76     }
77 
78     @Test
testShadowPostDelayed_WhenMoreItemsAreAdded()79     public void testShadowPostDelayed_WhenMoreItemsAreAdded() throws Exception {
80         scheduler.postDelayed(new Runnable() {
81             @Override
82             public void run() {
83                 transcript.add("one");
84                 scheduler.postDelayed(new Runnable() {
85                     @Override
86                     public void run() {
87                         transcript.add("two");
88                         scheduler.postDelayed(new AddToTranscript("three"), 1000);
89                     }
90                 }, 1000);
91             }
92         }, 1000);
93 
94         scheduler.advanceBy(1000);
95         transcript.assertEventsSoFar("one");
96 
97         scheduler.advanceBy(500);
98         transcript.assertNoEventsSoFar();
99 
100         scheduler.advanceBy(501);
101         transcript.assertEventsSoFar("two");
102 
103         scheduler.advanceBy(999);
104         transcript.assertEventsSoFar("three");
105     }
106 
107     @Test
removeShouldRemoveAllInstancesOfRunnableFromQueue()108     public void removeShouldRemoveAllInstancesOfRunnableFromQueue() throws Exception {
109         scheduler.post(new TestRunnable());
110         TestRunnable runnable = new TestRunnable();
111         scheduler.post(runnable);
112         scheduler.post(runnable);
113         assertThat(scheduler.enqueuedTaskCount(), equalTo(3));
114         scheduler.remove(runnable);
115         assertThat(scheduler.enqueuedTaskCount(), equalTo(1));
116         scheduler.advanceToLastPostedRunnable();
117         assertThat(runnable.wasRun, equalTo(false));
118     }
119 
120     @Test
resetShouldUnPause()121     public void resetShouldUnPause() throws Exception {
122         scheduler.pause();
123 
124         TestRunnable runnable = new TestRunnable();
125         scheduler.post(runnable);
126 
127         assertThat(runnable.wasRun, equalTo(false));
128 
129         scheduler.reset();
130         scheduler.post(runnable);
131         assertThat(runnable.wasRun, equalTo(true));
132     }
133 
134     @Test
resetShouldClearPendingRunnables()135     public void resetShouldClearPendingRunnables() throws Exception {
136         scheduler.pause();
137 
138         TestRunnable runnable1 = new TestRunnable();
139         scheduler.post(runnable1);
140 
141         assertThat(runnable1.wasRun, equalTo(false));
142 
143         scheduler.reset();
144 
145         TestRunnable runnable2 = new TestRunnable();
146         scheduler.post(runnable2);
147 
148         assertThat(runnable1.wasRun, equalTo(false));
149         assertThat(runnable2.wasRun, equalTo(true));
150     }
151 
152     private class AddToTranscript implements Runnable {
153         private String event;
154 
AddToTranscript(String event)155         public AddToTranscript(String event) {
156             this.event = event;
157         }
158 
159         @Override
run()160         public void run() {
161             transcript.add(event);
162         }
163     }
164 }
165