Add tests
This commit is contained in:
@@ -0,0 +1,96 @@
|
||||
package ch.dissem.yaep.ui.common.focus
|
||||
|
||||
import androidx.compose.ui.input.key.Key
|
||||
import ch.tutteli.atrium.api.fluent.en_GB.toEqual
|
||||
import ch.tutteli.atrium.api.verbs.expect
|
||||
import kotlin.test.Test
|
||||
|
||||
class CluesSelectionManagerTest : SelectionManagerTest<CluesSelectionManager>() {
|
||||
|
||||
var primaryActionCalled: Int? = null
|
||||
var secondaryActionCalled: Int? = null
|
||||
|
||||
lateinit var focusables: MutableList<CluesFocusable>
|
||||
|
||||
override fun setUp() {
|
||||
manager = CluesSelectionManager()
|
||||
|
||||
primaryActionCalled = null
|
||||
secondaryActionCalled = null
|
||||
focusables = mutableListOf()
|
||||
for (i in 0..10) {
|
||||
focusables.add(
|
||||
manager.add(
|
||||
primaryAction = {
|
||||
primaryActionCalled = i
|
||||
},
|
||||
secondaryAction = {
|
||||
secondaryActionCalled = i
|
||||
}
|
||||
)
|
||||
)
|
||||
}
|
||||
manager.columns = 3
|
||||
}
|
||||
|
||||
@Test
|
||||
fun ensure_navigation_right_cycles() {
|
||||
manager.onKeyEvent(keyEvent(Key.DirectionRight))
|
||||
expect(manager.focused).toEqual(focusables[1])
|
||||
|
||||
manager.onKeyEvent(keyEvent(Key.DirectionRight))
|
||||
expect(manager.focused).toEqual(focusables[2])
|
||||
|
||||
manager.onKeyEvent(keyEvent(Key.DirectionRight))
|
||||
expect(manager.focused).toEqual(focusables[0])
|
||||
}
|
||||
|
||||
@Test
|
||||
fun ensure_navigation_left_cycles() {
|
||||
manager.onKeyEvent(keyEvent(Key.DirectionLeft))
|
||||
expect(manager.focused).toEqual(focusables[2])
|
||||
|
||||
manager.onKeyEvent(keyEvent(Key.DirectionLeft))
|
||||
expect(manager.focused).toEqual(focusables[1])
|
||||
|
||||
manager.onKeyEvent(keyEvent(Key.DirectionLeft))
|
||||
expect(manager.focused).toEqual(focusables[0])
|
||||
|
||||
manager.onKeyEvent(keyEvent(Key.DirectionLeft))
|
||||
expect(manager.focused).toEqual(focusables[2])
|
||||
}
|
||||
|
||||
@Test
|
||||
fun ensure_navigation_down_cycles() {
|
||||
manager.onKeyEvent(keyEvent(Key.DirectionDown))
|
||||
expect(manager.focused).toEqual(focusables[3])
|
||||
|
||||
manager.onKeyEvent(keyEvent(Key.DirectionDown))
|
||||
expect(manager.focused).toEqual(focusables[6])
|
||||
|
||||
manager.onKeyEvent(keyEvent(Key.DirectionDown))
|
||||
expect(manager.focused).toEqual(focusables[9])
|
||||
|
||||
manager.onKeyEvent(keyEvent(Key.DirectionDown))
|
||||
expect(manager.focused).toEqual(focusables[0])
|
||||
}
|
||||
|
||||
@Test
|
||||
fun ensure_navigation_up_cycles() {
|
||||
manager.onKeyEvent(keyEvent(Key.DirectionUp))
|
||||
expect(manager.focused).toEqual(focusables[9])
|
||||
|
||||
manager.onKeyEvent(keyEvent(Key.DirectionUp))
|
||||
expect(manager.focused).toEqual(focusables[6])
|
||||
|
||||
manager.onKeyEvent(keyEvent(Key.DirectionUp))
|
||||
expect(manager.focused).toEqual(focusables[3])
|
||||
|
||||
manager.onKeyEvent(keyEvent(Key.DirectionUp))
|
||||
expect(manager.focused).toEqual(focusables[0])
|
||||
|
||||
manager.onKeyEvent(keyEvent(Key.DirectionUp))
|
||||
expect(manager.focused).toEqual(focusables[9])
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
package ch.dissem.yaep.ui.common.focus
|
||||
|
||||
import androidx.compose.ui.input.key.Key
|
||||
import ch.tutteli.atrium.api.fluent.en_GB.toEqual
|
||||
import ch.tutteli.atrium.api.verbs.expect
|
||||
import kotlin.test.Test
|
||||
|
||||
class GridSelectionManagerTest : SelectionManagerTest<GridSelectionManager>() {
|
||||
|
||||
lateinit var focusables: MutableList<GridFocusable>
|
||||
|
||||
override fun setUp() {
|
||||
manager = GridSelectionManager()
|
||||
|
||||
focusables = mutableListOf()
|
||||
repeat(3) {
|
||||
manager.addRow()
|
||||
repeat(3) {
|
||||
focusables.add(
|
||||
manager.add()
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun ensure_navigation_right_cycles() {
|
||||
manager.onKeyEvent(keyEvent(Key.DirectionRight))
|
||||
expect(manager.focused).toEqual(focusables[1])
|
||||
|
||||
manager.onKeyEvent(keyEvent(Key.DirectionRight))
|
||||
expect(manager.focused).toEqual(focusables[2])
|
||||
|
||||
manager.onKeyEvent(keyEvent(Key.DirectionRight))
|
||||
expect(manager.focused).toEqual(focusables[0])
|
||||
}
|
||||
|
||||
@Test
|
||||
fun ensure_navigation_left_cycles() {
|
||||
manager.onKeyEvent(keyEvent(Key.DirectionLeft))
|
||||
expect(manager.focused).toEqual(focusables[2])
|
||||
|
||||
manager.onKeyEvent(keyEvent(Key.DirectionLeft))
|
||||
expect(manager.focused).toEqual(focusables[1])
|
||||
|
||||
manager.onKeyEvent(keyEvent(Key.DirectionLeft))
|
||||
expect(manager.focused).toEqual(focusables[0])
|
||||
|
||||
manager.onKeyEvent(keyEvent(Key.DirectionLeft))
|
||||
expect(manager.focused).toEqual(focusables[2])
|
||||
}
|
||||
|
||||
@Test
|
||||
fun ensure_navigation_down_cycles() {
|
||||
manager.onKeyEvent(keyEvent(Key.DirectionDown))
|
||||
expect(manager.focused).toEqual(focusables[3])
|
||||
|
||||
manager.onKeyEvent(keyEvent(Key.DirectionDown))
|
||||
expect(manager.focused).toEqual(focusables[6])
|
||||
|
||||
manager.onKeyEvent(keyEvent(Key.DirectionDown))
|
||||
expect(manager.focused).toEqual(focusables[0])
|
||||
}
|
||||
|
||||
@Test
|
||||
fun ensure_navigation_up_cycles() {
|
||||
manager.onKeyEvent(keyEvent(Key.DirectionUp))
|
||||
expect(manager.focused).toEqual(focusables[6])
|
||||
|
||||
manager.onKeyEvent(keyEvent(Key.DirectionUp))
|
||||
expect(manager.focused).toEqual(focusables[3])
|
||||
|
||||
manager.onKeyEvent(keyEvent(Key.DirectionUp))
|
||||
expect(manager.focused).toEqual(focusables[0])
|
||||
|
||||
manager.onKeyEvent(keyEvent(Key.DirectionUp))
|
||||
expect(manager.focused).toEqual(focusables[6])
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,73 @@
|
||||
package ch.dissem.yaep.ui.common.focus
|
||||
|
||||
import androidx.compose.ui.input.key.Key
|
||||
import ch.tutteli.atrium.api.fluent.en_GB.toEqual
|
||||
import ch.tutteli.atrium.api.verbs.expect
|
||||
import kotlin.test.Test
|
||||
|
||||
class LinearSelectionManagerTest : SelectionManagerTest<LinearSelectionManager>() {
|
||||
|
||||
override fun setUp() {
|
||||
manager = LinearSelectionManager(
|
||||
keyNext = Key.A,
|
||||
keyPrevious = Key.B
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun ensure_manager_with_focusables_has_focus_on_first_item() {
|
||||
val focusables = arrayOf(
|
||||
manager.add(),
|
||||
manager.add()
|
||||
)
|
||||
|
||||
expect(manager.focused).toEqual(focusables[0])
|
||||
}
|
||||
|
||||
@Test
|
||||
fun ensure_keyEvent_A_selects_next() {
|
||||
val focusables = arrayOf(
|
||||
manager.add(),
|
||||
manager.add(),
|
||||
manager.add()
|
||||
)
|
||||
|
||||
manager.onKeyEvent(keyEvent(Key.A))
|
||||
expect(manager.focused).toEqual(focusables[1])
|
||||
|
||||
manager.onKeyEvent(keyEvent(Key.A))
|
||||
expect(manager.focused).toEqual(focusables[2])
|
||||
}
|
||||
|
||||
@Test
|
||||
fun ensure_keyEvent_B_selects_previous() {
|
||||
val focusables = arrayOf(
|
||||
manager.add(),
|
||||
manager.add(),
|
||||
manager.add()
|
||||
)
|
||||
manager.focused = focusables[2]
|
||||
|
||||
manager.onKeyEvent(keyEvent(Key.B))
|
||||
expect(manager.focused).toEqual(focusables[1])
|
||||
|
||||
manager.onKeyEvent(keyEvent(Key.B))
|
||||
expect(manager.focused).toEqual(focusables[0])
|
||||
}
|
||||
|
||||
@Test
|
||||
fun ensure_ring_behaviour() {
|
||||
val focusables = arrayOf(
|
||||
manager.add(),
|
||||
manager.add(),
|
||||
manager.add()
|
||||
)
|
||||
|
||||
manager.onKeyEvent(keyEvent(Key.B))
|
||||
expect(manager.focused).toEqual(focusables[2])
|
||||
|
||||
manager.onKeyEvent(keyEvent(Key.A))
|
||||
expect(manager.focused).toEqual(focusables[0])
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package ch.dissem.yaep.ui.common.focus
|
||||
|
||||
import androidx.compose.ui.InternalComposeUiApi
|
||||
import androidx.compose.ui.input.key.Key
|
||||
import androidx.compose.ui.input.key.KeyEvent
|
||||
import androidx.compose.ui.input.key.KeyEventType
|
||||
import kotlin.test.BeforeTest
|
||||
|
||||
abstract class SelectionManagerTest<M : SelectionManager<*>> {
|
||||
lateinit var manager: M
|
||||
|
||||
@BeforeTest
|
||||
abstract fun setUp()
|
||||
|
||||
@OptIn(InternalComposeUiApi::class)
|
||||
fun keyEvent(key: Key, type: KeyEventType = KeyEventType.KeyUp) = KeyEvent(
|
||||
key = key,
|
||||
type = type
|
||||
)
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user