Skip to content

Commit

Permalink
Add test.
Browse files Browse the repository at this point in the history
  • Loading branch information
colinrtwhite committed Mar 18, 2020
1 parent 1c0b459 commit 0a4887c
Showing 1 changed file with 89 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
@file:OptIn(ExperimentalCoilApi::class)

package coil

import android.content.ContentResolver.SCHEME_ANDROID_RESOURCE
Expand All @@ -10,6 +12,7 @@ import android.graphics.drawable.ColorDrawable
import android.widget.ImageView
import androidx.core.net.toUri
import androidx.test.core.app.ApplicationProvider
import coil.annotation.ExperimentalCoilApi
import coil.api.get
import coil.api.getAny
import coil.api.load
Expand All @@ -23,8 +26,10 @@ import coil.decode.Decoder
import coil.decode.Options
import coil.fetch.AssetUriFetcher.Companion.ASSET_FILE_PATH_ROOT
import coil.fetch.DrawableResult
import coil.fetch.Fetcher
import coil.request.CachePolicy
import coil.request.NullRequestDataException
import coil.request.Request
import coil.size.PixelSize
import coil.size.Size
import coil.transform.CircleCropTransformation
Expand All @@ -46,6 +51,7 @@ import org.junit.After
import org.junit.Before
import org.junit.Test
import java.io.File
import java.util.concurrent.atomic.AtomicBoolean
import kotlin.coroutines.resume
import kotlin.coroutines.resumeWithException
import kotlin.test.assertEquals
Expand Down Expand Up @@ -366,7 +372,89 @@ class RealImageLoaderIntegrationTest {
}
}

private fun testLoad(data: Any, expectedSize: PixelSize = PixelSize(80, 100)) {
@Test
fun eventListenerMethodsAreCalled() {
class MethodChecker(private val eventName: String) {

private val isCalled = AtomicBoolean(false)

fun markCalled() {
require(!isCalled.getAndSet(true)) { "$eventName was called more than once." }
}

fun requireCalled() {
require(isCalled.get()) { "$eventName was NOT called at least once." }
}

fun requireNotCalled() {
require(!isCalled.get()) { "$eventName was called once." }
}
}

val eventListener = object : EventListener {

val onStart = MethodChecker("onStart")
val mapStart = MethodChecker("mapStart")
val mapEnd = MethodChecker("mapEnd")
val resolveSizeStart = MethodChecker("resolveSizeStart")
val resolveSizeEnd = MethodChecker("resolveSizeEnd")
val fetchStart = MethodChecker("fetchStart")
val fetchEnd = MethodChecker("fetchEnd")
val decodeStart = MethodChecker("decodeStart")
val decodeEnd = MethodChecker("decodeEnd")
val transformStart = MethodChecker("transformStart")
val transformEnd = MethodChecker("transformEnd")
val onSuccess = MethodChecker("transformEnd")
val onCancel = MethodChecker("transformEnd")
val onError = MethodChecker("transformEnd")

override fun onStart(request: Request) = onStart.markCalled()
override fun mapStart(request: Request) = mapStart.markCalled()
override fun mapEnd(request: Request, mappedData: Any) = mapEnd.markCalled()
override fun resolveSizeStart(request: Request) = resolveSizeStart.markCalled()
override fun resolveSizeEnd(request: Request, size: Size) = resolveSizeEnd.markCalled()
override fun fetchStart(request: Request, fetcher: Fetcher<*>, options: Options) = fetchStart.markCalled()
override fun fetchEnd(request: Request, fetcher: Fetcher<*>, options: Options) = fetchEnd.markCalled()
override fun decodeStart(request: Request, decoder: Decoder, options: Options) = decodeStart.markCalled()
override fun decodeEnd(request: Request, decoder: Decoder, options: Options) = decodeEnd.markCalled()
override fun transformStart(request: Request) = transformStart.markCalled()
override fun transformEnd(request: Request) = transformEnd.markCalled()
override fun onSuccess(request: Request, source: DataSource) = onSuccess.markCalled()
override fun onCancel(request: Request) = onCancel.markCalled()
override fun onError(request: Request, throwable: Throwable) = onError.markCalled()
}

runBlocking {
val imageLoader = ImageLoader.Builder(context)
.eventListener(eventListener)
.build()

testLoad(copyNormalImageAssetToCacheDir(), imageLoader = imageLoader)
}

eventListener.apply {
onStart.requireCalled()
mapStart.requireCalled()
mapEnd.requireCalled()
resolveSizeStart.requireCalled()
resolveSizeEnd.requireCalled()
fetchStart.requireCalled()
fetchEnd.requireCalled()
decodeStart.requireCalled()
decodeEnd.requireCalled()
transformStart.requireCalled()
transformEnd.requireCalled()
onSuccess.requireCalled()
onCancel.requireNotCalled()
onError.requireNotCalled()
}
}

private fun testLoad(
data: Any,
expectedSize: PixelSize = PixelSize(80, 100),
imageLoader: ImageLoader = this.imageLoader
) {
val imageView = ImageView(context)
imageView.scaleType = ImageView.ScaleType.FIT_CENTER

Expand Down

0 comments on commit 0a4887c

Please sign in to comment.