Exemplo n.º 1
0
        public void GZipAccess_WriteRomResourceToGZipFile_ProducesExpectedResult(CompressedArchiveAccessImplementation implementation)
        {
            var gzipFileName = TemporaryFile.GenerateUniqueFilePath("tagalong", ".luigi.gz");

            using (TemporaryFile.CreateTemporaryFileWithPath(gzipFileName, createEmptyFile: false))
            {
                // Create on-disk GZIP
                var inputLength = 0L;
                var fileStream  = new FileStream(gzipFileName, FileMode.Create, FileAccess.Write);
                using (var gzip = CompressedArchiveAccess.Open(fileStream, CompressedArchiveFormat.GZip, CompressedArchiveAccessMode.Create, implementation))
                {
                    var testResourceName = "INTV.TestHelpers.Core.Resources.tagalong.luigi";
                    var newGZipEntryName = "tagalong.luigi";
                    var entry            = gzip.CreateEntry(newGZipEntryName);
                    using (var gzipStream = gzip.Open(entry.Name))
                        using (var sourceStream = typeof(TestRomResources).Assembly.GetManifestResourceStream(testResourceName))
                        {
                            sourceStream.CopyTo(gzipStream);
                            inputLength = sourceStream.Length;
                        }
                }

                // Now, see if we can extract it!
                var extractedRomPath = Path.Combine(Path.GetDirectoryName(gzipFileName), Path.GetFileNameWithoutExtension(gzipFileName));
                using (TemporaryFile.CreateTemporaryFileWithPath(extractedRomPath, createEmptyFile: false))
                {
                    var fileInfo = new FileInfo(gzipFileName);
                    Assert.True(fileInfo.Exists);
                    Assert.True(inputLength > fileInfo.Length); // Compressed we must be! On this, all depends.
                    using (var gzip = CompressedArchiveAccess.Open(gzipFileName, CompressedArchiveAccessMode.Read, implementation))
                    {
                        Assert.True(gzip.Entries.Any());
                        var entry = gzip.Entries.Single();
                        Assert.False(string.IsNullOrEmpty(entry.Name));
                        using (var outputFileStream = new FileStream(extractedRomPath, FileMode.Create, FileAccess.Write))
                            using (var gzipStream = gzip.OpenEntry(entry))
                            {
                                gzipStream.CopyTo(outputFileStream);
                            }
                    }

                    // Verify we have a valid LUIGI and it's got what we expect inside. Trust, but verify!
                    LuigiFileHeader header = null;
                    using (var outputFileStream = new FileStream(extractedRomPath, FileMode.Open, FileAccess.Read))
                    {
                        header = LuigiFileHeader.Inflate(outputFileStream);
                    }

                    Assert.NotNull(header);
                    Assert.Equal(RomFormat.Bin, header.OriginalRomFormat);
                    Assert.Equal(TestRomResources.TestBinCrc, header.OriginalRomCrc32);
                }
            }
        }
Exemplo n.º 2
0
        public void ZipArchiveAccess_DeleteAnEntryFromExistingZipArchive_RemovesEntry(CompressedArchiveAccessImplementation implementation)
        {
            var numberOfEntriesToCreate   = 4;
            var zipTestEntryNameFormat    = "testEntry_{0}";
            var zipTestEntryContentFormat = "Here is some text to write for {0}!";
            var testZipFilePath           = TemporaryFile.GenerateUniqueFilePath("ZipTest", ".zip");
            var zipStream = new FileStream(testZipFilePath, FileMode.Create, FileAccess.ReadWrite); // SharpZipLib requires ReadWrite, .NET works with Write only.

            using (var zipArchive = CompressedArchiveAccess.Open(zipStream, CompressedArchiveFormat.Zip, CompressedArchiveAccessMode.Create, implementation))
            {
                for (var i = 0; i < numberOfEntriesToCreate; ++i)
                {
                    var entryName = string.Format(CultureInfo.CurrentCulture, zipTestEntryNameFormat, i);
                    var entry     = zipArchive.CreateEntry(entryName);
                    using (var zipEntryStream = zipArchive.OpenEntry(entry))
                    {
                        var zipTestEntryContent = string.Format(CultureInfo.CurrentCulture, zipTestEntryContentFormat, entryName);
                        var textToWrite         = Encoding.UTF8.GetBytes(zipTestEntryContent);
                        zipEntryStream.Write(textToWrite, 0, textToWrite.Length);
                    }
                }
            }
            VerifyNumberOfEntries(testZipFilePath, numberOfEntriesToCreate, implementation);

            var numberOfEntriesToDelete = 2;

            using (var zipArchive = CompressedArchiveAccess.Open(testZipFilePath, CompressedArchiveAccessMode.Update, implementation))
            {
                var entriesToDelete = zipArchive.Entries.Take(numberOfEntriesToDelete).Select(e => e.Name).ToList();
                foreach (var entry in entriesToDelete)
                {
                    zipArchive.DeleteEntry(entry);
                }
            }

            using (var tempFile = TemporaryFile.CreateTemporaryFileWithPath(testZipFilePath, createEmptyFile: false))
            {
                VerifyNumberOfEntries(testZipFilePath, numberOfEntriesToCreate - numberOfEntriesToDelete, implementation);
            }
        }
Exemplo n.º 3
0
        public void ZipArchiveAccess_CreateNewZip_SuccessfullyAddDirectoryAndFileEntries(CompressedArchiveAccessImplementation implementation)
        {
            var zipTestEntryName    = @"test\entry";
            var zipTestEntryContent = "Here is some text to write!";
            var testZipFilePath     = TemporaryFile.GenerateUniqueFilePath("ZipTest", ".zip");

            var zipStream = new FileStream(testZipFilePath, FileMode.Create, FileAccess.ReadWrite); // SharpZipLib requires ReadWrite, .NET works with Write only.

            using (var zipArchive = CompressedArchiveAccess.Open(zipStream, CompressedArchiveFormat.Zip, CompressedArchiveAccessMode.Create, implementation))
            {
                var zipDirectoryEntryName = Path.GetDirectoryName(zipTestEntryName) + Path.DirectorySeparatorChar;
                var zipDirectoryEntry     = zipArchive.CreateEntry(zipDirectoryEntryName);
                var zipEntry = zipArchive.CreateEntry(zipTestEntryName);
                using (var zipEntryStream = zipArchive.OpenEntry(zipEntry))
                {
                    var textToWrite = Encoding.UTF8.GetBytes(zipTestEntryContent);
                    zipEntryStream.Write(textToWrite, 0, textToWrite.Length);
                }
            }

            Assert.True(File.Exists(testZipFilePath));
            VerifyTestZipContents(testZipFilePath, zipTestEntryName, zipTestEntryContent, implementation);
        }