Esempio n. 1
0
        public async Task PartialStream_WithOffsetAndLength_Seek_WorksCorrectly()
        {
            // Arrange
#if !NET461 && !NETCOREAPP2_1
            await
#endif
            using var originalStream = new MemoryStream();
            await originalStream.FillWithRandomBytesAsync(1024);

            const int offset = 10;
            const int length = 100;
#if !NET461 && !NETCOREAPP2_1
            await
#endif
            using var partialStream = new PartialStream(originalStream, offset, length);

            // Act
            const int additionalOffset = 40;
            partialStream.Seek(additionalOffset, SeekOrigin.Begin);

            // Assert
#if !NET461 && !NETCOREAPP2_1
            await
#endif
            using var outputStream = new MemoryStream();
            await partialStream.CopyToAsync(outputStream);

            var originalPortion = originalStream
                                  .ToArray()
                                  .Skip(offset + additionalOffset)
                                  .Take(length - additionalOffset)
                                  .ToArray();

            outputStream.ToArray().Should().Equal(originalPortion);
        }
Esempio n. 2
0
        public async Task PartialStream_WithOffset_ReadToEnd_ReturnsOnlyDataInRange()
        {
            // Arrange
#if !NET461 && !NETCOREAPP2_1
            await
#endif
            using var originalStream = new MemoryStream();
            await originalStream.FillWithRandomBytesAsync(1024);

            const int offset = 10;
#if !NET461 && !NETCOREAPP2_1
            await
#endif
            using var partialStream = new PartialStream(originalStream, offset, null);

            // Act
#if !NET461 && !NETCOREAPP2_1
            await
#endif
            using var outputStream = new MemoryStream();
            await partialStream.CopyToAsync(outputStream);

            // Assert
            var originalPortion = originalStream.ToArray().Skip(offset).ToArray();

            outputStream.Length.Should().Be(originalStream.Length - offset);
            outputStream.ToArray().Should().Equal(originalPortion);
        }
Esempio n. 3
0
        public async Task PartialStream_WithOffsetAndLength_InnerPositionChanged_StillReadsCorrectly()
        {
            // Arrange
#if !NET461 && !NETCOREAPP2_1
            await
#endif
            using var originalStream = new MemoryStream();
            await originalStream.FillWithRandomBytesAsync(1024);

            const int offset = 10;
            const int length = 100;
#if !NET461 && !NETCOREAPP2_1
            await
#endif
            using var partialStream = new PartialStream(originalStream, offset, length);

            // Act
            originalStream.Position = 1000;

            // Assert
#if !NET461 && !NETCOREAPP2_1
            await
#endif
            using var outputStream = new MemoryStream();
            await partialStream.CopyToAsync(outputStream);

            var originalPortion = originalStream.ToArray().Skip(offset).Take(length).ToArray();

            outputStream.ToArray().Should().Equal(originalPortion);
        }
        public async Task ExportAsync(Stream stream)
        {
            var ms = new MemoryStream();

            // find version
            // -> http://dageron.com/?page_id=5446&lang=en
            var version = ((file.GraphicsFlags & 0xF0000000) >> 28) |
                          ((file.SystemFlags & 0xF0000000) >> 24);

            var writer = new DataWriter(ms);

            writer.Write((uint)0x07435352);
            writer.Write((uint)version);
            writer.Write((uint)file.SystemFlags);
            writer.Write((uint)file.GraphicsFlags);

            ms.Position = 0;

            await ms.CopyToAsync(stream);

            var resourceStream = new PartialStream(
                archiveWrapper.archive_.BaseStream,
                delegate()     // offset
            {
                return((file.FileOffset * RageArchiveWrapper7.BLOCK_SIZE) + 16);
            },
                delegate()     // size
            {
                return(file.FileSize);
            }
                );

            await resourceStream.CopyToAsync(stream);
        }
        public async Task PartialStream_WithOffsetAndLength_ReadToEnd_ReturnsOnlyDataInRange()
        {
            // Arrange
            using var originalStream = new MemoryStream();
            await originalStream.FillWithRandomBytesAsync(1024);

            const int offset = 10;
            const int length = 100;

            using var partialStream = new PartialStream(originalStream, offset, length);

            // Act
            using var outputStream = new MemoryStream();
            await partialStream.CopyToAsync(outputStream);

            // Assert
            var originalPortion = originalStream.ToArray().Skip(offset).Take(length).ToArray();

            outputStream.Length.Should().Be(length);
            outputStream.ToArray().Should().Equal(originalPortion);
        }