Exemple #1
0
        public void TestFileStreamRebuildWad()
        {
            WadBuilder wadBuilder = new WadBuilder();

            // Build entries
            foreach (WadEntry entry in this._originalWad.Entries.Values)
            {
                WadEntryBuilder entryBuilder            = new WadEntryBuilder(entry.ChecksumType);
                Stream          entryDecompressedStream = entry.GetDataHandle().GetDecompressedStream();
                string          entryFileName           = "temp/" + entry.XXHash + "." + Utilities.GetExtension(Utilities.GetExtensionType(entryDecompressedStream));

                // Extract entry data to temporary file
                using (FileStream writeEntryFileStream = File.OpenWrite(entryFileName))
                {
                    entry.GetDataHandle().GetDecompressedStream().CopyTo(writeEntryFileStream);
                }

                entryBuilder
                .WithPathXXHash(entry.XXHash)
                .WithFileDataStream(entryFileName);

                wadBuilder.WithEntry(entryBuilder);
            }

            MemoryStream rebuiltWadStream = new MemoryStream();

            Assert.DoesNotThrow(delegate
            {
                wadBuilder.Build(rebuiltWadStream, true);
            }, "Failed to build WAD using files");

            rebuiltWadStream.Seek(0, SeekOrigin.Begin);
            this._fileStreamWad = Wad.Mount(rebuiltWadStream, true);
        }
Exemple #2
0
        public void TestDataStreamRebuildWad()
        {
            WadBuilder wadBuilder = new WadBuilder();

            // Build entries
            foreach (WadEntry entry in this._originalWad.Entries.Values)
            {
                WadEntryBuilder entryBuilder = new WadEntryBuilder(entry.ChecksumType);

                entryBuilder
                .WithPathXXHash(entry.XXHash);

                if (entry.Type == WadEntryType.GZipCompressed)
                {
                    entryBuilder.WithGZipDataStream(entry.GetDataHandle().GetCompressedStream(), entry.CompressedSize, entry.UncompressedSize);
                }
                else if (entry.Type == WadEntryType.ZStandardCompressed)
                {
                    entryBuilder.WithZstdDataStream(entry.GetDataHandle().GetCompressedStream(), entry.CompressedSize, entry.UncompressedSize);
                }
                else if (entry.Type == WadEntryType.Uncompressed)
                {
                    entryBuilder.WithUncompressedDataStream(entry.GetDataHandle().GetDecompressedStream());
                }
                else if (entry.Type == WadEntryType.FileRedirection)
                {
                    entryBuilder.WithFileRedirection(entry.FileRedirection);
                }

                wadBuilder.WithEntry(entryBuilder);
            }

            MemoryStream rebuiltWadStream = new MemoryStream();

            Assert.DoesNotThrow(delegate
            {
                wadBuilder.Build(rebuiltWadStream, true);
            }, "Failed to build WAD using data streams");

            rebuiltWadStream.Seek(0, SeekOrigin.Begin);
            this._dataStreamWad = Wad.Mount(rebuiltWadStream, true);
        }