add test for text selection

This commit is contained in:
Helium314 2023-09-21 19:06:16 +02:00
parent 3aeaeb0009
commit 85ecce430e

View file

@ -230,6 +230,13 @@ class InputLogicTest {
assertEquals("bla..", text) assertEquals("bla..", text)
} }
@Test fun selectDoesSelect() {
reset()
setText("this is some text")
setCursorPosition(3, 8)
assertEquals("s is ", text.substring(3, 8))
}
// ------- helper functions --------- // ------- helper functions ---------
// should be called before every test, so the same state is guaranteed // should be called before every test, so the same state is guaranteed
@ -301,7 +308,7 @@ class InputLogicTest {
// adjust text in inputConnection first, otherwise fixLyingCursorPosition will move cursor // adjust text in inputConnection first, otherwise fixLyingCursorPosition will move cursor
// to the end of the text // to the end of the text
val fullText = textBeforeCursor + textAfterCursor val fullText = textBeforeCursor + selectedText + textAfterCursor
assertEquals(fullText, getText()) assertEquals(fullText, getText())
// need to update ic before, otherwise when reloading text cache from ic, ric will load wrong text before cursor // need to update ic before, otherwise when reloading text cache from ic, ric will load wrong text before cursor
@ -309,7 +316,7 @@ class InputLogicTest {
val oldEnd = selectionEnd val oldEnd = selectionEnd
selectionStart = start selectionStart = start
selectionEnd = end selectionEnd = end
assertEquals(fullText, textBeforeCursor + textAfterCursor) assertEquals(fullText, textBeforeCursor + selectedText + textAfterCursor)
latinIME.onUpdateSelection(oldStart, oldEnd, start, end, composingStart, composingEnd) latinIME.onUpdateSelection(oldStart, oldEnd, start, end, composingStart, composingEnd)
handleMessages() handleMessages()
@ -320,7 +327,7 @@ class InputLogicTest {
handleMessages() handleMessages()
} }
assertEquals(fullText, getText()) // this may only be correct after start input? assertEquals(fullText, getText())
assertEquals(start, selectionStart) assertEquals(start, selectionStart)
assertEquals(end, selectionEnd) assertEquals(end, selectionEnd)
checkConnectionConsistency() checkConnectionConsistency()
@ -364,7 +371,7 @@ class InputLogicTest {
} }
private fun getText() = private fun getText() =
connection.getTextBeforeCursor(100, 0).toString() + connection.getTextAfterCursor(100, 0) connection.getTextBeforeCursor(100, 0).toString() + (connection.getSelectedText(0) ?: "") + connection.getTextAfterCursor(100, 0)
// always need to handle messages for proper simulation // always need to handle messages for proper simulation
private fun handleMessages() { private fun handleMessages() {
@ -403,6 +410,7 @@ private var composingEnd = -1
// convenience for access // convenience for access
private val textBeforeCursor get() = text.substring(0, selectionStart) private val textBeforeCursor get() = text.substring(0, selectionStart)
private val textAfterCursor get() = text.substring(selectionEnd) private val textAfterCursor get() = text.substring(selectionEnd)
private val selectedText get() = text.substring(selectionStart, selectionEnd)
private val cursor get() = if (selectionStart == selectionEnd) selectionStart else -1 private val cursor get() = if (selectionStart == selectionEnd) selectionStart else -1
// todo: maybe this is not correct? seems to return only up to the cursor // todo: maybe this is not correct? seems to return only up to the cursor