Skip to content

Commit 4c825c6

Browse files
committed
Fix WindowInputEventTest.receive buttons and modifiers to only verify the expected buttons and modifiers.
1 parent 59b9776 commit 4c825c6

File tree

1 file changed

+23
-71
lines changed

1 file changed

+23
-71
lines changed

compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/window/window/WindowInputEventTest.kt

Lines changed: 23 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,14 @@ import androidx.compose.ui.input.key.Key
3131
import androidx.compose.ui.input.key.key
3232
import androidx.compose.ui.input.key.onKeyEvent
3333
import androidx.compose.ui.input.key.onPreviewKeyEvent
34-
import androidx.compose.ui.input.pointer.AwaitPointerEventScope
3534
import androidx.compose.ui.input.pointer.PointerButtons
3635
import androidx.compose.ui.input.pointer.PointerEvent
3736
import androidx.compose.ui.input.pointer.PointerEventType
3837
import androidx.compose.ui.input.pointer.PointerKeyboardModifiers
38+
import androidx.compose.ui.input.pointer.isCtrlPressed
39+
import androidx.compose.ui.input.pointer.isPrimaryPressed
40+
import androidx.compose.ui.input.pointer.isSecondaryPressed
41+
import androidx.compose.ui.input.pointer.isShiftPressed
3942
import androidx.compose.ui.input.pointer.onPointerEvent
4043
import androidx.compose.ui.input.pointer.pointerInput
4144
import androidx.compose.ui.unit.dp
@@ -45,7 +48,6 @@ import androidx.compose.ui.window.rememberWindowState
4548
import androidx.compose.ui.window.runApplicationTest
4649
import com.google.common.truth.Truth.assertThat
4750
import java.awt.Dimension
48-
import java.awt.Toolkit
4951
import java.awt.event.KeyEvent
5052
import java.awt.event.MouseEvent
5153
import java.awt.event.MouseEvent.BUTTON1
@@ -54,9 +56,9 @@ import java.awt.event.MouseEvent.BUTTON3_DOWN_MASK
5456
import java.awt.event.MouseEvent.CTRL_DOWN_MASK
5557
import java.awt.event.MouseEvent.MOUSE_DRAGGED
5658
import java.awt.event.MouseEvent.MOUSE_PRESSED
57-
import java.awt.event.MouseEvent.MOUSE_RELEASED
5859
import java.awt.event.MouseEvent.SHIFT_DOWN_MASK
5960
import java.awt.event.MouseWheelEvent.WHEEL_UNIT_SCROLL
61+
import kotlin.test.assertTrue
6062
import org.jetbrains.skiko.hostOs
6163
import org.junit.Test
6264

@@ -532,23 +534,16 @@ class WindowInputEventTest {
532534

533535
awaitIdle()
534536
assertThat(receivedButtons.size).isEqualTo(1)
535-
assertThat(receivedButtons.last()).isEqualTo(
536-
PointerButtons(
537-
// on macOS ctrl + primary click is treated as secondary click
538-
isPrimaryPressed = !hostOs.isMacOS,
539-
isSecondaryPressed = true,
540-
)
541-
)
537+
receivedButtons.last().let { buttons ->
538+
// on macOS ctrl + primary click is treated as secondary
539+
assertThat(buttons.isPrimaryPressed).isEqualTo(!hostOs.isMacOS)
540+
assertTrue(buttons.isSecondaryPressed)
541+
}
542542
assertThat(receivedKeyboardModifiers.size).isEqualTo(1)
543-
assertThat(receivedKeyboardModifiers.last()).isEqualTo(
544-
PointerKeyboardModifiers(
545-
isCtrlPressed = true,
546-
isShiftPressed = true,
547-
isCapsLockOn = getLockingKeyStateSafe(KeyEvent.VK_CAPS_LOCK),
548-
isScrollLockOn = getLockingKeyStateSafe(KeyEvent.VK_SCROLL_LOCK),
549-
isNumLockOn = getLockingKeyStateSafe(KeyEvent.VK_NUM_LOCK),
550-
)
551-
)
543+
receivedKeyboardModifiers.last().let { modifiers ->
544+
assertTrue(modifiers.isCtrlPressed)
545+
assertTrue(modifiers.isShiftPressed)
546+
}
552547

553548
window.sendMouseWheelEvent(
554549
100, 50, WHEEL_UNIT_SCROLL,
@@ -559,23 +554,16 @@ class WindowInputEventTest {
559554

560555
awaitIdle()
561556
assertThat(receivedButtons.size).isEqualTo(2)
562-
assertThat(receivedButtons.last()).isEqualTo(
563-
PointerButtons(
564-
// on macOS ctrl + primary click is treated as secondary click
565-
isPrimaryPressed = !hostOs.isMacOS,
566-
isSecondaryPressed = true,
567-
)
568-
)
557+
receivedButtons.last().let { buttons ->
558+
// on macOS ctrl + primary click is treated as secondary
559+
assertThat(buttons.isPrimaryPressed).isEqualTo(!hostOs.isMacOS)
560+
assertTrue(buttons.isSecondaryPressed)
561+
}
569562
assertThat(receivedKeyboardModifiers.size).isEqualTo(2)
570-
assertThat(receivedKeyboardModifiers.last()).isEqualTo(
571-
PointerKeyboardModifiers(
572-
isCtrlPressed = true,
573-
isShiftPressed = true,
574-
isCapsLockOn = getLockingKeyStateSafe(KeyEvent.VK_CAPS_LOCK),
575-
isScrollLockOn = getLockingKeyStateSafe(KeyEvent.VK_SCROLL_LOCK),
576-
isNumLockOn = getLockingKeyStateSafe(KeyEvent.VK_NUM_LOCK),
577-
)
578-
)
563+
receivedKeyboardModifiers.last().let { modifiers ->
564+
assertTrue(modifiers.isCtrlPressed)
565+
assertTrue(modifiers.isShiftPressed)
566+
}
579567
}
580568

581569
@Test
@@ -656,42 +644,6 @@ class WindowInputEventTest {
656644
window.dispose()
657645
}
658646

659-
private fun getLockingKeyStateSafe(
660-
mask: Int
661-
): Boolean = try {
662-
Toolkit.getDefaultToolkit().getLockingKeyState(mask)
663-
} catch (_: Exception) {
664-
false
665-
}
666-
667-
/**
668-
* Handle only the first received event and drop all the others that are received
669-
* in a single frame
670-
*/
671-
private fun Modifier.onFirstPointerEvent(
672-
eventType: PointerEventType,
673-
onEvent: AwaitPointerEventScope.(event: PointerEvent) -> Unit
674-
) = pointerInput(eventType, onEvent) {
675-
while (true) {
676-
awaitPointerEventScope {
677-
val event = awaitEvent(eventType)
678-
onEvent(event)
679-
}
680-
}
681-
}
682-
683-
private suspend fun AwaitPointerEventScope.awaitEvent(
684-
eventType: PointerEventType
685-
): PointerEvent {
686-
var event: PointerEvent
687-
do {
688-
event = awaitPointerEvent()
689-
} while (
690-
event.type != eventType
691-
)
692-
return event
693-
}
694-
695647
private val PointerEvent.pressed get() = changes.first().pressed
696648
private val PointerEvent.position get() = changes.first().position
697649
}

0 commit comments

Comments
 (0)