mirror of
https://github.com/irmen/prog8.git
synced 2026-10-22 05:02:58 +00:00
129 lines
4.9 KiB
Kotlin
129 lines
4.9 KiB
Kotlin
package prog8tests.compiler
|
|
|
|
import io.kotest.assertions.throwables.shouldThrowAny
|
|
import io.kotest.core.spec.style.FunSpec
|
|
import io.kotest.matchers.shouldBe
|
|
import prog8.compiler.DaemonProtocol
|
|
import prog8.compiler.DaemonRequest
|
|
|
|
class TestDaemonProtocol : FunSpec({
|
|
|
|
test("DaemonRequest roundtrip encode/decode preserves all fields") {
|
|
val request = DaemonRequest(
|
|
version = "12.3-SNAPSHOT",
|
|
plainText = true,
|
|
filepath = "/path/to/test.p8",
|
|
optimize = true,
|
|
writeAssembly = false,
|
|
warnSymbolShadowing = true,
|
|
warnImplicitTypeCasts = false,
|
|
quietAll = true,
|
|
quietAssembler = false,
|
|
showTimings = true,
|
|
asmListfile = false,
|
|
includeSourcelines = true,
|
|
newCodegen = true,
|
|
dumpVariables = false,
|
|
dumpSymbols = true,
|
|
varsHighBank = 10,
|
|
varsGolden = true,
|
|
varsAddress = 0x8000u,
|
|
compilationTarget = "cx16",
|
|
breakpointCpuInstruction = "NOP",
|
|
printAst1 = true,
|
|
printAst2 = false,
|
|
ignoreFootguns = true,
|
|
profilingInstrumentation = false,
|
|
traceImports = true,
|
|
symbolDefs = mapOf("FOO" to "123", "BAR" to "456"),
|
|
sourceDirs = listOf("/src1", "/src2"),
|
|
outputDir = "/out",
|
|
outputFile = "/out/custom.pgz",
|
|
cwd = "/home/user/project"
|
|
)
|
|
|
|
val encoded = DaemonProtocol.encodeRequest(request)
|
|
val decoded = DaemonProtocol.decodeRequest(encoded)
|
|
|
|
decoded.version shouldBe request.version
|
|
decoded.filepath shouldBe request.filepath
|
|
decoded.optimize shouldBe request.optimize
|
|
decoded.writeAssembly shouldBe request.writeAssembly
|
|
decoded.warnSymbolShadowing shouldBe request.warnSymbolShadowing
|
|
decoded.warnImplicitTypeCasts shouldBe request.warnImplicitTypeCasts
|
|
decoded.quietAll shouldBe request.quietAll
|
|
decoded.quietAssembler shouldBe request.quietAssembler
|
|
decoded.showTimings shouldBe request.showTimings
|
|
decoded.asmListfile shouldBe request.asmListfile
|
|
decoded.includeSourcelines shouldBe request.includeSourcelines
|
|
decoded.newCodegen shouldBe request.newCodegen
|
|
decoded.dumpVariables shouldBe request.dumpVariables
|
|
decoded.dumpSymbols shouldBe request.dumpSymbols
|
|
decoded.varsHighBank shouldBe request.varsHighBank
|
|
decoded.varsGolden shouldBe request.varsGolden
|
|
decoded.varsAddress shouldBe request.varsAddress
|
|
decoded.compilationTarget shouldBe request.compilationTarget
|
|
decoded.breakpointCpuInstruction shouldBe request.breakpointCpuInstruction
|
|
decoded.printAst1 shouldBe request.printAst1
|
|
decoded.printAst2 shouldBe request.printAst2
|
|
decoded.ignoreFootguns shouldBe request.ignoreFootguns
|
|
decoded.profilingInstrumentation shouldBe request.profilingInstrumentation
|
|
decoded.traceImports shouldBe request.traceImports
|
|
decoded.symbolDefs shouldBe request.symbolDefs
|
|
decoded.sourceDirs shouldBe request.sourceDirs
|
|
decoded.outputDir shouldBe request.outputDir
|
|
decoded.outputFile shouldBe request.outputFile
|
|
decoded.cwd shouldBe request.cwd
|
|
}
|
|
|
|
test("DaemonRequest roundtrip with null optional fields") {
|
|
val request = DaemonRequest(
|
|
version = "1.0",
|
|
plainText = true,
|
|
filepath = "test.p8",
|
|
optimize = false,
|
|
writeAssembly = false,
|
|
warnSymbolShadowing = false,
|
|
warnImplicitTypeCasts = false,
|
|
quietAll = false,
|
|
quietAssembler = false,
|
|
showTimings = false,
|
|
asmListfile = false,
|
|
includeSourcelines = false,
|
|
newCodegen = false,
|
|
dumpVariables = false,
|
|
dumpSymbols = false,
|
|
varsHighBank = null,
|
|
varsGolden = false,
|
|
varsAddress = null,
|
|
compilationTarget = "c64",
|
|
breakpointCpuInstruction = null,
|
|
printAst1 = false,
|
|
printAst2 = false,
|
|
ignoreFootguns = false,
|
|
profilingInstrumentation = false,
|
|
traceImports = false,
|
|
symbolDefs = emptyMap(),
|
|
sourceDirs = emptyList(),
|
|
outputDir = "",
|
|
cwd = "."
|
|
)
|
|
|
|
val encoded = DaemonProtocol.encodeRequest(request)
|
|
val decoded = DaemonProtocol.decodeRequest(encoded)
|
|
|
|
decoded.varsHighBank shouldBe null
|
|
decoded.varsAddress shouldBe null
|
|
decoded.breakpointCpuInstruction shouldBe null
|
|
decoded.newCodegen shouldBe false
|
|
decoded.outputFile shouldBe null
|
|
}
|
|
|
|
test("Decode fails gracefully with missing field") {
|
|
val brokenJson = """{"version":"1.0","filepath":"test.p8","optimize":true}"""
|
|
shouldThrowAny {
|
|
DaemonProtocol.decodeRequest(brokenJson)
|
|
}
|
|
}
|
|
})
|