1bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay/* 2bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay * Copyright (C) 2016 The Android Open Source Project 3bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay * 4bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay * Licensed under the Apache License, Version 2.0 (the "License"); 5bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay * you may not use this file except in compliance with the License. 6bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay * You may obtain a copy of the License at 7bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay * 8bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay * http://www.apache.org/licenses/LICENSE-2.0 9bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay * 10bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay * Unless required by applicable law or agreed to in writing, software 11bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay * distributed under the License is distributed on an "AS IS" BASIS, 12bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay * See the License for the specific language governing permissions and 14bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay * limitations under the License. 15bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay */ 16bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay 17bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKaypackage com.android.documentsui.services; 18bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay 19bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKayimport static org.junit.Assert.assertEquals; 20bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKayimport static org.junit.Assert.fail; 21bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay 2299f1dc3da6defec0596864934bfe76adc96a1d62Steve McKayimport android.net.Uri; 23bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKayimport android.support.annotation.Nullable; 24bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay 25d080506e3aa8547605cd4783eb660775d7d2b8eeSteve McKayimport com.android.documentsui.base.DocumentInfo; 26bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay 27bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKayimport java.util.ArrayList; 28bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKayimport java.util.List; 29bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKayimport java.util.concurrent.CountDownLatch; 30bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKayimport java.util.concurrent.TimeUnit; 31bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay 32bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKaypublic class TestJobListener implements Job.Listener { 33bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay 34bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay private final CountDownLatch latch = new CountDownLatch(1); 35bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay private final List<Job> progress = new ArrayList<>(); 36bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay @Nullable private Job started; 37bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay @Nullable private Job finished; 38bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay 39bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay @Override 40bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay public void onStart(Job job) { 41bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay started = job; 42bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay } 43bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay 44bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay @Override 45bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay public void onFinished(Job job) { 46bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay this.finished = job; 47bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay latch.countDown(); 48bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay } 49bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay 50bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay public void assertStarted() { 51bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay if (started == null) { 52bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay fail("Job didn't start. onStart never called."); 53bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay } 54bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay } 55bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay 56bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay public void assertFinished() { 57bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay if (finished == null) { 58bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay fail("Job didn't finish. onFinish never called."); 59bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay } 60bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay } 61bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay 62bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay public void assertFailed() { 63dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski if (finished == null || !finished.hasFailures()) { 64bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay fail("Job didn't fail. onFailed never called."); 65bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay } 66bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay } 67bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay 6899f1dc3da6defec0596864934bfe76adc96a1d62Steve McKay public void assertFilesFailed(List<String> names) { 69dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski if (finished == null || !finished.hasFailures()) { 70bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay fail("Can't test failed documetns. Job didn't fail."); 71bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay } 72bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay 7399f1dc3da6defec0596864934bfe76adc96a1d62Steve McKay assertEquals(finished.failedDocs.size(), names.size()); 74bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay for (String name : names) { 75bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay assertFileFailed(name); 76bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay } 77bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay } 78bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay 79bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay public void assertFileFailed(String name) { 80dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski if (finished == null || !finished.hasFailures()) { 81bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay fail("Can't test failed documetns. Job didn't fail."); 82bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay } 83bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay 8499f1dc3da6defec0596864934bfe76adc96a1d62Steve McKay for (DocumentInfo failed : finished.failedDocs) { 85bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay if (name.equals(failed.displayName)) { 86bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay return; 87bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay } 88bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay } 89bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay fail("Couldn't find failed file: " + name); 90bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay } 91bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay 9299f1dc3da6defec0596864934bfe76adc96a1d62Steve McKay public void assertUrisFailed(List<Uri> uris) { 9399f1dc3da6defec0596864934bfe76adc96a1d62Steve McKay if (finished == null || !finished.hasFailures()) { 9499f1dc3da6defec0596864934bfe76adc96a1d62Steve McKay fail("Can't test failed documetns. Job didn't fail."); 9599f1dc3da6defec0596864934bfe76adc96a1d62Steve McKay } 9699f1dc3da6defec0596864934bfe76adc96a1d62Steve McKay 9799f1dc3da6defec0596864934bfe76adc96a1d62Steve McKay assertEquals(finished.failedDocs.size(), uris.size()); 9899f1dc3da6defec0596864934bfe76adc96a1d62Steve McKay for (Uri uri : uris) { 9999f1dc3da6defec0596864934bfe76adc96a1d62Steve McKay assertUriFailed(uri); 10099f1dc3da6defec0596864934bfe76adc96a1d62Steve McKay } 10199f1dc3da6defec0596864934bfe76adc96a1d62Steve McKay } 10299f1dc3da6defec0596864934bfe76adc96a1d62Steve McKay 10399f1dc3da6defec0596864934bfe76adc96a1d62Steve McKay public void assertUriFailed(Uri uri) { 10499f1dc3da6defec0596864934bfe76adc96a1d62Steve McKay if (finished == null || !finished.hasFailures()) { 10599f1dc3da6defec0596864934bfe76adc96a1d62Steve McKay fail("Can't test failed documetns. Job didn't fail."); 10699f1dc3da6defec0596864934bfe76adc96a1d62Steve McKay } 10799f1dc3da6defec0596864934bfe76adc96a1d62Steve McKay 10899f1dc3da6defec0596864934bfe76adc96a1d62Steve McKay for (Uri failed : finished.failedUris) { 10999f1dc3da6defec0596864934bfe76adc96a1d62Steve McKay if (uri.equals(failed)) { 11099f1dc3da6defec0596864934bfe76adc96a1d62Steve McKay return; 11199f1dc3da6defec0596864934bfe76adc96a1d62Steve McKay } 11299f1dc3da6defec0596864934bfe76adc96a1d62Steve McKay } 11399f1dc3da6defec0596864934bfe76adc96a1d62Steve McKay fail("Couldn't find failed uri: " + uri); 11499f1dc3da6defec0596864934bfe76adc96a1d62Steve McKay } 11599f1dc3da6defec0596864934bfe76adc96a1d62Steve McKay 11699f1dc3da6defec0596864934bfe76adc96a1d62Steve McKay public void assertFailureCount(int expected) { 11799f1dc3da6defec0596864934bfe76adc96a1d62Steve McKay if (finished == null) { 11899f1dc3da6defec0596864934bfe76adc96a1d62Steve McKay fail("No job to test."); 11999f1dc3da6defec0596864934bfe76adc96a1d62Steve McKay } 12099f1dc3da6defec0596864934bfe76adc96a1d62Steve McKay 12199f1dc3da6defec0596864934bfe76adc96a1d62Steve McKay assertEquals(expected, finished.failureCount); 12299f1dc3da6defec0596864934bfe76adc96a1d62Steve McKay } 12399f1dc3da6defec0596864934bfe76adc96a1d62Steve McKay 124bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay public void assertCanceled() { 125bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay if (finished == null) { 126bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay fail("Can't determine if job was canceled. Job didn't finish."); 127bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay } 128bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay if (!finished.isCanceled()) { 129bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay fail("Job wasn't canceled. Job#isCanceled returned false."); 130bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay } 131bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay } 132bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay 133bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay public void assertMadeProgress() { 134bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay if (progress.isEmpty()) { 135bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay fail("Job made no progress. onProgress never called."); 136bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay } 137bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay } 138bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay 139bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay public void waitForFinished() throws InterruptedException { 140bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay latch.await(500, TimeUnit.MILLISECONDS); 141bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay } 142bbeba5265c5baa42c6db93fc8030c6055747da4dSteve McKay} 143