mirror of
https://github.com/commons-app/apps-android-commons.git
synced 2025-10-27 04:43:54 +01:00
Tests updated (#4538)
This commit is contained in:
parent
1b984c8b9b
commit
ea29a726a1
8 changed files with 116 additions and 10 deletions
|
|
@ -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 {
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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.
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -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)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -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)
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -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)
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue