public BodyParser(Parser innerParser, SettingsSyntax syntax) { this.BlockParser = new ConcatenationParser (syntax.BodyOpen, syntax.BodyClose, syntax.BodyDelimiter) { InnerParser = new SubstitutionAssignmentParser ( syntax.BodyShorthand, syntax.BodySubstitution, syntax.BodyAssign ) { InnerParser = innerParser } }; }
public void When_both_parts_fail() { var input = new MockInput<int>(); var parser = new ConcatenationParser<int, char, char, string>( new MockFailureParser<int, char>(), (first) => { Assert.Fail(); return new MockFailureParser<int, char>(); }, (a, b) => { Assert.Fail(); return "x"; }); var result = parser.Parse(input); ParseResultAssert.IsFailure(result); }
public void When_both_parts_match() { var input = new MockInput<int>(); var parser = new ConcatenationParser<int, char, char, string>( new MockSuccessfulParser<int, char>('s'), (first) => { Assert.AreEqual('s', first); return new MockSuccessfulParser<int, char>('d'); }, (a, b) => { Assert.AreEqual('s', a); Assert.AreEqual('d', b); return "x"; }); var result = parser.Parse(input); ParseResultAssert.IsSuccess(result); ParseResultAssert.AreEqual("x", result); }
public void When_the_first_part_matches_but_the_second_fails() { var input = new MockInput<int>(); var parser = new ConcatenationParser<int, char, char, string>( new MockSuccessfulParser<int, char>('s'), new MockFailureParser<int, char>(), (a, b) => { Assert.Fail(); return ""; }); var result = parser.Parse(input); ParseResultAssert.IsFailure(result); }