1
0
mirror of https://github.com/KarolS/millfork.git synced 2025-08-08 18:25:03 +00:00

Tests for recent parser improvements

This commit is contained in:
Karol Stasiak
2019-10-31 12:12:10 +01:00
parent 33405ffcd6
commit 4214f1f6f5
3 changed files with 72 additions and 9 deletions

View File

@@ -22,7 +22,9 @@ class ConsoleLogger extends Logger {
private def printErrorContext(pos: Option[Position]): Unit = synchronized { private def printErrorContext(pos: Option[Position]): Unit = synchronized {
pos.foreach { position => pos.foreach { position =>
sourceLines.get(position.moduleName).foreach { lines => sourceLines.get(position.moduleName).foreach { lines =>
val line = lines.apply(pos.get.line - 1) val lineIx = pos.get.line - 1
if (lineIx < lines.length) {
val line = lines.apply(lineIx)
val column = pos.get.column - 1 val column = pos.get.column - 1
val margin = " " val margin = " "
print(margin) print(margin)
@@ -33,6 +35,7 @@ class ConsoleLogger extends Logger {
} }
} }
} }
}
@inline @inline
def f(position: Option[Position]): String = position.fold("")(p => s"(${p.moduleName}:${p.line}:${p.column}) ") def f(position: Option[Position]): String = position.fold("")(p => s"(${p.moduleName}:${p.line}:${p.column}) ")

View File

@@ -151,6 +151,10 @@ class BasicSymonTest extends FunSuite with Matchers {
| segment(default)array x[3] | segment(default)array x[3]
| segment(default)void main () { | segment(default)void main () {
| } | }
| segment (default) {
| const byte a = 1
| //
| }
""".stripMargin){ m => () } """.stripMargin){ m => () }
} }

View File

@@ -0,0 +1,56 @@
package millfork.test
import millfork.Cpu
import millfork.test.emu.{EmuUnoptimizedCrossPlatformRun, ShouldNotCompile}
import org.scalatest.{FunSuite, Matchers}
/**
* @author Karol Stasiak
*/
class ParserSuite extends FunSuite with Matchers {
test("Require space between flags and types") {
ShouldNotCompile(
"""
| constbyte a = 2
|
""".stripMargin)
}
test("Comment after last constant") {
EmuUnoptimizedCrossPlatformRun(Cpu.Mos, Cpu.Z80, Cpu.Motorola6809)(
"""
|
| byte __panic() = 1
| const byte x = 5;
| const byte a = 2;
|
|void main () {}//
|
|
|//
|
""".stripMargin){ m =>
}
}
test("Allow negation") {
EmuUnoptimizedCrossPlatformRun(Cpu.Mos, Cpu.Z80, Cpu.Motorola6809)(
"""
| array output[100] @$c000
| const byte x = 5
| void main() {
| output[0] = -x
| output[1] = 0 | (-x)
| output[2] = 1 * (-x)
| if (x != -x) { output[3] = 5 }
| }
""".stripMargin){ m =>
m.readByte(0xc000) should equal(251)
m.readByte(0xc001) should equal(251)
m.readByte(0xc002) should equal(251)
m.readByte(0xc003) should equal(5)
}
}
}