1package com.xtremelabs.robolectric.util; 2 3import com.xtremelabs.robolectric.Robolectric; 4import com.xtremelabs.robolectric.WithTestDefaultsRunner; 5import org.junit.Before; 6import org.junit.Test; 7import org.junit.runner.RunWith; 8 9import java.util.concurrent.Callable; 10import java.util.concurrent.Future; 11 12import static org.junit.Assert.assertEquals; 13import static org.junit.Assert.assertFalse; 14import static org.junit.Assert.assertTrue; 15 16@RunWith(WithTestDefaultsRunner.class) 17public class RobolectricBackgroundExecutorServiceTest { 18 private Transcript transcript; 19 private RobolectricBackgroundExecutorService executorService; 20 private Runnable runnable; 21 22 @Before public void setUp() throws Exception { 23 transcript = new Transcript(); 24 executorService = new RobolectricBackgroundExecutorService(); 25 26 Robolectric.getBackgroundScheduler().pause(); 27 28 runnable = new Runnable() { 29 @Override public void run() { 30 transcript.add("background event ran"); 31 } 32 }; 33 } 34 35 @Test 36 public void execute_shouldRunStuffOnBackgroundThread() throws Exception { 37 executorService.execute(runnable); 38 39 transcript.assertNoEventsSoFar(); 40 41 Robolectric.runBackgroundTasks(); 42 transcript.assertEventsSoFar("background event ran"); 43 } 44 45 @Test 46 public void submitRunnable_shouldRunStuffOnBackgroundThread() throws Exception { 47 Future<String> future = executorService.submit(runnable, "foo"); 48 49 transcript.assertNoEventsSoFar(); 50 assertFalse(future.isDone()); 51 52 Robolectric.runBackgroundTasks(); 53 transcript.assertEventsSoFar("background event ran"); 54 assertTrue(future.isDone()); 55 56 assertEquals("foo", future.get()); 57 } 58 59 @Test 60 public void submitCallable_shouldRunStuffOnBackgroundThread() throws Exception { 61 Future<String> future = executorService.submit(new Callable<String>() { 62 @Override public String call() throws Exception { 63 runnable.run(); 64 return "foo"; 65 } 66 }); 67 68 transcript.assertNoEventsSoFar(); 69 assertFalse(future.isDone()); 70 71 Robolectric.runBackgroundTasks(); 72 transcript.assertEventsSoFar("background event ran"); 73 assertTrue(future.isDone()); 74 75 assertEquals("foo", future.get()); 76 } 77} 78