packages/apps/DocumentsUI/tests/unit/com/android/documentsui/base/DocumentInfoTest.java

206 lines
7.5 KiB
Java
Raw Permalink Normal View History

2025-08-25 08:38:42 +08:00
/*
* Copyright (C) 2015 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 com.android.documentsui.base;
import static androidx.core.util.Preconditions.checkArgument;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import android.content.ContentResolver;
import android.content.Context;
import android.net.Uri;
import android.provider.DocumentsContract;
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.SmallTest;
import androidx.test.rule.provider.ProviderTestRule;
import com.android.documentsui.InspectorProvider;
import com.android.documentsui.testing.TestProvidersAccess;
import com.android.documentsui.util.VersionUtils;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import java.util.HashSet;
import java.util.Set;
@SmallTest
public class DocumentInfoTest extends AndroidTestCase {
private static final DocumentInfo TEST_DOC
= createDocInfo("authority.a", "doc.1", "text/plain");
private static final String FOLDER_NAME = "Top";
private static final String FILE_NAME = InspectorProvider.OPEN_IN_PROVIDER_TEST;
private Context mContext;
private ContentResolver mResolver;
@Rule
private ProviderTestRule mProviderTestRule = new ProviderTestRule.Builder(
InspectorProvider.class, InspectorProvider.AUTHORITY).build();
@Before
public void setUp() throws Exception {
super.setUp();
mContext = prepareContentResolverSource();
mResolver = mContext.getContentResolver();
}
private static DocumentInfo createDocInfo(String authority, String docId, String mimeType) {
DocumentInfo doc = new DocumentInfo();
doc.userId = UserId.DEFAULT_USER;
doc.authority = authority;
doc.documentId = docId;
doc.mimeType = mimeType;
doc.deriveFields();
return doc;
}
protected Context prepareContentResolverSource() {
ContentResolver contentResolver = mProviderTestRule.getResolver();
Context context = mock(Context.class);
// inject ContentResolver
when(context.getContentResolver()).thenReturn(contentResolver);
return context;
}
@Test
public void testEquals() throws Exception {
assertEquals(TEST_DOC, TEST_DOC);
assertEquals(TEST_DOC, createDocInfo("authority.a", "doc.1", "text/plain"));
}
@Test
public void testEquals_HandlesNulls() throws Exception {
assertFalse(TEST_DOC.equals(null));
}
@Test
public void testEquals_HandlesNullFields() throws Exception {
assertFalse(TEST_DOC.equals(new DocumentInfo()));
assertFalse(new DocumentInfo().equals(TEST_DOC));
}
@Test
public void testNotEquals_differentUser() throws Exception {
DocumentInfo documentInfo1 = createDocInfo("authority.a", "doc.1", "text/plain");
DocumentInfo documentInfo2 = createDocInfo("authority.a", "doc.1", "text/plain");
documentInfo1.userId = UserId.of(documentInfo2.userId.getIdentifier() + 1);
assertFalse(documentInfo1.equals(documentInfo2));
}
@Test
public void testNotEquals_differentAuthority() throws Exception {
assertFalse(TEST_DOC.equals(createDocInfo("authority.b", "doc.1", "text/plain")));
}
@Test
public void testNotEquals_differentDocId() throws Exception {
assertFalse(TEST_DOC.equals(createDocInfo("authority.a", "doc.2", "text/plain")));
}
@Test
public void testNotEquals_differentMimetype() throws Exception {
assertFalse(TEST_DOC.equals(createDocInfo("authority.a", "doc.1", "image/png")));
}
@Test
public void testFolderMimeTypeFromUri() throws Exception {
final Uri validUri = DocumentsContract.buildDocumentUri(
InspectorProvider.AUTHORITY, FOLDER_NAME);
final Set<String> mimeTypes = new HashSet<>();
DocumentInfo.addMimeTypes(mResolver, validUri, mimeTypes);
assertThat(mimeTypes.size()).isEqualTo(1);
assertThat(mimeTypes.contains(DocumentsContract.Document.MIME_TYPE_DIR)).isTrue();
}
@Test
public void testFileMimeTypeFromUri() throws Exception {
final Uri validUri = DocumentsContract.buildDocumentUri(
InspectorProvider.AUTHORITY, FILE_NAME);
final Set<String> mimeTypes = new HashSet<>();
DocumentInfo.addMimeTypes(mResolver, validUri, mimeTypes);
assertThat(mimeTypes.size()).isEqualTo(1);
assertThat(mimeTypes.contains("text/plain")).isTrue();
}
@Test
public void testGetTreeDocumentUri_currentUser() {
checkArgument(UserId.CURRENT_USER.equals(TEST_DOC.userId));
assertThat(TEST_DOC.getTreeDocumentUri())
.isEqualTo(DocumentsContract.buildTreeDocumentUri(TEST_DOC.authority,
TEST_DOC.documentId));
}
@Test
public void testGetTreeDocumentUri_otherUser_shouldHaveDifferentUri() {
if (VersionUtils.isAtLeastR()) {
final DocumentInfo doc = createDocInfo("authority.a", "doc.1", "text/plain");
final DocumentInfo otherUserDoc = createDocInfo("authority.a", "doc.1", "text/plain");
otherUserDoc.userId = TestProvidersAccess.OtherUser.USER_ID;
// Make sure they do not return the same tree uri
assertThat(otherUserDoc.getTreeDocumentUri()).isNotEqualTo(doc.getTreeDocumentUri());
}
}
@Test
public void testGetTreeDocumentUri_otherUser_sameHostAndPath() {
if (VersionUtils.isAtLeastR()) {
final DocumentInfo doc = createDocInfo("authority.a", "doc.1", "text/plain");
final DocumentInfo otherUserDoc = createDocInfo("authority.a", "doc.1", "text/plain");
otherUserDoc.userId = TestProvidersAccess.OtherUser.USER_ID;
// They should have same host(authority without user info) and path
assertThat(otherUserDoc.getTreeDocumentUri().getHost())
.isEqualTo(doc.getTreeDocumentUri().getHost());
assertThat(otherUserDoc.getTreeDocumentUri().getPath())
.isEqualTo(doc.getTreeDocumentUri().getPath());
}
}
@Test
public void testGetTreeDocumentUri_otherUser_userInfo() {
if (VersionUtils.isAtLeastR()) {
final DocumentInfo doc = createDocInfo("authority.a", "doc.1", "text/plain");
final DocumentInfo otherUserDoc = createDocInfo("authority.a", "doc.1", "text/plain");
otherUserDoc.userId = TestProvidersAccess.OtherUser.USER_ID;
// Different user info between doc and otherUserDoc
assertThat(otherUserDoc.getTreeDocumentUri().getUserInfo())
.isNotEqualTo(doc.getTreeDocumentUri().getUserInfo());
// Same user info within otherUserDoc
assertThat(otherUserDoc.getTreeDocumentUri().getUserInfo())
.isEqualTo(otherUserDoc.getDocumentUri().getUserInfo());
}
}
}