Skip to content
This repository has been archived by the owner on May 26, 2021. It is now read-only.

Commit

Permalink
Merge pull request #230 from Vacxe/test
Browse files Browse the repository at this point in the history
Add test cases for image in RecyclerView
  • Loading branch information
Unlimity committed Jul 29, 2020
2 parents 9b0f94e + 5be35c2 commit 1e8e610
Show file tree
Hide file tree
Showing 7 changed files with 147 additions and 3 deletions.
Expand Up @@ -47,7 +47,7 @@ class DrawableMatcher(
}

return view?.let { imageView ->
var expectedDrawable: Drawable? = drawable ?: getResourceDrawable(resId)
var expectedDrawable: Drawable? = drawable ?: getResourceDrawable(resId)?.mutate()

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP && expectedDrawable != null) {
expectedDrawable = DrawableCompat.wrap(expectedDrawable).mutate()
Expand All @@ -67,7 +67,7 @@ class DrawableMatcher(
return false
}

val convertDrawable = (imageView as ImageView).drawable
val convertDrawable = (imageView as ImageView).drawable.mutate()
val bitmap = toBitmap?.invoke(convertDrawable) ?: convertDrawable.toBitmap()

val otherBitmap = toBitmap?.invoke(expectedDrawable) ?: expectedDrawable.toBitmap()
Expand Down
Expand Up @@ -18,7 +18,7 @@ class DrawableListTest {
private val appContext get() = rule.activity.applicationContext

@Test
fun matchDrawablesInList() {
fun matchDrawablesInListView() {
onScreen<DrawableListScreen> {
list {
isVisible()
Expand Down
@@ -0,0 +1,54 @@
package com.agoda.sample

import androidx.core.content.res.ResourcesCompat
import androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner
import androidx.test.rule.ActivityTestRule
import com.agoda.kakao.screen.Screen.Companion.onScreen
import com.agoda.sample.screen.DrawableRecyclerScreen
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith

@RunWith(AndroidJUnit4ClassRunner::class)
class DrawableRecyclerTest {
@Rule
@JvmField
val rule = ActivityTestRule(DrawableRecyclerActivity::class.java)

private val appContext get() = rule.activity.applicationContext

@Test
fun matchDrawablesInRecyclerView() {
onScreen<DrawableRecyclerScreen> {
list {
isVisible()
hasSize(3)

firstChild<DrawableRecyclerScreen.Item> {
isVisible()
imageView {
hasDrawable(R.drawable.ic_android_black_24dp)
}
}

childAt<DrawableRecyclerScreen.Item>(1) {
imageView {
val drawable = ResourcesCompat.getDrawable(
appContext.resources,
R.drawable.ic_sentiment_very_satisfied_black_24dp,
appContext.theme
)
hasDrawable(drawable!!)
}
}

childAt<DrawableRecyclerScreen.Item>(2) {
imageView {
isVisible()
hasDrawableWithTint(R.drawable.ic_android_black_24dp, android.R.color.holo_red_dark)
}
}
}
}
}
}
@@ -0,0 +1,21 @@
package com.agoda.sample.screen

import android.view.View
import com.agoda.kakao.image.KImageView
import com.agoda.kakao.recycler.KRecyclerItem
import com.agoda.kakao.recycler.KRecyclerView
import com.agoda.kakao.screen.Screen
import com.agoda.sample.R
import org.hamcrest.Matcher

class DrawableRecyclerScreen : Screen<DrawableRecyclerScreen>() {
val list = KRecyclerView(
builder = { withId(R.id.drawableRecycler) },
itemTypeBuilder = { itemType(::Item) })

class Item(parent: Matcher<View>) :
KRecyclerItem<Item>(parent) {
val imageView = KImageView(parent, { withId(R.id.imgView) })
}

}
4 changes: 4 additions & 0 deletions sample/src/main/AndroidManifest.xml
Expand Up @@ -57,6 +57,10 @@
android:name=".DrawableListActivity"
android:label="Drawable Activity"
android:theme="@style/AppTheme" />
<activity
android:name=".DrawableRecyclerActivity"
android:label="Drawable Activity"
android:theme="@style/AppTheme" />
<activity
android:name=".PickersActivity"
android:label="Pickers Activity"
Expand Down
@@ -0,0 +1,60 @@
package com.agoda.sample

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import androidx.annotation.DrawableRes
import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView

class DrawableRecyclerActivity : AppCompatActivity() {
val drawableIds = listOf(DrawableResource(R.drawable.ic_android_black_24dp),
DrawableResource(R.drawable.ic_sentiment_very_satisfied_black_24dp),
DrawableResource(R.drawable.ic_android_black_24dp, android.R.color.holo_red_dark))

val list: RecyclerView by lazy { findViewById<RecyclerView>(R.id.drawableRecycler) }

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_drawable_recycler)

list.layoutManager = LinearLayoutManager(this)
list.adapter = object: RecyclerView.Adapter<ViewHolder>() {

override fun onCreateViewHolder(
parent: ViewGroup,
viewType: Int
): ViewHolder {
val view = LayoutInflater.from(parent.context)
.inflate(R.layout.item_image, parent, false)
return ViewHolder(view)
}

override fun onBindViewHolder(holder: ViewHolder, position: Int) {
// - get element from your dataset at this position
// - replace the contents of the view with that element
drawableIds[position].run {
holder.imageView.setImageResource(resId)
tint?.let {
holder.imageView.setColorFilter(
ContextCompat.getColor(holder.imageView.context, it),
android.graphics.PorterDuff.Mode.SRC_IN
)
}
}
}

override fun getItemCount() = drawableIds.size
}
}

class ViewHolder(val root: View): RecyclerView.ViewHolder(root) {
val imageView: ImageView by lazy { root.findViewById<ImageView>(R.id.imgView) }
}

data class DrawableResource(@DrawableRes val resId: Int, val tint: Int? = null)
}
5 changes: 5 additions & 0 deletions sample/src/main/res/layout/activity_drawable_recycler.xml
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.recyclerview.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawableRecycler"
android:layout_width="match_parent"
android:layout_height="match_parent" />

0 comments on commit 1e8e610

Please sign in to comment.