public void GetNext_Test()
        {
            var target = new StringCharacterSequence("abc");

            target.GetNext().Should().Be('a');
            target.GetNext().Should().Be('b');
            target.GetNext().Should().Be('c');
            target.GetNext().Should().Be('\0');
        }
        public void GetRemainder_End()
        {
            var target = new StringCharacterSequence("abc");

            target.GetNext();
            target.GetNext();
            target.GetNext();
            target.GetRemainder().Should().Be("");
        }
        public void GetNext_OldMacNewlines()
        {
            var target = new StringCharacterSequence("\ra\r");

            target.GetNext().Should().Be('\n');
            target.GetNext().Should().Be('a');
            target.GetNext().Should().Be('\n');
            target.GetNext().Should().Be('\0');
        }
        public void GetNext_UnixNewlines()
        {
            var target = new StringCharacterSequence("\na\n");

            target.GetNext().Should().Be('\n');
            target.GetNext().Should().Be('a');
            target.GetNext().Should().Be('\n');
            target.GetNext().Should().Be('\0');
        }
        public void GetNext_Empty()
        {
            var target = new StringCharacterSequence("");

            // Every get attempt past the end of the string will return '\0'
            target.GetNext().Should().Be('\0');
            target.GetNext().Should().Be('\0');
            target.GetNext().Should().Be('\0');
            target.GetNext().Should().Be('\0');
        }
        public void IsAtEnd_Test()
        {
            var target = new StringCharacterSequence("abc");

            target.IsAtEnd.Should().BeFalse();
            target.GetNext();
            target.IsAtEnd.Should().BeFalse();
            target.GetNext();
            target.IsAtEnd.Should().BeFalse();
            target.GetNext();
            target.IsAtEnd.Should().BeTrue();
        }
        public void Peek_WindowsNewlines()
        {
            var target = new StringCharacterSequence("\r\na\r\n");

            target.Peek().Should().Be('\n');
            target.GetNext();
            target.Peek().Should().Be('a');
            target.GetNext();
            target.Peek().Should().Be('\n');
            target.GetNext();
            target.Peek().Should().Be('\0');
        }
        public void GetNext_OldMacNewlines_NonNormalized()
        {
            var target = new StringCharacterSequence("\ra\r", new StringCharacterSequence.Options
            {
                NormalizeLineEndings = false
            });

            target.GetNext().Should().Be('\r');
            target.GetNext().Should().Be('a');
            target.GetNext().Should().Be('\r');
            target.GetNext().Should().Be('\0');
        }
        public void GetNext_Empty_CustomEndSentinel()
        {
            var target = new StringCharacterSequence("", new StringCharacterSequence.Options
            {
                EndSentinel = 'X'
            });

            // Every get attempt past the end of the string will return '\0'
            target.GetNext().Should().Be('X');
            target.GetNext().Should().Be('X');
            target.GetNext().Should().Be('X');
            target.GetNext().Should().Be('X');
        }
        public void ReadNewlineIncrementsConsumed()
        {
            var target = new StringCharacterSequence("\r\n");
            var next   = target.GetNext();

            next.Should().Be('\n');
            target.Consumed.Should().Be(1);
        }
        public void Output_Callback_Throw()
        {
            var    parser = Any().Chain <char, char, object>(c => throw new System.Exception());
            var    input  = new StringCharacterSequence("abc");
            Action act    = () => parser.Parse(input);

            act.Should().Throw <Exception>();
            input.GetNext().Should().Be('a');
        }
        public void Location_Rewind()
        {
            var target = new StringCharacterSequence("abc\nde");

            target.GetNext();
            target.GetNext();
            target.GetNext();
            target.CurrentLocation.Line.Should().Be(1);
            target.CurrentLocation.Column.Should().Be(3);
            var checkpoint = target.Checkpoint();

            target.GetNext().Should().Be('\n');
            target.CurrentLocation.Line.Should().Be(2);
            target.CurrentLocation.Column.Should().Be(0);

            checkpoint.Rewind();
            target.CurrentLocation.Line.Should().Be(1);
            target.CurrentLocation.Column.Should().Be(3);
        }
        public void Location_Test()
        {
            var target = new StringCharacterSequence("a\nbc");

            target.GetNext().Should().Be('a');
            target.CurrentLocation.Line.Should().Be(1);
            target.CurrentLocation.Column.Should().Be(1);

            target.GetNext().Should().Be('\n');

            target.GetNext().Should().Be('b');
            target.CurrentLocation.Line.Should().Be(2);
            target.CurrentLocation.Column.Should().Be(1);

            target.GetNext().Should().Be('c');
            target.CurrentLocation.Line.Should().Be(2);
            target.CurrentLocation.Column.Should().Be(2);

            target.GetNext().Should().Be('\0');
        }
Esempio n. 14
0
        public void SingleNumber_Remainder()
        {
            var target = Pratt <string>(c => c
                                        .Add(DigitString())
                                        );
            var input  = new StringCharacterSequence("1a");
            var result = target.Parse(input);

            result.Success.Should().BeTrue();
            result.Value.Should().Be("1");
            result.Consumed.Should().Be(1);
            input.GetNext().Should().Be('a');
        }
        public void Checkpoint_Test()
        {
            var target = new StringCharacterSequence("abc");
            var cp     = target.Checkpoint();

            target.GetNext().Should().Be('a');
            target.GetNext().Should().Be('b');
            target.GetNext().Should().Be('c');
            target.GetNext().Should().Be('\0');
            cp.Rewind();
            target.GetNext().Should().Be('a');
            target.GetNext().Should().Be('b');
            target.GetNext().Should().Be('c');
            target.GetNext().Should().Be('\0');
        }