mirror of
https://github.com/irmen/prog8.git
synced 2024-12-24 01:29:28 +00:00
+/* #40: add tests; temporarily undo fix for EOL-after-block so we can see that tests actually fail
This commit is contained in:
parent
2350843d1d
commit
32bad5df15
@ -17,6 +17,15 @@ class TestAntlrParser {
|
||||
}
|
||||
}
|
||||
|
||||
private fun parseModule(srcText: String): prog8Parser.ModuleContext {
|
||||
val lexer = prog8Lexer(CharStreams.fromString(srcText))
|
||||
val tokens = CommonTokenStream(lexer)
|
||||
val parser = prog8Parser(tokens)
|
||||
//parser.errorHandler = BailErrorStrategy()
|
||||
parser.addErrorListener(MyErrorListener())
|
||||
return parser.module()
|
||||
}
|
||||
|
||||
object TestStringEncoding: IStringEncoding {
|
||||
override fun encodeString(str: String, altEncoding: Boolean): List<Short> {
|
||||
TODO("Not yet implemented")
|
||||
@ -28,24 +37,30 @@ class TestAntlrParser {
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testAntlrTree() {
|
||||
// can create charstreams from many other sources as well;
|
||||
val charstream = CharStreams.fromString("""
|
||||
fun testModuleFileNeedNotEndWithNewline() {
|
||||
val srcText = """
|
||||
main {
|
||||
sub start() {
|
||||
return
|
||||
}
|
||||
}""" // file ends with '}' (= NO newline, issue #40)
|
||||
|
||||
// before the fix, prog8Parser would have reported (thrown) "missing <EOL> at '<EOF>'"
|
||||
val parseTree = parseModule(srcText)
|
||||
assertEquals(parseTree.block().size, 1)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testModuleFileMayEndWithNewline() {
|
||||
val srcText = """
|
||||
main {
|
||||
sub start() {
|
||||
return
|
||||
}
|
||||
}
|
||||
""")
|
||||
val lexer = prog8Lexer(charstream)
|
||||
val tokens = CommonTokenStream(lexer)
|
||||
val parser = prog8Parser(tokens)
|
||||
parser.errorHandler = BailErrorStrategy()
|
||||
// parser.removeErrorListeners()
|
||||
// parser.addErrorListener(MyErrorListener())
|
||||
val nodes = parser.module()
|
||||
val blockName = nodes.block(0).identifier().NAME().text
|
||||
assertEquals(blockName, "main")
|
||||
""" // file does end with a newline (issue #40)
|
||||
val parseTree = parseModule(srcText)
|
||||
assertEquals(parseTree.block().size, 1)
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -74,7 +74,8 @@ register: 'A' | 'X' | 'Y' | 'AX' | 'AY' | 'XY' | 'Pc' | 'Pz' | 'Pn' | 'Pv' | 'R0
|
||||
|
||||
module : (directive | block | EOL)* EOF ;
|
||||
|
||||
block: identifier integerliteral? '{' EOL (block_statement | EOL) * '}' (EOL | EOF) ;
|
||||
//block: identifier integerliteral? '{' EOL (block_statement | EOL) * '}' (EOL | EOF) ;
|
||||
block: identifier integerliteral? '{' EOL (block_statement | EOL) * '}' EOL ;
|
||||
|
||||
|
||||
block_statement:
|
||||
|
Loading…
Reference in New Issue
Block a user