Home | History | Annotate | Download | only in shadows
      1 package com.xtremelabs.robolectric.shadows;
      2 
      3 import static com.xtremelabs.robolectric.Robolectric.shadowOf;
      4 import static org.junit.Assert.*;
      5 
      6 import com.xtremelabs.robolectric.Robolectric;
      7 import com.xtremelabs.robolectric.WithTestDefaultsRunner;
      8 
      9 import org.junit.After;
     10 import org.junit.Test;
     11 import org.junit.runner.RunWith;
     12 
     13 import android.os.HandlerThread;
     14 import android.os.Looper;
     15 
     16 @RunWith(WithTestDefaultsRunner.class)
     17 public class HandlerThreadTest {
     18 
     19 	private HandlerThread handlerThread;
     20 
     21 	@After
     22 	public void tearDown() throws Exception {
     23 		// Try to ensure we've exited the thread at the end of each test
     24 		if ( handlerThread != null ) {
     25 			handlerThread.quit();
     26 			handlerThread.join();
     27 		}
     28 	}
     29 
     30     @Test
     31     public void shouldReturnLooper() throws Exception {
     32         handlerThread = new HandlerThread("test");
     33         handlerThread.start();
     34         assertNotNull(handlerThread.getLooper());
     35         assertNotSame(handlerThread.getLooper(), Robolectric.application.getMainLooper());
     36     }
     37 
     38     @Test
     39     public void shouldReturnNullIfThreadHasNotBeenStarted() throws Exception {
     40         handlerThread = new HandlerThread("test");
     41         assertNull(handlerThread.getLooper());
     42     }
     43 
     44     @Test
     45     public void shouldQuitLooperAndThread() throws Exception {
     46         handlerThread = new HandlerThread("test");
     47         handlerThread.start();
     48         assertTrue(handlerThread.isAlive());
     49         assertTrue(handlerThread.quit());
     50         handlerThread.join();
     51         assertFalse(handlerThread.isAlive());
     52         handlerThread = null;
     53     }
     54 
     55     @Test
     56     public void shouldStopThreadIfLooperIsQuit() throws Exception {
     57         handlerThread = new HandlerThread("test1");
     58         handlerThread.start();
     59         Looper looper = handlerThread.getLooper();
     60         assertFalse(shadowOf(looper).quit);
     61         looper.quit();
     62         handlerThread.join();
     63         assertFalse(handlerThread.isAlive());
     64         assertTrue(shadowOf(looper).quit);
     65         handlerThread = null;
     66     }
     67 
     68     @Test
     69     public void shouldCallOnLooperPrepared() throws Exception {
     70         final Boolean[] wasCalled = new Boolean[] { false };
     71         handlerThread = new HandlerThread("test") {
     72             @Override
     73             protected void onLooperPrepared() {
     74                 wasCalled[0] = true;
     75             }
     76         };
     77         handlerThread.start();
     78         assertNotNull(handlerThread.getLooper());
     79         assertTrue(wasCalled[0]);
     80     }
     81 }
     82