1ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay/* 2ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay * Copyright (C) 2016 The Android Open Source Project 3ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay * 4ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay * Licensed under the Apache License, Version 2.0 (the "License"); 5ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay * you may not use this file except in compliance with the License. 6ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay * You may obtain a copy of the License at 7ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay * 8ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay * http://www.apache.org/licenses/LICENSE-2.0 9ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay * 10ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay * Unless required by applicable law or agreed to in writing, software 11ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay * distributed under the License is distributed on an "AS IS" BASIS, 12ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay * See the License for the specific language governing permissions and 14ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay * limitations under the License. 15ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay */ 16ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay 17ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKaypackage com.android.documentsui.services; 18ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay 19ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKayimport static junit.framework.Assert.assertFalse; 20ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKayimport static junit.framework.Assert.fail; 21ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay 22ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKayimport java.util.ArrayList; 23ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKayimport java.util.Collection; 24ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKayimport java.util.List; 25ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKayimport java.util.concurrent.Callable; 26ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKayimport java.util.concurrent.Delayed; 27ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKayimport java.util.concurrent.ExecutionException; 28ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKayimport java.util.concurrent.Future; 29ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKayimport java.util.concurrent.ScheduledExecutorService; 30ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKayimport java.util.concurrent.ScheduledFuture; 31ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKayimport java.util.concurrent.TimeUnit; 32ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKayimport java.util.concurrent.TimeoutException; 33ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay 34ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKaypublic class TestScheduledExecutorService implements ScheduledExecutorService { 35ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay 36ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay private List<TestFuture> scheduled = new ArrayList<>(); 37ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay private boolean shutdown; 38ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay 39ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay @Override 40ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay public void shutdown() { 41ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay this.shutdown = true; 42ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay } 43ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay 44ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay @Override 45ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay public List<Runnable> shutdownNow() { 46ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay this.shutdown = true; 47ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay return new ArrayList<>(); 48ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay } 49ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay 50ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay void assertShutdown() { 51ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay if (!shutdown) { 52ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay fail("Executor wasn't shut down."); 53ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay } 54ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay } 55ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay 56ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay @Override 57ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay public boolean isShutdown() { 58ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay return shutdown; 59ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay } 60ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay 61ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay @Override 62ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay public boolean isTerminated() { 63ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay throw new UnsupportedOperationException(); 64ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay } 65ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay 66ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay @Override 67ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay public boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException { 68ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay throw new UnsupportedOperationException(); 69ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay } 70ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay 71ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay @Override 72ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay public <T> Future<T> submit(Callable<T> task) { 73ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay throw new UnsupportedOperationException(); 74ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay } 75ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay 76ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay @Override 77ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay public <T> Future<T> submit(Runnable task, T result) { 78ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay throw new UnsupportedOperationException(); 79ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay } 80ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay 81ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay @Override 82ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay public Future<?> submit(Runnable task) { 83ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay throw new UnsupportedOperationException(); 84ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay } 85ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay 86ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay @Override 87ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay public <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks) 88ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay throws InterruptedException { 89ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay throw new UnsupportedOperationException(); 90ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay } 91ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay 92ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay @Override 93ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay public <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks, long timeout, 94ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay TimeUnit unit) throws InterruptedException { 95ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay throw new UnsupportedOperationException(); 96ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay } 97ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay 98ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay @Override 99ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay public <T> T invokeAny(Collection<? extends Callable<T>> tasks) 100ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay throws InterruptedException, ExecutionException { 101ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay throw new UnsupportedOperationException(); 102ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay } 103ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay 104ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay @Override 105ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay public <T> T invokeAny(Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit) 106ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay throws InterruptedException, ExecutionException, TimeoutException { 107ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay throw new UnsupportedOperationException(); 108ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay } 109ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay 110ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay @Override 111ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay public void execute(Runnable command) { 112ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay throw new UnsupportedOperationException(); 113ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay } 114ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay 115ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay @Override 116ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay public ScheduledFuture<?> schedule(Runnable command, long delay, TimeUnit unit) { 117ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay TestFuture future = new TestFuture(command, delay, unit); 118ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay scheduled.add(future); 119ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay return future; 120ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay } 121ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay 122ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay @Override 123ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay public <V> ScheduledFuture<V> schedule(Callable<V> callable, long delay, TimeUnit unit) { 124ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay throw new UnsupportedOperationException(); 125ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay } 126ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay 127ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay @Override 128ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay public ScheduledFuture<?> scheduleAtFixedRate(Runnable command, long initialDelay, long period, 129ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay TimeUnit unit) { 130ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay throw new UnsupportedOperationException(); 131ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay } 132ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay 133ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay @Override 134ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay public ScheduledFuture<?> scheduleWithFixedDelay(Runnable command, long initialDelay, 135ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay long delay, TimeUnit unit) { 136ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay throw new UnsupportedOperationException(); 137ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay } 138ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay 139ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay void runAll() { 140ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay for (TestFuture future : scheduled) { 141ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay future.runnable.run(); 142ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay } 143ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay } 144ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay 145ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay void run(int taskIndex) { 146ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay scheduled.get(taskIndex).runnable.run(); 147ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay } 148ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay 1493564543e1ece2211a2d5b729fbbf8dd7ac94944cSteve McKay public void assertAlive() { 150ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay assertFalse(isShutdown()); 151ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay } 152ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay 153ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay static class TestFuture implements ScheduledFuture<Void> { 154ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay 155ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay final Runnable runnable; 156ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay final long delay; 157ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay final TimeUnit unit; 158ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay 159ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay public TestFuture(Runnable runnable, long delay, TimeUnit unit) { 160ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay this.runnable = runnable; 161ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay this.delay = delay; 162ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay this.unit = unit; 163ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay } 164ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay 165ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay @Override 166ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay public long getDelay(TimeUnit unit) { 167ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay return 0; 168ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay } 169ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay 170ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay @Override 171ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay public int compareTo(Delayed arg0) { 172ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay return 0; 173ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay } 174ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay 175ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay @Override 176ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay public boolean cancel(boolean mayInterruptIfRunning) { 177ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay return false; 178ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay } 179ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay 180ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay @Override 181ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay public boolean isCancelled() { 182ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay return false; 183ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay } 184ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay 185ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay @Override 186ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay public boolean isDone() { 187ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay return false; 188ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay } 189ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay 190ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay @Override 191ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay public Void get() throws InterruptedException, ExecutionException { 192ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay return null; 193ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay } 194ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay 195ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay @Override 196ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay public Void get(long timeout, TimeUnit unit) 197ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay throws InterruptedException, ExecutionException, TimeoutException { 198ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay return null; 199ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay } 200ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay } 201ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay} 202