Skip to content

Commit

Permalink
[web] Correct codePoint resolution for non-typed keys and introduce c…
Browse files Browse the repository at this point in the history
…onversion tests (#1374)
  • Loading branch information
Schahen authored May 27, 2024
1 parent 64d8e84 commit 053f16e
Show file tree
Hide file tree
Showing 5 changed files with 252 additions and 48 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -42,15 +42,16 @@ private fun KeyboardEvent.toInputModifiers(): PointerKeyboardModifiers {
}

internal fun KeyboardEvent.toComposeEvent(): KeyEvent {
val composeKey = Key(keyCode.toLong(), location)
return KeyEvent(
nativeKeyEvent = InternalKeyEvent(
key = Key(keyCode.toLong(), location),
key = composeKey,
type = when (type) {
"keydown" -> KeyEventType.KeyDown
"keyup" -> KeyEventType.KeyUp
else -> KeyEventType.Unknown
},
codePoint = key.codePointAt(0),
codePoint = if (key.firstOrNull()?.toString() == key) key.codePointAt(0) else composeKey.keyCode.toInt(),
modifiers = toInputModifiers(),
nativeEvent = this
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,12 +37,12 @@ class IsTypedEventTests {
@Test
fun charsAreTyped() {
val chars = listOf(
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m",
"n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z",

'a', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к',
'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц',
'ш', 'щ', 'ь', 'ъ', 'э', 'ю', 'я'
"a", "б", "в", "г", "д", "е", "ё", "ж", "з", "и", "й", "к",
"л", "м", "н", "о", "п", "р", "с", "т", "у", "ф", "х", "ц",
"ш", "щ", "ь", "ъ", "э", "ю", "я"
)

chars.forEach { char -> keyDownEvent(char).assertIsTyped() }
Expand All @@ -51,9 +51,9 @@ class IsTypedEventTests {
@Test
fun shortcutsAreNotTyped() {
val keyDownEvents = listOf(
keyDownEvent('c', metaKey = true, ctrlKey = true),
keyDownEvent('p', metaKey = true, ctrlKey = true),
keyDownEvent('v', metaKey = true, ctrlKey = true)
keyDownEvent("c", metaKey = true, ctrlKey = true),
keyDownEvent("p", metaKey = true, ctrlKey = true),
keyDownEvent("v", metaKey = true, ctrlKey = true)
)

keyDownEvents.forEach { event -> event.assertIsNotTyped() }
Expand All @@ -62,9 +62,9 @@ class IsTypedEventTests {
@Test
fun shortcutsWithCtrlOnlyAreNotTyped() {
val keyDownEvents = listOf(
keyDownEvent('c', metaKey = false, ctrlKey = true),
keyDownEvent('p', metaKey = false, ctrlKey = true),
keyDownEvent('v', metaKey = false, ctrlKey = true)
keyDownEvent("c", metaKey = false, ctrlKey = true),
keyDownEvent("p", metaKey = false, ctrlKey = true),
keyDownEvent("v", metaKey = false, ctrlKey = true)
)

keyDownEvents.forEach { event -> event.assertIsNotTyped() }
Expand All @@ -73,9 +73,9 @@ class IsTypedEventTests {
@Test
fun shortcutsWithMetaOnlyAreNotTyped() {
val keyDownEvents = listOf(
keyDownEvent('c', metaKey = true, ctrlKey = false),
keyDownEvent('p', metaKey = true, ctrlKey = false),
keyDownEvent('v', metaKey = true, ctrlKey = false)
keyDownEvent("c", metaKey = true, ctrlKey = false),
keyDownEvent("p", metaKey = true, ctrlKey = false),
keyDownEvent("v", metaKey = true, ctrlKey = false)
)

keyDownEvents.forEach { event -> event.assertIsNotTyped() }
Expand All @@ -84,9 +84,9 @@ class IsTypedEventTests {
@Test
fun altProducesATypedEvent() {
val keyDownEvents = listOf(
keyDownEvent('c', altKey = true),
keyDownEvent('p', altKey = true),
keyDownEvent('v', altKey = true)
keyDownEvent("c", altKey = true),
keyDownEvent("p", altKey = true),
keyDownEvent("v", altKey = true)
)

keyDownEvents.forEach { event -> event.assertIsTyped() }
Expand Down
Loading

0 comments on commit 053f16e

Please # to comment.