void PeekAtTheEOF_throws()
        {
            var reader = new SourceStringReader("abc");

            reader.Advance();
            reader.Advance();
            reader.Advance();

            Assert.Throws <InvalidOperationException>(() => reader.CurrentChar());
        }
        void NextAtEnd_throws()
        {
            var reader = new SourceStringReader("abc");

            reader.Advance();
            reader.Advance();
            reader.Advance();

            Assert.Throws <InvalidOperationException>(() => reader.Advance());
        }
        void Position_column_set_0_and_line_incr_1()
        {
            var source = "ab\nasd";
            var reader = new SourceStringReader(source);

            reader.Advance(); // a
            reader.Advance(); // b
            reader.Advance(); // This reads \n

            Assert.Equal(0, reader.Position.Column);
            Assert.Equal(1, reader.Position.Line);
        }
        void NextSecond_return_second()
        {
            var reader = new SourceStringReader("abc");

            reader.Advance();

            Assert.Equal('b', reader.CurrentChar());
        }
        void PeekAfterOneNext_return_second()
        {
            var reader = new SourceStringReader("abc");

            reader.Advance();
            var c = reader.CurrentChar();

            Assert.Equal('b', c);
        }
        void PrevioutPositionTest()
        {
            var reader = new SourceStringReader("io");

            reader.Advance();

            Assert.Equal(0, reader.PreviousPosition.Column);
            Assert.Equal(0, reader.PreviousPosition.Line);
        }
        void Position_column_increases_when_next()
        {
            var reader = new SourceStringReader("abc");

            reader.Advance();

            Assert.Equal(0, reader.Position.Line);
            Assert.Equal(1, reader.Position.Column);
        }