ClipStorageTest.java revision edce554c3eaff20a9bf349c1bc18c0b49e812c74
184769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay/* 284769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay * Copyright (C) 2016 The Android Open Source Project 384769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay * 484769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay * Licensed under the Apache License, Version 2.0 (the "License"); 584769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay * you may not use this file except in compliance with the License. 684769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay * You may obtain a copy of the License at 784769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay * 884769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay * http://www.apache.org/licenses/LICENSE-2.0 984769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay * 1084769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay * Unless required by applicable law or agreed to in writing, software 1184769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay * distributed under the License is distributed on an "AS IS" BASIS, 1284769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1384769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay * See the License for the specific language governing permissions and 1484769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay * limitations under the License. 1584769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay */ 1684769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay 1784769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKaypackage com.android.documentsui; 1884769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay 1984769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKayimport static org.junit.Assert.assertEquals; 2084769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKayimport static org.junit.Assert.assertFalse; 2184769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKayimport static org.junit.Assert.assertTrue; 2284769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay 2384769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKayimport android.net.Uri; 24edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tanimport android.os.AsyncTask; 2584769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKayimport android.support.test.filters.SmallTest; 2684769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKayimport android.support.test.runner.AndroidJUnit4; 2784769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay 28edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tanimport com.android.documentsui.ClipStorage.Reader; 2984769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKayimport com.android.documentsui.dirlist.TestModel; 30edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tanimport com.android.documentsui.testing.TestScheduledExecutorService; 3184769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay 32edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tanimport org.junit.AfterClass; 3384769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKayimport org.junit.Before; 3484769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKayimport org.junit.Rule; 3584769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKayimport org.junit.Test; 3684769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKayimport org.junit.rules.TemporaryFolder; 3784769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKayimport org.junit.runner.RunWith; 3884769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay 39edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tanimport java.io.File; 40edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tanimport java.io.IOException; 41edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tanimport java.util.ArrayList; 42edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tanimport java.util.List; 43edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tan 4484769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay@RunWith(AndroidJUnit4.class) 4584769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay@SmallTest 4684769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKaypublic class ClipStorageTest { 4784769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay private static final List<Uri> TEST_URIS = createList( 4884769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay "content://ham/fancy", 4984769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay "content://poodle/monkey/giraffe"); 5084769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay 5184769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay @Rule 5284769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay public TemporaryFolder folder = new TemporaryFolder(); 5384769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay 54edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tan private TestScheduledExecutorService mExecutor; 55edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tan 5684769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay private ClipStorage mStorage; 5784769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay private TestModel mModel; 5884769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay 59edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tan private long mTag; 60edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tan 6184769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay @Before 6284769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay public void setUp() { 6384769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay File clipDir = ClipStorage.prepareStorage(folder.getRoot()); 6484769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay mStorage = new ClipStorage(clipDir); 65edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tan 66edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tan mExecutor = new TestScheduledExecutorService(); 67edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tan AsyncTask.setDefaultExecutor(mExecutor); 68edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tan 69edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tan mTag = mStorage.createTag(); 70edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tan } 71edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tan 72edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tan @AfterClass 73edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tan public static void tearDownOnce() { 74edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tan AsyncTask.setDefaultExecutor(AsyncTask.SERIAL_EXECUTOR); 7584769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay } 7684769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay 7784769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay @Test 78edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tan public void testWrite() throws Exception { 79edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tan writeAll(mTag, TEST_URIS); 8084769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay } 8184769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay 8284769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay @Test 8384769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay public void testRead() throws Exception { 84edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tan writeAll(mTag, TEST_URIS); 85edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tan List<Uri> uris = new ArrayList<>(); 86edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tan try(Reader provider = mStorage.createReader(mTag)) { 87edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tan for (Uri uri : provider) { 88edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tan uris.add(uri); 89edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tan } 90edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tan } 9184769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay assertEquals(TEST_URIS, uris); 9284769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay } 9384769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay 9484769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay @Test 9584769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay public void testDelete() throws Exception { 96edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tan writeAll(mTag, TEST_URIS); 97edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tan mStorage.delete(mTag); 9884769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay try { 99edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tan mStorage.createReader(mTag); 10084769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay } catch (IOException expected) {} 10184769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay } 10284769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay 10384769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay @Test 10484769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay public void testPrepareStorage_CreatesDir() throws Exception { 10584769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay File clipDir = ClipStorage.prepareStorage(folder.getRoot()); 10684769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay assertTrue(clipDir.exists()); 10784769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay assertTrue(clipDir.isDirectory()); 10884769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay assertFalse(clipDir.equals(folder.getRoot())); 10984769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay } 11084769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay 111edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tan private void writeAll(long tag, List<Uri> uris) { 112edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tan new ClipStorage.PersistTask(mStorage, uris, tag).execute(); 113edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tan mExecutor.runAll(); 11484769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay } 11584769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay 11684769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay private static List<Uri> createList(String... values) { 11784769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay List<Uri> uris = new ArrayList<>(values.length); 11884769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay for (int i = 0; i < values.length; i++) { 11984769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay uris.add(i, Uri.parse(values[i])); 12084769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay } 12184769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay return uris; 12284769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay } 12384769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay} 124