Tests updated (#4538)

This commit is contained in:
Aditya-Srivastav 2021-08-10 07:31:15 +05:30 committed by Aditya Srivastava
parent 1b984c8b9b
commit ea29a726a1
8 changed files with 116 additions and 10 deletions

View file

@ -69,7 +69,7 @@ class FolderAdapter(
} }
} else { } else {
val previewImage = folder.images[0] val previewImage = folder.images[0]
Glide.with(context).load(previewImage.uri).into(holder.image) Glide.with(holder.image).load(previewImage.uri).into(holder.image)
holder.name.text = folder.name holder.name.text = folder.name
holder.count.text = count.toString() holder.count.text = count.toString()
holder.itemView.setOnClickListener { holder.itemView.setOnClickListener {

View file

@ -85,7 +85,7 @@ class ImageAdapter(
} else { } else {
holder.itemUnselected(); holder.itemUnselected();
} }
Glide.with(context).load(image.uri).thumbnail(0.3f).into(holder.image) Glide.with(holder.image).load(image.uri).thumbnail(0.3f).into(holder.image)
imageLoader.queryAndSetView(holder, image) imageLoader.queryAndSetView(holder, image)
holder.itemView.setOnClickListener { holder.itemView.setOnClickListener {
selectOrRemoveImage(holder, position) selectOrRemoveImage(holder, position)

View file

@ -48,6 +48,7 @@ class ImageFragment: CommonsDaggerSupportFragment() {
*/ */
private var selectorRV: RecyclerView? = null private var selectorRV: RecyclerView? = null
private var loader: ProgressBar? = null private var loader: ProgressBar? = null
lateinit var filteredImages: ArrayList<Image>;
/** /**
* View model Factory. * View model Factory.
@ -130,8 +131,6 @@ class ImageFragment: CommonsDaggerSupportFragment() {
return root return root
} }
lateinit var filteredImages: ArrayList<Image>;
/** /**
* Handle view model result. * Handle view model result.
*/ */

View file

@ -1,11 +1,14 @@
package fr.free.nrw.commons.customselector.ui.adapter package fr.free.nrw.commons.customselector.ui.adapter
import android.content.ContentResolver
import fr.free.nrw.commons.R import fr.free.nrw.commons.R
import android.content.Context import android.content.Context
import android.net.Uri import android.net.Uri
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.widget.GridLayout import android.widget.GridLayout
import com.nhaarman.mockitokotlin2.any
import com.nhaarman.mockitokotlin2.whenever
import fr.free.nrw.commons.TestCommonsApplication import fr.free.nrw.commons.TestCommonsApplication
import fr.free.nrw.commons.customselector.listeners.FolderClickListener import fr.free.nrw.commons.customselector.listeners.FolderClickListener
import fr.free.nrw.commons.customselector.model.Folder import fr.free.nrw.commons.customselector.model.Folder
@ -15,7 +18,10 @@ import org.junit.Before
import org.junit.Test import org.junit.Test
import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.runner.RunWith import org.junit.runner.RunWith
import org.mockito.Mock
import org.mockito.Mockito import org.mockito.Mockito
import org.mockito.MockitoAnnotations
import org.powermock.reflect.Whitebox
import org.robolectric.Robolectric import org.robolectric.Robolectric
import org.robolectric.RobolectricTestRunner import org.robolectric.RobolectricTestRunner
import org.robolectric.annotation.Config import org.robolectric.annotation.Config
@ -34,13 +40,21 @@ class FolderAdapterTest {
private lateinit var folder: Folder private lateinit var folder: Folder
private lateinit var folderList: ArrayList<Folder> private lateinit var folderList: ArrayList<Folder>
@Mock
private lateinit var context: Context
@Mock
private lateinit var mockContentResolver: ContentResolver
@Before @Before
@Throws(Exception::class) @Throws(Exception::class)
fun setUp() { fun setUp() {
MockitoAnnotations.initMocks(this)
activity = Robolectric.buildActivity(CustomSelectorActivity::class.java).get() activity = Robolectric.buildActivity(CustomSelectorActivity::class.java).get()
image = Image(1, "image", uri, "abc/abc", 1, "bucket1") image = Image(1, "image", uri, "abc/abc", 1, "bucket1")
folder = Folder(1, "bucket1", ArrayList(listOf(image))) folder = Folder(1, "bucket1", ArrayList(listOf(image)))
folderList = ArrayList(listOf(folder)) folderList = ArrayList(listOf(folder, folder, folder))
folderAdapter = FolderAdapter(activity, activity as FolderClickListener) folderAdapter = FolderAdapter(activity, activity as FolderClickListener)
} }
@ -57,9 +71,13 @@ class FolderAdapterTest {
*/ */
@Test @Test
fun onBindViewHolder() { fun onBindViewHolder() {
folderAdapter.init(folderList)
val inflater = activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater val inflater = activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
val listItemView: View = inflater.inflate(R.layout.item_custom_selector_folder, null, false) val listItemView: View = inflater.inflate(R.layout.item_custom_selector_folder, null, false)
whenever(context.contentResolver).thenReturn(mockContentResolver)
whenever(mockContentResolver.getType(any())).thenReturn("jpg")
Whitebox.setInternalState(folderAdapter, "context", context)
folderAdapter.init(folderList)
folderAdapter.onBindViewHolder(FolderAdapter.FolderViewHolder(listItemView), 0) folderAdapter.onBindViewHolder(FolderAdapter.FolderViewHolder(listItemView), 0)
} }

View file

@ -1,9 +1,12 @@
package fr.free.nrw.commons.customselector.ui.adapter package fr.free.nrw.commons.customselector.ui.adapter
import android.content.ContentResolver
import android.content.Context import android.content.Context
import android.net.Uri
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.widget.GridLayout import android.widget.GridLayout
import com.nhaarman.mockitokotlin2.whenever
import fr.free.nrw.commons.R import fr.free.nrw.commons.R
import fr.free.nrw.commons.TestCommonsApplication import fr.free.nrw.commons.TestCommonsApplication
import fr.free.nrw.commons.customselector.listeners.ImageSelectListener import fr.free.nrw.commons.customselector.listeners.ImageSelectListener
@ -15,6 +18,7 @@ import org.junit.Test
import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.Assertions
import org.junit.runner.RunWith import org.junit.runner.RunWith
import org.mockito.* import org.mockito.*
import org.powermock.reflect.Whitebox
import org.robolectric.Robolectric import org.robolectric.Robolectric
import org.robolectric.RobolectricTestRunner import org.robolectric.RobolectricTestRunner
import org.robolectric.annotation.Config import org.robolectric.annotation.Config
@ -26,18 +30,23 @@ import java.lang.reflect.Field
@RunWith(RobolectricTestRunner::class) @RunWith(RobolectricTestRunner::class)
@Config(sdk = [21], application = TestCommonsApplication::class) @Config(sdk = [21], application = TestCommonsApplication::class)
class ImageAdapterTest { class ImageAdapterTest {
@Mock
private lateinit var image: Image
@Mock @Mock
private lateinit var imageLoader: ImageLoader private lateinit var imageLoader: ImageLoader
@Mock @Mock
private lateinit var imageSelectListener: ImageSelectListener private lateinit var imageSelectListener: ImageSelectListener
@Mock
private lateinit var context: Context
@Mock
private lateinit var mockContentResolver: ContentResolver
private lateinit var activity: CustomSelectorActivity private lateinit var activity: CustomSelectorActivity
private lateinit var imageAdapter: ImageAdapter private lateinit var imageAdapter: ImageAdapter
private lateinit var images : ArrayList<Image> private lateinit var images : ArrayList<Image>
private lateinit var holder: ImageAdapter.ImageViewHolder private lateinit var holder: ImageAdapter.ImageViewHolder
private lateinit var selectedImageField: Field private lateinit var selectedImageField: Field
private var uri: Uri = Mockito.mock(Uri::class.java)
private lateinit var image: Image
/** /**
* Set up variables. * Set up variables.
@ -48,6 +57,7 @@ class ImageAdapterTest {
MockitoAnnotations.initMocks(this) MockitoAnnotations.initMocks(this)
activity = Robolectric.buildActivity(CustomSelectorActivity::class.java).get() activity = Robolectric.buildActivity(CustomSelectorActivity::class.java).get()
imageAdapter = ImageAdapter(activity, imageSelectListener, imageLoader) imageAdapter = ImageAdapter(activity, imageSelectListener, imageLoader)
image = Image(1, "image", uri, "abc/abc", 1, "bucket1")
images = ArrayList() images = ArrayList()
val inflater = activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater val inflater = activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
@ -71,6 +81,11 @@ class ImageAdapterTest {
*/ */
@Test @Test
fun onBindViewHolder() { fun onBindViewHolder() {
whenever(context.contentResolver).thenReturn(mockContentResolver)
whenever(mockContentResolver.getType(uri)).thenReturn("jpg")
Whitebox.setInternalState(imageAdapter, "context", context)
// Parameters. // Parameters.
images.add(image) images.add(image)
imageAdapter.init(images) imageAdapter.init(images)
@ -118,4 +133,13 @@ class ImageAdapterTest {
fun getItemCount() { fun getItemCount() {
Assertions.assertEquals(0, imageAdapter.itemCount) Assertions.assertEquals(0, imageAdapter.itemCount)
} }
/**
* Test getImageId
*/
@Test
fun getImageIdAt() {
imageAdapter.init(listOf(image))
Assertions.assertEquals(1, imageAdapter.getImageIdAt(0))
}
} }

View file

@ -2,7 +2,11 @@ package fr.free.nrw.commons.customselector.ui.selector
import android.net.Uri import android.net.Uri
import android.os.Bundle import android.os.Bundle
import android.os.Looper
import android.os.Looper.getMainLooper
import fr.free.nrw.commons.TestAppAdapter
import fr.free.nrw.commons.TestCommonsApplication import fr.free.nrw.commons.TestCommonsApplication
import fr.free.nrw.commons.contributions.MainActivity
import fr.free.nrw.commons.customselector.model.Folder import fr.free.nrw.commons.customselector.model.Folder
import fr.free.nrw.commons.customselector.model.Image import fr.free.nrw.commons.customselector.model.Image
import org.junit.Before import org.junit.Before
@ -12,7 +16,11 @@ import org.junit.runner.RunWith
import org.mockito.MockitoAnnotations import org.mockito.MockitoAnnotations
import org.robolectric.Robolectric import org.robolectric.Robolectric
import org.robolectric.RobolectricTestRunner import org.robolectric.RobolectricTestRunner
import org.robolectric.Shadows
import org.robolectric.Shadows.shadowOf
import org.robolectric.annotation.Config import org.robolectric.annotation.Config
import org.wikipedia.AppAdapter
import java.lang.reflect.Method
/** /**
* Custom Selector Activity Test * Custom Selector Activity Test
@ -29,6 +37,8 @@ class CustomSelectorActivityTest {
@Before @Before
fun setUp() { fun setUp() {
MockitoAnnotations.initMocks(this) MockitoAnnotations.initMocks(this)
AppAdapter.set(TestAppAdapter())
activity = Robolectric.buildActivity(CustomSelectorActivity::class.java) activity = Robolectric.buildActivity(CustomSelectorActivity::class.java)
.get() .get()
val onCreate = activity.javaClass.getDeclaredMethod("onCreate", Bundle::class.java) val onCreate = activity.javaClass.getDeclaredMethod("onCreate", Bundle::class.java)
@ -62,7 +72,7 @@ class CustomSelectorActivityTest {
@Test @Test
@Throws(Exception::class) @Throws(Exception::class)
fun testOnFolderClick() { fun testOnFolderClick() {
activity.onFolderClick(Folder(1, "test", arrayListOf())); activity.onFolderClick(1, "test", 0);
} }
/** /**
@ -93,4 +103,17 @@ class CustomSelectorActivityTest {
fun testOnBackPressed() { fun testOnBackPressed() {
activity.onBackPressed() activity.onBackPressed()
} }
/**
* Test onDestroy Function.
*/
@Test
@Throws(Exception::class)
fun testOnDestroy() {
val method: Method = CustomSelectorActivity::class.java.getDeclaredMethod(
"onDestroy"
)
method.isAccessible = true
method.invoke(activity)
}
} }

View file

@ -127,4 +127,15 @@ class FolderFragmentTest {
func.isAccessible = true func.isAccessible = true
func.invoke(fragment, Result(CallbackStatus.SUCCESS, arrayListOf())) func.invoke(fragment, Result(CallbackStatus.SUCCESS, arrayListOf()))
} }
/**
* Test onResume.
*/
@Test
fun testOnResume() {
val func = fragment.javaClass.getDeclaredMethod("onResume")
func.isAccessible = true
func.invoke(fragment)
}
} }

View file

@ -3,14 +3,17 @@ package fr.free.nrw.commons.customselector.ui.selector
import android.content.Context import android.content.Context
import android.os.Bundle import android.os.Bundle
import android.os.Looper import android.os.Looper
import android.os.Looper.getMainLooper
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.widget.ProgressBar import android.widget.ProgressBar
import androidx.fragment.app.FragmentManager import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentTransaction import androidx.fragment.app.FragmentTransaction
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.facebook.drawee.backends.pipeline.Fresco import com.facebook.drawee.backends.pipeline.Fresco
import com.facebook.soloader.SoLoader import com.facebook.soloader.SoLoader
import com.nhaarman.mockitokotlin2.whenever
import fr.free.nrw.commons.R import fr.free.nrw.commons.R
import fr.free.nrw.commons.TestAppAdapter import fr.free.nrw.commons.TestAppAdapter
import fr.free.nrw.commons.TestCommonsApplication import fr.free.nrw.commons.TestCommonsApplication
@ -29,6 +32,7 @@ import org.robolectric.Robolectric
import org.robolectric.RobolectricTestRunner import org.robolectric.RobolectricTestRunner
import org.robolectric.RuntimeEnvironment import org.robolectric.RuntimeEnvironment
import org.robolectric.Shadows import org.robolectric.Shadows
import org.robolectric.Shadows.shadowOf
import org.robolectric.annotation.Config import org.robolectric.annotation.Config
import org.robolectric.annotation.LooperMode import org.robolectric.annotation.LooperMode
import org.wikipedia.AppAdapter import org.wikipedia.AppAdapter
@ -50,6 +54,9 @@ class ImageFragmentTest {
private lateinit var context: Context private lateinit var context: Context
private lateinit var viewModelField: Field private lateinit var viewModelField: Field
@Mock
private lateinit var layoutManager: GridLayoutManager
@Mock @Mock
private lateinit var image: Image private lateinit var image: Image
@ -71,7 +78,7 @@ class ImageFragmentTest {
Fresco.initialize(context) Fresco.initialize(context)
val activity = Robolectric.buildActivity(CustomSelectorActivity::class.java).create().get() val activity = Robolectric.buildActivity(CustomSelectorActivity::class.java).create().get()
fragment = ImageFragment.newInstance(1) fragment = ImageFragment.newInstance(1,0)
val fragmentManager: FragmentManager = activity.supportFragmentManager val fragmentManager: FragmentManager = activity.supportFragmentManager
val fragmentTransaction: FragmentTransaction = fragmentManager.beginTransaction() val fragmentTransaction: FragmentTransaction = fragmentManager.beginTransaction()
fragmentTransaction.add(fragment, null) fragmentTransaction.add(fragment, null)
@ -132,4 +139,28 @@ class ImageFragmentTest {
assertEquals(3, func.invoke(fragment)) assertEquals(3, func.invoke(fragment))
} }
/**
* Test onResume.
*/
@Test
fun testOnResume() {
val func = fragment.javaClass.getDeclaredMethod("onResume")
func.isAccessible = true
func.invoke(fragment)
}
/**
* Test onDestroy.
*/
@Test
fun testOnDestroy() {
shadowOf(getMainLooper()).idle()
selectorRV.layoutManager = layoutManager
whenever(layoutManager.findFirstVisibleItemPosition()).thenReturn(1)
val func = fragment.javaClass.getDeclaredMethod("onDestroy")
func.isAccessible = true
func.invoke(fragment)
}
} }