public void GivenLazyTransformStream_WhenExecutingWriteMethods_NotSupportedExceptionThrown()
 {
     using (var lazyTransformStream = new LazyTransformReadOnlyStream <byte[]>(new byte[0], ReverseByteArray))
     {
         Assert.Throws <NotSupportedException>(() => lazyTransformStream.SetLength(1));
         Assert.Throws <NotSupportedException>(() => lazyTransformStream.Write(new byte[0], 1, 0));
     }
 }
 public void GivenLazyTransformStream_WhenTransformingAnInputStream_InputStreamIsNotReadUntilLazyStreamIsRead()
 {
     using (var inputStream = _recyclableMemoryStreamManager.GetStream("GivenLazyTransformStream_WhenTransformingAnInputStream_InputStreamIsNotReadUntilLazyStreamIsRead.TestData", TestData, 0, TestData.Length))
         using (var lazyTransform = new LazyTransformReadOnlyStream <Stream>(inputStream, ReadAndCreateNewStream))
         {
             Assert.Equal(0, inputStream.Position);
             Assert.Equal(TestData.Length, lazyTransform.Length);
             Assert.Equal(TestData.Length, inputStream.Position);
         }
 }
        public void GivenLazyTransformStream_WhenConstructed_CanReadSeekButCannotWrite()
        {
            Assert.Throws <ArgumentNullException>(() => new LazyTransformReadOnlyStream <string>(string.Empty, null));

            using (var lazyTransformStream = new LazyTransformReadOnlyStream <byte[]>(new byte[0], ReverseByteArray))
            {
                Assert.True(lazyTransformStream.CanRead);
                Assert.True(lazyTransformStream.CanSeek);
                Assert.False(lazyTransformStream.CanWrite);
            }
        }
        public void GivenLazyTransformStream_WhenTransformedDataHasDifferentLength_ReturnsTheCorrectStreamLength()
        {
            using (var lazyTransformStream = new LazyTransformReadOnlyStream <byte[]>(TestData, DoubleByteArray))
            {
                Assert.Equal(TestData.Length * 2, lazyTransformStream.Length);

                var readBuffer = new byte[lazyTransformStream.Length];
                lazyTransformStream.Read(readBuffer, 0, readBuffer.Length);
                Assert.Equal(readBuffer.Length, lazyTransformStream.Position);
            }
        }
        private static GCWatch GetGCWatch <T>(T inputData, Func <T, Stream> transformFunction)
        {
            var lazyTransform = new LazyTransformReadOnlyStream <T>(inputData, transformFunction);
            var result        = new GCWatch(lazyTransform);

            // Read the entire stream
            var outputBuffer = new byte[lazyTransform.Length];

            lazyTransform.Read(outputBuffer, 0, outputBuffer.Length);

            return(result);
        }
        public void GivenReverseStreamFunction_WhenUsingLazyTransformStream_StreamIsReversed()
        {
            using (var lazyTransform = new LazyTransformReadOnlyStream <byte[]>(TestData, ReverseByteArray))
            {
                Assert.Equal(TestData.Length, lazyTransform.Length);

                var resultBuffer = new byte[TestData.Length];
                Assert.Equal(TestData.Length, lazyTransform.Read(resultBuffer, 0, TestData.Length));

                for (var i = 0; i < TestData.Length; i++)
                {
                    Assert.Equal(TestData[i], resultBuffer[TestData.Length - 1 - i]);
                }
            }
        }
        public void GivenLazyTransformStream_WhenSeeking_IsSetToCorrectStreamPosition()
        {
            using (var lazyTransformStream = new LazyTransformReadOnlyStream <byte[]>(TestData, DoubleByteArray))
            {
                Assert.True(lazyTransformStream.CanSeek);
                Assert.Equal(TestData.Length * 2, lazyTransformStream.Length);
                Assert.Equal(0, lazyTransformStream.Position);

                lazyTransformStream.Seek(2, SeekOrigin.Current);
                Assert.Equal(2, lazyTransformStream.Position);
                lazyTransformStream.Seek(lazyTransformStream.Length - 1, SeekOrigin.Begin);
                Assert.Equal(lazyTransformStream.Length - 1, lazyTransformStream.Position);
                lazyTransformStream.Seek(0, SeekOrigin.Begin);
                Assert.Equal(0, lazyTransformStream.Position);
                lazyTransformStream.Seek(-1, SeekOrigin.End);
                Assert.Equal(lazyTransformStream.Length - 1, lazyTransformStream.Position);
            }
        }