Example #1
0
        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"));
        }
Example #2
0
        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");
        }