diff options
author | 2024-05-10 19:10:10 +0000 | |
---|---|---|
committer | 2024-05-10 19:10:10 +0000 | |
commit | f95a9b5c71a57d6daf9b75c58f543e7bc5debe12 (patch) | |
tree | 86a82af54afcfc17c39d78ab82779870ba7da655 /tests | |
parent | a80f46c7fe49ef00ebee256a89e291b420d9efa0 (diff) | |
parent | 90bddf71b63f5082c4ec9e697b0baaacb5f81ecd (diff) |
Merge "Add support for preview size columns in the additional content query." into main
Diffstat (limited to 'tests')
5 files changed, 187 insertions, 7 deletions
diff --git a/tests/shared/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/cursor/CursorResolverKosmos.kt b/tests/shared/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/cursor/CursorResolverKosmos.kt index 10b89c71..d53210bd 100644 --- a/tests/shared/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/cursor/CursorResolverKosmos.kt +++ b/tests/shared/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/cursor/CursorResolverKosmos.kt @@ -16,13 +16,13 @@ package com.android.intentresolver.contentpreview.payloadtoggle.domain.cursor -import android.net.Uri import com.android.intentresolver.contentResolver +import com.android.intentresolver.contentpreview.payloadtoggle.domain.model.CursorRow import com.android.intentresolver.inject.additionalContentUri import com.android.intentresolver.inject.chooserIntent import com.android.systemui.kosmos.Kosmos -var Kosmos.payloadToggleCursorResolver: CursorResolver<Uri?> by +var Kosmos.payloadToggleCursorResolver: CursorResolver<CursorRow?> by Kosmos.Fixture { payloadToggleCursorResolverImpl } val Kosmos.payloadToggleCursorResolverImpl get() = diff --git a/tests/unit/src/com/android/intentresolver/contentpreview/CursorReadSizeTest.kt b/tests/unit/src/com/android/intentresolver/contentpreview/CursorReadSizeTest.kt new file mode 100644 index 00000000..0c346095 --- /dev/null +++ b/tests/unit/src/com/android/intentresolver/contentpreview/CursorReadSizeTest.kt @@ -0,0 +1,71 @@ +/* + * Copyright 2024 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.intentresolver.contentpreview + +import android.database.MatrixCursor +import android.provider.MediaStore.MediaColumns.HEIGHT +import android.provider.MediaStore.MediaColumns.WIDTH +import android.util.Size +import com.google.common.truth.Truth.assertThat +import com.google.common.truth.Truth.assertWithMessage +import kotlinx.coroutines.test.runTest +import org.junit.Test + +class CursorReadSizeTest { + @Test + fun missingSizeColumns() { + val cursor = MatrixCursor(arrayOf("column")).apply { addRow(arrayOf("abc")) } + cursor.moveToFirst() + + assertThat(cursor.readSize()).isNull() + } + + @Test + fun testIncorrectSizeValues() = runTest { + val cursor = + MatrixCursor(arrayOf(WIDTH, HEIGHT)).apply { + addRow(arrayOf(null, null)) + addRow(arrayOf("100", null)) + addRow(arrayOf(null, "100")) + addRow(arrayOf("-100", "100")) + addRow(arrayOf("100", "-100")) + addRow(arrayOf("100", "abc")) + addRow(arrayOf("abc", "100")) + } + + var i = 0 + while (cursor.moveToNext()) { + i++ + assertWithMessage("Row $i").that(cursor.readSize()).isNull() + } + } + + @Test + fun testCorrectSizeValues() = runTest { + val cursor = + MatrixCursor(arrayOf(HEIGHT, WIDTH)).apply { + addRow(arrayOf("100", 0)) + addRow(arrayOf("100", "50")) + } + + cursor.moveToNext() + assertThat(cursor.readSize()).isEqualTo(Size(0, 100)) + + cursor.moveToNext() + assertThat(cursor.readSize()).isEqualTo(Size(50, 100)) + } +} diff --git a/tests/unit/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/cursor/PayloadToggleCursorResolverTest.kt b/tests/unit/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/cursor/PayloadToggleCursorResolverTest.kt new file mode 100644 index 00000000..9eaee233 --- /dev/null +++ b/tests/unit/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/cursor/PayloadToggleCursorResolverTest.kt @@ -0,0 +1,106 @@ +/* + * Copyright 2024 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.intentresolver.contentpreview.payloadtoggle.domain.cursor + +import android.content.ContentInterface +import android.content.Intent +import android.database.MatrixCursor +import android.net.Uri +import android.provider.MediaStore.MediaColumns.HEIGHT +import android.provider.MediaStore.MediaColumns.WIDTH +import android.service.chooser.AdditionalContentContract.Columns.URI +import android.util.Size +import com.android.intentresolver.util.cursor.get +import com.google.common.truth.Truth.assertThat +import kotlinx.coroutines.test.runTest +import org.junit.Test +import org.mockito.kotlin.any +import org.mockito.kotlin.doReturn +import org.mockito.kotlin.eq +import org.mockito.kotlin.mock + +class PayloadToggleCursorResolverTest { + private val cursorUri = Uri.parse("content://org.pkg.app.extra") + private val chooserIntent = Intent() + + @Test + fun missingSizeColumns() = runTest { + val uri = createUri(1) + val sourceCursor = + MatrixCursor(arrayOf(URI)).apply { + addRow(arrayOf(uri.toString())) + addRow( + arrayOf( + cursorUri.buildUpon().appendPath("should-be-ignored.png").build().toString() + ) + ) + addRow(arrayOf(null)) + } + val fakeContentProvider = + mock<ContentInterface> { + on { query(eq(cursorUri), any(), any(), any()) } doReturn sourceCursor + } + val testSubject = + PayloadToggleCursorResolver( + fakeContentProvider, + cursorUri, + chooserIntent, + ) + + val cursor = testSubject.getCursor() + assertThat(cursor).isNotNull() + assertThat(cursor!!.count).isEqualTo(3) + cursor[0].let { row -> + assertThat(row).isNotNull() + assertThat(row!!.uri).isEqualTo(uri) + assertThat(row.previewSize).isNull() + } + assertThat(cursor[1]).isNull() + assertThat(cursor[2]).isNull() + } + + @Test + fun testCorrectSizeValues() = runTest { + val uri = createUri(1) + val sourceCursor = + MatrixCursor(arrayOf(URI, WIDTH, HEIGHT)).apply { + addRow(arrayOf(uri.toString(), "100", "50")) + } + val fakeContentProvider = + mock<ContentInterface> { + on { query(eq(cursorUri), any(), any(), any()) } doReturn sourceCursor + } + val testSubject = + PayloadToggleCursorResolver( + fakeContentProvider, + cursorUri, + chooserIntent, + ) + + val cursor = testSubject.getCursor() + assertThat(cursor).isNotNull() + assertThat(cursor!!.count).isEqualTo(1) + + cursor[0].let { row -> + assertThat(row).isNotNull() + assertThat(row!!.uri).isEqualTo(uri) + assertThat(row.previewSize).isEqualTo(Size(100, 50)) + } + } +} + +private fun createUri(id: Int) = Uri.parse("content://org.pkg/app/img-$id.png") diff --git a/tests/unit/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/CursorPreviewsInteractorTest.kt b/tests/unit/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/CursorPreviewsInteractorTest.kt index af6de833..81e6b77d 100644 --- a/tests/unit/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/CursorPreviewsInteractorTest.kt +++ b/tests/unit/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/CursorPreviewsInteractorTest.kt @@ -24,9 +24,11 @@ import androidx.core.os.bundleOf import com.android.intentresolver.contentpreview.FileInfo import com.android.intentresolver.contentpreview.UriMetadataReader import com.android.intentresolver.contentpreview.payloadtoggle.data.repository.cursorPreviewsRepository +import com.android.intentresolver.contentpreview.payloadtoggle.domain.model.CursorRow import com.android.intentresolver.contentpreview.payloadtoggle.shared.model.PreviewModel import com.android.intentresolver.contentpreview.uriMetadataReader import com.android.intentresolver.util.KosmosTestScope +import com.android.intentresolver.util.cursor.CursorView import com.android.intentresolver.util.cursor.viewBy import com.android.intentresolver.util.runTest import com.android.systemui.kosmos.Kosmos @@ -70,7 +72,7 @@ class CursorPreviewsInteractorTest { private val cursorRange: Iterable<Int>, private val cursorStartPosition: Int, ) { - val cursor = + val cursor: CursorView<CursorRow?> = MatrixCursor(arrayOf("uri")) .apply { extras = bundleOf("position" to cursorStartPosition) @@ -78,7 +80,7 @@ class CursorPreviewsInteractorTest { newRow().add("uri", uri(i).toString()) } } - .viewBy { getString(0)?.let(Uri::parse) } + .viewBy { getString(0)?.let { uriStr -> CursorRow(Uri.parse(uriStr), null) } } val initialPreviews: List<PreviewModel> = initialSelectionRange.map { i -> PreviewModel(uri = uri(i), mimeType = "image/bitmap") } diff --git a/tests/unit/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/FetchPreviewsInteractorTest.kt b/tests/unit/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/FetchPreviewsInteractorTest.kt index f012fcc6..da73f4cf 100644 --- a/tests/unit/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/FetchPreviewsInteractorTest.kt +++ b/tests/unit/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/FetchPreviewsInteractorTest.kt @@ -26,6 +26,7 @@ import com.android.intentresolver.contentpreview.UriMetadataReader import com.android.intentresolver.contentpreview.payloadtoggle.data.repository.cursorPreviewsRepository import com.android.intentresolver.contentpreview.payloadtoggle.domain.cursor.CursorResolver import com.android.intentresolver.contentpreview.payloadtoggle.domain.cursor.payloadToggleCursorResolver +import com.android.intentresolver.contentpreview.payloadtoggle.domain.model.CursorRow import com.android.intentresolver.contentpreview.payloadtoggle.shared.model.PreviewModel import com.android.intentresolver.contentpreview.payloadtoggle.shared.model.PreviewsModel import com.android.intentresolver.contentpreview.uriMetadataReader @@ -74,12 +75,12 @@ class FetchPreviewsInteractorTest { private class FakeCursorResolver( private val cursorRange: Iterable<Int>, private val cursorStartPosition: Int, - ) : CursorResolver<Uri?> { + ) : CursorResolver<CursorRow?> { private val mutex = Mutex(locked = true) fun complete() = mutex.unlock() - override suspend fun getCursor(): CursorView<Uri?> = + override suspend fun getCursor(): CursorView<CursorRow?> = mutex.withLock { MatrixCursor(arrayOf("uri")) .apply { @@ -88,7 +89,7 @@ class FetchPreviewsInteractorTest { newRow().add("uri", uri(i).toString()) } } - .viewBy { getString(0)?.let(Uri::parse) } + .viewBy { getString(0)?.let(Uri::parse)?.let { CursorRow(it, null) } } } } |