public void Should_read_to_delimiter_failing_on_invalid_tokens(
            string data, int bufferSize, string delimiter, string invalidTokens,
            bool endOfSection1, bool endOfStream1, string read1, bool invalid1,
            bool endOfSection2, bool endOfStream2, string read2, bool invalid2,
            string remainingData)
        {
            var invalidTokenBytes = invalidTokens.Split(",")
                                    .Select(x => x.Select(y => (byte)y).ToArray()).ToArray();
            var stream     = new MemoryStream(data.ToBytes());
            var buffer     = new DelimitedBuffer(stream, bufferSize);
            var readBuffer = new byte[10];

            var result = buffer.ReadTo(readBuffer, 0, 10, delimiter.ToBytes(), invalidTokenBytes);

            result.Invalid.ShouldEqual(invalid1);
            result.EndOfSection.ShouldEqual(endOfSection1);
            result.EndOfStream.ShouldEqual(endOfStream1);
            readBuffer.ToString(result.Read).ShouldEqual(read1);

            result = buffer.ReadTo(readBuffer, 0, 10, delimiter.ToBytes(), invalidTokenBytes);

            result.Invalid.ShouldEqual(invalid2);
            result.EndOfSection.ShouldEqual(endOfSection2);
            result.EndOfStream.ShouldEqual(endOfStream2);
            readBuffer.ToString(result.Read).ShouldEqual(read2);

            ReadRemaining(buffer).ShouldEqual(remainingData);
        }
        public void Should_read_to_failing_on_invalid_chars(
            string data, int bufferSize, string delimiter, string validChars,
            bool endOfSection1, bool endOfStream1, int read1, bool invalid1,
            bool endOfSection2, bool endOfStream2, int read2, bool invalid2,
            string remainingData)
        {
            var stream = new MemoryStream(data.ToBytes());
            var buffer = new DelimitedBuffer(stream, bufferSize);

            var result = buffer.ReadTo(delimiter.ToBytes(), validChars.ToBytes());

            result.Invalid.ShouldEqual(invalid1);
            result.EndOfSection.ShouldEqual(endOfSection1);
            result.EndOfStream.ShouldEqual(endOfStream1);
            result.Read.ShouldEqual(read1);

            result = buffer.ReadTo(delimiter.ToBytes(), validChars.ToBytes());

            result.Invalid.ShouldEqual(invalid2);
            result.EndOfSection.ShouldEqual(endOfSection2);
            result.EndOfStream.ShouldEqual(endOfStream2);
            result.Read.ShouldEqual(read2);

            ReadRemaining(buffer).ShouldEqual(remainingData);
        }
        public void Should_not_start_with_comparison_that_exceeds_buffer_size()
        {
            var data   = "fark".ToBytes();
            var stream = new MemoryStream(data);
            var buffer = new DelimitedBuffer(stream, 4);

            buffer.ReadTo(data);

            buffer.StartsWith(data).ShouldBeFalse();
        }
        public void Should_indicate_when_at_begining_of_stream()
        {
            var stream = new MemoryStream("fark".ToBytes());
            var buffer = new DelimitedBuffer(stream);

            buffer.BeginingOfStream.ShouldBeTrue();

            buffer.ReadTo(null, 0, 2, null);

            buffer.BeginingOfStream.ShouldBeFalse();
        }