summaryrefslogtreecommitdiffstats
path: root/mobile/android/geckoview/src/androidTest/java/org/mozilla/geckoview/test/ImageResourceTest.kt
diff options
context:
space:
mode:
Diffstat (limited to 'mobile/android/geckoview/src/androidTest/java/org/mozilla/geckoview/test/ImageResourceTest.kt')
-rw-r--r--mobile/android/geckoview/src/androidTest/java/org/mozilla/geckoview/test/ImageResourceTest.kt306
1 files changed, 306 insertions, 0 deletions
diff --git a/mobile/android/geckoview/src/androidTest/java/org/mozilla/geckoview/test/ImageResourceTest.kt b/mobile/android/geckoview/src/androidTest/java/org/mozilla/geckoview/test/ImageResourceTest.kt
new file mode 100644
index 0000000000..6d535b8ad1
--- /dev/null
+++ b/mobile/android/geckoview/src/androidTest/java/org/mozilla/geckoview/test/ImageResourceTest.kt
@@ -0,0 +1,306 @@
+/* -*- Mode: Java; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: nil; -*-
+ * Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+package org.mozilla.geckoview.test
+
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.MediumTest
+import org.hamcrest.Matchers.* // ktlint-disable no-wildcard-imports
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mozilla.gecko.util.ImageResource
+import org.mozilla.geckoview.GeckoResult
+
+class TestImage(
+ val path: String,
+ val type: String?,
+ val sizes: String?,
+ val widths: Array<Int>?,
+ val heights: Array<Int>?,
+)
+
+@RunWith(AndroidJUnit4::class)
+@MediumTest
+class ImageResourceTest : BaseSessionTest() {
+ companion object {
+ val kValidTestImage1 = TestImage(
+ "path.ico",
+ "image/icon",
+ "16x16 32x32 64x64",
+ arrayOf(16, 32, 64),
+ arrayOf(16, 32, 64),
+ )
+
+ val kValidTestImage2 = TestImage(
+ "path.png",
+ "image/png",
+ "128x128",
+ arrayOf(128),
+ arrayOf(128),
+ )
+
+ val kValidTestImage3 = TestImage(
+ "path.jpg",
+ "image/jpg",
+ "256x256",
+ arrayOf(256),
+ arrayOf(256),
+ )
+
+ val kValidTestImage4 = TestImage(
+ "path.png",
+ "image/png",
+ "300x128",
+ arrayOf(300),
+ arrayOf(128),
+ )
+
+ val kValidTestImage5 = TestImage(
+ "path.svg",
+ "image/svg",
+ "any",
+ arrayOf(0),
+ arrayOf(0),
+ )
+
+ val kValidTestImage6 = TestImage(
+ "path.svg",
+ null,
+ null,
+ null,
+ null,
+ )
+ }
+
+ fun verifyEqual(image: ImageResource, base: TestImage) {
+ assertThat(
+ "Path should match",
+ image.src,
+ equalTo(base.path),
+ )
+ assertThat(
+ "Type should match",
+ image.type,
+ equalTo(base.type),
+ )
+
+ assertThat(
+ "Sizes should match",
+ image.sizes?.size,
+ equalTo(base.widths?.size),
+ )
+
+ assertThat(
+ "Sizes should match",
+ image.sizes?.size,
+ equalTo(base.heights?.size),
+ )
+
+ if (image.sizes == null) {
+ return
+ }
+ for (i in 0 until image.sizes!!.size) {
+ assertThat(
+ "Sizes widths should match",
+ image.sizes!![i].width,
+ equalTo(base.widths!![i]),
+ )
+ assertThat(
+ "Sizes heights should match",
+ image.sizes!![i].height,
+ equalTo(base.heights!![i]),
+ )
+ }
+ }
+
+ fun testValidImage(base: TestImage) {
+ var image = ImageResource(base.path, base.type, base.sizes)
+ verifyEqual(image, base)
+ }
+
+ fun buildCollection(bases: Array<TestImage>): ImageResource.Collection {
+ val builder = ImageResource.Collection.Builder()
+
+ bases.forEach {
+ builder.add(ImageResource(it.path, it.type, it.sizes))
+ }
+
+ return builder.build()
+ }
+
+ @Test
+ fun validImage() {
+ testValidImage(kValidTestImage1)
+ testValidImage(kValidTestImage2)
+ testValidImage(kValidTestImage3)
+ testValidImage(kValidTestImage4)
+ testValidImage(kValidTestImage5)
+ testValidImage(kValidTestImage6)
+ }
+
+ @Test
+ fun invalidImageSize() {
+ val invalidImage1 = TestImage(
+ "path.ico",
+ "image/icon",
+ "16x16 32",
+ arrayOf(16),
+ arrayOf(16),
+ )
+ testValidImage(invalidImage1)
+
+ val invalidImage2 = TestImage(
+ "path.ico",
+ "image/icon",
+ "16x16 32xa32",
+ arrayOf(16),
+ arrayOf(16),
+ )
+ testValidImage(invalidImage2)
+
+ val invalidImage3 = TestImage(
+ "path.ico",
+ "image/icon",
+ "",
+ null,
+ null,
+ )
+ testValidImage(invalidImage3)
+
+ val invalidImage4 = TestImage(
+ "path.ico",
+ "image/icon",
+ "abxab",
+ null,
+ null,
+ )
+ testValidImage(invalidImage4)
+ }
+
+ @Test
+ fun getBestRegular() {
+ val collection = buildCollection(
+ arrayOf(
+ kValidTestImage1,
+ kValidTestImage2,
+ kValidTestImage3,
+ kValidTestImage4,
+ ),
+ )
+ // 16, 32, 64
+ verifyEqual(collection.getBest(10)!!, kValidTestImage1)
+ verifyEqual(collection.getBest(16)!!, kValidTestImage1)
+ verifyEqual(collection.getBest(30)!!, kValidTestImage1)
+ verifyEqual(collection.getBest(90)!!, kValidTestImage1)
+
+ // 128
+ verifyEqual(collection.getBest(100)!!, kValidTestImage2)
+ verifyEqual(collection.getBest(120)!!, kValidTestImage2)
+ verifyEqual(collection.getBest(140)!!, kValidTestImage2)
+
+ // 256
+ verifyEqual(collection.getBest(210)!!, kValidTestImage3)
+ verifyEqual(collection.getBest(256)!!, kValidTestImage3)
+ verifyEqual(collection.getBest(270)!!, kValidTestImage3)
+
+ // 300
+ verifyEqual(collection.getBest(280)!!, kValidTestImage4)
+ verifyEqual(collection.getBest(10000)!!, kValidTestImage4)
+ }
+
+ @Test
+ fun getBestAny() {
+ val collection = buildCollection(
+ arrayOf(
+ kValidTestImage1,
+ kValidTestImage2,
+ kValidTestImage3,
+ kValidTestImage4,
+ kValidTestImage5,
+ ),
+ )
+ // any
+ verifyEqual(collection.getBest(10)!!, kValidTestImage5)
+ verifyEqual(collection.getBest(16)!!, kValidTestImage5)
+ verifyEqual(collection.getBest(30)!!, kValidTestImage5)
+ verifyEqual(collection.getBest(90)!!, kValidTestImage5)
+ verifyEqual(collection.getBest(100)!!, kValidTestImage5)
+ verifyEqual(collection.getBest(120)!!, kValidTestImage5)
+ verifyEqual(collection.getBest(140)!!, kValidTestImage5)
+ verifyEqual(collection.getBest(210)!!, kValidTestImage5)
+ verifyEqual(collection.getBest(256)!!, kValidTestImage5)
+ verifyEqual(collection.getBest(270)!!, kValidTestImage5)
+ verifyEqual(collection.getBest(280)!!, kValidTestImage5)
+ verifyEqual(collection.getBest(10000)!!, kValidTestImage5)
+ }
+
+ @Test
+ fun getBestNull() {
+ // Don't include `any` since two `any` cases would result in undefined
+ // results.
+ val collection = buildCollection(
+ arrayOf(
+ kValidTestImage1,
+ kValidTestImage2,
+ kValidTestImage3,
+ kValidTestImage4,
+ kValidTestImage6,
+ ),
+ )
+ // null, handled as any
+ verifyEqual(collection.getBest(10)!!, kValidTestImage6)
+ verifyEqual(collection.getBest(16)!!, kValidTestImage6)
+ verifyEqual(collection.getBest(30)!!, kValidTestImage6)
+ verifyEqual(collection.getBest(90)!!, kValidTestImage6)
+ verifyEqual(collection.getBest(100)!!, kValidTestImage6)
+ verifyEqual(collection.getBest(120)!!, kValidTestImage6)
+ verifyEqual(collection.getBest(140)!!, kValidTestImage6)
+ verifyEqual(collection.getBest(210)!!, kValidTestImage6)
+ verifyEqual(collection.getBest(256)!!, kValidTestImage6)
+ verifyEqual(collection.getBest(270)!!, kValidTestImage6)
+ verifyEqual(collection.getBest(280)!!, kValidTestImage6)
+ verifyEqual(collection.getBest(10000)!!, kValidTestImage6)
+ }
+
+ @Test
+ fun getBitmap() {
+ val actualWidth = 265
+ val actualHeight = 199
+
+ val testImage = TestImage(
+ createTestUrl("/assets/www/images/test.gif"),
+ "image/gif",
+ "any",
+ arrayOf(0),
+ arrayOf(0),
+ )
+ val collection = buildCollection(arrayOf(testImage))
+ val image = collection.getBest(actualWidth)
+
+ verifyEqual(image!!, testImage)
+
+ sessionRule.waitForResult(
+ image.getBitmap(actualWidth)
+ .then { bitmap ->
+ assertThat(
+ "Bitmap should be non-null",
+ bitmap,
+ notNullValue(),
+ )
+ assertThat(
+ "Bitmap width should match",
+ bitmap!!.getWidth(),
+ equalTo(actualWidth),
+ )
+ assertThat(
+ "Bitmap height should match",
+ bitmap.getHeight(),
+ equalTo(actualHeight),
+ )
+
+ GeckoResult.fromValue(null)
+ },
+ )
+ }
+}