1package com.xtremelabs.robolectric.util; 2 3import com.xtremelabs.robolectric.Robolectric; 4 5import java.util.Collection; 6import java.util.List; 7import java.util.concurrent.Callable; 8import java.util.concurrent.ExecutionException; 9import java.util.concurrent.ExecutorService; 10import java.util.concurrent.Future; 11import java.util.concurrent.FutureTask; 12import java.util.concurrent.TimeUnit; 13import java.util.concurrent.TimeoutException; 14 15public class RobolectricBackgroundExecutorService implements ExecutorService { 16 @Override 17 public void shutdown() { 18 throw new UnsupportedOperationException(); 19 } 20 21 @Override 22 public List<Runnable> shutdownNow() { 23 throw new UnsupportedOperationException(); 24 } 25 26 @Override 27 public boolean isShutdown() { 28 throw new UnsupportedOperationException(); 29 } 30 31 @Override 32 public boolean isTerminated() { 33 throw new UnsupportedOperationException(); 34 } 35 36 @Override 37 public boolean awaitTermination(long l, TimeUnit timeUnit) throws InterruptedException { 38 throw new UnsupportedOperationException(); 39 } 40 41 @Override 42 public <T> Future<T> submit(Callable<T> tCallable) { 43 return schedule(new FutureTask<T>(tCallable)); 44 } 45 46 @Override 47 public <T> Future<T> submit(Runnable runnable, T t) { 48 return schedule(new FutureTask<T>(runnable, t)); 49 } 50 51 @Override 52 public Future<?> submit(Runnable runnable) { 53 return submit(runnable, null); 54 } 55 56 private <T> Future<T> schedule(final FutureTask<T> futureTask) { 57 Robolectric.getShadowApplication().getBackgroundScheduler().post(new Runnable() { 58 @Override 59 public void run() { 60 futureTask.run(); 61 } 62 }); 63 64 return futureTask; 65 } 66 67 @Override 68 public <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> callables) throws InterruptedException { 69 throw new UnsupportedOperationException(); 70 } 71 72 @Override 73 public <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> callables, long l, TimeUnit timeUnit) throws InterruptedException { 74 throw new UnsupportedOperationException(); 75 } 76 77 @Override 78 public <T> T invokeAny(Collection<? extends Callable<T>> callables) throws InterruptedException, ExecutionException { 79 throw new UnsupportedOperationException(); 80 } 81 82 @Override 83 public <T> T invokeAny(Collection<? extends Callable<T>> callables, long l, TimeUnit timeUnit) throws InterruptedException, ExecutionException, TimeoutException { 84 throw new UnsupportedOperationException(); 85 } 86 87 @Override 88 public void execute(Runnable runnable) { 89 submit(runnable); 90 } 91} 92 93