TestJobListener.java revision 748ea8cc785b6f037518703308ffd3eb2a151c5a
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 org.junit.Assert.assertEquals; 20ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKayimport static org.junit.Assert.fail; 21ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay 22ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKayimport android.support.annotation.Nullable; 23ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay 24ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKayimport com.android.documentsui.model.DocumentInfo; 25ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay 26ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKayimport java.util.ArrayList; 27ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKayimport java.util.List; 28ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKayimport java.util.concurrent.CountDownLatch; 29ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKayimport java.util.concurrent.TimeUnit; 30ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay 31ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKaypublic class TestJobListener implements Job.Listener { 32ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay 33ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay private final CountDownLatch latch = new CountDownLatch(1); 34ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay private final List<Job> progress = new ArrayList<>(); 35ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay @Nullable private Job started; 36ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay @Nullable private Job finished; 37ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay 38ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay @Override 39ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay public void onStart(Job job) { 40ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay started = job; 41ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay } 42ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay 43ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay @Override 44ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay public void onFinished(Job job) { 45ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay this.finished = job; 46ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay latch.countDown(); 47ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay } 48ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay 49ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay @Override 50ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay public void onProgress(CopyJob job) { 51ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay progress.add(job); 52ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay } 53ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay 54ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay public void assertStarted() { 55ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay if (started == null) { 56ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay fail("Job didn't start. onStart never called."); 57ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay } 58ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay } 59ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay 60ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay public void assertFinished() { 61ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay if (finished == null) { 62ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay fail("Job didn't finish. onFinish never called."); 63ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay } 64ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay } 65ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay 66ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay public void assertFailed() { 67748ea8cc785b6f037518703308ffd3eb2a151c5aTomasz Mikolajewski if (finished == null || !finished.hasFailures()) { 68ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay fail("Job didn't fail. onFailed never called."); 69ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay } 70ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay } 71ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay 72ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay public void assertFilesFailed(ArrayList<String> names) { 73748ea8cc785b6f037518703308ffd3eb2a151c5aTomasz Mikolajewski if (finished == null || !finished.hasFailures()) { 74ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay fail("Can't test failed documetns. Job didn't fail."); 75ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay } 76ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay 77748ea8cc785b6f037518703308ffd3eb2a151c5aTomasz Mikolajewski assertEquals(finished.failedFiles.size(), names.size()); 78ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay for (String name : names) { 79ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay assertFileFailed(name); 80ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay } 81ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay } 82ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay 83ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay public void assertFileFailed(String name) { 84748ea8cc785b6f037518703308ffd3eb2a151c5aTomasz Mikolajewski if (finished == null || !finished.hasFailures()) { 85ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay fail("Can't test failed documetns. Job didn't fail."); 86ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay } 87ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay 88748ea8cc785b6f037518703308ffd3eb2a151c5aTomasz Mikolajewski for (DocumentInfo failed : finished.failedFiles) { 89ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay if (name.equals(failed.displayName)) { 90ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay return; 91ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay } 92ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay } 93ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay fail("Couldn't find failed file: " + name); 94ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay } 95ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay 96ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay public void assertCanceled() { 97ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay if (finished == null) { 98ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay fail("Can't determine if job was canceled. Job didn't finish."); 99ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay } 100ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay if (!finished.isCanceled()) { 101ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay fail("Job wasn't canceled. Job#isCanceled returned false."); 102ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay } 103ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay } 104ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay 105ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay public void assertMadeProgress() { 106ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay if (progress.isEmpty()) { 107ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay fail("Job made no progress. onProgress never called."); 108ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay } 109ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay } 110ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay 111ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay public void waitForFinished() throws InterruptedException { 112ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay latch.await(500, TimeUnit.MILLISECONDS); 113ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay } 114ecbf3c504c5ec7ccb3e2be7f4dd175ebe634139dSteve McKay} 115