public void MasterOrderSync_ByLoadOrder() { WarmupOblivion.Init(); using var folder = TestPathing.GetTempFolder(nameof(MasterSync_Tests)); var obliv = ModKey.FromNameAndExtension("Oblivion.esm"); var esm = ModKey.FromNameAndExtension("First.esm"); var esp = ModKey.FromNameAndExtension("Second.esp"); var mod = new OblivionMod(obliv); var espNpc = new Npc(new FormKey(esp, 0x123456)); mod.Npcs.RecordCache.Set(espNpc); var esmNpc = new Npc(new FormKey(esm, 0x123456)); mod.Npcs.RecordCache.Set(esmNpc); var modPath = Path.Combine(folder.Dir.Path, obliv.ToString()); var loadOrder = new ModKey[] { esm, esp, }; mod.WriteToBinary(modPath, new BinaryWriteParameters() { ModKey = ModKeyOption.NoCheck, MastersListContent = MastersListContentOption.Iterate, MastersListOrdering = new MastersListOrderingByLoadOrder(loadOrder) }); using var reimport = OblivionMod.CreateFromBinaryOverlay(modPath); Assert.Equal( loadOrder, reimport.ModHeader.MasterReferences.Select(m => m.Master)); }
public void MasterListSync_AddMissingToEmpty() { WarmupOblivion.Init(); using var folder = TestPathing.GetTempFolder(nameof(MasterSync_Tests)); var obliv = ModKey.FromNameAndExtension("Oblivion.esm"); var knights = ModKey.FromNameAndExtension("Knights.esm"); var other = ModKey.FromNameAndExtension("Other.esp"); var mod = new OblivionMod(obliv); var otherNpc = new Npc(new FormKey(other, 0x123456)); mod.Potions.RecordCache.Set(new Potion(new FormKey(obliv, 0x123456))); mod.Npcs.RecordCache.Set(otherNpc); otherNpc.Race.FormKey = new FormKey(knights, 0x123456); var modPath = Path.Combine(folder.Dir.Path, obliv.ToString()); mod.WriteToBinary(modPath, new BinaryWriteParameters() { ModKey = ModKeyOption.NoCheck, MastersListContent = MastersListContentOption.Iterate, }); using var reimport = OblivionMod.CreateFromBinaryOverlay(modPath); Assert.Equal(2, reimport.MasterReferences.Count); Assert.Contains(knights, reimport.MasterReferences.Select(m => m.Master)); Assert.Contains(other, reimport.MasterReferences.Select(m => m.Master)); }
public void MasterFlagSync_Correct() { WarmupOblivion.Init(); using var folder = TestPathing.GetTempFolder(nameof(MasterSync_Tests)); var masterMod = new OblivionMod(new ModKey("Test", ModType.Master)); var masterPath = Path.Combine(folder.Dir.Path, "Test.esm"); masterMod.WriteToBinary(masterPath, new BinaryWriteParameters() { ModKey = ModKeyOption.ThrowIfMisaligned, MastersListContent = MastersListContentOption.NoCheck, }); using var reimport = OblivionMod.CreateFromBinaryOverlay(masterPath); Assert.True(reimport.ModHeader.Flags.HasFlag(OblivionModHeader.HeaderFlag.Master)); var childMod = new OblivionMod(new ModKey("Test", ModType.Plugin)); var childPath = Path.Combine(folder.Dir.Path, "Test.esp"); childMod.WriteToBinary(childPath, new BinaryWriteParameters() { ModKey = ModKeyOption.ThrowIfMisaligned, MastersListContent = MastersListContentOption.NoCheck, }); using var reimport2 = OblivionMod.CreateFromBinaryOverlay(childPath); Assert.False(reimport2.ModHeader.Flags.HasFlag(OblivionModHeader.HeaderFlag.Master)); }
public void MasterOrderSync_EsmFirst() { WarmupOblivion.Init(); using var folder = Utility.GetTempFolder(nameof(MasterSync_Tests)); var obliv = ModKey.FromNameAndExtension("Oblivion.esm"); var first = ModKey.FromNameAndExtension("First.esp"); var second = ModKey.FromNameAndExtension("Second.esp"); var mod = new OblivionMod(obliv); var secondNpc = new Npc(new FormKey(second, 0x123456)); mod.Npcs.RecordCache.Set(secondNpc); var firstNpc = new Npc(new FormKey(first, 0x123456)); mod.Npcs.RecordCache.Set(firstNpc); var modPath = Path.Combine(folder.Dir.Path, obliv.ToString()); mod.WriteToBinary(modPath, new BinaryWriteParameters() { ModKey = BinaryWriteParameters.ModKeyOption.NoCheck, MastersListContent = BinaryWriteParameters.MastersListContentOption.Iterate, MastersListOrdering = BinaryWriteParameters.MastersListOrderingOption.MastersFirst, }); using var reimport = OblivionMod.CreateFromBinaryOverlay(modPath); Assert.Equal( new ModKey[] { first, second, }, reimport.ModHeader.MasterReferences.Select(m => m.Master)); }
public void MasterOrderSync_Typical() { WarmupOblivion.Init(); using var folder = Utility.GetTempFolder(nameof(MasterSync_Tests)); var obliv = ModKey.FromNameAndExtension("Oblivion.esm"); var knights = ModKey.FromNameAndExtension("Knights.esm"); var other = ModKey.FromNameAndExtension("Other.esp"); var mod = new OblivionMod(obliv); var knightsNpc = new Npc(new FormKey(knights, 0x123456)); mod.Npcs.RecordCache.Set(knightsNpc); var otherNpc = new Npc(new FormKey(other, 0x123456)); mod.Npcs.RecordCache.Set(otherNpc); var modPath = Path.Combine(folder.Dir.Path, obliv.ToString()); mod.WriteToBinary(modPath, new BinaryWriteParameters() { ModKey = BinaryWriteParameters.ModKeyOption.NoCheck, MastersListContent = BinaryWriteParameters.MastersListContentOption.Iterate, }); using var reimport = OblivionMod.CreateFromBinaryOverlay(modPath); Assert.Equal( new ModKey[] { knights, other, }, reimport.ModHeader.MasterReferences.Select(m => m.Master)); }
public void Direct() { WarmupOblivion.Init(); var form = new FormKey(Mutagen.Bethesda.Oblivion.Constants.Oblivion, 0x123456); var ret = MajorRecordInstantiator <Oblivion.Ammunition> .Activator(form, GameRelease.Oblivion); Assert.IsType <Oblivion.Ammunition>(ret); Assert.Equal(form, ret.FormKey); }
public void MasterFlagSync_ChildThrow() { WarmupOblivion.Init(); using var folder = TestPathing.GetTempFolder(nameof(MasterSync_Tests)); var masterMod = new OblivionMod(new ModKey("Test", ModType.Plugin)); var masterPath = Path.Combine(folder.Dir.Path, "Test.esm"); Assert.Throws <ArgumentException>(() => { masterMod.WriteToBinary(masterPath, new BinaryWriteParameters() { ModKey = ModKeyOption.ThrowIfMisaligned, MastersListContent = MastersListContentOption.NoCheck, }); }); }
public void MasterListSync_SkipNulls() { WarmupOblivion.Init(); using var folder = TestPathing.GetTempFolder(nameof(MasterSync_Tests)); var obliv = ModKey.FromNameAndExtension("Oblivion.esm"); var mod = new OblivionMod(obliv); var npc = mod.Npcs.AddNew(); npc.Race.Clear(); var modPath = Path.Combine(folder.Dir.Path, obliv.ToString()); mod.WriteToBinary(modPath, new BinaryWriteParameters() { ModKey = ModKeyOption.NoCheck, MastersListContent = MastersListContentOption.Iterate, }); using var reimport = OblivionMod.CreateFromBinaryOverlay(modPath); Assert.Empty(reimport.ModHeader.MasterReferences); }