prog8/compiler/test/TestCompilerOptionLibdirs.kt

95 lines
3.2 KiB
Kotlin
Raw Normal View History

package prog8tests
import io.kotest.core.spec.style.FunSpec
2022-03-07 20:41:12 +00:00
import io.kotest.matchers.shouldNotBe
2022-03-11 19:35:25 +00:00
import prog8.code.target.Cx16Target
2021-11-30 00:40:21 +00:00
import prog8.compiler.CompilationResult
import prog8.compiler.CompilerArguments
2021-10-10 22:22:04 +00:00
import prog8.compiler.compileProgram
2022-06-26 16:51:03 +00:00
import prog8tests.helpers.assumeReadableFile
import prog8tests.helpers.fixturesDir
import prog8tests.helpers.outputDir
import prog8tests.helpers.workingDir
import java.nio.file.Path
2021-10-10 22:22:04 +00:00
import kotlin.io.path.absolute
import kotlin.io.path.createTempFile
import kotlin.io.path.deleteExisting
import kotlin.io.path.writeText
/**
* ATTENTION: this is just kludge!
* They are not really unit tests, but rather tests of the whole process,
* from source file loading all the way through to running 64tass.
*/
class TestCompilerOptionSourcedirs: FunSpec({
lateinit var tempFileInWorkingDir: Path
beforeSpec {
2022-06-26 16:51:03 +00:00
tempFileInWorkingDir = createTempFile(directory = workingDir, prefix = "tmp_", suffix = ".p8")
.also { it.writeText("""
main {
sub start() {
}
}
""")}
}
afterSpec {
tempFileInWorkingDir.deleteExisting()
}
2022-03-07 20:41:12 +00:00
fun compileFile(filePath: Path, sourceDirs: List<String>): CompilationResult? {
2021-11-30 00:40:21 +00:00
val args = CompilerArguments(
filepath = filePath,
optimize = false,
optimizeFloatExpressions = false,
writeAssembly = true,
slowCodegenWarnings = false,
quietAssembler = true,
asmListfile = false,
experimentalCodegen = false,
varsHigh = false,
2023-03-25 17:45:17 +00:00
useNewExprCode = false,
compilationTarget = Cx16Target.NAME,
evalStackBaseAddress = null,
symbolDefs = emptyMap(),
sourceDirs,
2022-06-26 16:51:03 +00:00
outputDir
)
2021-11-30 00:40:21 +00:00
return compileProgram(args)
}
test("testAbsoluteFilePathInWorkingDir") {
2022-06-26 16:51:03 +00:00
val filepath = assumeReadableFile(tempFileInWorkingDir.absolute())
2022-03-07 20:41:12 +00:00
compileFile(filepath, listOf()) shouldNotBe null
}
test("testFilePathInWorkingDirRelativeToWorkingDir") {
2022-06-26 16:51:03 +00:00
val filepath = assumeReadableFile(workingDir.relativize(tempFileInWorkingDir.absolute()))
2022-03-07 20:41:12 +00:00
compileFile(filepath, listOf()) shouldNotBe null
}
test("testFilePathInWorkingDirRelativeTo1stInSourcedirs") {
2022-06-26 16:51:03 +00:00
val filepath = assumeReadableFile(tempFileInWorkingDir)
compileFile(filepath.fileName, listOf(workingDir.toString())) shouldNotBe null
}
test("testAbsoluteFilePathOutsideWorkingDir") {
2022-06-26 16:51:03 +00:00
val filepath = assumeReadableFile(fixturesDir, "ast_simple_main.p8")
2022-03-07 20:41:12 +00:00
compileFile(filepath.absolute(), listOf()) shouldNotBe null
}
test("testFilePathOutsideWorkingDirRelativeToWorkingDir") {
2022-06-26 16:51:03 +00:00
val filepath = workingDir.relativize(assumeReadableFile(fixturesDir, "ast_simple_main.p8").absolute())
2022-03-07 20:41:12 +00:00
compileFile(filepath, listOf()) shouldNotBe null
}
test("testFilePathOutsideWorkingDirRelativeTo1stInSourcedirs") {
2022-06-26 16:51:03 +00:00
val filepath = assumeReadableFile(fixturesDir, "ast_simple_main.p8")
2022-10-31 22:59:33 +00:00
val sourcedirs = listOf("$fixturesDir")
2022-03-07 20:41:12 +00:00
compileFile(filepath.fileName, sourcedirs) shouldNotBe null
}
})