1a2043a8fff01f3e2d9a5e30dd1cf5fb6a5342f4dTyler Schultzpackage com.xtremelabs.robolectric.util; 2f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips 39c19f7ef7122cfa9e03ed4314da4ad2a115c7e71Christian Williams & Ryan Richardimport org.junit.Before; 4f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillipsimport org.junit.Test; 5f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips 69c19f7ef7122cfa9e03ed4314da4ad2a115c7e71Christian Williams & Ryan Richardimport static org.hamcrest.CoreMatchers.equalTo; 767142e6509cdc6c82290e955ae69400462cf52a9Christian Williams & Ian Fisherimport static org.junit.Assert.assertThat; 89c19f7ef7122cfa9e03ed4314da4ad2a115c7e71Christian Williams & Ryan Richard 9f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillipspublic class SchedulerTest { 10f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips private Transcript transcript; 119c19f7ef7122cfa9e03ed4314da4ad2a115c7e71Christian Williams & Ryan Richard private Scheduler scheduler; 129c19f7ef7122cfa9e03ed4314da4ad2a115c7e71Christian Williams & Ryan Richard 139c19f7ef7122cfa9e03ed4314da4ad2a115c7e71Christian Williams & Ryan Richard @Before 149c19f7ef7122cfa9e03ed4314da4ad2a115c7e71Christian Williams & Ryan Richard public void setUp() throws Exception { 159c19f7ef7122cfa9e03ed4314da4ad2a115c7e71Christian Williams & Ryan Richard scheduler = new Scheduler(); 16a4f7d50f8e6f12d541421383544fe16c185e4bbcPhil Goodwin & Tyler Schultz scheduler.pause(); 179c19f7ef7122cfa9e03ed4314da4ad2a115c7e71Christian Williams & Ryan Richard transcript = new Transcript(); 189c19f7ef7122cfa9e03ed4314da4ad2a115c7e71Christian Williams & Ryan Richard } 199c19f7ef7122cfa9e03ed4314da4ad2a115c7e71Christian Williams & Ryan Richard 209c19f7ef7122cfa9e03ed4314da4ad2a115c7e71Christian Williams & Ryan Richard @Test 219c19f7ef7122cfa9e03ed4314da4ad2a115c7e71Christian Williams & Ryan Richard public void testTick_ReturnsTrueIffSomeJobWasRun() throws Exception { 229c19f7ef7122cfa9e03ed4314da4ad2a115c7e71Christian Williams & Ryan Richard scheduler.postDelayed(new AddToTranscript("one"), 0); 239c19f7ef7122cfa9e03ed4314da4ad2a115c7e71Christian Williams & Ryan Richard scheduler.postDelayed(new AddToTranscript("two"), 0); 249c19f7ef7122cfa9e03ed4314da4ad2a115c7e71Christian Williams & Ryan Richard scheduler.postDelayed(new AddToTranscript("three"), 1000); 259c19f7ef7122cfa9e03ed4314da4ad2a115c7e71Christian Williams & Ryan Richard 26f7c3a47b5eb49f49f450eb18822d51dc496fceefPhil Goodwin & Tyler Schultz assertThat(scheduler.advanceBy(0), equalTo(true)); 279c19f7ef7122cfa9e03ed4314da4ad2a115c7e71Christian Williams & Ryan Richard transcript.assertEventsSoFar("one", "two"); 28adfaceabbda4c8c51f24a0def8926075bd7306adChristian Williams 29f7c3a47b5eb49f49f450eb18822d51dc496fceefPhil Goodwin & Tyler Schultz assertThat(scheduler.advanceBy(0), equalTo(false)); 309c19f7ef7122cfa9e03ed4314da4ad2a115c7e71Christian Williams & Ryan Richard transcript.assertNoEventsSoFar(); 319c19f7ef7122cfa9e03ed4314da4ad2a115c7e71Christian Williams & Ryan Richard 32f7c3a47b5eb49f49f450eb18822d51dc496fceefPhil Goodwin & Tyler Schultz assertThat(scheduler.advanceBy(1000), equalTo(true)); 339c19f7ef7122cfa9e03ed4314da4ad2a115c7e71Christian Williams & Ryan Richard transcript.assertEventsSoFar("three"); 349c19f7ef7122cfa9e03ed4314da4ad2a115c7e71Christian Williams & Ryan Richard } 35f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips 36f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips @Test 37afe0a89d904a7fe2f5980b9deb26cc3240192459Christian Williams public void testShadowPostDelayed() throws Exception { 389c19f7ef7122cfa9e03ed4314da4ad2a115c7e71Christian Williams & Ryan Richard scheduler.postDelayed(new AddToTranscript("one"), 1000); 399c19f7ef7122cfa9e03ed4314da4ad2a115c7e71Christian Williams & Ryan Richard scheduler.postDelayed(new AddToTranscript("two"), 2000); 409c19f7ef7122cfa9e03ed4314da4ad2a115c7e71Christian Williams & Ryan Richard scheduler.postDelayed(new AddToTranscript("three"), 3000); 41f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips 42f7c3a47b5eb49f49f450eb18822d51dc496fceefPhil Goodwin & Tyler Schultz scheduler.advanceBy(1000); 43f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips transcript.assertEventsSoFar("one"); 44f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips 45f7c3a47b5eb49f49f450eb18822d51dc496fceefPhil Goodwin & Tyler Schultz scheduler.advanceBy(500); 46f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips transcript.assertNoEventsSoFar(); 47f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips 48f7c3a47b5eb49f49f450eb18822d51dc496fceefPhil Goodwin & Tyler Schultz scheduler.advanceBy(501); 49f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips transcript.assertEventsSoFar("two"); 50f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips 51f7c3a47b5eb49f49f450eb18822d51dc496fceefPhil Goodwin & Tyler Schultz scheduler.advanceBy(999); 52f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips transcript.assertEventsSoFar("three"); 53f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips } 54f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips 55f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips @Test 56478a40ed43134ef1568a19ab5233a5736a21c57bGlenn Jahnke & Lenny Turetsky public void testShadowPostAtFrontOfQueue() throws Exception { 57478a40ed43134ef1568a19ab5233a5736a21c57bGlenn Jahnke & Lenny Turetsky scheduler.post(new AddToTranscript("one")); 58478a40ed43134ef1568a19ab5233a5736a21c57bGlenn Jahnke & Lenny Turetsky scheduler.post(new AddToTranscript("two")); 59478a40ed43134ef1568a19ab5233a5736a21c57bGlenn Jahnke & Lenny Turetsky scheduler.postAtFrontOfQueue(new AddToTranscript("three")); 60478a40ed43134ef1568a19ab5233a5736a21c57bGlenn Jahnke & Lenny Turetsky 61478a40ed43134ef1568a19ab5233a5736a21c57bGlenn Jahnke & Lenny Turetsky scheduler.runOneTask(); 62478a40ed43134ef1568a19ab5233a5736a21c57bGlenn Jahnke & Lenny Turetsky transcript.assertEventsSoFar("three"); 63478a40ed43134ef1568a19ab5233a5736a21c57bGlenn Jahnke & Lenny Turetsky 64478a40ed43134ef1568a19ab5233a5736a21c57bGlenn Jahnke & Lenny Turetsky scheduler.runOneTask(); 65478a40ed43134ef1568a19ab5233a5736a21c57bGlenn Jahnke & Lenny Turetsky transcript.assertEventsSoFar("one"); 66478a40ed43134ef1568a19ab5233a5736a21c57bGlenn Jahnke & Lenny Turetsky 67478a40ed43134ef1568a19ab5233a5736a21c57bGlenn Jahnke & Lenny Turetsky scheduler.runOneTask(); 68478a40ed43134ef1568a19ab5233a5736a21c57bGlenn Jahnke & Lenny Turetsky transcript.assertEventsSoFar("two"); 69478a40ed43134ef1568a19ab5233a5736a21c57bGlenn Jahnke & Lenny Turetsky } 70478a40ed43134ef1568a19ab5233a5736a21c57bGlenn Jahnke & Lenny Turetsky 71478a40ed43134ef1568a19ab5233a5736a21c57bGlenn Jahnke & Lenny Turetsky @Test 72478a40ed43134ef1568a19ab5233a5736a21c57bGlenn Jahnke & Lenny Turetsky public void testShadowPostAtFrontOfQueue_whenUnpaused() throws Exception { 73478a40ed43134ef1568a19ab5233a5736a21c57bGlenn Jahnke & Lenny Turetsky scheduler.unPause(); 74478a40ed43134ef1568a19ab5233a5736a21c57bGlenn Jahnke & Lenny Turetsky scheduler.postAtFrontOfQueue(new AddToTranscript("three")); 75478a40ed43134ef1568a19ab5233a5736a21c57bGlenn Jahnke & Lenny Turetsky transcript.assertEventsSoFar("three"); 76478a40ed43134ef1568a19ab5233a5736a21c57bGlenn Jahnke & Lenny Turetsky } 77478a40ed43134ef1568a19ab5233a5736a21c57bGlenn Jahnke & Lenny Turetsky 78478a40ed43134ef1568a19ab5233a5736a21c57bGlenn Jahnke & Lenny Turetsky @Test 79afe0a89d904a7fe2f5980b9deb26cc3240192459Christian Williams public void testShadowPostDelayed_WhenMoreItemsAreAdded() throws Exception { 809c19f7ef7122cfa9e03ed4314da4ad2a115c7e71Christian Williams & Ryan Richard scheduler.postDelayed(new Runnable() { 81f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips @Override 82f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips public void run() { 83f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips transcript.add("one"); 849c19f7ef7122cfa9e03ed4314da4ad2a115c7e71Christian Williams & Ryan Richard scheduler.postDelayed(new Runnable() { 85f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips @Override 86f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips public void run() { 87f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips transcript.add("two"); 889c19f7ef7122cfa9e03ed4314da4ad2a115c7e71Christian Williams & Ryan Richard scheduler.postDelayed(new AddToTranscript("three"), 1000); 89f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips } 90f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips }, 1000); 91f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips } 92f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips }, 1000); 93f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips 94f7c3a47b5eb49f49f450eb18822d51dc496fceefPhil Goodwin & Tyler Schultz scheduler.advanceBy(1000); 95f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips transcript.assertEventsSoFar("one"); 96f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips 97f7c3a47b5eb49f49f450eb18822d51dc496fceefPhil Goodwin & Tyler Schultz scheduler.advanceBy(500); 98f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips transcript.assertNoEventsSoFar(); 99f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips 100f7c3a47b5eb49f49f450eb18822d51dc496fceefPhil Goodwin & Tyler Schultz scheduler.advanceBy(501); 101f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips transcript.assertEventsSoFar("two"); 102f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips 103f7c3a47b5eb49f49f450eb18822d51dc496fceefPhil Goodwin & Tyler Schultz scheduler.advanceBy(999); 104f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips transcript.assertEventsSoFar("three"); 105f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips } 106f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips 107a4f7d50f8e6f12d541421383544fe16c185e4bbcPhil Goodwin & Tyler Schultz @Test 108e2c2daa717063899e30b0cafd4d81e60a36d6b0fpivotal-jiwire public void removeShouldRemoveAllInstancesOfRunnableFromQueue() throws Exception { 109e2c2daa717063899e30b0cafd4d81e60a36d6b0fpivotal-jiwire scheduler.post(new TestRunnable()); 110e2c2daa717063899e30b0cafd4d81e60a36d6b0fpivotal-jiwire TestRunnable runnable = new TestRunnable(); 111e2c2daa717063899e30b0cafd4d81e60a36d6b0fpivotal-jiwire scheduler.post(runnable); 112e2c2daa717063899e30b0cafd4d81e60a36d6b0fpivotal-jiwire scheduler.post(runnable); 113e2c2daa717063899e30b0cafd4d81e60a36d6b0fpivotal-jiwire assertThat(scheduler.enqueuedTaskCount(), equalTo(3)); 114e2c2daa717063899e30b0cafd4d81e60a36d6b0fpivotal-jiwire scheduler.remove(runnable); 115e2c2daa717063899e30b0cafd4d81e60a36d6b0fpivotal-jiwire assertThat(scheduler.enqueuedTaskCount(), equalTo(1)); 116e2c2daa717063899e30b0cafd4d81e60a36d6b0fpivotal-jiwire scheduler.advanceToLastPostedRunnable(); 117e2c2daa717063899e30b0cafd4d81e60a36d6b0fpivotal-jiwire assertThat(runnable.wasRun, equalTo(false)); 118e2c2daa717063899e30b0cafd4d81e60a36d6b0fpivotal-jiwire } 119e2c2daa717063899e30b0cafd4d81e60a36d6b0fpivotal-jiwire 120e2c2daa717063899e30b0cafd4d81e60a36d6b0fpivotal-jiwire @Test 121a4f7d50f8e6f12d541421383544fe16c185e4bbcPhil Goodwin & Tyler Schultz public void resetShouldUnPause() throws Exception { 122a4f7d50f8e6f12d541421383544fe16c185e4bbcPhil Goodwin & Tyler Schultz scheduler.pause(); 123a4f7d50f8e6f12d541421383544fe16c185e4bbcPhil Goodwin & Tyler Schultz 124a4f7d50f8e6f12d541421383544fe16c185e4bbcPhil Goodwin & Tyler Schultz TestRunnable runnable = new TestRunnable(); 125a4f7d50f8e6f12d541421383544fe16c185e4bbcPhil Goodwin & Tyler Schultz scheduler.post(runnable); 126a4f7d50f8e6f12d541421383544fe16c185e4bbcPhil Goodwin & Tyler Schultz 127a4f7d50f8e6f12d541421383544fe16c185e4bbcPhil Goodwin & Tyler Schultz assertThat(runnable.wasRun, equalTo(false)); 12840c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams 129a4f7d50f8e6f12d541421383544fe16c185e4bbcPhil Goodwin & Tyler Schultz scheduler.reset(); 130a4f7d50f8e6f12d541421383544fe16c185e4bbcPhil Goodwin & Tyler Schultz scheduler.post(runnable); 131a4f7d50f8e6f12d541421383544fe16c185e4bbcPhil Goodwin & Tyler Schultz assertThat(runnable.wasRun, equalTo(true)); 132a4f7d50f8e6f12d541421383544fe16c185e4bbcPhil Goodwin & Tyler Schultz } 133a4f7d50f8e6f12d541421383544fe16c185e4bbcPhil Goodwin & Tyler Schultz 134a4f7d50f8e6f12d541421383544fe16c185e4bbcPhil Goodwin & Tyler Schultz @Test 135a4f7d50f8e6f12d541421383544fe16c185e4bbcPhil Goodwin & Tyler Schultz public void resetShouldClearPendingRunnables() throws Exception { 136a4f7d50f8e6f12d541421383544fe16c185e4bbcPhil Goodwin & Tyler Schultz scheduler.pause(); 137a4f7d50f8e6f12d541421383544fe16c185e4bbcPhil Goodwin & Tyler Schultz 138a4f7d50f8e6f12d541421383544fe16c185e4bbcPhil Goodwin & Tyler Schultz TestRunnable runnable1 = new TestRunnable(); 139a4f7d50f8e6f12d541421383544fe16c185e4bbcPhil Goodwin & Tyler Schultz scheduler.post(runnable1); 140a4f7d50f8e6f12d541421383544fe16c185e4bbcPhil Goodwin & Tyler Schultz 141a4f7d50f8e6f12d541421383544fe16c185e4bbcPhil Goodwin & Tyler Schultz assertThat(runnable1.wasRun, equalTo(false)); 142a4f7d50f8e6f12d541421383544fe16c185e4bbcPhil Goodwin & Tyler Schultz 143a4f7d50f8e6f12d541421383544fe16c185e4bbcPhil Goodwin & Tyler Schultz scheduler.reset(); 144a4f7d50f8e6f12d541421383544fe16c185e4bbcPhil Goodwin & Tyler Schultz 145a4f7d50f8e6f12d541421383544fe16c185e4bbcPhil Goodwin & Tyler Schultz TestRunnable runnable2 = new TestRunnable(); 146a4f7d50f8e6f12d541421383544fe16c185e4bbcPhil Goodwin & Tyler Schultz scheduler.post(runnable2); 14740c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams 148a4f7d50f8e6f12d541421383544fe16c185e4bbcPhil Goodwin & Tyler Schultz assertThat(runnable1.wasRun, equalTo(false)); 149a4f7d50f8e6f12d541421383544fe16c185e4bbcPhil Goodwin & Tyler Schultz assertThat(runnable2.wasRun, equalTo(true)); 150a4f7d50f8e6f12d541421383544fe16c185e4bbcPhil Goodwin & Tyler Schultz } 151a4f7d50f8e6f12d541421383544fe16c185e4bbcPhil Goodwin & Tyler Schultz 152f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips private class AddToTranscript implements Runnable { 153f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips private String event; 154f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips 155f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips public AddToTranscript(String event) { 156f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips this.event = event; 157f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips } 158f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips 159f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips @Override 160f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips public void run() { 161f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips transcript.add(event); 162f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips } 163f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips } 164f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips} 165