예제 #1
0
        public void TestConsumeTab()
        {
            var stream = new TabAwareCharacterStream("a\tb");

            stream.CurrentChar.Should().Be('a');
            stream.MoveToNextChar();

            stream.TryConsumeWhiteSpace(4).Should().BeTrue();
            stream.CurrentChar.Should().Be('b');
            stream.TryConsumeWhiteSpace(1).Should().BeFalse();
        }
예제 #2
0
        public void TestConsumePartialTab()
        {
            var stream = new TabAwareCharacterStream("a\tb");

            stream.CurrentChar.Should().Be('a');
            stream.MoveToNextChar();

            stream.TryConsumeWhiteSpace(2).Should().BeTrue();
            stream.CurrentChar.Should().Be('b', "stream should be at next character after consuming partial tab");
            stream.TryConsumeWhiteSpace(2).Should().BeTrue();
            stream.CurrentChar.Should().Be('b');
            stream.TryConsumeWhiteSpace(1).Should().BeFalse();
        }
예제 #3
0
        public void TestConsumeTooMuch()
        {
            var stream = new TabAwareCharacterStream("a\tb");

            stream.MoveToNextChar();

            stream.TryConsumeWhiteSpace(2).Should().BeTrue();

            stream.TryConsumeWhiteSpace(3).Should().BeFalse();
            stream.CurrentChar.Should().Be('b');
            stream.TryConsumeWhiteSpace(2).Should().BeTrue("consuming too much space should have no effect");
            stream.CurrentChar.Should().Be('b');

            stream.TryConsumeWhiteSpace(1).Should().BeFalse();
        }
예제 #4
0
        public void TestPeekPartialTab()
        {
            var stream = new TabAwareCharacterStream("a\tb");

            stream.MoveToNextChar();

            stream.TryConsumeWhiteSpace(2).Should().BeTrue();

            using (stream.Peek())
                stream.TryConsumeWhiteSpace(2).Should().BeTrue();
            stream.TryConsumeWhiteSpace(2).Should().BeTrue("resetting peek should preserve partial tabs");

            stream.CurrentChar.Should().Be('b');
            stream.TryConsumeWhiteSpace(1).Should().BeFalse();
        }
예제 #5
0
        public void TestConsumeMixedWhitespace()
        {
            var stream = new TabAwareCharacterStream("a  \t  \t\t \tb");

            stream.MoveToNextChar();
            // Stream is at first space

            stream.TryConsumeWhiteSpace(99).Should().BeFalse();
            stream.TryConsumeWhiteSpace(2).Should().BeTrue();
            // Stream is at center of first tab

            stream.TryConsumeWhiteSpace(99).Should().BeFalse();
            stream.TryConsumeWhiteSpace(4).Should().BeTrue();
            // Stream is at second tab

            stream.TryConsumeWhiteSpace(99).Should().BeFalse();
            stream.TryConsumeWhiteSpace(5).Should().BeTrue();
            // Stream is at first space in third tab

            stream.TryConsumeWhiteSpace(99).Should().BeFalse();
            stream.TryConsumeWhiteSpace(9).Should().BeTrue();
            stream.CurrentChar.Should().Be('b');
        }
예제 #6
0
 ///<summary>Consumes exactly the requested number of characters of whitespace, potentially including partial tabs.</summary>
 ///<returns>True if enough whitespace was consumed; false if the stream was not moved.</returns>
 protected bool TryReadSpaces(int count)
 {
     return(stream.TryConsumeWhiteSpace(count));
 }