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); }
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); }