Extract base parser test (#653)

This removes duplication, but will also aid in future migration to new API.
This commit is contained in:
Jake Wharton
2025-01-23 00:24:01 -05:00
committed by GitHub
parent 4c8640bbcf
commit 0a23d8d276
19 changed files with 34 additions and 159 deletions

View File

@ -0,0 +1,17 @@
package com.jakewharton.mosaic.terminal
import kotlin.test.AfterTest
abstract class BaseTerminalParserTest {
internal val writer = Tty.stdinWriter()
internal val parser = TerminalParser(writer.reader)
@AfterTest fun after() {
writer.close()
}
@OptIn(ExperimentalStdlibApi::class)
internal fun StdinWriter.writeHex(hex: String) {
write(hex.hexToByteArray())
}
}

View File

@ -3,17 +3,9 @@ package com.jakewharton.mosaic.terminal
import assertk.assertThat
import assertk.assertions.isEqualTo
import com.jakewharton.mosaic.terminal.event.BracketedPasteEvent
import kotlin.test.AfterTest
import kotlin.test.Test
class TerminalParserCsiBracketedPasteEventTest {
private val writer = Tty.stdinWriter()
private val parser = TerminalParser(writer.reader)
@AfterTest fun after() {
writer.close()
}
class TerminalParserCsiBracketedPasteEventTest : BaseTerminalParserTest() {
@Test fun pasteStart() {
writer.writeHex("1b5b3230307e")
assertThat(parser.next()).isEqualTo(BracketedPasteEvent(start = true))

View File

@ -9,18 +9,10 @@ import com.jakewharton.mosaic.terminal.event.DecModeReportEvent.Setting.Permanen
import com.jakewharton.mosaic.terminal.event.DecModeReportEvent.Setting.Reset
import com.jakewharton.mosaic.terminal.event.DecModeReportEvent.Setting.Set
import com.jakewharton.mosaic.terminal.event.UnknownEvent
import kotlin.test.AfterTest
import kotlin.test.Test
@OptIn(ExperimentalStdlibApi::class)
class TerminalParserCsiDecModeReportEventTest {
private val writer = Tty.stdinWriter()
private val parser = TerminalParser(writer.reader)
@AfterTest fun after() {
writer.close()
}
class TerminalParserCsiDecModeReportEventTest : BaseTerminalParserTest() {
@Test fun settings() {
writer.writeHex("1b5b3f313030343b302479")
assertThat(parser.next()).isEqualTo(

View File

@ -3,17 +3,9 @@ package com.jakewharton.mosaic.terminal
import assertk.assertThat
import assertk.assertions.isEqualTo
import com.jakewharton.mosaic.terminal.event.FocusEvent
import kotlin.test.AfterTest
import kotlin.test.Test
class TerminalParserCsiFocusEventTest {
private val writer = Tty.stdinWriter()
private val parser = TerminalParser(writer.reader)
@AfterTest fun after() {
writer.close()
}
class TerminalParserCsiFocusEventTest : BaseTerminalParserTest() {
@Test fun focusedTrue() {
writer.writeHex("1b5b49")
assertThat(parser.next()).isEqualTo(FocusEvent(focused = true))

View File

@ -19,18 +19,10 @@ import com.jakewharton.mosaic.terminal.event.KeyboardEvent.Companion.ModifierSup
import com.jakewharton.mosaic.terminal.event.KeyboardEvent.Companion.Right
import com.jakewharton.mosaic.terminal.event.KeyboardEvent.Companion.Up
import com.jakewharton.mosaic.terminal.event.UnknownEvent
import kotlin.test.AfterTest
import kotlin.test.Test
@OptIn(ExperimentalStdlibApi::class)
class TerminalParserCsiKeyboardEventTest {
private val writer = Tty.stdinWriter()
private val parser = TerminalParser(writer.reader)
@AfterTest fun after() {
writer.close()
}
class TerminalParserCsiKeyboardEventTest : BaseTerminalParserTest() {
@Test fun up() {
writer.writeHex("1b5b41")
assertThat(parser.next()).isEqualTo(KeyboardEvent(Up))

View File

@ -4,18 +4,10 @@ import assertk.assertThat
import assertk.assertions.isEqualTo
import com.jakewharton.mosaic.terminal.event.KeyboardEvent
import com.jakewharton.mosaic.terminal.event.KeyboardEvent.Companion.ModifierShift
import kotlin.test.AfterTest
import kotlin.test.Test
@OptIn(ExperimentalStdlibApi::class)
class TerminalParserCsiKittyKeyboardEventTest {
private val writer = Tty.stdinWriter()
private val parser = TerminalParser(writer.reader)
@AfterTest fun after() {
writer.close()
}
class TerminalParserCsiKittyKeyboardEventTest : BaseTerminalParserTest() {
@Test fun h() {
writer.writeHex("1b5b31303475")
assertThat(parser.next()).isEqualTo(

View File

@ -4,18 +4,10 @@ import assertk.assertThat
import assertk.assertions.isEqualTo
import com.jakewharton.mosaic.terminal.event.KittyKeyboardQueryEvent
import com.jakewharton.mosaic.terminal.event.UnknownEvent
import kotlin.test.AfterTest
import kotlin.test.Test
@OptIn(ExperimentalStdlibApi::class)
class TerminalParserCsiKittyKeyboardQueryEventTest {
private val writer = Tty.stdinWriter()
private val parser = TerminalParser(writer.reader)
@AfterTest fun after() {
writer.close()
}
class TerminalParserCsiKittyKeyboardQueryEventTest : BaseTerminalParserTest() {
@Test fun flagsNone() {
writer.writeHex("1b5b3f3075")
assertThat(parser.next()).isEqualTo(KittyKeyboardQueryEvent(0))

View File

@ -6,18 +6,10 @@ import com.jakewharton.mosaic.terminal.event.MouseEvent
import com.jakewharton.mosaic.terminal.event.MouseEvent.Button
import com.jakewharton.mosaic.terminal.event.MouseEvent.Type
import com.jakewharton.mosaic.terminal.event.UnknownEvent
import kotlin.test.AfterTest
import kotlin.test.Test
@OptIn(ExperimentalStdlibApi::class)
class TerminalParserCsiMouseEventTest {
private val writer = Tty.stdinWriter()
private val parser = TerminalParser(writer.reader)
@AfterTest fun after() {
writer.close()
}
class TerminalParserCsiMouseEventTest : BaseTerminalParserTest() {
@Test fun motion() {
writer.writeHex("1b5b4d434837")
assertThat(parser.next()).isEqualTo(

View File

@ -4,18 +4,10 @@ import assertk.assertThat
import assertk.assertions.isEqualTo
import com.jakewharton.mosaic.terminal.event.OperatingStatusResponseEvent
import com.jakewharton.mosaic.terminal.event.UnknownEvent
import kotlin.test.AfterTest
import kotlin.test.Test
@OptIn(ExperimentalStdlibApi::class)
class TerminalParserCsiOperatingStatusResponseEventTest {
private val writer = Tty.stdinWriter()
private val parser = TerminalParser(writer.reader)
@AfterTest fun after() {
writer.close()
}
class TerminalParserCsiOperatingStatusResponseEventTest : BaseTerminalParserTest() {
@Test fun ok() {
writer.writeHex("1b5b306e")
assertThat(parser.next()).isEqualTo(OperatingStatusResponseEvent(ok = true))

View File

@ -4,18 +4,10 @@ import assertk.assertThat
import assertk.assertions.isEqualTo
import com.jakewharton.mosaic.terminal.event.PrimaryDeviceAttributesEvent
import com.jakewharton.mosaic.terminal.event.UnknownEvent
import kotlin.test.AfterTest
import kotlin.test.Test
@OptIn(ExperimentalStdlibApi::class)
class TerminalParserCsiPrimaryDeviceAttributesEventTest {
private val writer = Tty.stdinWriter()
private val parser = TerminalParser(writer.reader)
@AfterTest fun after() {
writer.close()
}
class TerminalParserCsiPrimaryDeviceAttributesEventTest : BaseTerminalParserTest() {
@Test fun noLeadingQuestionMarkIsUnknown() {
writer.writeHex("1b5b303063")
assertThat(parser.next()).isEqualTo(

View File

@ -4,18 +4,10 @@ import assertk.assertThat
import assertk.assertions.isEqualTo
import com.jakewharton.mosaic.terminal.event.ResizeEvent
import com.jakewharton.mosaic.terminal.event.UnknownEvent
import kotlin.test.AfterTest
import kotlin.test.Test
@OptIn(ExperimentalStdlibApi::class)
class TerminalParserCsiResizeEventTest {
private val writer = Tty.stdinWriter()
private val parser = TerminalParser(writer.reader)
@AfterTest fun after() {
writer.close()
}
class TerminalParserCsiResizeEventTest : BaseTerminalParserTest() {
@Test fun basic() {
writer.writeHex("1b5b34383b313b323b333b3474")
assertThat(parser.next()).isEqualTo(ResizeEvent(2, 1, 4, 3))

View File

@ -4,18 +4,10 @@ import assertk.assertThat
import assertk.assertions.isEqualTo
import com.jakewharton.mosaic.terminal.event.SystemThemeEvent
import com.jakewharton.mosaic.terminal.event.UnknownEvent
import kotlin.test.AfterTest
import kotlin.test.Test
@OptIn(ExperimentalStdlibApi::class)
class TerminalParserCsiSystemThemeEventTest {
private val writer = Tty.stdinWriter()
private val parser = TerminalParser(writer.reader)
@AfterTest fun after() {
writer.close()
}
class TerminalParserCsiSystemThemeEventTest : BaseTerminalParserTest() {
@Test fun dark() {
writer.writeHex("1b5b3f3939373b316e")
assertThat(parser.next()).isEqualTo(SystemThemeEvent(isDark = true))

View File

@ -4,18 +4,10 @@ import assertk.assertThat
import assertk.assertions.isEqualTo
import com.jakewharton.mosaic.terminal.event.UnknownEvent
import com.jakewharton.mosaic.terminal.event.XtermCharacterSizeEvent
import kotlin.test.AfterTest
import kotlin.test.Test
@OptIn(ExperimentalStdlibApi::class)
class TerminalParserCsiXtermCharacterSizeEventTest {
private val writer = Tty.stdinWriter()
private val parser = TerminalParser(writer.reader)
@AfterTest fun after() {
writer.close()
}
class TerminalParserCsiXtermCharacterSizeEventTest : BaseTerminalParserTest() {
@Test fun basic() {
writer.writeHex("1b5b383b313b3274")
assertThat(parser.next()).isEqualTo(XtermCharacterSizeEvent(1, 2))

View File

@ -4,18 +4,10 @@ import assertk.assertThat
import assertk.assertions.isEqualTo
import com.jakewharton.mosaic.terminal.event.UnknownEvent
import com.jakewharton.mosaic.terminal.event.XtermPixelSizeEvent
import kotlin.test.AfterTest
import kotlin.test.Test
@OptIn(ExperimentalStdlibApi::class)
class TerminalParserCsiXtermPixelSizeEventTest {
private val writer = Tty.stdinWriter()
private val parser = TerminalParser(writer.reader)
@AfterTest fun after() {
writer.close()
}
class TerminalParserCsiXtermPixelSizeEventTest : BaseTerminalParserTest() {
@Test fun basic() {
writer.writeHex("1b5b343b313b3274")
assertThat(parser.next()).isEqualTo(XtermPixelSizeEvent(1, 2))

View File

@ -3,17 +3,9 @@ package com.jakewharton.mosaic.terminal
import assertk.assertThat
import assertk.assertions.isEqualTo
import com.jakewharton.mosaic.terminal.event.TerminalVersionEvent
import kotlin.test.AfterTest
import kotlin.test.Test
class TerminalParserDcsTerminalVersionEventTest {
private val writer = Tty.stdinWriter()
private val parser = TerminalParser(writer.reader)
@AfterTest fun after() {
writer.close()
}
class TerminalParserDcsTerminalVersionEventTest : BaseTerminalParserTest() {
@Test fun empty() {
writer.writeHex("1b503e7c1b5c")
assertThat(parser.next()).isEqualTo(TerminalVersionEvent(""))

View File

@ -4,17 +4,9 @@ import assertk.assertThat
import assertk.assertions.isEqualTo
import com.jakewharton.mosaic.terminal.event.KeyboardEvent
import com.jakewharton.mosaic.terminal.event.KeyboardEvent.Companion.ModifierCtrl
import kotlin.test.AfterTest
import kotlin.test.Test
class TerminalParserGroundKeyboardEventTest {
private val writer = Tty.stdinWriter()
private val parser = TerminalParser(writer.reader)
@AfterTest fun after() {
writer.close()
}
class TerminalParserGroundKeyboardEventTest : BaseTerminalParserTest() {
@Test fun graphic() {
for (codepoint in 0x20..0x7f) {
val hex = codepoint.toString(16)

View File

@ -5,18 +5,10 @@ import assertk.assertions.isEqualTo
import com.jakewharton.mosaic.terminal.event.KittyPointerQueryNameEvent
import com.jakewharton.mosaic.terminal.event.KittyPointerQuerySupportEvent
import com.jakewharton.mosaic.terminal.event.UnknownEvent
import kotlin.test.AfterTest
import kotlin.test.Test
@OptIn(ExperimentalStdlibApi::class)
class TerminalParserOscKittyPointerQueryEventTest {
private val writer = Tty.stdinWriter()
private val parser = TerminalParser(writer.reader)
@AfterTest fun after() {
writer.close()
}
class TerminalParserOscKittyPointerQueryEventTest : BaseTerminalParserTest() {
@Test fun emptyFails() {
writer.writeHex("1b5d32323b1b5c")
assertThat(parser.next()).isEqualTo(

View File

@ -15,18 +15,10 @@ import com.jakewharton.mosaic.terminal.event.KeyboardEvent.Companion.Right
import com.jakewharton.mosaic.terminal.event.KeyboardEvent.Companion.Up
import com.jakewharton.mosaic.terminal.event.OperatingStatusResponseEvent
import com.jakewharton.mosaic.terminal.event.UnknownEvent
import kotlin.test.AfterTest
import kotlin.test.Test
@OptIn(ExperimentalStdlibApi::class)
class TerminalParserSs3KeyboardEventTest {
private val writer = Tty.stdinWriter()
private val parser = TerminalParser(writer.reader)
@AfterTest fun after() {
writer.close()
}
class TerminalParserSs3KeyboardEventTest : BaseTerminalParserTest() {
@Test fun up() {
writer.writeHex("1b4f41")
assertThat(parser.next()).isEqualTo(KeyboardEvent(Up))

View File

@ -1,6 +0,0 @@
package com.jakewharton.mosaic.terminal
@OptIn(ExperimentalStdlibApi::class)
internal fun StdinWriter.writeHex(hex: String) {
write(hex.hexToByteArray())
}