我有这种奇特的空白语言,我正在测试它。现在语法很简单(基于终端)
Model:
{Model}
BEGIN
package=PackageDeclaration?
class=ClassDeclaration?
END
methods+=MethodDeclaration*
;
PackageDeclaration: 'package' name=ID;
ClassDeclaration: 'class' name=ID;
MethodDeclaration: 'def' name=ID;
terminal BEGIN:
'synthetic:BEGIN';
terminal END:
'synthetic:END';
现在谈到JUnit:
@Test
def void packageSimpleNoErrors() {
val result = '''
package testPack
'''.parse
// Parsed without errors
result.assertNoErrors
}
多行字符串是2x新行,标签,' package testPack'和新线。 在解析方法中使用debug进行检查。
如果我在Eclipse编辑器中这样说它就完全没问题了。但我不能让JUnit通过这个测试:
java.lang.AssertionError: Expected no errors,
but got :ERROR (org.eclipse.xtext.diagnostics.Diagnostic.Syntax)
'missing RULE_BEGIN at 'package’’ on PackageDeclaration,
ERROR (org.eclipse.xtext.diagnostics.Diagnostic.Syntax)
'mismatched input '<EOF>' expecting RULE_END' on Model
目前它并不是一个显示stoper,因为此代码的其余测试看起来很好,但我更喜欢将它们全部变为绿色:)
由于
答案 0 :(得分:0)
问题在于,富有刺痛的空行会因意图而丢失。也许你应该从文件中读取模型或尝试一些东西
'''
«"\n"»
package testPack
'''.parse