110 lines
3.9 KiB
Kotlin
110 lines
3.9 KiB
Kotlin
package haus.nightmare.a3270
|
|
|
|
import haus.nightmare.a3270.storage.SavedHost
|
|
import haus.nightmare.lib3270j.charset.CodePageRegistry
|
|
import haus.nightmare.lib3270j.charset.EbcdicTranslator
|
|
import haus.nightmare.lib3270j.TerminalModel
|
|
import haus.nightmare.lib3270j.screen.ScreenBuffer
|
|
import org.junit.Assert.*
|
|
import org.junit.Test
|
|
import java.util.UUID
|
|
|
|
class CodePageAndStorageTest {
|
|
|
|
@Test
|
|
fun testSavedHostCodePageSerialization() {
|
|
val host = SavedHost(
|
|
id = UUID.randomUUID().toString(),
|
|
name = "Test Mainframe",
|
|
host = "192.168.1.100",
|
|
port = 23,
|
|
model = 4,
|
|
luName = "LU3270",
|
|
autoConnect = true,
|
|
hostType = "TSO",
|
|
useTls = true,
|
|
tlsVerifyCert = false,
|
|
tn3270e = true,
|
|
graphicsMode = "BOTH",
|
|
codePage = "1047",
|
|
proxyType = "SOCKS5",
|
|
proxyHost = "proxy.example.com",
|
|
proxyPort = 1080,
|
|
proxyUsername = "testuser",
|
|
proxyPassword = "secretpassword"
|
|
)
|
|
|
|
val json = host.toJson()
|
|
assertEquals("1047", json.getString("codePage"))
|
|
assertEquals("Test Mainframe", json.getString("name"))
|
|
assertTrue(json.getBoolean("autoConnect"))
|
|
assertEquals("SOCKS5", json.getString("proxyType"))
|
|
assertEquals("proxy.example.com", json.getString("proxyHost"))
|
|
assertEquals(1080, json.getInt("proxyPort"))
|
|
assertEquals("testuser", json.getString("proxyUsername"))
|
|
assertEquals("secretpassword", json.getString("proxyPassword"))
|
|
|
|
val deserialized = SavedHost.fromJson(json)
|
|
assertEquals(host.id, deserialized.id)
|
|
assertEquals(host.name, deserialized.name)
|
|
assertEquals(host.host, deserialized.host)
|
|
assertEquals(host.port, deserialized.port)
|
|
assertEquals(host.model, deserialized.model)
|
|
assertEquals(host.codePage, deserialized.codePage)
|
|
assertEquals(host.graphicsMode, deserialized.graphicsMode)
|
|
assertEquals(host.proxyType, deserialized.proxyType)
|
|
assertEquals(host.proxyHost, deserialized.proxyHost)
|
|
assertEquals(host.proxyPort, deserialized.proxyPort)
|
|
assertEquals(host.proxyUsername, deserialized.proxyUsername)
|
|
assertEquals(host.proxyPassword, deserialized.proxyPassword)
|
|
}
|
|
|
|
@Test
|
|
fun testSavedHostDefaultCodePageFallback() {
|
|
// Old JSON without codePage or proxy fields
|
|
val json = org.json.JSONObject().apply {
|
|
put("name", "Legacy")
|
|
put("host", "mvs.local")
|
|
}
|
|
val deserialized = SavedHost.fromJson(json)
|
|
assertEquals("037", deserialized.codePage)
|
|
assertEquals("NONE", deserialized.proxyType)
|
|
assertEquals("", deserialized.proxyHost)
|
|
assertEquals(0, deserialized.proxyPort)
|
|
}
|
|
|
|
@Test
|
|
fun testCodePageRegistryResolution() {
|
|
val cp037 = CodePageRegistry.getCodePage("037")
|
|
assertNotNull(cp037)
|
|
assertEquals("037", cp037.codePageId)
|
|
|
|
val cp1047 = CodePageRegistry.getCodePage("1047")
|
|
assertNotNull(cp1047)
|
|
assertEquals("1047", cp1047.codePageId)
|
|
|
|
val cp930 = CodePageRegistry.getCodePage("930")
|
|
assertNotNull(cp930)
|
|
assertTrue(cp930.isDBCS)
|
|
|
|
val cp1140 = CodePageRegistry.getCodePage("1140")
|
|
assertNotNull(cp1140)
|
|
}
|
|
|
|
@Test
|
|
fun testEbcdicTranslatorCodePageSwitching() {
|
|
val translator = EbcdicTranslator("037")
|
|
assertEquals("037", translator.codePageId)
|
|
|
|
val translator1047 = EbcdicTranslator("1047")
|
|
assertEquals("1047", translator1047.codePageId)
|
|
|
|
val model = TerminalModel.IBM_3279_2
|
|
val sb = ScreenBuffer(model, translator)
|
|
assertEquals('A', translator.ebcdicToUnicode(0xC1))
|
|
sb.getCell(0).ec = 0xC1.toByte()
|
|
sb.translateToUnicode()
|
|
assertEquals('A', sb.getCell(0).ucs4)
|
|
}
|
|
}
|