public void Should_be_able_to_parse_multiple_lines() { var parseText = new StringText(Text); var firstLine = _lineParser.Parse(parseText); Assert.IsTrue(firstLine.HasResult); Result <TextSpan, TextSpan> result = _parser.Parse(parseText, firstLine.Result); Assert.IsTrue(result.HasResult); Assert.That(parseText.ToString(result.Result), Is.EqualTo("1")); result = _parser.Parse(parseText, result.Next); Assert.IsTrue(result.HasResult); Assert.That(parseText.ToString(result.Result), Is.EqualTo("Sun")); result = _parser.Parse(parseText, result.Next); Assert.IsTrue(result.HasResult); Assert.That(parseText.ToString(result.Result), Is.EqualTo("Moon")); result = _parser.Parse(parseText, result.Next); Assert.IsTrue(result.HasResult); Assert.That(parseText.ToString(result.Result), Is.EqualTo("12.34")); }
public void Should_choose_the_greediest_one() { var subject = "Hello, World"; var first = Parser.Factory.CreateText(x => x.String("Hello")); var stringText = new StringText(subject); Assert.IsTrue(first.Parse(stringText).HasResult, "First did not match"); var second = Parser.Factory.CreateText(x => from h in x.String("Hello") from y in x.Char(',') from ws in x.Whitespace() from w in x.String("World") select h + y + ws + w); Assert.IsTrue(second.Parse(stringText).HasResult, "Second did not match"); var parser = Parser.Factory.CreateText(x => x.Longest(first, second)); var result = parser.Parse(stringText); Assert.IsTrue(result.HasResult, "Neither matched"); Assert.AreEqual("Hello, World", stringText.ToString(result.Result), "Longest parser should have matched"); }