protected override void Stmt(string text, LNode expected, Action<EcsNodePrinter> configure = null, Mode mode = Mode.Both) { bool exprMode = (mode & Mode.Expression) != 0; if ((mode & Mode.ParserTest) == 0) return; // This is the easy way: //LNode result = EcsLanguageService.Value.ParseSingle(text, MessageSink.Console, exprMode ? ParsingService.Exprs : ParsingService.Stmts); // But to make debugging easier, I'll do it the long way: ILexer<Token> lexer = EcsLanguageService.Value.Tokenize(new UString(text), "", MessageSink.Console); var preprocessed = new EcsPreprocessor(lexer); var treeified = new TokensToTree(preprocessed, false); var sink = (mode & Mode.ExpectAndDropParserError) != 0 ? new MessageHolder() : (IMessageSink)MessageSink.Console; var parser = new EcsParser(treeified.Buffered(), lexer.SourceFile, sink); LNode result = exprMode ? parser.ExprStart(false) : parser.Stmt(); AreEqual(TokenType.EOF, parser.LT0.Type()); AreEqual(expected, result); if (sink is MessageHolder) GreaterOrEqual(((MessageHolder)sink).List.Count, 1); }