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);
}