mirror of
https://github.com/irmen/prog8.git
synced 2025-01-26 03:32:22 +00:00
a289b32053
This reverts commit 690782bf. It was too risky, using vera (especially fx) transparently in multiple places especially perhaps in IRQ handlers will create havoc unless much intricate care is taken to save/restore the vera state. Better to do vera fx explicitly where the programmer has full control.
112 lines
3.4 KiB
Kotlin
112 lines
3.4 KiB
Kotlin
package prog8tests
|
|
|
|
import io.kotest.assertions.withClue
|
|
import io.kotest.core.spec.style.FunSpec
|
|
import io.kotest.matchers.shouldBe
|
|
import io.kotest.matchers.string.shouldStartWith
|
|
import prog8.code.core.ZeropageType
|
|
import prog8.code.core.internedStringsModuleName
|
|
import prog8.code.target.C64Target
|
|
import prog8.compiler.determineCompilationOptions
|
|
import prog8.compiler.parseMainModule
|
|
import prog8tests.helpers.ErrorReporterForTests
|
|
import prog8tests.helpers.compileText
|
|
import prog8tests.helpers.outputDir
|
|
|
|
|
|
class TestImportedModulesOrderAndOptions: FunSpec({
|
|
|
|
test("testImportedModuleOrderAndMainModuleCorrect") {
|
|
val result = compileText(
|
|
C64Target(), false, """
|
|
%import textio
|
|
%import floats
|
|
|
|
main {
|
|
sub start() {
|
|
; nothing
|
|
}
|
|
}
|
|
""")!!
|
|
result.compilerAst.toplevelModule.name shouldStartWith "on_the_fly_test"
|
|
|
|
val moduleNames = result.compilerAst.modules.map { it.name }
|
|
withClue("main module must be first") {
|
|
moduleNames[0] shouldStartWith "on_the_fly_test"
|
|
}
|
|
withClue("module order in parse tree") {
|
|
moduleNames.drop(1) shouldBe listOf(
|
|
internedStringsModuleName,
|
|
"textio",
|
|
"syslib",
|
|
"conv",
|
|
"floats",
|
|
"floats_functions",
|
|
"math",
|
|
"prog8_lib"
|
|
)
|
|
}
|
|
result.compilerAst.toplevelModule.name shouldStartWith "on_the_fly_test"
|
|
}
|
|
|
|
test("testCompilationOptionsCorrectFromMain") {
|
|
val result = compileText(
|
|
C64Target(), false, """
|
|
%import textio
|
|
%import floats
|
|
%zeropage dontuse
|
|
%option no_sysinit
|
|
|
|
main {
|
|
sub start() {
|
|
; nothing
|
|
}
|
|
}
|
|
""")!!
|
|
result.compilerAst.toplevelModule.name shouldStartWith "on_the_fly_test"
|
|
val options = determineCompilationOptions(result.compilerAst, C64Target())
|
|
options.floats shouldBe true
|
|
options.zeropage shouldBe ZeropageType.DONTUSE
|
|
options.noSysInit shouldBe true
|
|
}
|
|
|
|
test("testModuleOrderAndCompilationOptionsCorrectWithJustImports") {
|
|
val errors = ErrorReporterForTests()
|
|
val sourceText = """
|
|
%import textio
|
|
%import floats
|
|
%option no_sysinit
|
|
%zeropage dontuse
|
|
|
|
main {
|
|
sub start() {
|
|
; nothing
|
|
}
|
|
}
|
|
"""
|
|
val filenameBase = "on_the_fly_test_" + sourceText.hashCode().toUInt().toString(16)
|
|
val filepath = outputDir.resolve("$filenameBase.p8")
|
|
filepath.toFile().writeText(sourceText)
|
|
val (program, options, importedfiles) = parseMainModule(filepath, errors, C64Target(), emptyList())
|
|
|
|
program.toplevelModule.name shouldBe filenameBase
|
|
withClue("all imports other than the test source must have been internal resources library files") {
|
|
importedfiles.size shouldBe 1
|
|
}
|
|
withClue("module order in parse tree") {
|
|
program.modules.map { it.name } shouldBe
|
|
listOf(
|
|
internedStringsModuleName,
|
|
filenameBase,
|
|
"textio", "syslib", "conv", "floats", "floats_functions", "math", "prog8_lib"
|
|
)
|
|
}
|
|
options.floats shouldBe true
|
|
options.noSysInit shouldBe true
|
|
withClue("zeropage option must be correctly taken from main module, not from float module import logic") {
|
|
options.zeropage shouldBe ZeropageType.DONTUSE
|
|
}
|
|
}
|
|
|
|
})
|