public void DecoderFallbackBufferMoveBack()
        {
            var buffer = new EscapeOutRangeEncoding.EscapeOutRangeDecoderFallbackBuffer();

            byte[] invalidBuffer = { 0xE2, 0x81 };
            Assert.True(buffer.Fallback(invalidBuffer, 0));

            Assert.AreEqual(9, buffer.Remaining);
            Assert.AreEqual('[', buffer.GetNextChar());
            Assert.AreEqual(8, buffer.Remaining);
            Assert.AreEqual('@', buffer.GetNextChar());
            Assert.AreEqual(7, buffer.Remaining);

            Assert.IsTrue(buffer.MovePrevious());
            Assert.AreEqual(8, buffer.Remaining);
            Assert.AreEqual('@', buffer.GetNextChar());

            Assert.IsTrue(buffer.MovePrevious());
            Assert.AreEqual(8, buffer.Remaining);
            Assert.IsTrue(buffer.MovePrevious());
            Assert.AreEqual(9, buffer.Remaining);
            Assert.IsFalse(buffer.MovePrevious());
            Assert.AreEqual(9, buffer.Remaining);
            Assert.AreEqual('[', buffer.GetNextChar());
        }
        public void DecoderFallbackBufferResets()
        {
            var buffer = new EscapeOutRangeEncoding.EscapeOutRangeDecoderFallbackBuffer();

            byte[] invalidBuffer = { 0xE2, 0x81 };
            Assert.True(buffer.Fallback(invalidBuffer, 0));

            Assert.AreEqual(9, buffer.Remaining);
            Assert.AreEqual('[', buffer.GetNextChar());
            Assert.AreEqual(8, buffer.Remaining);
            Assert.AreEqual('@', buffer.GetNextChar());
            Assert.AreEqual(7, buffer.Remaining);

            buffer.Reset();
            Assert.AreEqual(0, buffer.Remaining);
            Assert.AreEqual('\0', buffer.GetNextChar());
        }
        public void DecoderFallbackBufferGetsBuffer()
        {
            var buffer = new EscapeOutRangeEncoding.EscapeOutRangeDecoderFallbackBuffer();

            byte[] invalidBuffer = { 0xE2, 0x81 };
            Assert.True(buffer.Fallback(invalidBuffer, 0));

            string replacement = "[@!!E281]";

            for (int i = 0; i < replacement.Length; i++)
            {
                Assert.AreEqual(replacement.Length - i, buffer.Remaining);
                Assert.AreEqual(replacement[i], buffer.GetNextChar());
            }

            Assert.AreEqual(0, buffer.Remaining);
            Assert.AreEqual('\0', buffer.GetNextChar());
        }