java 7 - Testing antlr4 visitor rules -
i've got complicated antlr4 grammar utilizes visitor pattern. i'd test parts of visitor. what's way test individual visit rules?
my visitor has tons of rules want test:
@override public object visitqux(exclparser.quxcontext ctx) { return visitchildren(ctx); } and test code following:
printstream ps = new printstream(stderror, false /* autoflush */, "utf-8") antlrinputstream input = new antlrinputstream(is); mylexer lexer = new mylexer(input); commontokenstream tokens = new commontokenstream(lexer); myparser parser = new myparser(tokens); parser.removeerrorlisteners(); myerrorlistener errorlistener = new myerrorlistener(ps, filename); parser.adderrorlistener(errorlistener); myvisitor visitor = new myvisitor(); visitor.setparser(filename, parser, errorlistener); parsetree tree = parser.qux(); // <--- line want vary. object result = visitor.visit(tree); assertthat(describeexpectation(), result, equalto(this.expectedoutput)); ideally able test visitor using parameterized test. parse tree want visit (parser.qux) can't specify variant of qux() in table because parser.qux() not static.
any thoughts?
reflection may right answer here:
method method = myparser.class.getdeclaredmethod("qux"); parsetree tree = (parsetree) method.invoke(parser); is suitable replacement for:
parsetree tree = parser.qux();
Comments
Post a Comment