Home | History | Annotate | Download | only in shadows
      1 package com.xtremelabs.robolectric.shadows;
      2 
      3 import android.os.Handler;
      4 import android.os.HandlerThread;
      5 import android.os.Looper;
      6 
      7 import com.xtremelabs.robolectric.WithTestDefaultsRunner;
      8 import org.junit.Test;
      9 import org.junit.runner.RunWith;
     10 
     11 import static com.xtremelabs.robolectric.Robolectric.shadowOf;
     12 import static org.junit.Assert.*;
     13 
     14 @RunWith(WithTestDefaultsRunner.class)
     15 public class LooperTest {
     16 
     17     @Test
     18     public void testMainLooperAndMyLooperAreTheSameInstanceOnMainThread() throws Exception {
     19         assertSame(Looper.myLooper(), Looper.getMainLooper());
     20     }
     21 
     22     @Test
     23     public void idleMainLooper_executesScheduledTasks() {
     24         final boolean[] wasRun = new boolean[]{false};
     25         new Handler().postDelayed(new Runnable() {
     26             @Override
     27             public void run() {
     28                 wasRun[0] = true;
     29             }
     30         }, 2000);
     31 
     32         assertFalse(wasRun[0]);
     33         ShadowLooper.idleMainLooper(1999);
     34         assertFalse(wasRun[0]);
     35         ShadowLooper.idleMainLooper(1);
     36         assertTrue(wasRun[0]);
     37     }
     38 
     39     @Test
     40     public void differentThreadsGetDifferentLoopers() {
     41         Looper mainLooper = Looper.getMainLooper();
     42         Looper thisThreadsLooper = Looper.myLooper();
     43 
     44         assertSame("junit test's thread should use the main looper", mainLooper, thisThreadsLooper);
     45 
     46         final Looper[] thread1Looper = new Looper[1];
     47         new Thread() {
     48             @Override
     49             public void run() {
     50                 Looper.prepare();
     51                 thread1Looper[0] = Looper.myLooper();
     52             }
     53         }.start();
     54 
     55         while(thread1Looper[0] == null) {
     56             Thread.yield();
     57         }
     58 
     59         assertNotSame(mainLooper, thread1Looper[0]);
     60     }
     61 
     62     @Test(expected = RuntimeException.class)
     63     public void shouldThrowRuntimeExceptionIfTryingToQuitMainLooper() throws Exception {
     64         Looper.getMainLooper().quit();
     65     }
     66 
     67     @Test
     68     public void shouldNotQueueMessagesIfLooperIsQuit() throws Exception {
     69         HandlerThread ht = new HandlerThread("test1");
     70         ht.start();
     71         Looper looper = ht.getLooper();
     72         looper.quit();
     73         assertTrue(shadowOf(looper).hasQuit());
     74         assertFalse(shadowOf(looper).post(new Runnable() {
     75             @Override public void run() { }
     76         }, 0));
     77 
     78         assertFalse(shadowOf(looper).postAtFrontOfQueue(new Runnable() {
     79             @Override
     80             public void run() {
     81             }
     82         }));
     83         assertFalse(shadowOf(looper).getScheduler().areAnyRunnable());
     84     }
     85 
     86     @Test
     87     public void shouldThrowawayRunnableQueueIfLooperQuits() throws Exception {
     88         HandlerThread ht = new HandlerThread("test1");
     89         ht.start();
     90         Looper looper = ht.getLooper();
     91         shadowOf(looper).pause();
     92         shadowOf(looper).post(new Runnable() {
     93             @Override
     94             public void run() {
     95             }
     96         }, 0);
     97         looper.quit();
     98         assertTrue(shadowOf(looper).hasQuit());
     99         assertFalse(shadowOf(looper).getScheduler().areAnyRunnable());
    100     }
    101 
    102     @Test
    103     public void testLoopThread() {
    104     	assertTrue(shadowOf(Looper.getMainLooper()).getThread() == Thread.currentThread());
    105     }
    106 }
    107