HandlerTest.java revision 40674c5041023f9b5cb5570b8c5b81b5968ec585
133873d2b41a5cd2597b20a4e88eb8942944c0f23Tyler Schultzpackage com.xtremelabs.robolectric.shadows; 2d18686a842f75eeef2845925147fa17f16af6459Christian Williams 3d18686a842f75eeef2845925147fa17f16af6459Christian Williamsimport android.os.Handler; 4d18686a842f75eeef2845925147fa17f16af6459Christian Williamsimport android.os.Looper; 5500a8f2575826f53dd09cf2400eb587a7ea687abMark Bakkerimport android.os.Message; 6345fb6b77303f0d3c98cf748fefa0136183bdc79Christian Williamsimport com.xtremelabs.robolectric.Robolectric; 707257335f88da163910cc0bd039e6163edc38580Gregg Van Hove & Phil Goodwinimport com.xtremelabs.robolectric.WithTestDefaultsRunner; 8b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultzimport com.xtremelabs.robolectric.util.TestRunnable; 9a2043a8fff01f3e2d9a5e30dd1cf5fb6a5342f4dTyler Schultzimport com.xtremelabs.robolectric.util.Transcript; 10d18686a842f75eeef2845925147fa17f16af6459Christian Williamsimport org.junit.Before; 11d18686a842f75eeef2845925147fa17f16af6459Christian Williamsimport org.junit.Test; 12d18686a842f75eeef2845925147fa17f16af6459Christian Williamsimport org.junit.runner.RunWith; 13d18686a842f75eeef2845925147fa17f16af6459Christian Williams 14345fb6b77303f0d3c98cf748fefa0136183bdc79Christian Williamsimport static com.xtremelabs.robolectric.Robolectric.newInstanceOf; 15e7a41c9b39233781c97dd599ff61024f0510e308Christian Williamsimport static com.xtremelabs.robolectric.Robolectric.shadowOf; 16a3030055b95774b06a963ccc9224fac58c887cb2Christian Williams & Phil Goodwinimport static org.hamcrest.CoreMatchers.equalTo; 17d642b5dd37e4e1c143e610e835ef72ef495a3272Jan Berkelimport static org.hamcrest.CoreMatchers.nullValue; 18b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultzimport static org.junit.Assert.assertThat; 19478a40ed43134ef1568a19ab5233a5736a21c57bGlenn Jahnke & Lenny Turetskyimport static org.junit.Assert.assertTrue; 2004e66088f357467378221115b4981cb8cf3f8764Daveimport static org.junit.Assert.assertFalse; 21d18686a842f75eeef2845925147fa17f16af6459Christian Williams 2207257335f88da163910cc0bd039e6163edc38580Gregg Van Hove & Phil Goodwin@RunWith(WithTestDefaultsRunner.class) 23d18686a842f75eeef2845925147fa17f16af6459Christian Williamspublic class HandlerTest { 24d18686a842f75eeef2845925147fa17f16af6459Christian Williams private Transcript transcript; 25b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz TestRunnable scratchRunnable = new TestRunnable(); 26d18686a842f75eeef2845925147fa17f16af6459Christian Williams 27816362580ec2c74e4bf15f8f3d1081084dac0a61Dave private Handler.Callback callback = new Handler.Callback() { 28816362580ec2c74e4bf15f8f3d1081084dac0a61Dave @Override 29816362580ec2c74e4bf15f8f3d1081084dac0a61Dave public boolean handleMessage(Message msg) { 30816362580ec2c74e4bf15f8f3d1081084dac0a61Dave hasHandlerCallbackHandledMessage = true; 31816362580ec2c74e4bf15f8f3d1081084dac0a61Dave return false; 32816362580ec2c74e4bf15f8f3d1081084dac0a61Dave } 33816362580ec2c74e4bf15f8f3d1081084dac0a61Dave }; 34816362580ec2c74e4bf15f8f3d1081084dac0a61Dave 35816362580ec2c74e4bf15f8f3d1081084dac0a61Dave private Boolean hasHandlerCallbackHandledMessage = false; 36816362580ec2c74e4bf15f8f3d1081084dac0a61Dave 37d18686a842f75eeef2845925147fa17f16af6459Christian Williams @Before 38d18686a842f75eeef2845925147fa17f16af6459Christian Williams public void setUp() throws Exception { 39d18686a842f75eeef2845925147fa17f16af6459Christian Williams transcript = new Transcript(); 40d18686a842f75eeef2845925147fa17f16af6459Christian Williams } 41d18686a842f75eeef2845925147fa17f16af6459Christian Williams 42d18686a842f75eeef2845925147fa17f16af6459Christian Williams @Test 43d18686a842f75eeef2845925147fa17f16af6459Christian Williams public void testInsertsRunnablesBasedOnLooper() throws Exception { 44d18686a842f75eeef2845925147fa17f16af6459Christian Williams Looper looper = newInstanceOf(Looper.class); 45d18686a842f75eeef2845925147fa17f16af6459Christian Williams 46d18686a842f75eeef2845925147fa17f16af6459Christian Williams Handler handler1 = new Handler(looper); 47d18686a842f75eeef2845925147fa17f16af6459Christian Williams handler1.post(new Say("first thing")); 48d18686a842f75eeef2845925147fa17f16af6459Christian Williams 49d18686a842f75eeef2845925147fa17f16af6459Christian Williams Handler handler2 = new Handler(looper); 50d18686a842f75eeef2845925147fa17f16af6459Christian Williams handler2.post(new Say("second thing")); 51d18686a842f75eeef2845925147fa17f16af6459Christian Williams 52433b46be67768332f764eab6879e0649993d79e3Christian Williams shadowOf(looper).idle(); 53d18686a842f75eeef2845925147fa17f16af6459Christian Williams 54d18686a842f75eeef2845925147fa17f16af6459Christian Williams transcript.assertEventsSoFar("first thing", "second thing"); 55d18686a842f75eeef2845925147fa17f16af6459Christian Williams } 56d18686a842f75eeef2845925147fa17f16af6459Christian Williams 57d18686a842f75eeef2845925147fa17f16af6459Christian Williams @Test 58d18686a842f75eeef2845925147fa17f16af6459Christian Williams public void testDefaultConstructorUsesDefaultLooper() throws Exception { 59d18686a842f75eeef2845925147fa17f16af6459Christian Williams Handler handler1 = new Handler(); 60d18686a842f75eeef2845925147fa17f16af6459Christian Williams handler1.post(new Say("first thing")); 61d18686a842f75eeef2845925147fa17f16af6459Christian Williams 62d18686a842f75eeef2845925147fa17f16af6459Christian Williams Handler handler2 = new Handler(Looper.myLooper()); 63d18686a842f75eeef2845925147fa17f16af6459Christian Williams handler2.post(new Say("second thing")); 64d18686a842f75eeef2845925147fa17f16af6459Christian Williams 65433b46be67768332f764eab6879e0649993d79e3Christian Williams shadowOf(Looper.myLooper()).idle(); 66d18686a842f75eeef2845925147fa17f16af6459Christian Williams 67d18686a842f75eeef2845925147fa17f16af6459Christian Williams transcript.assertEventsSoFar("first thing", "second thing"); 68d18686a842f75eeef2845925147fa17f16af6459Christian Williams } 69d18686a842f75eeef2845925147fa17f16af6459Christian Williams 70d18686a842f75eeef2845925147fa17f16af6459Christian Williams @Test 71d18686a842f75eeef2845925147fa17f16af6459Christian Williams public void testDifferentLoopersGetDifferentQueues() throws Exception { 72345fb6b77303f0d3c98cf748fefa0136183bdc79Christian Williams Looper looper1 = Robolectric.newInstanceOf(Looper.class); 735dab156481a91717311fa47ff7e27a54865abfa3Phil Goodwin & Tyler Schultz Robolectric.pauseLooper(looper1); 749cc6655219ea2788432360cf7f791488882bfbc3Phil Goodwin & Tyler Schultz 75345fb6b77303f0d3c98cf748fefa0136183bdc79Christian Williams Looper looper2 = Robolectric.newInstanceOf(Looper.class); 765dab156481a91717311fa47ff7e27a54865abfa3Phil Goodwin & Tyler Schultz Robolectric.pauseLooper(looper2); 77534fd31dba68daad0ad9d98c3c480139a3efa5a1Christian Williams & Tyler Schultz 78534fd31dba68daad0ad9d98c3c480139a3efa5a1Christian Williams & Tyler Schultz Handler handler1 = new Handler(looper1); 79d18686a842f75eeef2845925147fa17f16af6459Christian Williams handler1.post(new Say("first thing")); 80d18686a842f75eeef2845925147fa17f16af6459Christian Williams 81534fd31dba68daad0ad9d98c3c480139a3efa5a1Christian Williams & Tyler Schultz Handler handler2 = new Handler(looper2); 82d18686a842f75eeef2845925147fa17f16af6459Christian Williams handler2.post(new Say("second thing")); 83d18686a842f75eeef2845925147fa17f16af6459Christian Williams 84433b46be67768332f764eab6879e0649993d79e3Christian Williams shadowOf(looper2).idle(); 85d18686a842f75eeef2845925147fa17f16af6459Christian Williams 86d18686a842f75eeef2845925147fa17f16af6459Christian Williams transcript.assertEventsSoFar("second thing"); 87d18686a842f75eeef2845925147fa17f16af6459Christian Williams } 88d18686a842f75eeef2845925147fa17f16af6459Christian Williams 89b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz @Test 90816362580ec2c74e4bf15f8f3d1081084dac0a61Dave public void shouldCallProvidedHandlerCallback() { 91816362580ec2c74e4bf15f8f3d1081084dac0a61Dave Handler handler = new Handler(callback); 92816362580ec2c74e4bf15f8f3d1081084dac0a61Dave handler.sendMessage(new Message()); 93816362580ec2c74e4bf15f8f3d1081084dac0a61Dave assertTrue(hasHandlerCallbackHandledMessage); 94816362580ec2c74e4bf15f8f3d1081084dac0a61Dave } 95816362580ec2c74e4bf15f8f3d1081084dac0a61Dave 96816362580ec2c74e4bf15f8f3d1081084dac0a61Dave @Test 97b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz public void testPostAndIdleMainLooper() throws Exception { 98b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz new Handler().post(scratchRunnable); 99b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz ShadowHandler.idleMainLooper(); 100b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz assertThat(scratchRunnable.wasRun, equalTo(true)); 101b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz } 102b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz 103b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz @Test 104b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz public void postDelayedThenIdleMainLooper_shouldNotRunRunnable() throws Exception { 105b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz new Handler().postDelayed(scratchRunnable, 1); 106b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz ShadowHandler.idleMainLooper(); 107b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz assertThat(scratchRunnable.wasRun, equalTo(false)); 108b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz } 109b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz 110b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz @Test 111b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz public void testPostDelayedThenRunMainLooperOneTask() throws Exception { 112b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz new Handler().postDelayed(scratchRunnable, 1); 113b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz ShadowHandler.runMainLooperOneTask(); 114b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz assertThat(scratchRunnable.wasRun, equalTo(true)); 115b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz } 116b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz 117b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz @Test 118e2c2daa717063899e30b0cafd4d81e60a36d6b0fpivotal-jiwire public void testRemoveCallbacks() throws Exception { 119e2c2daa717063899e30b0cafd4d81e60a36d6b0fpivotal-jiwire Handler handler = new Handler(); 120e2c2daa717063899e30b0cafd4d81e60a36d6b0fpivotal-jiwire ShadowLooper shadowLooper = shadowOf(handler.getLooper()); 121e2c2daa717063899e30b0cafd4d81e60a36d6b0fpivotal-jiwire shadowLooper.pause(); 122e2c2daa717063899e30b0cafd4d81e60a36d6b0fpivotal-jiwire handler.post(scratchRunnable); 123e2c2daa717063899e30b0cafd4d81e60a36d6b0fpivotal-jiwire handler.removeCallbacks(scratchRunnable); 124e2c2daa717063899e30b0cafd4d81e60a36d6b0fpivotal-jiwire 125e2c2daa717063899e30b0cafd4d81e60a36d6b0fpivotal-jiwire shadowLooper.unPause(); 126e2c2daa717063899e30b0cafd4d81e60a36d6b0fpivotal-jiwire 127e2c2daa717063899e30b0cafd4d81e60a36d6b0fpivotal-jiwire assertThat(scratchRunnable.wasRun, equalTo(false)); 128e2c2daa717063899e30b0cafd4d81e60a36d6b0fpivotal-jiwire } 129e2c2daa717063899e30b0cafd4d81e60a36d6b0fpivotal-jiwire 130e2c2daa717063899e30b0cafd4d81e60a36d6b0fpivotal-jiwire @Test 131b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz public void testPostDelayedThenRunMainLooperToNextTask_shouldRunOneTask() throws Exception { 132b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz new Handler().postDelayed(scratchRunnable, 1); 133b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz ShadowHandler.runMainLooperToNextTask(); 134b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz assertThat(scratchRunnable.wasRun, equalTo(true)); 135b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz } 136b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz 137b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz @Test 138b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz public void testPostDelayedTwiceThenRunMainLooperToNextTask_shouldRunMultipleTasks() throws Exception { 139b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz TestRunnable task1 = new TestRunnable(); 140b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz TestRunnable task2 = new TestRunnable(); 141b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz 142b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz new Handler().postDelayed(task1, 1); 143b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz new Handler().postDelayed(task2, 1); 144b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz 145b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz ShadowHandler.runMainLooperToNextTask(); 146b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz assertThat(task1.wasRun, equalTo(true)); 147b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz assertThat(task2.wasRun, equalTo(true)); 148b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz } 149b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz 150b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz @Test 151b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz public void testPostDelayedTwiceThenRunMainLooperOneTask_shouldRunOnlyOneTask() throws Exception { 152b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz TestRunnable task1 = new TestRunnable(); 153b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz TestRunnable task2 = new TestRunnable(); 154b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz 155b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz new Handler().postDelayed(task1, 1); 156b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz new Handler().postDelayed(task2, 1); 157b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz 158b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz ShadowHandler.runMainLooperOneTask(); 159b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz assertThat(task1.wasRun, equalTo(true)); 160b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz assertThat(task2.wasRun, equalTo(false)); 161b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz } 162b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz 163b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz @Test 164b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz public void testPostDelayedMultipleThenRunMainLooperOneTask_shouldRunMultipleTask() throws Exception { 165b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz TestRunnable task1 = new TestRunnable(); 166b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz TestRunnable task2 = new TestRunnable(); 167b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz TestRunnable task3 = new TestRunnable(); 168b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz 169b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz new Handler().postDelayed(task1, 1); 170b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz new Handler().postDelayed(task2, 10); 171b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz new Handler().postDelayed(task3, 100); 172b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz 173b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz ShadowHandler.runMainLooperToEndOfTasks(); 174b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz assertThat(task1.wasRun, equalTo(true)); 175b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz assertThat(task2.wasRun, equalTo(true)); 176b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz assertThat(task3.wasRun, equalTo(true)); 177b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz } 178b54505e42361f87b8ba24a785ae257f7d15feb2fPhil Goodwin & Tyler Schultz 179500a8f2575826f53dd09cf2400eb587a7ea687abMark Bakker @Test 180478a40ed43134ef1568a19ab5233a5736a21c57bGlenn Jahnke & Lenny Turetsky public void testPostAtFrontOfQueueThenRunMainLooperOneTaskAtATime_shouldRunFrontOfQueueTaskFirst() throws Exception { 181478a40ed43134ef1568a19ab5233a5736a21c57bGlenn Jahnke & Lenny Turetsky TestRunnable task1 = new TestRunnable(); 182478a40ed43134ef1568a19ab5233a5736a21c57bGlenn Jahnke & Lenny Turetsky TestRunnable task2 = new TestRunnable(); 183478a40ed43134ef1568a19ab5233a5736a21c57bGlenn Jahnke & Lenny Turetsky 184478a40ed43134ef1568a19ab5233a5736a21c57bGlenn Jahnke & Lenny Turetsky ShadowLooper.pauseMainLooper(); 185478a40ed43134ef1568a19ab5233a5736a21c57bGlenn Jahnke & Lenny Turetsky new Handler().post(task1); 186478a40ed43134ef1568a19ab5233a5736a21c57bGlenn Jahnke & Lenny Turetsky boolean result = new Handler().postAtFrontOfQueue(task2); 187478a40ed43134ef1568a19ab5233a5736a21c57bGlenn Jahnke & Lenny Turetsky 188478a40ed43134ef1568a19ab5233a5736a21c57bGlenn Jahnke & Lenny Turetsky assertTrue(result); 189478a40ed43134ef1568a19ab5233a5736a21c57bGlenn Jahnke & Lenny Turetsky 190478a40ed43134ef1568a19ab5233a5736a21c57bGlenn Jahnke & Lenny Turetsky ShadowHandler.runMainLooperOneTask(); 191478a40ed43134ef1568a19ab5233a5736a21c57bGlenn Jahnke & Lenny Turetsky assertThat(task2.wasRun, equalTo(true)); 192478a40ed43134ef1568a19ab5233a5736a21c57bGlenn Jahnke & Lenny Turetsky assertThat(task1.wasRun, equalTo(false)); 193478a40ed43134ef1568a19ab5233a5736a21c57bGlenn Jahnke & Lenny Turetsky ShadowHandler.runMainLooperOneTask(); 194478a40ed43134ef1568a19ab5233a5736a21c57bGlenn Jahnke & Lenny Turetsky assertThat(task1.wasRun, equalTo(true)); 195478a40ed43134ef1568a19ab5233a5736a21c57bGlenn Jahnke & Lenny Turetsky } 196478a40ed43134ef1568a19ab5233a5736a21c57bGlenn Jahnke & Lenny Turetsky 197478a40ed43134ef1568a19ab5233a5736a21c57bGlenn Jahnke & Lenny Turetsky @Test 19806aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard public void sendEmptyMessage_addMessageToQueue() { 19906aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard Robolectric.pauseMainLooper(); 20006aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard Handler handler = new Handler(); 20106aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard assertThat(handler.hasMessages(123), equalTo(false)); 20206aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard handler.sendEmptyMessage(123); 20306aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard assertThat(handler.hasMessages(456), equalTo(false)); 20406aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard assertThat(handler.hasMessages(123), equalTo(true)); 20506aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard Robolectric.idleMainLooper(0); 20606aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard assertThat(handler.hasMessages(123), equalTo(false)); 20706aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard } 208d642b5dd37e4e1c143e610e835ef72ef495a3272Jan Berkel 20906aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard @Test 21006aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard public void sendEmptyMessageDelayed_sendsMessageAtCorrectTime() { 21106aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard Robolectric.pauseMainLooper(); 21206aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard Handler handler = new Handler(); 21306aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard handler.sendEmptyMessageDelayed(123, 500); 21406aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard assertThat(handler.hasMessages(123), equalTo(true)); 21506aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard Robolectric.idleMainLooper(100); 21606aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard assertThat(handler.hasMessages(123), equalTo(true)); 21706aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard Robolectric.idleMainLooper(400); 21806aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard assertThat(handler.hasMessages(123), equalTo(false)); 21906aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard } 22006aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard 22106aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard @Test 22206aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard public void removeMessages_takesMessageOutOfQueue() { 22306aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard Robolectric.pauseMainLooper(); 22406aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard Handler handler = new Handler(); 22506aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard handler.sendEmptyMessageDelayed(123, 500); 22606aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard handler.removeMessages(123); 22706aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard assertThat(handler.hasMessages(123), equalTo(false)); 22806aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard } 22906aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard 23006aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard @Test 2313fbb2f6e44960007166cb8824218f3dc2bb7893aJan Berkel public void removeMessage_withSpecifiedObject() throws Exception { 2323fbb2f6e44960007166cb8824218f3dc2bb7893aJan Berkel Robolectric.pauseMainLooper(); 2333fbb2f6e44960007166cb8824218f3dc2bb7893aJan Berkel Handler handler = new Handler(); 2343fbb2f6e44960007166cb8824218f3dc2bb7893aJan Berkel Message.obtain(handler, 123, "foo").sendToTarget(); 2353fbb2f6e44960007166cb8824218f3dc2bb7893aJan Berkel Message.obtain(handler, 123, "bar").sendToTarget(); 2363fbb2f6e44960007166cb8824218f3dc2bb7893aJan Berkel 2373fbb2f6e44960007166cb8824218f3dc2bb7893aJan Berkel assertThat(handler.hasMessages(123), equalTo(true)); 2383fbb2f6e44960007166cb8824218f3dc2bb7893aJan Berkel assertThat(handler.hasMessages(123, "foo"), equalTo(true)); 2393fbb2f6e44960007166cb8824218f3dc2bb7893aJan Berkel assertThat(handler.hasMessages(123, "bar"), equalTo(true)); 2403fbb2f6e44960007166cb8824218f3dc2bb7893aJan Berkel assertThat(handler.hasMessages(123, "baz"), equalTo(false)); 2413fbb2f6e44960007166cb8824218f3dc2bb7893aJan Berkel 2423fbb2f6e44960007166cb8824218f3dc2bb7893aJan Berkel handler.removeMessages(123, "foo"); 2433fbb2f6e44960007166cb8824218f3dc2bb7893aJan Berkel assertThat(handler.hasMessages(123), equalTo(true)); 2443fbb2f6e44960007166cb8824218f3dc2bb7893aJan Berkel 2453fbb2f6e44960007166cb8824218f3dc2bb7893aJan Berkel handler.removeMessages(123, "bar"); 2463fbb2f6e44960007166cb8824218f3dc2bb7893aJan Berkel assertThat(handler.hasMessages(123), equalTo(false)); 2473fbb2f6e44960007166cb8824218f3dc2bb7893aJan Berkel } 2483fbb2f6e44960007166cb8824218f3dc2bb7893aJan Berkel 2493fbb2f6e44960007166cb8824218f3dc2bb7893aJan Berkel @Test 25004e66088f357467378221115b4981cb8cf3f8764Dave public void testHasMessagesWithWhatAndObject() { 25104e66088f357467378221115b4981cb8cf3f8764Dave Robolectric.pauseMainLooper(); 25204e66088f357467378221115b4981cb8cf3f8764Dave Object testObject = new Object(); 25304e66088f357467378221115b4981cb8cf3f8764Dave Handler handler = new Handler(); 25404e66088f357467378221115b4981cb8cf3f8764Dave Message message = handler.obtainMessage(123, testObject); 25504e66088f357467378221115b4981cb8cf3f8764Dave 25604e66088f357467378221115b4981cb8cf3f8764Dave assertFalse(handler.hasMessages(123, testObject)); 25704e66088f357467378221115b4981cb8cf3f8764Dave 25804e66088f357467378221115b4981cb8cf3f8764Dave handler.sendMessage(message); 25904e66088f357467378221115b4981cb8cf3f8764Dave 26004e66088f357467378221115b4981cb8cf3f8764Dave assertTrue(handler.hasMessages(123, testObject)); 26104e66088f357467378221115b4981cb8cf3f8764Dave } 26204e66088f357467378221115b4981cb8cf3f8764Dave 26304e66088f357467378221115b4981cb8cf3f8764Dave @Test 26440674c5041023f9b5cb5570b8c5b81b5968ec585Jon Boekenoogen public void testSendToTarget() { 26540674c5041023f9b5cb5570b8c5b81b5968ec585Jon Boekenoogen Robolectric.pauseMainLooper(); 26640674c5041023f9b5cb5570b8c5b81b5968ec585Jon Boekenoogen Object testObject = new Object(); 26740674c5041023f9b5cb5570b8c5b81b5968ec585Jon Boekenoogen Handler handler = new Handler(); 26840674c5041023f9b5cb5570b8c5b81b5968ec585Jon Boekenoogen Message message = handler.obtainMessage(123, testObject); 26940674c5041023f9b5cb5570b8c5b81b5968ec585Jon Boekenoogen 27040674c5041023f9b5cb5570b8c5b81b5968ec585Jon Boekenoogen assertThat(handler, equalTo(message.getTarget())); 27140674c5041023f9b5cb5570b8c5b81b5968ec585Jon Boekenoogen 27240674c5041023f9b5cb5570b8c5b81b5968ec585Jon Boekenoogen message.sendToTarget(); 27340674c5041023f9b5cb5570b8c5b81b5968ec585Jon Boekenoogen 27440674c5041023f9b5cb5570b8c5b81b5968ec585Jon Boekenoogen assertTrue(handler.hasMessages(123, testObject)); 27540674c5041023f9b5cb5570b8c5b81b5968ec585Jon Boekenoogen } 27640674c5041023f9b5cb5570b8c5b81b5968ec585Jon Boekenoogen 27740674c5041023f9b5cb5570b8c5b81b5968ec585Jon Boekenoogen @Test 27806aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard public void removeMessages_removesFromLooperQueueAsWell() { 27906aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard final boolean[] wasRun = new boolean[1]; 28006aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard Robolectric.pauseMainLooper(); 28106aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard Handler handler = new Handler() { 28206aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard @Override 28306aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard public void handleMessage(Message msg) { 28406aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard wasRun[0] = true; 28506aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard } 28606aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard }; 28706aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard handler.sendEmptyMessageDelayed(123, 500); 28806aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard handler.removeMessages(123); 28906aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard Robolectric.unPauseMainLooper(); 29006aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard assertThat(wasRun[0], equalTo(false)); 29106aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard } 29206aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard 293d642b5dd37e4e1c143e610e835ef72ef495a3272Jan Berkel @Test 294d642b5dd37e4e1c143e610e835ef72ef495a3272Jan Berkel public void shouldObtainMessage() throws Exception { 295d642b5dd37e4e1c143e610e835ef72ef495a3272Jan Berkel Message m0 = new Handler().obtainMessage(); 296d642b5dd37e4e1c143e610e835ef72ef495a3272Jan Berkel assertThat(m0.what, equalTo(0)); 297d642b5dd37e4e1c143e610e835ef72ef495a3272Jan Berkel assertThat(m0.obj, nullValue()); 298d642b5dd37e4e1c143e610e835ef72ef495a3272Jan Berkel 299d642b5dd37e4e1c143e610e835ef72ef495a3272Jan Berkel Message m1 = new Handler().obtainMessage(1); 300d642b5dd37e4e1c143e610e835ef72ef495a3272Jan Berkel assertThat(m1.what, equalTo(1)); 301d642b5dd37e4e1c143e610e835ef72ef495a3272Jan Berkel assertThat(m1.obj, nullValue()); 302d642b5dd37e4e1c143e610e835ef72ef495a3272Jan Berkel 303d642b5dd37e4e1c143e610e835ef72ef495a3272Jan Berkel Message m2 = new Handler().obtainMessage(1, "foo"); 304d642b5dd37e4e1c143e610e835ef72ef495a3272Jan Berkel assertThat(m2.what, equalTo(1)); 305d642b5dd37e4e1c143e610e835ef72ef495a3272Jan Berkel assertThat(m2.obj, equalTo((Object)"foo")); 306d642b5dd37e4e1c143e610e835ef72ef495a3272Jan Berkel 307d642b5dd37e4e1c143e610e835ef72ef495a3272Jan Berkel Message m3 = new Handler().obtainMessage(1, 2, 3); 308d642b5dd37e4e1c143e610e835ef72ef495a3272Jan Berkel assertThat(m3.what, equalTo(1)); 309d642b5dd37e4e1c143e610e835ef72ef495a3272Jan Berkel assertThat(m3.arg1, equalTo(2)); 310d642b5dd37e4e1c143e610e835ef72ef495a3272Jan Berkel assertThat(m3.arg2, equalTo(3)); 311d642b5dd37e4e1c143e610e835ef72ef495a3272Jan Berkel assertThat(m3.obj, nullValue()); 312d642b5dd37e4e1c143e610e835ef72ef495a3272Jan Berkel 313d642b5dd37e4e1c143e610e835ef72ef495a3272Jan Berkel Message m4 = new Handler().obtainMessage(1, 2, 3, "foo"); 314d642b5dd37e4e1c143e610e835ef72ef495a3272Jan Berkel assertThat(m4.what, equalTo(1)); 315d642b5dd37e4e1c143e610e835ef72ef495a3272Jan Berkel assertThat(m4.arg1, equalTo(2)); 316d642b5dd37e4e1c143e610e835ef72ef495a3272Jan Berkel assertThat(m4.arg2, equalTo(3)); 317d642b5dd37e4e1c143e610e835ef72ef495a3272Jan Berkel assertThat(m4.obj, equalTo((Object)"foo")); 318d642b5dd37e4e1c143e610e835ef72ef495a3272Jan Berkel } 319d642b5dd37e4e1c143e610e835ef72ef495a3272Jan Berkel 320d18686a842f75eeef2845925147fa17f16af6459Christian Williams private class Say implements Runnable { 321d18686a842f75eeef2845925147fa17f16af6459Christian Williams private String event; 322d18686a842f75eeef2845925147fa17f16af6459Christian Williams 323d18686a842f75eeef2845925147fa17f16af6459Christian Williams public Say(String event) { 324d18686a842f75eeef2845925147fa17f16af6459Christian Williams this.event = event; 325d18686a842f75eeef2845925147fa17f16af6459Christian Williams } 326d18686a842f75eeef2845925147fa17f16af6459Christian Williams 327d18686a842f75eeef2845925147fa17f16af6459Christian Williams @Override 328d18686a842f75eeef2845925147fa17f16af6459Christian Williams public void run() { 329d18686a842f75eeef2845925147fa17f16af6459Christian Williams transcript.add(event); 330d18686a842f75eeef2845925147fa17f16af6459Christian Williams } 331d18686a842f75eeef2845925147fa17f16af6459Christian Williams } 332d18686a842f75eeef2845925147fa17f16af6459Christian Williams} 333