public void ReadLine_Case1()
        {
            // Arrange
            var r0 = new PrependableReader(CharPosition.BeginningOfFile, "012\n34".ToArray(), new StringReader("5\r\n6789"));
            var r1 = new PrependableReader(CharPosition.BeginningOfFile, "012\r\n34".ToArray(), new StringReader("5\n6789"));
            var r2 = new PrependableReader(CharPosition.BeginningOfFile, "012\r\n34".ToArray(), new StringReader("5\n6789"));

            r1.Read();
            r2.Read();
            r2.Read();
            r2.Read();

            // Act
            var s0   = r0.ReadLine();
            var s0_1 = r0.ReadLine();
            var s0_2 = r0.ReadLine();
            var s0_3 = r0.ReadLine();
            var s1   = r1.ReadLine();
            var s1_1 = r1.ReadLine();
            var s1_2 = r1.ReadLine();
            var s1_3 = r1.ReadLine();
            var s2   = r2.ReadLine();

            // Assert
            Assert.That(s0, Is.EqualTo("012"));
            Assert.That(s0_1, Is.EqualTo("345"));
            Assert.That(s0_2, Is.EqualTo("6789"));
            Assert.That(s0_3, Is.Null);
            Assert.That(s1, Is.EqualTo("12"));
            Assert.That(s1_1, Is.EqualTo("345"));
            Assert.That(s1_2, Is.EqualTo("6789"));
            Assert.That(s1_3, Is.Null);
            Assert.That(s2, Is.Empty);
        }
        public void ReadToEnd_Case2()
        {
            // Arrange
            var r0 = new PrependableReader(CharPosition.BeginningOfFile, "01234".ToArray(), new StringReader("56789"));
            var s0 = r0.ReadToEnd();

            // Act
            var s1 = r0.ReadToEnd();

            // Assert
            Assert.That(s1, Is.Null);
        }
        public void PositionIndex_Case2(string prefixText, string readerText, int resultIndex)
        {
            // Arrange
            var r = new PrependableReader(CharPosition.BeginningOfFile, prefixText.ToArray(), new StringReader(readerText));

            ConsumesAll(r);

            // Act
            var p1 = r.Position.Index;

            // Assert
            Assert.That(p1, Is.EqualTo(resultIndex));
        }
        public void Read_Case1(string prefixText, string readerText, int firstChar, int secondChar)
        {
            // Arrange
            var r = new PrependableReader(CharPosition.BeginningOfFile, prefixText.ToArray(), new StringReader(readerText));

            // Act
            var ch0 = r.Read();
            var ch1 = r.Read();

            // Assert
            Assert.That(ch0, Is.EqualTo(firstChar));
            Assert.That(ch1, Is.EqualTo(secondChar));
        }
        public void PositionColumn_Case1(string prefixText, string readerText)
        {
            // Arrange
            var r = new PrependableReader(CharPosition.BeginningOfFile, prefixText.ToArray(), new StringReader(readerText));

            r.Read();
            r.Read();

            // Act
            var c0 = r.Position.Column;

            r.Read();
            var c1 = r.Position.Column;

            // Assert
            Assert.That(c0, Is.EqualTo(3));
            Assert.That(c1, Is.EqualTo(1));
        }
        public void PositionLine_Case1(string prefixText, string readerText)
        {
            // Arrange
            var r = new PrependableReader(CharPosition.BeginningOfFile, prefixText.ToArray(), new StringReader(readerText));

            r.Read();
            r.Read();

            // Act
            var l0 = r.Position.Line;

            r.Read();
            var l1 = r.Position.Line;

            // Assert
            Assert.That(l0, Is.EqualTo(1));
            Assert.That(l1, Is.EqualTo(2));
        }
        public void Reattach_Case1(string prefixText, string readerText)
        {
            // Arrange
            var r = new PrependableReader(CharPosition.BeginningOfFile, prefixText.ToArray(), new StringReader(readerText));

            r.Read();

            // Act
            r.Reattach(CharPosition.BeginningOfFile, prefixText.ToArray());
            var p  = r.Position.Index;
            var l  = r.Position.Line;
            var c  = r.Position.Column;
            var ch = r.Peek();

            // Assert
            Assert.That(p, Is.EqualTo(0));
            Assert.That(l, Is.EqualTo(1));
            Assert.That(c, Is.EqualTo(1));
            Assert.That(ch, Is.EqualTo(prefixText.Length == 0 ? readerText[1] : (prefixText + readerText)[0]));
        }
        public void Reattach_Case2(string prefixText, string readerText)
        {
            // Arrange
            var r = new PrependableReader(CharPosition.BeginningOfFile, prefixText.ToArray(), new StringReader(readerText));

            r.Read();
            r.Read();
            r.Read();

            // Act
            r.Reattach(CharPosition.BeginningOfFile.NextColumn, "ab".ToArray());
            var p  = r.Position.Index;
            var l  = r.Position.Line;
            var c  = r.Position.Column;
            var ch = r.Peek();

            // Assert
            Assert.That(p, Is.EqualTo(1));
            Assert.That(l, Is.EqualTo(1));
            Assert.That(c, Is.EqualTo(2));
            Assert.That(ch, Is.EqualTo('a'));
            Assert.That(r.ReadToEnd(), Is.EqualTo("ab3456789"));
        }