Ejemplo n.º 1
0
        private IEnumerable <ReadWithDelimiterTestCase> CreateEmptyBufferTestCases()
        {
            List <ReadWithDelimiterTestCase> testCases = new List <ReadWithDelimiterTestCase>();

            this.CombinatorialEngineProvider.RunCombinations(
                LineFeeds,
                new int[] { 0, 100 },
                (lineFeed, bytesToRead) =>
            {
                ReadWithDelimiterTestCase testCase = new ReadWithDelimiterTestCase(lineFeed)
                {
                    DebugDescription = "Read " + bytesToRead + " bytes from empty buffer.",
                    PayloadFunc      = builder => builder.ResetMemoryStream(),
                    ReadDescriptors  = new BatchReaderStreamReadDescriptor[]
                    {
                        new BatchReaderStreamReadDescriptor
                        {
                            BufferSize                = 100,
                            BufferOffset              = 0,
                            NumberOfBytesToRead       = bytesToRead,
                            ExpectedNumberOfBytesRead = 0
                        }
                    },
                    ExpectedBufferState = new BatchReaderStreamBufferState
                    {
                        ReadPositionInBuffer  = 0,
                        NumberOfBytesInBuffer = 0,
                    }
                };
                testCases.Add(testCase);
            });
            return(testCases);
        }
Ejemplo n.º 2
0
        private IEnumerable <ReadWithDelimiterTestCase> CreateNoDelimiterTestCases()
        {
            List <ReadWithDelimiterTestCase> testCases = new List <ReadWithDelimiterTestCase>();

            this.CombinatorialEngineProvider.RunCombinations(
                LineFeeds,
                new int[] { 0, 100, 200, 300 },
                (lineFeed, bytesToRead) =>
            {
                ReadWithDelimiterTestCase testCase = new ReadWithDelimiterTestCase(lineFeed)
                {
                    DebugDescription = "Read " + bytesToRead + " bytes from non-empty buffer without delimiter.",
                    PayloadFunc      = builder => builder.FillBytes(200, 'a').ResetMemoryStream(),
                    ReadDescriptors  = new BatchReaderStreamReadDescriptor[]
                    {
                        new BatchReaderStreamReadDescriptor
                        {
                            BufferSize                = 500,
                            BufferOffset              = 0,
                            NumberOfBytesToRead       = bytesToRead,
                            ExpectedNumberOfBytesRead = Math.Min(bytesToRead, 200)
                        }
                    },
                    ExpectedBufferState = new BatchReaderStreamBufferState
                    {
                        ReadPositionInBuffer = bytesToRead == 300
                                ? 0
                                : Math.Min(bytesToRead, 200),
                        NumberOfBytesInBuffer = bytesToRead == 0 ? 0 : Math.Max(0, 200 - bytesToRead),
                    }
                };
                testCases.Add(testCase);
            });
            return(testCases);
        }
Ejemplo n.º 3
0
        private IEnumerable <ReadWithDelimiterTestCase> CreateBoundaryAtTheEndTestCases()
        {
            List <ReadWithDelimiterTestCase> testCases = new List <ReadWithDelimiterTestCase>();

            this.CombinatorialEngineProvider.RunCombinations(
                BoundaryStrings,
                LeadingLineFeedForBoundary,
                LineFeeds,
                new bool[] { true, false },
                new int[] { 0, 100, 200, 300 },
                (boundary, leadingBoundaryLineFeed, lineFeed, isEndBoundary, bytesToRead) =>
            {
                int leadingLineFeedLength          = leadingBoundaryLineFeed ? lineFeed.Length : 0;
                int startBoundaryLength            = leadingLineFeedLength + BatchReaderStreamTestUtils.TwoDashesLength + boundary.Length + lineFeed.Length;
                int endBoundaryLength              = startBoundaryLength + BatchReaderStreamTestUtils.TwoDashesLength;
                int dataBytesInStartBoundaryBuffer = BatchReaderStreamBufferWrapper.BufferLength - 1 - startBoundaryLength;
                int dataBytesInEndBoundaryBuffer   = dataBytesInStartBoundaryBuffer - BatchReaderStreamTestUtils.TwoDashesLength;
                Func <bool, int> dataBytesInBuffer = isEnd => isEnd ? dataBytesInEndBoundaryBuffer : dataBytesInStartBoundaryBuffer;

                ReadWithDelimiterTestCase testCase = new ReadWithDelimiterTestCase(lineFeed)
                {
                    DebugDescription = "Read " + bytesToRead + " bytes from non-empty buffer with delimiter '" + boundary + "' at the end.\r\n" +
                                       "[isEnd = " + isEndBoundary + ", leadingLineFeed = " + leadingBoundaryLineFeed + ", lineFeed = " + StringUtils.LineFeedString(lineFeed) +
                                       ", bytesToRead = " + bytesToRead + "]",
                    BatchBoundary = boundary,
                    PayloadFunc   = builder => isEndBoundary
                            ? builder
                                    .FillBytes(BatchReaderStreamBufferWrapper.BufferLength - 1 - endBoundaryLength, 'a')
                                    .EndBoundary(boundary, leadingBoundaryLineFeed)
                                    .FillBytes(1, 'b')
                                    .ResetMemoryStream()
                            : builder
                                    .FillBytes(BatchReaderStreamBufferWrapper.BufferLength - 1 - startBoundaryLength, 'a')
                                    .StartBoundary(boundary, leadingBoundaryLineFeed)
                                    .FillBytes(1, 'b')
                                    .ResetMemoryStream(),
                    ReadDescriptors = new BatchReaderStreamReadDescriptor[]
                    {
                        new BatchReaderStreamReadDescriptor
                        {
                            BufferSize                = BatchReaderStreamBufferWrapper.BufferLength,
                            BufferOffset              = 0,
                            NumberOfBytesToRead       = bytesToRead,
                            ExpectedNumberOfBytesRead = Math.Min(bytesToRead, dataBytesInBuffer(isEndBoundary))
                        }
                    },
                    ExpectedBufferState = new BatchReaderStreamBufferState
                    {
                        ReadPositionInBuffer  = Math.Min(bytesToRead, dataBytesInBuffer(isEndBoundary)),
                        NumberOfBytesInBuffer = bytesToRead == 0 ? 0 : BatchReaderStreamBufferWrapper.BufferLength - Math.Min(bytesToRead, dataBytesInBuffer(isEndBoundary)),
                    }
                };
                testCases.Add(testCase);
            });

            return(testCases);
        }
Ejemplo n.º 4
0
 /// <summary>
 /// Copy constructor.
 /// </summary>
 /// <param name="other">The test case instance to copy.</param>
 public ReadWithDelimiterTestCase(ReadWithDelimiterTestCase other)
     : base(other)
 {
 }
Ejemplo n.º 5
0
        private IEnumerable <ReadWithDelimiterTestCase> CreatePartialBoundaryAtStreamEndTestCases()
        {
            List <ReadWithDelimiterTestCase> testCases = new List <ReadWithDelimiterTestCase>();

            this.CombinatorialEngineProvider.RunCombinations(
                BoundaryStrings,
                LeadingLineFeedForBoundary,
                LineFeeds,
                (boundary, leadingBoundaryLineFeed, lineFeed) =>
            {
                // Fill the buffer with 'a' bytes and leave some room for the line feed,
                // the two dashes and the first byte of the boundary
                int leadingLineFeedLength      = leadingBoundaryLineFeed ? lineFeed.Length : 0;
                int partialBoundaryLength      = leadingLineFeedLength + BatchReaderStreamTestUtils.TwoDashesLength + 1;
                int bytesBeforePartialBoundary = BatchReaderStreamBufferWrapper.BufferLength - partialBoundaryLength;

                this.CombinatorialEngineProvider.RunCombinations(
                    new int[] { 0, 100, bytesBeforePartialBoundary, BatchReaderStreamBufferWrapper.BufferLength, BatchReaderStreamBufferWrapper.BufferLength + 100 },
                    (bytesToRead) =>
                {
                    ReadWithDelimiterTestCase testCase = new ReadWithDelimiterTestCase(lineFeed)
                    {
                        DebugDescription = "Read " + bytesToRead + " bytes from last buffer of stream with partial delimiter at the end.\r\n" +
                                           "[leadingLineFeed = " + leadingBoundaryLineFeed + ", lineFeed = " + StringUtils.LineFeedString(lineFeed) +
                                           ", bytesToRead = " + bytesToRead + "]",
                        BatchBoundary = boundary,
                        PayloadFunc   = builder => leadingBoundaryLineFeed
                                    ? builder
                                        .FillBytes(bytesBeforePartialBoundary, 'a')
                                        .LineFeed()
                                        .Chars(MemoryStreamBatchPayloadBuilder.BoundaryDelimiter)
                                        .Chars(boundary[0])
                                        .ResetMemoryStream()
                                    : builder
                                        .FillBytes(bytesBeforePartialBoundary, 'a')
                                        .Chars(MemoryStreamBatchPayloadBuilder.BoundaryDelimiter)
                                        .Chars(boundary[0])
                                        .ResetMemoryStream(),
                        ReadDescriptors = new BatchReaderStreamReadDescriptor[]
                        {
                            new BatchReaderStreamReadDescriptor
                            {
                                BufferSize                = BatchReaderStreamBufferWrapper.BufferLength,
                                BufferOffset              = 0,
                                NumberOfBytesToRead       = bytesToRead,
                                ExpectedNumberOfBytesRead = Math.Min(bytesToRead, BatchReaderStreamBufferWrapper.BufferLength)
                            }
                        },
                        ExpectedBufferState = new BatchReaderStreamBufferState
                        {
                            ReadPositionInBuffer = bytesToRead < BatchReaderStreamBufferWrapper.BufferLength
                                                   // We did not reload the buffer
                                        ? bytesToRead
                                                   // We reloaded the buffer and read the remaining partial boundary
                                        : partialBoundaryLength,
                            NumberOfBytesInBuffer = bytesToRead == 0
                                                    // nothing was loaded into the buffer
                                            ? 0
                                            : bytesToRead < BatchReaderStreamBufferWrapper.BufferLength
                                                    // We did not reload the buffer
                                                ? BatchReaderStreamBufferWrapper.BufferLength - bytesToRead
                                                    // We reloaded the buffer and read all of it
                                                : 0
                        }
                    };
                    testCases.Add(testCase);
                });
            });

            return(testCases);
        }
Ejemplo n.º 6
0
        private IEnumerable <ReadWithDelimiterTestCase> CreateBoundaryAcrossBuffersTestCases()
        {
            List <ReadWithDelimiterTestCase> testCases = new List <ReadWithDelimiterTestCase>();

            this.CombinatorialEngineProvider.RunCombinations(
                BoundaryStrings,
                LeadingLineFeedForBoundary,
                LineFeeds,
                new bool[] { true, false },
                new int[] { 0, 100, BatchReaderStreamBufferWrapper.BufferLength - 2, BatchReaderStreamBufferWrapper.BufferLength },
                (boundary, leadingBoundaryLineFeed, lineFeed, isEndBoundary, bytesToRead) =>
            {
                int leadingLineFeedLength       = leadingBoundaryLineFeed ? lineFeed.Length : 0;
                int startBoundaryLength         = leadingLineFeedLength + BatchReaderStreamTestUtils.TwoDashesLength + boundary.Length + lineFeed.Length;
                int endBoundaryLength           = startBoundaryLength + BatchReaderStreamTestUtils.TwoDashesLength;
                Func <bool, int> boundaryLength = isEnd => isEnd ? endBoundaryLength : startBoundaryLength;

                ReadWithDelimiterTestCase testCase = new ReadWithDelimiterTestCase(lineFeed)
                {
                    DebugDescription = "Read " + bytesToRead + " bytes from buffer with partial delimiter at the end.\r\n" +
                                       "[isEnd = " + isEndBoundary + ", leadingLineFeed = " + leadingBoundaryLineFeed + ", lineFeed = " + StringUtils.LineFeedString(lineFeed) +
                                       ", bytesToRead = " + bytesToRead + "]",
                    BatchBoundary = boundary,
                    PayloadFunc   = builder => isEndBoundary
                            ? builder
                                    .FillBytes(BatchReaderStreamBufferWrapper.BufferLength - 2, 'a')
                                    .EndBoundary(boundary, leadingBoundaryLineFeed)
                                    .FillBytes(100, 'b')
                                    .ResetMemoryStream()
                            : builder
                                    .FillBytes(BatchReaderStreamBufferWrapper.BufferLength - 2, 'a')
                                    .StartBoundary(boundary, leadingBoundaryLineFeed)
                                    .FillBytes(100, 'b')
                                    .ResetMemoryStream(),
                    ReadDescriptors = new BatchReaderStreamReadDescriptor[]
                    {
                        new BatchReaderStreamReadDescriptor
                        {
                            BufferSize                = BatchReaderStreamBufferWrapper.BufferLength,
                            BufferOffset              = 0,
                            NumberOfBytesToRead       = bytesToRead,
                            ExpectedNumberOfBytesRead = Math.Min(bytesToRead, BatchReaderStreamBufferWrapper.BufferLength - 2)
                        }
                    },
                    ExpectedBufferState = new BatchReaderStreamBufferState
                    {
                        ReadPositionInBuffer = bytesToRead == BatchReaderStreamBufferWrapper.BufferLength
                                               // we refilled the buffer only to find the boundary
                                ? 0
                                               // we did not refill the buffer
                                : bytesToRead,
                        NumberOfBytesInBuffer = bytesToRead == 0
                                                // nothing was loaded into the buffer
                                    ? 0
                                    : bytesToRead == BatchReaderStreamBufferWrapper.BufferLength
                                                // we refilled the buffer, read all the 'a' bytes; the boundary and 100 'b' bytes left
                                        ? boundaryLength(isEndBoundary) + 100
                                                // we did not refill the buffer
                                        : BatchReaderStreamBufferWrapper.BufferLength - bytesToRead,
                    }
                };
                testCases.Add(testCase);
            });

            return(testCases);
        }
 private IEnumerable<ReadWithDelimiterTestCase> CreateEmptyBufferTestCases()
 {
     List<ReadWithDelimiterTestCase> testCases = new List<ReadWithDelimiterTestCase>();
     this.CombinatorialEngineProvider.RunCombinations(
         LineFeeds,
         new int[] { 0, 100 },
         (lineFeed, bytesToRead) =>
         {
             ReadWithDelimiterTestCase testCase = new ReadWithDelimiterTestCase(lineFeed)
             {
                 DebugDescription = "Read " + bytesToRead + " bytes from empty buffer.",
                 PayloadFunc = builder => builder.ResetMemoryStream(),
                 ReadDescriptors = new BatchReaderStreamReadDescriptor[]
                 {
                     new BatchReaderStreamReadDescriptor 
                     { 
                         BufferSize = 100, 
                         BufferOffset = 0, 
                         NumberOfBytesToRead = bytesToRead, 
                         ExpectedNumberOfBytesRead = 0 
                     }
                 },
                 ExpectedBufferState = new BatchReaderStreamBufferState
                 {
                     ReadPositionInBuffer = 0,
                     NumberOfBytesInBuffer = 0,
                 }
             };
             testCases.Add(testCase);
         });
     return testCases;
 }
 /// <summary>
 /// Copy constructor.
 /// </summary>
 /// <param name="other">The test case instance to copy.</param>
 public ReadWithDelimiterTestCase(ReadWithDelimiterTestCase other)
     : base(other)
 {
 }
        private IEnumerable<ReadWithDelimiterTestCase> CreatePartialBoundaryAtStreamEndTestCases()
        {
            List<ReadWithDelimiterTestCase> testCases = new List<ReadWithDelimiterTestCase>();
            this.CombinatorialEngineProvider.RunCombinations(
                BoundaryStrings,
                LeadingLineFeedForBoundary,
                LineFeeds,
                (boundary, leadingBoundaryLineFeed, lineFeed) =>
                {
                    // Fill the buffer with 'a' bytes and leave some room for the line feed, 
                    // the two dashes and the first byte of the boundary
                    int leadingLineFeedLength = leadingBoundaryLineFeed ? lineFeed.Length : 0;
                    int partialBoundaryLength = leadingLineFeedLength + BatchReaderStreamTestUtils.TwoDashesLength + 1;
                    int bytesBeforePartialBoundary = BatchReaderStreamBufferWrapper.BufferLength - partialBoundaryLength;

                    this.CombinatorialEngineProvider.RunCombinations(
                        new int[] { 0, 100, bytesBeforePartialBoundary, BatchReaderStreamBufferWrapper.BufferLength, BatchReaderStreamBufferWrapper.BufferLength + 100 },
                        (bytesToRead) =>
                        {
                            ReadWithDelimiterTestCase testCase = new ReadWithDelimiterTestCase(lineFeed)
                            {
                                DebugDescription = "Read " + bytesToRead + " bytes from last buffer of stream with partial delimiter at the end.\r\n" +
                                    "[leadingLineFeed = " + leadingBoundaryLineFeed + ", lineFeed = " + StringUtils.LineFeedString(lineFeed) +
                                    ", bytesToRead = " + bytesToRead + "]",
                                BatchBoundary = boundary,
                                PayloadFunc = builder => leadingBoundaryLineFeed
                                    ? builder
                                        .FillBytes(bytesBeforePartialBoundary, 'a')
                                        .LineFeed()
                                        .Chars(MemoryStreamBatchPayloadBuilder.BoundaryDelimiter)
                                        .Chars(boundary[0])
                                        .ResetMemoryStream()
                                    : builder
                                        .FillBytes(bytesBeforePartialBoundary, 'a')
                                        .Chars(MemoryStreamBatchPayloadBuilder.BoundaryDelimiter)
                                        .Chars(boundary[0])
                                        .ResetMemoryStream(),
                                ReadDescriptors = new BatchReaderStreamReadDescriptor[]
                            {
                                new BatchReaderStreamReadDescriptor 
                                { 
                                    BufferSize = BatchReaderStreamBufferWrapper.BufferLength, 
                                    BufferOffset = 0, 
                                    NumberOfBytesToRead = bytesToRead, 
                                    ExpectedNumberOfBytesRead = Math.Min(bytesToRead, BatchReaderStreamBufferWrapper.BufferLength)
                                }
                            },
                                ExpectedBufferState = new BatchReaderStreamBufferState
                                {
                                    ReadPositionInBuffer = bytesToRead < BatchReaderStreamBufferWrapper.BufferLength
                                        // We did not reload the buffer
                                        ? bytesToRead
                                        // We reloaded the buffer and read the remaining partial boundary
                                        : partialBoundaryLength,
                                    NumberOfBytesInBuffer = bytesToRead == 0
                                        // nothing was loaded into the buffer
                                            ? 0
                                            : bytesToRead < BatchReaderStreamBufferWrapper.BufferLength
                                        // We did not reload the buffer
                                                ? BatchReaderStreamBufferWrapper.BufferLength - bytesToRead
                                        // We reloaded the buffer and read all of it
                                                : 0
                                }
                            };
                            testCases.Add(testCase);
                        });
                });

            return testCases;
        }
        private IEnumerable<ReadWithDelimiterTestCase> CreateBoundaryAcrossBuffersTestCases()
        {
            List<ReadWithDelimiterTestCase> testCases = new List<ReadWithDelimiterTestCase>();
            this.CombinatorialEngineProvider.RunCombinations(
                BoundaryStrings,
                LeadingLineFeedForBoundary,
                LineFeeds,
                new bool[] { true, false },
                new int[] { 0, 100, BatchReaderStreamBufferWrapper.BufferLength - 2, BatchReaderStreamBufferWrapper.BufferLength },
                (boundary, leadingBoundaryLineFeed, lineFeed, isEndBoundary, bytesToRead) =>
                {
                    int leadingLineFeedLength = leadingBoundaryLineFeed ? lineFeed.Length : 0;
                    int startBoundaryLength = leadingLineFeedLength + BatchReaderStreamTestUtils.TwoDashesLength + boundary.Length + lineFeed.Length;
                    int endBoundaryLength = startBoundaryLength + BatchReaderStreamTestUtils.TwoDashesLength;
                    Func<bool, int> boundaryLength = isEnd => isEnd ? endBoundaryLength : startBoundaryLength;

                    ReadWithDelimiterTestCase testCase = new ReadWithDelimiterTestCase(lineFeed)
                    {
                        DebugDescription = "Read " + bytesToRead + " bytes from buffer with partial delimiter at the end.\r\n" +
                            "[isEnd = " + isEndBoundary + ", leadingLineFeed = " + leadingBoundaryLineFeed + ", lineFeed = " + StringUtils.LineFeedString(lineFeed) +
                            ", bytesToRead = " + bytesToRead + "]",
                        BatchBoundary = boundary,
                        PayloadFunc = builder => isEndBoundary
                            ? builder
                                .FillBytes(BatchReaderStreamBufferWrapper.BufferLength - 2, 'a')
                                .EndBoundary(boundary, leadingBoundaryLineFeed)
                                .FillBytes(100, 'b')
                                .ResetMemoryStream()
                            : builder
                                .FillBytes(BatchReaderStreamBufferWrapper.BufferLength - 2, 'a')
                                .StartBoundary(boundary, leadingBoundaryLineFeed)
                                .FillBytes(100, 'b')
                                .ResetMemoryStream(),
                        ReadDescriptors = new BatchReaderStreamReadDescriptor[]
                        {
                            new BatchReaderStreamReadDescriptor 
                            { 
                                BufferSize = BatchReaderStreamBufferWrapper.BufferLength, 
                                BufferOffset = 0, 
                                NumberOfBytesToRead = bytesToRead, 
                                ExpectedNumberOfBytesRead = Math.Min(bytesToRead, BatchReaderStreamBufferWrapper.BufferLength - 2)
                            }
                        },
                        ExpectedBufferState = new BatchReaderStreamBufferState
                        {
                            ReadPositionInBuffer = bytesToRead == BatchReaderStreamBufferWrapper.BufferLength
                                // we refilled the buffer only to find the boundary
                                ? 0
                                // we did not refill the buffer
                                : bytesToRead,
                            NumberOfBytesInBuffer = bytesToRead == 0
                                    // nothing was loaded into the buffer
                                    ? 0
                                    : bytesToRead == BatchReaderStreamBufferWrapper.BufferLength
                                        // we refilled the buffer, read all the 'a' bytes; the boundary and 100 'b' bytes left
                                        ? boundaryLength(isEndBoundary) + 100
                                        // we did not refill the buffer
                                        : BatchReaderStreamBufferWrapper.BufferLength - bytesToRead,
                        }
                    };
                    testCases.Add(testCase);
                });

            return testCases;
        }
        private IEnumerable<ReadWithDelimiterTestCase> CreateBoundaryAtTheEndTestCases()
        {
            List<ReadWithDelimiterTestCase> testCases = new List<ReadWithDelimiterTestCase>();
            this.CombinatorialEngineProvider.RunCombinations(
                BoundaryStrings,
                LeadingLineFeedForBoundary,
                LineFeeds,
                new bool[] { true, false },
                new int[] { 0, 100, 200, 300 },
                (boundary, leadingBoundaryLineFeed, lineFeed, isEndBoundary, bytesToRead) =>
                {
                    int leadingLineFeedLength = leadingBoundaryLineFeed ? lineFeed.Length : 0;
                    int startBoundaryLength = leadingLineFeedLength + BatchReaderStreamTestUtils.TwoDashesLength + boundary.Length + lineFeed.Length;
                    int endBoundaryLength = startBoundaryLength + BatchReaderStreamTestUtils.TwoDashesLength;
                    int dataBytesInStartBoundaryBuffer = BatchReaderStreamBufferWrapper.BufferLength - 1 - startBoundaryLength;
                    int dataBytesInEndBoundaryBuffer = dataBytesInStartBoundaryBuffer - BatchReaderStreamTestUtils.TwoDashesLength;
                    Func<bool, int> dataBytesInBuffer = isEnd => isEnd ? dataBytesInEndBoundaryBuffer : dataBytesInStartBoundaryBuffer;

                    ReadWithDelimiterTestCase testCase = new ReadWithDelimiterTestCase(lineFeed)
                    {
                        DebugDescription = "Read " + bytesToRead + " bytes from non-empty buffer with delimiter '" + boundary + "' at the end.\r\n" +
                            "[isEnd = " + isEndBoundary + ", leadingLineFeed = " + leadingBoundaryLineFeed + ", lineFeed = " + StringUtils.LineFeedString(lineFeed) +
                            ", bytesToRead = " + bytesToRead + "]",
                        BatchBoundary = boundary,
                        PayloadFunc = builder => isEndBoundary
                            ? builder
                                .FillBytes(BatchReaderStreamBufferWrapper.BufferLength - 1 - endBoundaryLength, 'a')
                                .EndBoundary(boundary, leadingBoundaryLineFeed)
                                .FillBytes(1, 'b')
                                .ResetMemoryStream()
                            : builder
                                .FillBytes(BatchReaderStreamBufferWrapper.BufferLength - 1 - startBoundaryLength, 'a')
                                .StartBoundary(boundary, leadingBoundaryLineFeed)
                                .FillBytes(1, 'b')
                                .ResetMemoryStream(),
                        ReadDescriptors = new BatchReaderStreamReadDescriptor[]
                        {
                            new BatchReaderStreamReadDescriptor 
                            { 
                                BufferSize = BatchReaderStreamBufferWrapper.BufferLength, 
                                BufferOffset = 0, 
                                NumberOfBytesToRead = bytesToRead, 
                                ExpectedNumberOfBytesRead = Math.Min(bytesToRead, dataBytesInBuffer(isEndBoundary))
                            }
                        },
                        ExpectedBufferState = new BatchReaderStreamBufferState
                        {
                            ReadPositionInBuffer = Math.Min(bytesToRead, dataBytesInBuffer(isEndBoundary)),
                            NumberOfBytesInBuffer = bytesToRead == 0 ? 0 : BatchReaderStreamBufferWrapper.BufferLength - Math.Min(bytesToRead, dataBytesInBuffer(isEndBoundary)),
                        }
                    };
                    testCases.Add(testCase);
                });

            return testCases;
        }
 private IEnumerable<ReadWithDelimiterTestCase> CreateNoDelimiterTestCases()
 {
     List<ReadWithDelimiterTestCase> testCases = new List<ReadWithDelimiterTestCase>();
     this.CombinatorialEngineProvider.RunCombinations(
         LineFeeds,
         new int[] { 0, 100, 200, 300 },
         (lineFeed, bytesToRead) =>
         {
             ReadWithDelimiterTestCase testCase = new ReadWithDelimiterTestCase(lineFeed)
             {
                 DebugDescription = "Read " + bytesToRead + " bytes from non-empty buffer without delimiter.",
                 PayloadFunc = builder => builder.FillBytes(200, 'a').ResetMemoryStream(),
                 ReadDescriptors = new BatchReaderStreamReadDescriptor[]
                 {
                     new BatchReaderStreamReadDescriptor 
                     { 
                         BufferSize = 500, 
                         BufferOffset = 0, 
                         NumberOfBytesToRead = bytesToRead, 
                         ExpectedNumberOfBytesRead = Math.Min(bytesToRead, 200) 
                     }
                 },
                 ExpectedBufferState = new BatchReaderStreamBufferState
                 {
                     ReadPositionInBuffer = bytesToRead == 300
                         ? 0
                         : Math.Min(bytesToRead, 200),
                     NumberOfBytesInBuffer = bytesToRead == 0 ? 0 : Math.Max(0, 200 - bytesToRead),
                 }
             };
             testCases.Add(testCase);
         });
     return testCases;
 }