mirror of
https://github.com/irmen/prog8.git
synced 2024-11-26 11:49:22 +00:00
* structure TestCompilerOnImportsAndIncludes, add (@Disabled for now) test re %import with string arg
This commit is contained in:
parent
eb46852bb9
commit
fb67d1155f
@ -1,14 +1,15 @@
|
|||||||
package prog8tests
|
package prog8tests
|
||||||
|
|
||||||
|
import prog8tests.helpers.*
|
||||||
import org.junit.jupiter.api.TestInstance
|
import org.junit.jupiter.api.TestInstance
|
||||||
import org.junit.jupiter.api.Test
|
import org.junit.jupiter.api.Test
|
||||||
import org.junit.jupiter.api.BeforeAll
|
|
||||||
import org.junit.jupiter.api.TestFactory
|
import org.junit.jupiter.api.TestFactory
|
||||||
|
import org.junit.jupiter.api.Nested
|
||||||
|
import org.junit.jupiter.api.Disabled
|
||||||
import org.junit.jupiter.api.DynamicTest
|
import org.junit.jupiter.api.DynamicTest
|
||||||
import org.junit.jupiter.api.DynamicTest.dynamicTest
|
import org.junit.jupiter.api.DynamicTest.dynamicTest
|
||||||
import kotlin.test.*
|
import kotlin.test.*
|
||||||
import kotlin.io.path.*
|
import kotlin.io.path.*
|
||||||
import prog8tests.helpers.*
|
|
||||||
|
|
||||||
import prog8.ast.expressions.AddressOf
|
import prog8.ast.expressions.AddressOf
|
||||||
import prog8.ast.expressions.IdentifierReference
|
import prog8.ast.expressions.IdentifierReference
|
||||||
@ -26,13 +27,16 @@ import prog8.compiler.target.Cx16Target
|
|||||||
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
|
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
|
||||||
class TestCompilerOnImportsAndIncludes {
|
class TestCompilerOnImportsAndIncludes {
|
||||||
|
|
||||||
|
@Nested
|
||||||
|
inner class Import {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun testImportFromSameFolder() {
|
fun testImportFromSameFolder() {
|
||||||
val filepath = assumeReadableFile(fixturesDir, "importFromSameFolder.p8")
|
val filepath = assumeReadableFile(fixturesDir, "importFromSameFolder.p8")
|
||||||
assumeReadableFile(fixturesDir, "foo_bar.p8")
|
assumeReadableFile(fixturesDir, "foo_bar.p8")
|
||||||
|
|
||||||
val platform = Cx16Target
|
val platform = Cx16Target
|
||||||
val result = compileFile(platform, false, fixturesDir, filepath.name)
|
val result = compileFile(platform, optimize = false, fixturesDir, filepath.name)
|
||||||
.assertSuccess()
|
.assertSuccess()
|
||||||
|
|
||||||
val program = result.programAst
|
val program = result.programAst
|
||||||
@ -48,13 +52,39 @@ class TestCompilerOnImportsAndIncludes {
|
|||||||
assertEquals("foo", strLits[1].definingScope().name)
|
assertEquals("foo", strLits[1].definingScope().name)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Disabled("TODO: why would we not accept string literals as argument to %import?")
|
||||||
|
fun testImportFromSameFolder_strLit() {
|
||||||
|
val filepath = assumeReadableFile(fixturesDir,"importFromSameFolder_strLit.p8")
|
||||||
|
val imported = assumeReadableFile(fixturesDir, "foo_bar.p8")
|
||||||
|
|
||||||
|
val platform = Cx16Target
|
||||||
|
val result = compileFile(platform, optimize = false, fixturesDir, filepath.name)
|
||||||
|
.assertSuccess()
|
||||||
|
|
||||||
|
val program = result.programAst
|
||||||
|
val startSub = program.entrypoint()
|
||||||
|
val strLits = startSub.statements
|
||||||
|
.filterIsInstance<FunctionCallStatement>()
|
||||||
|
.map { it.args[0] as IdentifierReference }
|
||||||
|
.map { it.targetVarDecl(program)!!.value as StringLiteralValue }
|
||||||
|
|
||||||
|
assertEquals("main.bar", strLits[0].value)
|
||||||
|
assertEquals("foo.bar", strLits[1].value)
|
||||||
|
assertEquals("main", strLits[0].definingScope().name)
|
||||||
|
assertEquals("foo", strLits[1].definingScope().name)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nested
|
||||||
|
inner class AsmInclude {
|
||||||
@Test
|
@Test
|
||||||
fun testAsmIncludeFromSameFolder() {
|
fun testAsmIncludeFromSameFolder() {
|
||||||
val filepath = assumeReadableFile(fixturesDir, "asmIncludeFromSameFolder.p8")
|
val filepath = assumeReadableFile(fixturesDir, "asmIncludeFromSameFolder.p8")
|
||||||
assumeReadableFile(fixturesDir, "foo_bar.asm")
|
assumeReadableFile(fixturesDir, "foo_bar.asm")
|
||||||
|
|
||||||
val platform = Cx16Target
|
val platform = Cx16Target
|
||||||
val result = compileFile(platform, false, fixturesDir, filepath.name)
|
val result = compileFile(platform, optimize = false, fixturesDir, filepath.name)
|
||||||
.assertSuccess()
|
.assertSuccess()
|
||||||
|
|
||||||
val program = result.programAst
|
val program = result.programAst
|
||||||
@ -72,7 +102,10 @@ class TestCompilerOnImportsAndIncludes {
|
|||||||
assertEquals("foo_bar", lbl1.name)
|
assertEquals("foo_bar", lbl1.name)
|
||||||
assertEquals("start", lbl1.definingScope().name)
|
assertEquals("start", lbl1.definingScope().name)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nested
|
||||||
|
inner class Asmbinary {
|
||||||
@Test
|
@Test
|
||||||
fun testAsmbinaryDirectiveWithNonExistingFile() {
|
fun testAsmbinaryDirectiveWithNonExistingFile() {
|
||||||
val p8Path = assumeReadableFile(fixturesDir, "asmbinaryNonExisting.p8")
|
val p8Path = assumeReadableFile(fixturesDir, "asmbinaryNonExisting.p8")
|
||||||
@ -98,16 +131,14 @@ class TestCompilerOnImportsAndIncludes {
|
|||||||
Triple("sub", "asmBinaryFromSubFolder.p8", "subFolder/do_nothing2.bin"),
|
Triple("sub", "asmBinaryFromSubFolder.p8", "subFolder/do_nothing2.bin"),
|
||||||
).map {
|
).map {
|
||||||
val (where, p8Str, binStr) = it
|
val (where, p8Str, binStr) = it
|
||||||
val p8Path = fixturesDir.div(p8Str) // sanity check below, *inside dynamicTest*
|
dynamicTest("%asmbinary from ${where}folder") {
|
||||||
val binPath = fixturesDir.div(binStr)
|
val p8Path = assumeReadableFile(fixturesDir, p8Str)
|
||||||
val displayName = "%asmbinary from ${where}folder"
|
val binPath = assumeReadableFile(fixturesDir, binStr)
|
||||||
dynamicTest(displayName) {
|
|
||||||
assumeReadableFile(p8Path)
|
|
||||||
assumeReadableFile(binPath)
|
|
||||||
assertNotEquals( // the bug we're testing for (#54) was hidden if outputDir == workinDir
|
assertNotEquals( // the bug we're testing for (#54) was hidden if outputDir == workinDir
|
||||||
workingDir.normalize().toAbsolutePath(),
|
workingDir.normalize().toAbsolutePath(),
|
||||||
outputDir.normalize().toAbsolutePath(),
|
outputDir.normalize().toAbsolutePath(),
|
||||||
"sanity check: workingDir and outputDir should not be the same folder")
|
"sanity check: workingDir and outputDir should not be the same folder"
|
||||||
|
)
|
||||||
|
|
||||||
compileFile(Cx16Target, false, p8Path.parent, p8Path.name, outputDir)
|
compileFile(Cx16Target, false, p8Path.parent, p8Path.name, outputDir)
|
||||||
.assertSuccess(
|
.assertSuccess(
|
||||||
@ -120,3 +151,4 @@ class TestCompilerOnImportsAndIncludes {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
9
compiler/test/fixtures/importFromSameFolder_strLit.p8
vendored
Normal file
9
compiler/test/fixtures/importFromSameFolder_strLit.p8
vendored
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
%import textio
|
||||||
|
%import "foo_bar.p8"
|
||||||
|
main {
|
||||||
|
str myBar = "main.bar"
|
||||||
|
sub start() {
|
||||||
|
txt.print(myBar)
|
||||||
|
txt.print(foo.bar)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user