public void Reads_character_at_a_time()
        {
            int[] chars = new int[] {
                'a', 'b', 'c', '\n',
                'd', 'e', '\n',
                'f', 'g', 'h', 'i', 'j', 'k', '\n',
                'l', 'm', 'n', 'o', 'p', 'q', '\n',
                '\n',
                'r', 's', 't', 'u', 'v'
            };

            int[] positions = new int[] {
                1, 2, 3, 0,
                1, 2, 0,
                1, 2, 3, 4, 5, 6, 0,
                1, 2, 3, 4, 5, 6, 0,
                0,
                1, 2, 3, 4, 5
            };

            int[] lines = new int[] {
                1, 1, 1, 2,
                2, 2, 3,
                3, 3, 3, 3, 3, 3, 4,
                4, 4, 4, 4, 4, 4, 5,
                6,
                6, 6, 6, 6, 6
            };

            bool[] starts = new bool[] {
                false, false, false, true,
                false, false, true,
                false, false, false, false, false, false, true,
                false, false, false, false, false, false, true,
                true,
                false, false, false, false, false
            };

            int i = 0;
            int ch;

            while ((ch = _rdr.Read()) != -1)
            {
                Expect(ch, EqualTo(chars[i]));
                Expect(_rdr.Position, EqualTo(positions[i]));
                Expect(_rdr.LineNumber, EqualTo(lines[i]));
                Expect(_rdr.AtLineStart, EqualTo(starts[i]));
                ++i;
            }
        }
        public void Reads_character_at_a_time()
        {
            int[] chars = new int[] {
                'a', 'b', 'c', '\n',
                'd', 'e', '\n',
                'f', 'g', 'h', 'i', 'j', 'k', '\n',
                'l', 'm', 'n', 'o', 'p', 'q', '\n',
                '\n',
                'r', 's', 't', 'u', 'v'
            };

            int[] positions = new int[] {
                2, 3, 4, 1,
                2, 3, 1,
                2, 3, 4, 5, 6, 7, 1,
                2, 3, 4, 5, 6, 7, 1,
                1,
                2, 3, 4, 5, 6
            };

            int[] lines = new int[] {
                1, 1, 1, 2,
                2, 2, 3,
                3, 3, 3, 3, 3, 3, 4,
                4, 4, 4, 4, 4, 4, 5,
                6,
                6, 6, 6, 6, 6
            };

            int[] indexes = new int[] {
                1, 2, 3, 4,
                5, 6, 7,
                8, 9, 10, 11, 12, 13, 15, // \r\n
                16, 17, 18, 19, 20, 21, 22,
                23,
                24, 25, 26, 27, 28
            };

            bool[] starts = new bool[] {
                false, false, false, true,
                false, false, true,
                false, false, false, false, false, false, true,
                false, false, false, false, false, false, true,
                true,
                false, false, false, false, false
            };

            int i = 0;
            int ch;

            while ((ch = _rdr.Read()) != -1)
            {
                Expect(_rdr.Index, EqualTo(indexes[i]));
                Expect(ch, EqualTo(chars[i]));
                Expect(_rdr.ColumnNumber, EqualTo(positions[i]));
                Expect(_rdr.LineNumber, EqualTo(lines[i]));
                Expect(_rdr.AtLineStart, EqualTo(starts[i]));
                ++i;
            }
        }