public void PositiveFailure() { RepetitionParser rp = +Parser; string s = "b"; StringScanner scan = new StringScanner(s); ParserMatch m = rp.Parse(scan); Assert.IsTrue(!m.Success); }
public void OptionalSuccess0() { RepetitionParser rp = !Parser; string s = ""; StringScanner scan = new StringScanner(s); ParserMatch m = rp.Parse(scan); Assert.IsTrue(m.Success); Assert.IsTrue(m.Empty); }
public void PositiveSuccessNotAtEnd() { RepetitionParser rp = +Parser; string s = "aaa "; StringScanner scan = new StringScanner(s); ParserMatch m = rp.Parse(scan); Assert.IsTrue(m.Success); Assert.AreEqual(m.Length, 3); Assert.IsTrue(!scan.AtEnd); }
public void OptionalSuccess() { RepetitionParser rp = !Parser; string s = "aa"; StringScanner scan = new StringScanner(s); ParserMatch m = rp.Parse(scan); Assert.IsTrue(m.Success); Assert.AreEqual(m.Length, 1); Assert.AreEqual(scan.Offset, 1); }
public void KleneeSuccess0() { RepetitionParser rp = Ops.Klenee(Parser); string s = "b"; StringScanner scan = new StringScanner(s); ParserMatch m = rp.Parse(scan); Assert.IsTrue(m.Success); Assert.IsTrue(m.Empty); Assert.IsTrue(!scan.AtEnd); }
public void KleneeSuccess2AtEnd() { RepetitionParser rp = Ops.Klenee(Parser); string s = "aa"; StringScanner scan = new StringScanner(s); ParserMatch m = rp.Parse(scan); Assert.IsTrue(m.Success); Assert.AreEqual(m.Length, 2); Assert.IsTrue(scan.AtEnd); }
public void KleneeSuccessNotAtEnd() { RepetitionParser rp = Ops.ZeroOrMore(Parser); String s = "aaa "; StringScanner scan = new StringScanner(s); ParserMatch m = rp.Parse(scan); Assert.IsTrue(m.Success); Assert.AreEqual(3, m.Length); Assert.IsFalse(scan.AtEnd); }
public void PositiveSequenceSuccessNotAtEnd() { RepetitionParser rp = +SequenceParser; String s = "ababab "; StringScanner scan = new StringScanner(s); ParserMatch m = rp.Parse(scan); Assert.IsTrue(m.Success); Assert.AreEqual(0, m.Offset); Assert.AreEqual(6, m.Length); Assert.IsFalse(scan.AtEnd); }
public void When_no_items_match_but_were_not_required() { var input = new MockInput<int>(); var parser = new RepetitionParser<int, int>( minimumCount: 0, parser: new MockSequenceParser<int, int> { p => ParseResult.Failure<int, int>(input, p) } ); var actualResult = parser.Parse(input); var actualCollection = ParseResultAssert.IsSuccess(actualResult); CollectionAssert.AreElementsEqual(new int[] { }, actualCollection); }
public void When_a_single_item_matches() { var input = new MockInput<int>(); var parser = new RepetitionParser<int, int>( new MockSequenceParser<int, int> { p => ParseResult.Success(input, input, 1), p => ParseResult.Failure<int, int>(input, p) } ); var actualResult = parser.Parse(input); var actualCollection = ParseResultAssert.IsSuccess(actualResult); CollectionAssert.AreElementsEqual(new[] { 1 }, actualCollection); }
public void When_no_items_match_but_were_required() { var input = new MockInput<int>(); var parser = new RepetitionParser<int, int>( minimumCount: 1, parser: new MockSequenceParser<int, int> { p => ParseResult.Failure<int, int>(input, p) } ); var actualResult = parser.Parse(input); ParseResultAssert.IsFailure(actualResult); }
public void When_three_items_match_but_required_four() { var input = new MockInput<int>(); var parser = new RepetitionParser<int, int>( minimumCount: 4, parser: new MockSequenceParser<int, int> { ParseResult.Success(input, input, 1), ParseResult.Success(input, input, 2), ParseResult.Success(input, input, 3), p => ParseResult.Failure<int, int>(input, p) } ); var actualResult = parser.Parse(input); ParseResultAssert.IsFailure(actualResult); }