Exemple #1
0
        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));
        }
Exemple #2
0
        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));
        }
Exemple #3
0
        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));
        }
Exemple #4
0
        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));
        }
Exemple #5
0
        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));
        }
Exemple #6
0
        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);
        }
Exemple #7
0
        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,
                });
            });
        }
Exemple #8
0
        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);
        }