summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
author Andrey Epin <ayepin@google.com> 2024-05-09 12:08:06 -0700
committer Andrey Epin <ayepin@google.com> 2024-05-10 10:55:51 -0700
commit90bddf71b63f5082c4ec9e697b0baaacb5f81ecd (patch)
treec3a4cdb1f86ddf96bd8f5dc8f685812f9dba2963 /tests
parent2f1c0975679a342121489fa8ce8aa60a5782941c (diff)
Add support for preview size columns in the additional content query.
Add support for MediaStore WIDTH and HEIGHT columns in the additional content query reponse. Parse those columns if they are present but do not actually use the values (yet). Bug: 339679442 Test: atest IntentResolver-tests-unit Test: atest IntentResolver-tests-activity Change-Id: I2a3ebc2c166d1cb9203824b2ac1bf0f9c4ec76da
Diffstat (limited to 'tests')
-rw-r--r--tests/shared/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/cursor/CursorResolverKosmos.kt4
-rw-r--r--tests/unit/src/com/android/intentresolver/contentpreview/CursorReadSizeTest.kt71
-rw-r--r--tests/unit/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/cursor/PayloadToggleCursorResolverTest.kt106
-rw-r--r--tests/unit/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/CursorPreviewsInteractorTest.kt6
-rw-r--r--tests/unit/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/FetchPreviewsInteractorTest.kt7
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) } }
}
}