blob: b3529f19da6e411c2dbd3a585865a8effbf04217 [file] [log] [blame]
package com.xtremelabs.robolectric.util;
import com.xtremelabs.robolectric.Robolectric;
import java.util.Collection;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Future;
import java.util.concurrent.FutureTask;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
public class RobolectricBackgroundExecutorService implements ExecutorService {
@Override
public void shutdown() {
throw new UnsupportedOperationException();
}
@Override
public List<Runnable> shutdownNow() {
throw new UnsupportedOperationException();
}
@Override
public boolean isShutdown() {
throw new UnsupportedOperationException();
}
@Override
public boolean isTerminated() {
throw new UnsupportedOperationException();
}
@Override
public boolean awaitTermination(long l, TimeUnit timeUnit) throws InterruptedException {
throw new UnsupportedOperationException();
}
@Override
public <T> Future<T> submit(Callable<T> tCallable) {
return schedule(new FutureTask<T>(tCallable));
}
@Override
public <T> Future<T> submit(Runnable runnable, T t) {
return schedule(new FutureTask<T>(runnable, t));
}
@Override
public Future<?> submit(Runnable runnable) {
return submit(runnable, null);
}
private <T> Future<T> schedule(final FutureTask<T> futureTask) {
Robolectric.getShadowApplication().getBackgroundScheduler().post(new Runnable() {
@Override
public void run() {
futureTask.run();
}
});
return futureTask;
}
@Override
public <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> callables) throws InterruptedException {
throw new UnsupportedOperationException();
}
@Override
public <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> callables, long l, TimeUnit timeUnit) throws InterruptedException {
throw new UnsupportedOperationException();
}
@Override
public <T> T invokeAny(Collection<? extends Callable<T>> callables) throws InterruptedException, ExecutionException {
throw new UnsupportedOperationException();
}
@Override
public <T> T invokeAny(Collection<? extends Callable<T>> callables, long l, TimeUnit timeUnit) throws InterruptedException, ExecutionException, TimeoutException {
throw new UnsupportedOperationException();
}
@Override
public void execute(Runnable runnable) {
submit(runnable);
}
}