blob: 09cbbff9077fc8a87f0a0dbabfcb8529497f7526 [file] [log] [blame]
/*
* Copyright (C) 2016 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.provider;
import android.content.ContentProviderClient;
import android.content.ContentResolver;
import android.net.Uri;
import android.provider.DocumentsContract.Path;
import android.support.test.filters.SmallTest;
import android.test.ProviderTestCase2;
import java.util.Arrays;
import java.util.List;
/**
* Unit tests for {@link DocumentsProvider}.
*/
@SmallTest
public class DocumentsProviderTest extends ProviderTestCase2<TestDocumentsProvider> {
private static final String ROOT_ID = "rootId";
private static final String DOCUMENT_ID = "docId";
private static final String PARENT_DOCUMENT_ID = "parentDocId";
private static final String ANCESTOR_DOCUMENT_ID = "ancestorDocId";
private TestDocumentsProvider mProvider;
private ContentResolver mResolver;
public DocumentsProviderTest() {
super(TestDocumentsProvider.class, TestDocumentsProvider.AUTHORITY);
}
public void setUp() throws Exception {
super.setUp();
mProvider = getProvider();
mResolver = getMockContentResolver();
}
public void testFindDocumentPath_docUri() throws Exception {
final Path expected = new Path(ROOT_ID, Arrays.asList(PARENT_DOCUMENT_ID, DOCUMENT_ID));
mProvider.nextPath = expected;
final Uri docUri =
DocumentsContract.buildDocumentUri(TestDocumentsProvider.AUTHORITY, DOCUMENT_ID);
try (ContentProviderClient client =
mResolver.acquireUnstableContentProviderClient(docUri)) {
final Path actual = DocumentsContract.findDocumentPath(client, docUri);
assertEquals(expected, actual);
}
}
public void testFindDocumentPath_treeUri() throws Exception {
mProvider.nextIsChildDocument = true;
final Path expected = new Path(null, Arrays.asList(PARENT_DOCUMENT_ID, DOCUMENT_ID));
mProvider.nextPath = expected;
final Uri docUri = buildTreeDocumentUri(
TestDocumentsProvider.AUTHORITY, PARENT_DOCUMENT_ID, DOCUMENT_ID);
final Path actual = DocumentsContract.findDocumentPath(mResolver, docUri);
assertNull(actual.getRootId());
assertEquals(expected.getPath(), actual.getPath());
}
public void testFindDocumentPath_treeUri_throwsOnNonChildDocument() throws Exception {
mProvider.nextPath = new Path(null, Arrays.asList(PARENT_DOCUMENT_ID, DOCUMENT_ID));
final Uri docUri = buildTreeDocumentUri(
TestDocumentsProvider.AUTHORITY, PARENT_DOCUMENT_ID, DOCUMENT_ID);
assertNull(DocumentsContract.findDocumentPath(mResolver, docUri));
}
public void testFindDocumentPath_treeUri_erasesNonNullRootId() throws Exception {
mProvider.nextIsChildDocument = true;
mProvider.nextPath = new Path(ROOT_ID, Arrays.asList(PARENT_DOCUMENT_ID, DOCUMENT_ID));
final Uri docUri = buildTreeDocumentUri(
TestDocumentsProvider.AUTHORITY, PARENT_DOCUMENT_ID, DOCUMENT_ID);
Path path = DocumentsContract.findDocumentPath(mResolver, docUri);
assertNull(path.getRootId());
assertEquals(Arrays.asList(PARENT_DOCUMENT_ID, DOCUMENT_ID), path.getPath());
}
public void testFindDocumentPath_treeUri_erasesDocsOutsideTree() throws Exception {
mProvider.nextIsChildDocument = true;
mProvider.nextPath = new Path(
null, Arrays.asList(ANCESTOR_DOCUMENT_ID, PARENT_DOCUMENT_ID, DOCUMENT_ID));
final Uri docUri = buildTreeDocumentUri(
TestDocumentsProvider.AUTHORITY, PARENT_DOCUMENT_ID, DOCUMENT_ID);
Path path = DocumentsContract.findDocumentPath(mResolver, docUri);
assertEquals(Arrays.asList(PARENT_DOCUMENT_ID, DOCUMENT_ID), path.getPath());
}
private static Uri buildTreeDocumentUri(String authority, String parentDocId, String docId) {
final Uri treeUri = DocumentsContract.buildTreeDocumentUri(authority, parentDocId);
return DocumentsContract.buildDocumentUriUsingTree(treeUri, docId);
}
}