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 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