Skip to content

Commit d8d8038

Browse files
authored
Tests updated (#4538)
1 parent bc994d1 commit d8d8038

File tree

8 files changed

+116
-10
lines changed

8 files changed

+116
-10
lines changed

app/src/main/java/fr/free/nrw/commons/customselector/ui/adapter/FolderAdapter.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ class FolderAdapter(
6969
}
7070
} else {
7171
val previewImage = folder.images[0]
72-
Glide.with(context).load(previewImage.uri).into(holder.image)
72+
Glide.with(holder.image).load(previewImage.uri).into(holder.image)
7373
holder.name.text = folder.name
7474
holder.count.text = count.toString()
7575
holder.itemView.setOnClickListener {

app/src/main/java/fr/free/nrw/commons/customselector/ui/adapter/ImageAdapter.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ class ImageAdapter(
8585
} else {
8686
holder.itemUnselected();
8787
}
88-
Glide.with(context).load(image.uri).thumbnail(0.3f).into(holder.image)
88+
Glide.with(holder.image).load(image.uri).thumbnail(0.3f).into(holder.image)
8989
imageLoader.queryAndSetView(holder, image)
9090
holder.itemView.setOnClickListener {
9191
selectOrRemoveImage(holder, position)

app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/ImageFragment.kt

+1-2
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ class ImageFragment: CommonsDaggerSupportFragment() {
4848
*/
4949
private var selectorRV: RecyclerView? = null
5050
private var loader: ProgressBar? = null
51+
lateinit var filteredImages: ArrayList<Image>;
5152

5253
/**
5354
* View model Factory.
@@ -130,8 +131,6 @@ class ImageFragment: CommonsDaggerSupportFragment() {
130131
return root
131132
}
132133

133-
lateinit var filteredImages: ArrayList<Image>;
134-
135134
/**
136135
* Handle view model result.
137136
*/

app/src/test/kotlin/fr/free/nrw/commons/customselector/ui/adapter/FolderAdapterTest.kt

+20-2
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
package fr.free.nrw.commons.customselector.ui.adapter
22

3+
import android.content.ContentResolver
34
import fr.free.nrw.commons.R
45
import android.content.Context
56
import android.net.Uri
67
import android.view.LayoutInflater
78
import android.view.View
89
import android.widget.GridLayout
10+
import com.nhaarman.mockitokotlin2.any
11+
import com.nhaarman.mockitokotlin2.whenever
912
import fr.free.nrw.commons.TestCommonsApplication
1013
import fr.free.nrw.commons.customselector.listeners.FolderClickListener
1114
import fr.free.nrw.commons.customselector.model.Folder
@@ -15,7 +18,10 @@ import org.junit.Before
1518
import org.junit.Test
1619
import org.junit.jupiter.api.Assertions.assertEquals
1720
import org.junit.runner.RunWith
21+
import org.mockito.Mock
1822
import org.mockito.Mockito
23+
import org.mockito.MockitoAnnotations
24+
import org.powermock.reflect.Whitebox
1925
import org.robolectric.Robolectric
2026
import org.robolectric.RobolectricTestRunner
2127
import org.robolectric.annotation.Config
@@ -34,13 +40,21 @@ class FolderAdapterTest {
3440
private lateinit var folder: Folder
3541
private lateinit var folderList: ArrayList<Folder>
3642

43+
@Mock
44+
private lateinit var context: Context
45+
46+
@Mock
47+
private lateinit var mockContentResolver: ContentResolver
48+
3749
@Before
3850
@Throws(Exception::class)
3951
fun setUp() {
52+
MockitoAnnotations.initMocks(this)
53+
4054
activity = Robolectric.buildActivity(CustomSelectorActivity::class.java).get()
4155
image = Image(1, "image", uri, "abc/abc", 1, "bucket1")
4256
folder = Folder(1, "bucket1", ArrayList(listOf(image)))
43-
folderList = ArrayList(listOf(folder))
57+
folderList = ArrayList(listOf(folder, folder, folder))
4458
folderAdapter = FolderAdapter(activity, activity as FolderClickListener)
4559
}
4660

@@ -57,9 +71,13 @@ class FolderAdapterTest {
5771
*/
5872
@Test
5973
fun onBindViewHolder() {
60-
folderAdapter.init(folderList)
6174
val inflater = activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
6275
val listItemView: View = inflater.inflate(R.layout.item_custom_selector_folder, null, false)
76+
77+
whenever(context.contentResolver).thenReturn(mockContentResolver)
78+
whenever(mockContentResolver.getType(any())).thenReturn("jpg")
79+
Whitebox.setInternalState(folderAdapter, "context", context)
80+
folderAdapter.init(folderList)
6381
folderAdapter.onBindViewHolder(FolderAdapter.FolderViewHolder(listItemView), 0)
6482
}
6583

app/src/test/kotlin/fr/free/nrw/commons/customselector/ui/adapter/ImageAdapterTest.kt

+26-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
package fr.free.nrw.commons.customselector.ui.adapter
22

3+
import android.content.ContentResolver
34
import android.content.Context
5+
import android.net.Uri
46
import android.view.LayoutInflater
57
import android.view.View
68
import android.widget.GridLayout
9+
import com.nhaarman.mockitokotlin2.whenever
710
import fr.free.nrw.commons.R
811
import fr.free.nrw.commons.TestCommonsApplication
912
import fr.free.nrw.commons.customselector.listeners.ImageSelectListener
@@ -15,6 +18,7 @@ import org.junit.Test
1518
import org.junit.jupiter.api.Assertions
1619
import org.junit.runner.RunWith
1720
import org.mockito.*
21+
import org.powermock.reflect.Whitebox
1822
import org.robolectric.Robolectric
1923
import org.robolectric.RobolectricTestRunner
2024
import org.robolectric.annotation.Config
@@ -26,18 +30,23 @@ import java.lang.reflect.Field
2630
@RunWith(RobolectricTestRunner::class)
2731
@Config(sdk = [21], application = TestCommonsApplication::class)
2832
class ImageAdapterTest {
29-
@Mock
30-
private lateinit var image: Image
3133
@Mock
3234
private lateinit var imageLoader: ImageLoader
3335
@Mock
3436
private lateinit var imageSelectListener: ImageSelectListener
37+
@Mock
38+
private lateinit var context: Context
39+
@Mock
40+
private lateinit var mockContentResolver: ContentResolver
3541

3642
private lateinit var activity: CustomSelectorActivity
3743
private lateinit var imageAdapter: ImageAdapter
3844
private lateinit var images : ArrayList<Image>
3945
private lateinit var holder: ImageAdapter.ImageViewHolder
4046
private lateinit var selectedImageField: Field
47+
private var uri: Uri = Mockito.mock(Uri::class.java)
48+
private lateinit var image: Image
49+
4150

4251
/**
4352
* Set up variables.
@@ -48,6 +57,7 @@ class ImageAdapterTest {
4857
MockitoAnnotations.initMocks(this)
4958
activity = Robolectric.buildActivity(CustomSelectorActivity::class.java).get()
5059
imageAdapter = ImageAdapter(activity, imageSelectListener, imageLoader)
60+
image = Image(1, "image", uri, "abc/abc", 1, "bucket1")
5161
images = ArrayList()
5262

5363
val inflater = activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
@@ -71,6 +81,11 @@ class ImageAdapterTest {
7181
*/
7282
@Test
7383
fun onBindViewHolder() {
84+
85+
whenever(context.contentResolver).thenReturn(mockContentResolver)
86+
whenever(mockContentResolver.getType(uri)).thenReturn("jpg")
87+
Whitebox.setInternalState(imageAdapter, "context", context)
88+
7489
// Parameters.
7590
images.add(image)
7691
imageAdapter.init(images)
@@ -118,4 +133,13 @@ class ImageAdapterTest {
118133
fun getItemCount() {
119134
Assertions.assertEquals(0, imageAdapter.itemCount)
120135
}
136+
137+
/**
138+
* Test getImageId
139+
*/
140+
@Test
141+
fun getImageIdAt() {
142+
imageAdapter.init(listOf(image))
143+
Assertions.assertEquals(1, imageAdapter.getImageIdAt(0))
144+
}
121145
}

app/src/test/kotlin/fr/free/nrw/commons/customselector/ui/selector/CustomSelectorActivityTest.kt

+24-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,11 @@ package fr.free.nrw.commons.customselector.ui.selector
22

33
import android.net.Uri
44
import android.os.Bundle
5+
import android.os.Looper
6+
import android.os.Looper.getMainLooper
7+
import fr.free.nrw.commons.TestAppAdapter
58
import fr.free.nrw.commons.TestCommonsApplication
9+
import fr.free.nrw.commons.contributions.MainActivity
610
import fr.free.nrw.commons.customselector.model.Folder
711
import fr.free.nrw.commons.customselector.model.Image
812
import org.junit.Before
@@ -12,7 +16,11 @@ import org.junit.runner.RunWith
1216
import org.mockito.MockitoAnnotations
1317
import org.robolectric.Robolectric
1418
import org.robolectric.RobolectricTestRunner
19+
import org.robolectric.Shadows
20+
import org.robolectric.Shadows.shadowOf
1521
import org.robolectric.annotation.Config
22+
import org.wikipedia.AppAdapter
23+
import java.lang.reflect.Method
1624

1725
/**
1826
* Custom Selector Activity Test
@@ -29,6 +37,8 @@ class CustomSelectorActivityTest {
2937
@Before
3038
fun setUp() {
3139
MockitoAnnotations.initMocks(this)
40+
AppAdapter.set(TestAppAdapter())
41+
3242
activity = Robolectric.buildActivity(CustomSelectorActivity::class.java)
3343
.get()
3444
val onCreate = activity.javaClass.getDeclaredMethod("onCreate", Bundle::class.java)
@@ -62,7 +72,7 @@ class CustomSelectorActivityTest {
6272
@Test
6373
@Throws(Exception::class)
6474
fun testOnFolderClick() {
65-
activity.onFolderClick(Folder(1, "test", arrayListOf()));
75+
activity.onFolderClick(1, "test", 0);
6676
}
6777

6878
/**
@@ -93,4 +103,17 @@ class CustomSelectorActivityTest {
93103
fun testOnBackPressed() {
94104
activity.onBackPressed()
95105
}
106+
107+
/**
108+
* Test onDestroy Function.
109+
*/
110+
@Test
111+
@Throws(Exception::class)
112+
fun testOnDestroy() {
113+
val method: Method = CustomSelectorActivity::class.java.getDeclaredMethod(
114+
"onDestroy"
115+
)
116+
method.isAccessible = true
117+
method.invoke(activity)
118+
}
96119
}

app/src/test/kotlin/fr/free/nrw/commons/customselector/ui/selector/FolderFragmentTest.kt

+11
Original file line numberDiff line numberDiff line change
@@ -127,4 +127,15 @@ class FolderFragmentTest {
127127
func.isAccessible = true
128128
func.invoke(fragment, Result(CallbackStatus.SUCCESS, arrayListOf()))
129129
}
130+
131+
/**
132+
* Test onResume.
133+
*/
134+
@Test
135+
fun testOnResume() {
136+
val func = fragment.javaClass.getDeclaredMethod("onResume")
137+
func.isAccessible = true
138+
func.invoke(fragment)
139+
}
140+
130141
}

app/src/test/kotlin/fr/free/nrw/commons/customselector/ui/selector/ImageFragmentTest.kt

+32-1
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,17 @@ package fr.free.nrw.commons.customselector.ui.selector
33
import android.content.Context
44
import android.os.Bundle
55
import android.os.Looper
6+
import android.os.Looper.getMainLooper
67
import android.view.LayoutInflater
78
import android.view.View
89
import android.widget.ProgressBar
910
import androidx.fragment.app.FragmentManager
1011
import androidx.fragment.app.FragmentTransaction
12+
import androidx.recyclerview.widget.GridLayoutManager
1113
import androidx.recyclerview.widget.RecyclerView
1214
import com.facebook.drawee.backends.pipeline.Fresco
1315
import com.facebook.soloader.SoLoader
16+
import com.nhaarman.mockitokotlin2.whenever
1417
import fr.free.nrw.commons.R
1518
import fr.free.nrw.commons.TestAppAdapter
1619
import fr.free.nrw.commons.TestCommonsApplication
@@ -29,6 +32,7 @@ import org.robolectric.Robolectric
2932
import org.robolectric.RobolectricTestRunner
3033
import org.robolectric.RuntimeEnvironment
3134
import org.robolectric.Shadows
35+
import org.robolectric.Shadows.shadowOf
3236
import org.robolectric.annotation.Config
3337
import org.robolectric.annotation.LooperMode
3438
import org.wikipedia.AppAdapter
@@ -50,6 +54,9 @@ class ImageFragmentTest {
5054
private lateinit var context: Context
5155
private lateinit var viewModelField: Field
5256

57+
@Mock
58+
private lateinit var layoutManager: GridLayoutManager
59+
5360
@Mock
5461
private lateinit var image: Image
5562

@@ -71,7 +78,7 @@ class ImageFragmentTest {
7178
Fresco.initialize(context)
7279
val activity = Robolectric.buildActivity(CustomSelectorActivity::class.java).create().get()
7380

74-
fragment = ImageFragment.newInstance(1)
81+
fragment = ImageFragment.newInstance(1,0)
7582
val fragmentManager: FragmentManager = activity.supportFragmentManager
7683
val fragmentTransaction: FragmentTransaction = fragmentManager.beginTransaction()
7784
fragmentTransaction.add(fragment, null)
@@ -132,4 +139,28 @@ class ImageFragmentTest {
132139
assertEquals(3, func.invoke(fragment))
133140
}
134141

142+
143+
/**
144+
* Test onResume.
145+
*/
146+
@Test
147+
fun testOnResume() {
148+
val func = fragment.javaClass.getDeclaredMethod("onResume")
149+
func.isAccessible = true
150+
func.invoke(fragment)
151+
}
152+
153+
/**
154+
* Test onDestroy.
155+
*/
156+
@Test
157+
fun testOnDestroy() {
158+
shadowOf(getMainLooper()).idle()
159+
selectorRV.layoutManager = layoutManager
160+
whenever(layoutManager.findFirstVisibleItemPosition()).thenReturn(1)
161+
val func = fragment.javaClass.getDeclaredMethod("onDestroy")
162+
func.isAccessible = true
163+
func.invoke(fragment)
164+
}
165+
135166
}

0 commit comments

Comments
 (0)