public async Task CanPatchFilesSourcedFromBSAs() { var profile = utils.AddProfile(); var mod = await utils.AddMod(); var file = await utils.AddModFile(mod, @"baz.bin", 10); await utils.Configure(); await using var tempFile = new TempFile(); var bsaState = new BSAStateObject { Magic = "BSA\0", Version = 0x69, ArchiveFlags = 0x107, FileFlags = 0x0, }; await using (var bsa = await bsaState.MakeBuilder(1024 * 1024)) { await bsa.AddFile(new BSAFileStateObject { Path = (RelativePath)@"foo\bar\baz.bin", Index = 0, FlipCompression = false }, new MemoryStream(utils.RandomData())); await bsa.Build(tempFile.Path); } var archive = utils.AddManualDownload( new Dictionary <string, byte[]> { { "/stuff/files.bsa", await tempFile.Path.ReadAllBytesAsync() } }); await CompileAndInstall(profile); await utils.VerifyInstalledFile(mod, @"baz.bin"); }
public async Task CanNoMatchIncludeFilesFromBSAs() { var profile = utils.AddProfile(); var mod = await utils.AddMod(); var file = await utils.AddModFile(mod, @"baz.bsa", 10); await file.Parent.Combine("meta.ini").WriteAllLinesAsync(new[] { "[General]", "notes= asdf WABBAJACK_NOMATCH_INCLUDE asdfa" }); await utils.Configure(); await using var tempFile = new TempFile(); var bsaState = new BSAStateObject { Magic = "BSA\0", Version = 0x69, ArchiveFlags = 0x107, FileFlags = 0x0, }; var tempFileData = utils.RandomData(1024); await using (var bsa = await bsaState.MakeBuilder(1024 * 1024)) { await bsa.AddFile(new BSAFileStateObject { Path = (RelativePath)@"matching_file.bin", Index = 0, FlipCompression = false }, new MemoryStream(tempFileData)); await bsa.AddFile( new BSAFileStateObject() { Path = (RelativePath)@"unmatching_file.bin", Index = 1, FlipCompression = false }, new MemoryStream(utils.RandomData(1024))); await bsa.Build(file); } var archive = utils.AddManualDownload( new Dictionary <string, byte[]> { { "/stuff/matching_file_data.bin", tempFileData } }); await CompileAndInstall(profile); await utils.VerifyInstalledFile(mod, @"baz.bsa"); }