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