Extract radio group logic into helper (#11493)
parent
01338274e0
commit
8e8e5aea36
@ -0,0 +1,28 @@
|
|||||||
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||||
|
|
||||||
|
package org.mozilla.fenix.utils.view
|
||||||
|
|
||||||
|
interface GroupableRadioButton {
|
||||||
|
fun updateRadioValue(isChecked: Boolean)
|
||||||
|
|
||||||
|
fun addToRadioGroup(radioButton: GroupableRadioButton)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Connect all the given radio buttons into a group,
|
||||||
|
* so that when one radio is checked the others are unchecked.
|
||||||
|
*/
|
||||||
|
fun addToRadioGroup(vararg radios: GroupableRadioButton) {
|
||||||
|
for (i in 0..radios.lastIndex) {
|
||||||
|
for (j in (i + 1)..radios.lastIndex) {
|
||||||
|
radios[i].addToRadioGroup(radios[j])
|
||||||
|
radios[j].addToRadioGroup(radios[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun Iterable<GroupableRadioButton>.uncheckAll() {
|
||||||
|
forEach { it.updateRadioValue(isChecked = false) }
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
package org.mozilla.fenix.ext
|
package org.mozilla.fenix.utils.view
|
||||||
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
@ -0,0 +1,66 @@
|
|||||||
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||||
|
|
||||||
|
package org.mozilla.fenix.utils.view
|
||||||
|
|
||||||
|
import io.mockk.Called
|
||||||
|
import io.mockk.mockk
|
||||||
|
import io.mockk.verify
|
||||||
|
import io.mockk.verifySequence
|
||||||
|
import org.junit.Test
|
||||||
|
|
||||||
|
class GroupableRadioButtonTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `test add 1 radio to group`() {
|
||||||
|
val radio = mockk<GroupableRadioButton>(relaxed = true)
|
||||||
|
addToRadioGroup(radio)
|
||||||
|
verify { radio wasNot Called }
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `test add 2 radios to group`() {
|
||||||
|
val radio1 = mockk<GroupableRadioButton>(relaxed = true)
|
||||||
|
val radio2 = mockk<GroupableRadioButton>(relaxed = true)
|
||||||
|
addToRadioGroup(radio1, radio2)
|
||||||
|
|
||||||
|
verifySequence {
|
||||||
|
radio1.addToRadioGroup(radio2)
|
||||||
|
radio2.addToRadioGroup(radio1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `test add 3 radios to group`() {
|
||||||
|
val radio1 = mockk<GroupableRadioButton>(relaxed = true)
|
||||||
|
val radio2 = mockk<GroupableRadioButton>(relaxed = true)
|
||||||
|
val radio3 = mockk<GroupableRadioButton>(relaxed = true)
|
||||||
|
addToRadioGroup(radio1, radio2, radio3)
|
||||||
|
|
||||||
|
verifySequence {
|
||||||
|
radio1.addToRadioGroup(radio2)
|
||||||
|
radio2.addToRadioGroup(radio1)
|
||||||
|
|
||||||
|
radio1.addToRadioGroup(radio3)
|
||||||
|
radio3.addToRadioGroup(radio1)
|
||||||
|
|
||||||
|
radio2.addToRadioGroup(radio3)
|
||||||
|
radio3.addToRadioGroup(radio2)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `test uncheck all`() {
|
||||||
|
val radio1 = mockk<GroupableRadioButton>(relaxed = true)
|
||||||
|
val radio2 = mockk<GroupableRadioButton>(relaxed = true)
|
||||||
|
val radio3 = mockk<GroupableRadioButton>(relaxed = true)
|
||||||
|
listOf(radio1, radio2, radio3).uncheckAll()
|
||||||
|
|
||||||
|
verifySequence {
|
||||||
|
radio1.updateRadioValue(false)
|
||||||
|
radio2.updateRadioValue(false)
|
||||||
|
radio3.updateRadioValue(false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue