public void FormLink_Direct_Resolve_MarkerInterface_DeepRecord_Linked(LinkCacheTestTypes cacheType) { var mod = new SkyrimMod(TestConstants.PluginModKey, SkyrimRelease.SkyrimLE); var worldspace = mod.Worldspaces.AddNew(); var subBlock = new WorldspaceSubBlock(); var cell = new Cell(mod.GetNextFormKey(), SkyrimRelease.SkyrimLE); subBlock.Items.Add(cell); var placedNpc = new PlacedNpc(mod.GetNextFormKey(), SkyrimRelease.SkyrimLE); cell.Temporary.Add(placedNpc); var block = new WorldspaceBlock(); block.Items.Add(subBlock); worldspace.SubCells.Add(block); var(style, package) = GetLinkCache(mod, cacheType); var placedFormLink = new FormLink <IPlacedGetter>(placedNpc.FormKey); WrapPotentialThrow(cacheType, style, () => { Assert.Same(placedNpc, placedFormLink.TryResolve(package)); }); var cellFormLink = new FormLink <ICellGetter>(cell.FormKey); WrapPotentialThrow(cacheType, style, () => { Assert.Same(cell, cellFormLink.TryResolve(package)); }); var worldspaceFormLink = new FormLink <IWorldspaceGetter>(worldspace.FormKey); WrapPotentialThrow(cacheType, style, () => { Assert.Same(worldspace, worldspaceFormLink.TryResolve(package)); }); }
public void FormLink_Direct_ResolveAll_Typed_Empty(LinkCacheTestTypes cacheType) { var formLink = new FormLink <IPlacedGetter>(UnusedFormKey); var(style, package) = GetLinkCache(new SkyrimMod(TestConstants.PluginModKey, SkyrimRelease.SkyrimLE), cacheType); formLink.ResolveAll <IPlacedGetter, IPlacedNpcGetter>(package).Should().BeEmpty(); }
public void LoadOrderOriginatingTarget(LinkCacheTestTypes cacheType) { var prototype1 = new SkyrimMod(TestConstants.PluginModKey, SkyrimRelease.SkyrimLE); var prototype2 = new SkyrimMod(new ModKey("Dummy2", ModType.Master), SkyrimRelease.SkyrimLE); var overriddenRec = prototype1.ObjectEffects.AddNew("EditorID1"); var overrideRec = overriddenRec.DeepCopy(); overrideRec.EditorID = "EditorID1"; prototype2.ObjectEffects.RecordCache.Set(overrideRec); using var disp1 = ConvertMod(prototype1, out var mod1); using var disp2 = ConvertMod(prototype2, out var mod2); var loadOrder = new LoadOrder <ISkyrimModGetter> { mod1, mod2 }; var(style, package) = GetLinkCache(loadOrder, cacheType); // Test query successes // Do linked interfaces first, as this tests a specific edge case WrapPotentialThrow(cacheType, style, () => { Assert.True(package.TryResolve <IEffectRecordGetter>(overriddenRec.FormKey, out var rec, ResolveTarget.Origin)); rec.EditorID.Should().Be(overriddenRec.EditorID); });
public void FormLink_Direct_TryResolve_DeepRecord_NoLink(LinkCacheTestTypes cacheType) { var formLink = new FormLink <IPlacedNpcGetter>(UnusedFormKey); var(style, package) = GetLinkCache(new SkyrimMod(TestConstants.PluginModKey, SkyrimRelease.SkyrimLE), cacheType); Assert.False(formLink.TryResolve(package, out var _)); }
public void FormLink_LoadOrder_ResolveAll_DoubleQuery(LinkCacheTestTypes cacheType) { var mod = new SkyrimMod(TestConstants.PluginModKey, SkyrimRelease.SkyrimLE); var npc = mod.Npcs.AddNew(); var mod2 = new SkyrimMod(TestConstants.PluginModKey3, SkyrimRelease.SkyrimLE); var npcOverride = mod2.Npcs.GetOrAddAsOverride(npc); npcOverride.FaceParts = new NpcFaceParts(); var loadOrder = new LoadOrder <ISkyrimModGetter>() { mod, new SkyrimMod(TestConstants.PluginModKey2, SkyrimRelease.SkyrimLE), mod2 }; var(style, package) = GetLinkCache(loadOrder, cacheType); var formLink = new FormLink <INpcGetter>(npc.FormKey); WrapPotentialThrow(cacheType, style, () => { var resolved = formLink.ResolveAll(package).ToArray(); resolved.Should().HaveCount(2); resolved.First().Should().BeSameAs(npcOverride); resolved.Last().Should().BeSameAs(npc); }); }
public void Warmup_Caches(LinkCacheTestTypes cacheType) { var prototype = new SkyrimMod(TestConstants.PluginModKey, SkyrimRelease.SkyrimLE); var armor = prototype.Armors.AddNew(); var llist = prototype.LeveledItems.AddNew(); llist.Entries = new ExtendedList <LeveledItemEntry>() { new LeveledItemEntry() { Data = new LeveledItemEntryData() { Reference = armor.AsLink() } } }; using var disp = ConvertMod(prototype, out var mod); var(style, package) = GetLinkCache(mod, cacheType); package.Warmup <IArmorGetter>(); prototype.Armors.Clear(); prototype.LeveledItems.Clear(); package.TryResolveIdentifier <IArmorGetter>(armor.FormKey, out _) .Should().Be(style == LinkCacheStyle.HasCaching || ReadOnly); package.TryResolveIdentifier <ILeveledItemGetter>(llist.FormKey, out _) .Should().Be(ReadOnly); }
public void DirectReadOnlyMechanics(LinkCacheTestTypes cacheType) { var wrapper = SkyrimMod.CreateFromBinaryOverlay(TestDataPathing.SkyrimTestMod, SkyrimRelease.SkyrimSE); var(style, package) = GetLinkCache(wrapper, cacheType); WrapPotentialThrow(cacheType, style, () => { Assert.True(package.TryResolve <INpcGetter>(TestFileFormKey, out var rec)); }); WrapPotentialThrow(cacheType, style, () => { Assert.True(package.TryResolve <INpcGetter>(TestFileEditorID, out var rec)); }); WrapPotentialThrow(cacheType, style, () => { Assert.False(package.TryResolve <INpc>(TestFileFormKey, out var rec)); }); WrapPotentialThrow(cacheType, style, () => { Assert.False(package.TryResolve <INpc>(TestFileEditorID, out var rec)); }); WrapPotentialThrow(cacheType, style, () => { Assert.False(package.TryResolve <Npc>(TestFileFormKey, out var rec)); }); WrapPotentialThrow(cacheType, style, () => { Assert.False(package.TryResolve <Npc>(TestFileEditorID, out var rec)); }); }
public void FormLink_Direct_Resolve_NoLink(LinkCacheTestTypes cacheType) { var formLink = new FormLink <INpcGetter>(UnusedFormKey); var(style, package) = GetLinkCache(new SkyrimMod(TestConstants.PluginModKey, SkyrimRelease.SkyrimLE), cacheType); Assert.Null(formLink.TryResolve(package)); }
public void LoadOrderNoMatch(LinkCacheTestTypes cacheType) { var prototype = new SkyrimMod(TestConstants.PluginModKey, SkyrimRelease.SkyrimLE); prototype.Npcs.AddNew(); using var disp = ConvertMod(prototype, out var mod); var loadOrder = new LoadOrder <ISkyrimModGetter>(); loadOrder.Add(mod); var(style, package) = GetLinkCache(loadOrder, cacheType); // Test FormKey fails Assert.False(package.TryResolve(UnusedFormKey, out var _)); Assert.False(package.TryResolve(FormKey.Null, out var _)); Assert.False(package.TryResolve <IMajorRecordGetter>(UnusedFormKey, out var _)); Assert.False(package.TryResolve <IMajorRecordGetter>(FormKey.Null, out var _)); Assert.False(package.TryResolve <ISkyrimMajorRecordGetter>(UnusedFormKey, out var _)); Assert.False(package.TryResolve <ISkyrimMajorRecordGetter>(FormKey.Null, out var _)); // Test EditorID fails Assert.False(package.TryResolve(UnusedEditorID, out var _)); Assert.False(package.TryResolve(string.Empty, out var _)); Assert.False(package.TryResolve <IMajorRecordGetter>(UnusedEditorID, out var _)); Assert.False(package.TryResolve <IMajorRecordGetter>(string.Empty, out var _)); Assert.False(package.TryResolve <ISkyrimMajorRecordGetter>(UnusedEditorID, out var _)); Assert.False(package.TryResolve <ISkyrimMajorRecordGetter>(string.Empty, out var _)); }
public void FormLink_LoadOrder_ResolveAllContexts_DoubleQuery(LinkCacheTestTypes cacheType, AContextRetriever contextRetriever) { var mod = new SkyrimMod(TestConstants.PluginModKey, SkyrimRelease.SkyrimLE); var npc = mod.Npcs.AddNew(); var mod2 = new SkyrimMod(TestConstants.PluginModKey3, SkyrimRelease.SkyrimLE); var npcOverride = mod2.Npcs.GetOrAddAsOverride(npc); npcOverride.FaceParts = new NpcFaceParts(); var loadOrder = new LoadOrder <ISkyrimModGetter>() { mod, new SkyrimMod(TestConstants.PluginModKey2, SkyrimRelease.SkyrimLE), mod2 }; var(style, package) = GetLinkCache(loadOrder, cacheType); var formLink = new FormLink <INpcGetter>(npc.FormKey); var resolved = contextRetriever.ResolveAllContexts <INpc, INpcGetter>(formLink, package).ToArray(); resolved = contextRetriever.ResolveAllContexts <INpc, INpcGetter>(formLink, package).ToArray(); resolved.Should().HaveCount(2); resolved.First().Record.Should().BeSameAs(npcOverride); resolved.First().ModKey.Should().Be(TestConstants.PluginModKey3); resolved.First().Parent.Should().BeNull(); resolved.Last().Record.Should().BeSameAs(npc); resolved.Last().ModKey.Should().Be(TestConstants.PluginModKey); resolved.Last().Parent.Should().BeNull(); }
public void FormLink_Direct_TryResolveContext_DeepRecord_NoLink(LinkCacheTestTypes cacheType, AContextRetriever contextRetriever) { var formLink = new FormLink <IPlacedNpcGetter>(UnusedFormKey); var(style, package) = GetLinkCache(new SkyrimMod(TestConstants.PluginModKey, SkyrimRelease.SkyrimLE), cacheType); WrapPotentialThrow(cacheType, style, () => { Assert.False(contextRetriever.TryResolveContext <IPlacedNpc, IPlacedNpcGetter>(formLink, package, out var _)); }); }
public void FormLink_Direct_ResolveAllContexts_Typed_Empty(LinkCacheTestTypes cacheType, AContextRetriever contextRetriever) { var formLink = new FormLink <IPlacedGetter>(UnusedFormKey); var(style, package) = GetLinkCache(new SkyrimMod(TestConstants.PluginModKey, SkyrimRelease.SkyrimLE), cacheType); WrapPotentialThrow(cacheType, style, () => { contextRetriever.ResolveAllContexts <IPlacedGetter, IPlacedNpc, IPlacedNpcGetter>(formLink, package).Should().BeEmpty(); }); }
public void FormLink_Direct_ResolveContext_MarkerInterface_DeepRecord_NoLink(LinkCacheTestTypes cacheType, AContextRetriever contextRetriever) { var formLink = new FormLink <IPlacedGetter>(UnusedFormKey); var(style, package) = GetLinkCache(new SkyrimMod(TestConstants.PluginModKey, SkyrimRelease.SkyrimLE), cacheType); WrapPotentialThrow(cacheType, style, () => { var resolved = contextRetriever.ResolveContext <IPlaced, IPlacedGetter>(formLink, package); Assert.Null(resolved); }); }
public void EDIDLink_Resolve_Linked(LinkCacheTestTypes cacheType) { var mod = new SkyrimMod(TestConstants.PluginModKey, SkyrimRelease.SkyrimLE); var effect = mod.MagicEffects.AddNew(); effect.EditorID = "LINK"; var(style, package) = GetLinkCache(mod, cacheType); EDIDLink <IMagicEffect> link = new EDIDLink <IMagicEffect>(new RecordType("LINK")); Assert.Same(effect, link.TryResolve(package)); }
public void FormLink_Direct_Resolve_MarkerInterface(LinkCacheTestTypes cacheType) { var mod = new SkyrimMod(TestConstants.PluginModKey, SkyrimRelease.SkyrimLE); var spell = mod.Spells.AddNew(); var(style, package) = GetLinkCache(mod, cacheType); var formLink = new FormLink <IEffectRecordGetter>(spell.FormKey); WrapPotentialThrow(cacheType, style, () => { Assert.Same(spell, formLink.TryResolve(package)); }); }
public void FormLink_Direct_Resolve_Linked(LinkCacheTestTypes cacheType) { var mod = new SkyrimMod(TestConstants.PluginModKey, SkyrimRelease.SkyrimLE); var npc = mod.Npcs.AddNew(); var(style, package) = GetLinkCache(mod, cacheType); FormLink <INpc> formLink = new FormLink <INpc>(npc.FormKey); WrapPotentialThrow(cacheType, style, () => { Assert.Same(npc, formLink.TryResolve(package)); }); }
public void FormLink_Direct_ResolveAll_Linked(LinkCacheTestTypes cacheType) { var mod = new SkyrimMod(TestConstants.PluginModKey, SkyrimRelease.SkyrimLE); var npc = mod.Npcs.AddNew(); var(style, package) = GetLinkCache(mod, cacheType); FormLink <INpc> formLink = new FormLink <INpc>(npc.FormKey); WrapPotentialThrow(cacheType, style, () => { var resolved = formLink.ResolveAll(package).ToArray(); resolved.Should().HaveCount(1); resolved.First().Should().BeSameAs(npc); }); }
public void FormLink_Direct_TryResolveContext_Linked(LinkCacheTestTypes cacheType, AContextRetriever contextRetriever) { var mod = new SkyrimMod(TestConstants.PluginModKey, SkyrimRelease.SkyrimLE); var npc = mod.Npcs.AddNew(); var(style, package) = GetLinkCache(mod, cacheType); var formLink = new FormLink <INpcGetter>(npc.FormKey); WrapPotentialThrow(cacheType, style, () => { Assert.True(contextRetriever.TryResolveContext <INpc, INpcGetter>(formLink, package, out var linkedRec)); linkedRec.Record.Should().BeSameAs(npc); linkedRec.ModKey.Should().Be(TestConstants.PluginModKey); linkedRec.Parent.Should().BeNull(); }); }
public void FormLink_Direct_ResolveContext_MarkerInterface(LinkCacheTestTypes cacheType, AContextRetriever contextRetriever) { var mod = new SkyrimMod(TestConstants.PluginModKey, SkyrimRelease.SkyrimLE); var spell = mod.Spells.AddNew(); var(style, package) = GetLinkCache(mod, cacheType); var formLink = new FormLink <IEffectRecordGetter>(spell.FormKey); WrapPotentialThrow(cacheType, style, () => { var resolved = contextRetriever.ResolveContext <IEffectRecord, IEffectRecordGetter>(formLink, package); resolved.Record.Should().BeSameAs(spell); resolved.ModKey.Should().Be(TestConstants.PluginModKey); resolved.Parent.Should().BeNull(); }); }
public void FormLink_Direct_ResolveAllContexts_Linked(LinkCacheTestTypes cacheType, AContextRetriever contextRetriever) { var mod = new SkyrimMod(TestConstants.PluginModKey, SkyrimRelease.SkyrimLE); var npc = mod.Npcs.AddNew(); var(style, package) = GetLinkCache(mod, cacheType); var formLink = new FormLink <INpcGetter>(npc.FormKey); WrapPotentialThrow(cacheType, style, () => { var resolved = contextRetriever.ResolveAllContexts <INpc, INpcGetter>(formLink, package).ToArray(); resolved.Should().HaveCount(1); resolved.First().Record.Should().BeSameAs(npc); resolved.First().ModKey.Should().Be(TestConstants.PluginModKey); resolved.First().Parent.Should().BeNull(); }); }
public void PlacedInWorldspaceQuerySucceedsIfMajorRecordType(LinkCacheTestTypes cacheType, AContextRetriever contextRetriever) { var prototype = new SkyrimMod(TestConstants.PluginModKey, SkyrimRelease.SkyrimSE); var placed = new PlacedObject(prototype); prototype.Worldspaces.Add(new Worldspace(prototype) { SubCells = new ExtendedList <WorldspaceBlock>() { new WorldspaceBlock() { Items = new ExtendedList <WorldspaceSubBlock>() { new WorldspaceSubBlock() { Items = new ExtendedList <Cell>() { new Cell(prototype) { Temporary = new ExtendedList <IPlaced>() { placed } } } } } } } }); using var disp = ConvertMod(prototype, out var mod); var(style, package) = GetLinkCache(mod, cacheType); WrapPotentialThrow(cacheType, style, () => { package.TryResolve <ISkyrimMajorRecordGetter>(placed.FormKey, out var rec2) .Should().BeTrue(); rec2.Should().Be(placed); }); WrapPotentialThrow(cacheType, style, () => { contextRetriever.TryResolveContext <ISkyrimMajorRecord, ISkyrimMajorRecordGetter>(placed.AsLink(), package, out var rec) .Should().BeTrue(); rec.Record.Should().Be(placed); }); }
public void FormLink_LoadOrder_TryResolve_DeepRecord_Linked(LinkCacheTestTypes cacheType) { var mod = new SkyrimMod(TestConstants.PluginModKey, SkyrimRelease.SkyrimLE); var worldspace = mod.Worldspaces.AddNew(); var subBlock = new WorldspaceSubBlock(); var cell = new Cell(mod.GetNextFormKey(), SkyrimRelease.SkyrimLE); subBlock.Items.Add(cell); var placedNpc = new PlacedNpc(mod.GetNextFormKey(), SkyrimRelease.SkyrimLE); cell.Temporary.Add(placedNpc); var block = new WorldspaceBlock(); block.Items.Add(subBlock); worldspace.SubCells.Add(block); var loadOrder = new LoadOrder <ISkyrimModGetter>() { mod, new SkyrimMod(TestConstants.PluginModKey2, SkyrimRelease.SkyrimLE), }; var(style, package) = GetLinkCache(loadOrder, cacheType); FormLink <IPlacedNpc> placedFormLink = new FormLink <IPlacedNpc>(placedNpc.FormKey); WrapPotentialThrow(cacheType, style, () => { Assert.True(placedFormLink.TryResolve(package, out var linkedPlacedNpc)); Assert.Same(placedNpc, linkedPlacedNpc); }); FormLink <ICell> cellFormLink = new FormLink <ICell>(cell.FormKey); WrapPotentialThrow(cacheType, style, () => { Assert.True(cellFormLink.TryResolve(package, out var linkedCell)); Assert.Same(cell, linkedCell); }); FormLink <IWorldspace> worldspaceFormLink = new FormLink <IWorldspace>(worldspace.FormKey); WrapPotentialThrow(cacheType, style, () => { Assert.True(worldspaceFormLink.TryResolve(package, out var linkedWorldspace)); Assert.Same(worldspace, linkedWorldspace); }); }
public void FormLink_LoadOrder_TryResolve_Linked(LinkCacheTestTypes cacheType) { var mod = new SkyrimMod(TestConstants.PluginModKey, SkyrimRelease.SkyrimLE); var npc = mod.Npcs.AddNew(); var loadOrder = new LoadOrder <ISkyrimModGetter>() { mod, new SkyrimMod(TestConstants.PluginModKey2, SkyrimRelease.SkyrimLE), }; var(style, package) = GetLinkCache(loadOrder, cacheType); FormLink <INpc> formLink = new FormLink <INpc>(npc.FormKey); WrapPotentialThrow(cacheType, style, () => { Assert.True(formLink.TryResolve(package, out var linkedRec)); Assert.Same(npc, linkedRec); }); }
public void PlacedInWorldspaceOnlyOverridesPlaced(LinkCacheTestTypes cacheType) { var prototype = new SkyrimMod(TestConstants.PluginModKey, SkyrimRelease.SkyrimSE); var placed = new PlacedObject(prototype); var outgoing = new SkyrimMod(TestConstants.PluginModKey4, SkyrimRelease.SkyrimSE); prototype.Worldspaces.Add(new Worldspace(prototype) { SubCells = new ExtendedList <WorldspaceBlock>() { new WorldspaceBlock() { Items = new ExtendedList <WorldspaceSubBlock>() { new WorldspaceSubBlock() { Items = new ExtendedList <Cell>() { new Cell(prototype) { Landscape = new Landscape(prototype), Temporary = new ExtendedList <IPlaced>() { placed } } } } } } } }); using var disp = ConvertMod(prototype, out var mod); var(style, package) = GetLinkCache(mod, cacheType); WrapPotentialThrow(cacheType, style, () => { package.TryResolveContext <ISkyrimMajorRecord, ISkyrimMajorRecordGetter>(placed.FormKey, out var rec) .Should().BeTrue(); rec.Record.Should().Be(placed); rec.GetOrAddAsOverride(outgoing); outgoing.Worldspaces.First().SubCells.First().Items.First().Items.First().Landscape.Should().BeNull(); }); }
public void FormLink_LoadOrder_TryResolve_MarkerInterface(LinkCacheTestTypes cacheType) { var mod = new SkyrimMod(TestConstants.PluginModKey, SkyrimRelease.SkyrimLE); var spell = mod.Spells.AddNew(); var loadOrder = new LoadOrder <ISkyrimModGetter>() { mod, new SkyrimMod(TestConstants.PluginModKey2, SkyrimRelease.SkyrimLE), }; var(style, package) = GetLinkCache(loadOrder, cacheType); FormLink <IEffectRecord> formLink = new FormLink <IEffectRecord>(spell.FormKey); WrapPotentialThrow(cacheType, style, () => { Assert.True(formLink.TryResolve(package, out var linkedRec)); Assert.Same(spell, linkedRec); }); }
public void ResolveLinkIdentifiers(LinkCacheTestTypes cacheType) { var prototype = new SkyrimMod(TestConstants.PluginModKey, SkyrimRelease.SkyrimLE); var armor = prototype.Armors.AddNew(); var llist = prototype.LeveledItems.AddNew(); llist.Entries = new ExtendedList <LeveledItemEntry>() { new LeveledItemEntry() { Data = new LeveledItemEntryData() { Reference = armor.AsLink() } } }; using var disp = ConvertMod(prototype, out var mod); var(style, package) = GetLinkCache(mod, cacheType); Assert.True(package.TryResolveIdentifier(mod.LeveledItems.First().Entries[0].Data.Reference.FormKey, out _)); }
public void DirectEmpty(LinkCacheTestTypes cacheType) { using var disp = ConvertMod(new SkyrimMod(TestConstants.PluginModKey, SkyrimRelease.SkyrimLE), out var mod); var(style, package) = GetLinkCache(mod, cacheType); // Test FormKey fails Assert.False(package.TryResolve(UnusedFormKey, out var _)); Assert.False(package.TryResolve(FormKey.Null, out var _)); Assert.False(package.TryResolve <IMajorRecordGetter>(UnusedFormKey, out var _)); Assert.False(package.TryResolve <IMajorRecordGetter>(FormKey.Null, out var _)); Assert.False(package.TryResolve <ISkyrimMajorRecordGetter>(UnusedFormKey, out var _)); Assert.False(package.TryResolve <ISkyrimMajorRecordGetter>(FormKey.Null, out var _)); Assert.False(package.TryResolve <IObjectEffectGetter>(UnusedFormKey, out var _)); Assert.False(package.TryResolve <IObjectEffectGetter>(FormKey.Null, out var _)); Assert.False(package.TryResolve <IObjectEffect>(UnusedFormKey, out var _)); Assert.False(package.TryResolve <IObjectEffect>(FormKey.Null, out var _)); Assert.False(package.TryResolve <ObjectEffect>(UnusedFormKey, out var _)); Assert.False(package.TryResolve <ObjectEffect>(FormKey.Null, out var _)); Assert.False(package.TryResolve <IEffectRecord>(UnusedFormKey, out var _)); Assert.False(package.TryResolve <IEffectRecord>(FormKey.Null, out var _)); Assert.False(package.TryResolve <IEffectRecordGetter>(UnusedFormKey, out var _)); Assert.False(package.TryResolve <IEffectRecordGetter>(FormKey.Null, out var _)); // Test EditorID fails Assert.False(package.TryResolve(UnusedEditorID, out var _)); Assert.False(package.TryResolve(string.Empty, out var _)); Assert.False(package.TryResolve <IMajorRecordGetter>(UnusedEditorID, out var _)); Assert.False(package.TryResolve <IMajorRecordGetter>(string.Empty, out var _)); Assert.False(package.TryResolve <ISkyrimMajorRecordGetter>(UnusedEditorID, out var _)); Assert.False(package.TryResolve <ISkyrimMajorRecordGetter>(string.Empty, out var _)); Assert.False(package.TryResolve <IObjectEffectGetter>(UnusedEditorID, out var _)); Assert.False(package.TryResolve <IObjectEffectGetter>(string.Empty, out var _)); Assert.False(package.TryResolve <IObjectEffect>(UnusedEditorID, out var _)); Assert.False(package.TryResolve <IObjectEffect>(string.Empty, out var _)); Assert.False(package.TryResolve <ObjectEffect>(UnusedEditorID, out var _)); Assert.False(package.TryResolve <ObjectEffect>(string.Empty, out var _)); Assert.False(package.TryResolve <IEffectRecord>(UnusedEditorID, out var _)); Assert.False(package.TryResolve <IEffectRecord>(string.Empty, out var _)); Assert.False(package.TryResolve <IEffectRecordGetter>(UnusedEditorID, out var _)); Assert.False(package.TryResolve <IEffectRecordGetter>(string.Empty, out var _)); }
public void SubtypeLinking_Typical(LinkCacheTestTypes cacheType) { var prototype = new SkyrimMod(TestConstants.PluginModKey, SkyrimRelease.SkyrimLE); var armor = prototype.Armors.AddNew(); var llist = prototype.LeveledItems.AddNew(); llist.Entries = new ExtendedList <LeveledItemEntry>() { new LeveledItemEntry() { Data = new LeveledItemEntryData() { Reference = armor.AsLink() } } }; using var disp = ConvertMod(prototype, out var mod); var(style, package) = GetLinkCache(mod, cacheType); WrapPotentialThrow(cacheType, style, () => { Assert.True(mod.LeveledItems.First().Entries[0].Data.Reference.TryResolve(package, out IArmorGetter armorGetterLink)); }); }
public void FormLink_Direct_TryResolveContext_DeepRecord_Linked(LinkCacheTestTypes cacheType, AContextRetriever contextRetriever) { var mod = new SkyrimMod(TestConstants.PluginModKey, SkyrimRelease.SkyrimLE); var worldspace = mod.Worldspaces.AddNew(); var subBlock = new WorldspaceSubBlock(); var cell = new Cell(mod.GetNextFormKey(), SkyrimRelease.SkyrimLE); subBlock.Items.Add(cell); var placedNpc = new PlacedNpc(mod.GetNextFormKey(), SkyrimRelease.SkyrimLE); cell.Temporary.Add(placedNpc); var block = new WorldspaceBlock(); block.Items.Add(subBlock); worldspace.SubCells.Add(block); var(style, package) = GetLinkCache(mod, cacheType); var placedFormLink = new FormLink <IPlacedNpcGetter>(placedNpc.FormKey); WrapPotentialThrow(cacheType, style, () => { Assert.True(contextRetriever.TryResolveContext <IPlacedNpc, IPlacedNpcGetter>(placedFormLink, package, out var linkedPlacedNpc)); linkedPlacedNpc.Record.Should().BeSameAs(placedNpc); linkedPlacedNpc.ModKey.Should().Be(TestConstants.PluginModKey); linkedPlacedNpc.Parent.Record.Should().Be(cell); var cellFormLink = new FormLink <ICellGetter>(cell.FormKey); Assert.True(contextRetriever.TryResolveContext <ICell, ICellGetter>(cellFormLink, package, out var linkedCell)); linkedCell.Record.Should().BeSameAs(cell); linkedCell.ModKey.Should().Be(TestConstants.PluginModKey); linkedCell.Parent.Record.Should().Be(subBlock); var worldspaceFormLink = new FormLink <IWorldspaceGetter>(worldspace.FormKey); Assert.True(contextRetriever.TryResolveContext <IWorldspace, IWorldspaceGetter>(worldspaceFormLink, package, out var linkedWorldspace)); linkedWorldspace.Record.Should().BeSameAs(worldspace); linkedWorldspace.ModKey.Should().Be(TestConstants.PluginModKey); linkedWorldspace.Parent.Should().BeNull(); }); }
public void DirectTypical(LinkCacheTestTypes cacheType) { var prototype = new SkyrimMod(TestConstants.PluginModKey, SkyrimRelease.SkyrimLE); var objEffect1 = prototype.ObjectEffects.AddNew("EDID1"); var objEffect2 = prototype.ObjectEffects.AddNew("EDID2"); using var disp = ConvertMod(prototype, out var mod); var(style, package) = GetLinkCache(mod, cacheType); // Do linked interfaces first, as this tests a specific edge case WrapPotentialThrow(cacheType, style, () => { Assert.True(package.TryResolve <IEffectRecordGetter>(objEffect1.FormKey, out var rec)); Assert.Equal(rec.FormKey, objEffect1.FormKey); }); WrapPotentialThrow(cacheType, style, () => { Assert.True(package.TryResolve <IEffectRecordGetter>(objEffect1.EditorID, out var rec)); Assert.Equal(rec.FormKey, objEffect1.FormKey); }); WrapPotentialThrow(cacheType, style, () => { Assert.True(package.TryResolve <IEffectRecordGetter>(objEffect2.FormKey, out var rec)); Assert.Equal(rec.FormKey, objEffect2.FormKey); }); WrapPotentialThrow(cacheType, style, () => { Assert.True(package.TryResolve <IEffectRecordGetter>(objEffect2.EditorID, out var rec)); Assert.Equal(rec.FormKey, objEffect2.FormKey); }); WrapPotentialThrow(cacheType, style, () => { Assert.True(package.TryResolve(objEffect1.FormKey, out var rec)); Assert.Equal(rec.FormKey, objEffect1.FormKey); }); WrapPotentialThrow(cacheType, style, () => { Assert.True(package.TryResolve(objEffect1.EditorID, out var rec)); Assert.Equal(rec.FormKey, objEffect1.FormKey); }); WrapPotentialThrow(cacheType, style, () => { Assert.True(package.TryResolve(objEffect2.FormKey, out var rec)); Assert.Equal(rec.FormKey, objEffect2.FormKey); }); WrapPotentialThrow(cacheType, style, () => { Assert.True(package.TryResolve(objEffect2.EditorID, out var rec)); Assert.Equal(rec.FormKey, objEffect2.FormKey); }); WrapPotentialThrow(cacheType, style, () => { Assert.True(package.TryResolve <IMajorRecordGetter>(objEffect1.FormKey, out var rec)); Assert.Equal(rec.FormKey, objEffect1.FormKey); }); WrapPotentialThrow(cacheType, style, () => { Assert.True(package.TryResolve <IMajorRecordGetter>(objEffect1.EditorID, out var rec)); Assert.Equal(rec.FormKey, objEffect1.FormKey); }); WrapPotentialThrow(cacheType, style, () => { Assert.True(package.TryResolve <IMajorRecordGetter>(objEffect2.FormKey, out var rec)); Assert.Equal(rec.FormKey, objEffect2.FormKey); }); WrapPotentialThrow(cacheType, style, () => { Assert.True(package.TryResolve <IMajorRecordGetter>(objEffect2.EditorID, out var rec)); Assert.Equal(rec.FormKey, objEffect2.FormKey); }); WrapPotentialThrow(cacheType, style, () => { Assert.True(package.TryResolve <ISkyrimMajorRecordGetter>(objEffect1.FormKey, out var rec)); Assert.Equal(rec.FormKey, objEffect1.FormKey); }); WrapPotentialThrow(cacheType, style, () => { Assert.True(package.TryResolve <ISkyrimMajorRecordGetter>(objEffect1.EditorID, out var rec)); Assert.Equal(rec.FormKey, objEffect1.FormKey); }); WrapPotentialThrow(cacheType, style, () => { Assert.True(package.TryResolve <ISkyrimMajorRecordGetter>(objEffect2.FormKey, out var rec)); Assert.Equal(rec.FormKey, objEffect2.FormKey); }); WrapPotentialThrow(cacheType, style, () => { Assert.True(package.TryResolve <ISkyrimMajorRecordGetter>(objEffect2.EditorID, out var rec)); Assert.Equal(rec.FormKey, objEffect2.FormKey); }); WrapPotentialThrow(cacheType, style, () => { Assert.True(package.TryResolve <IObjectEffectGetter>(objEffect1.FormKey, out var rec)); Assert.Equal(rec.FormKey, objEffect1.FormKey); }); WrapPotentialThrow(cacheType, style, () => { Assert.True(package.TryResolve <IObjectEffectGetter>(objEffect1.EditorID, out var rec)); Assert.Equal(rec.FormKey, objEffect1.FormKey); }); WrapPotentialThrow(cacheType, style, () => { Assert.True(package.TryResolve <IObjectEffectGetter>(objEffect2.FormKey, out var rec)); Assert.Equal(rec.FormKey, objEffect2.FormKey); }); WrapPotentialThrow(cacheType, style, () => { Assert.True(package.TryResolve <IObjectEffectGetter>(objEffect2.EditorID, out var rec)); Assert.Equal(rec.FormKey, objEffect2.FormKey); }); if (ReadOnly) { WrapPotentialThrow(cacheType, style, () => { Assert.False(package.TryResolve <ObjectEffect>(objEffect1.FormKey, out var _)); }); WrapPotentialThrow(cacheType, style, () => { Assert.False(package.TryResolve <ObjectEffect>(objEffect2.FormKey, out var _)); }); WrapPotentialThrow(cacheType, style, () => { Assert.False(package.TryResolve <IObjectEffect>(objEffect1.FormKey, out var _)); }); WrapPotentialThrow(cacheType, style, () => { Assert.False(package.TryResolve <IObjectEffect>(objEffect2.FormKey, out var _)); }); WrapPotentialThrow(cacheType, style, () => { Assert.False(package.TryResolve <IEffectRecord>(objEffect1.FormKey, out var _)); }); WrapPotentialThrow(cacheType, style, () => { Assert.False(package.TryResolve <IEffectRecord>(objEffect2.FormKey, out var _)); }); WrapPotentialThrow(cacheType, style, () => { Assert.False(package.TryResolve <ObjectEffect>(objEffect1.EditorID, out var _)); }); WrapPotentialThrow(cacheType, style, () => { Assert.False(package.TryResolve <ObjectEffect>(objEffect2.EditorID, out var _)); }); WrapPotentialThrow(cacheType, style, () => { Assert.False(package.TryResolve <IObjectEffect>(objEffect1.EditorID, out var _)); }); WrapPotentialThrow(cacheType, style, () => { Assert.False(package.TryResolve <IObjectEffect>(objEffect2.EditorID, out var _)); }); WrapPotentialThrow(cacheType, style, () => { Assert.False(package.TryResolve <IEffectRecord>(objEffect1.EditorID, out var _)); }); WrapPotentialThrow(cacheType, style, () => { Assert.False(package.TryResolve <IEffectRecord>(objEffect2.EditorID, out var _)); }); Assert.False(package.TryResolve <ObjectEffect>(TestConstants.UnusedForm, out var _)); Assert.False(package.TryResolve <IObjectEffect>(TestConstants.UnusedForm, out var _)); Assert.False(package.TryResolve <IEffectRecord>(TestConstants.UnusedForm, out var _)); Assert.False(package.TryResolve <ObjectEffect>(TestConstants.UnusedEdid, out var _)); Assert.False(package.TryResolve <IObjectEffect>(TestConstants.UnusedEdid, out var _)); Assert.False(package.TryResolve <IEffectRecord>(TestConstants.UnusedEdid, out var _)); } else { WrapPotentialThrow(cacheType, style, () => { Assert.True(package.TryResolve <ObjectEffect>(objEffect1.FormKey, out var rec)); Assert.Equal(rec.FormKey, objEffect1.FormKey); }); WrapPotentialThrow(cacheType, style, () => { Assert.True(package.TryResolve <ObjectEffect>(objEffect1.EditorID, out var rec)); Assert.Equal(rec.FormKey, objEffect1.FormKey); }); WrapPotentialThrow(cacheType, style, () => { Assert.True(package.TryResolve <ObjectEffect>(objEffect2.FormKey, out var rec)); Assert.Equal(rec.FormKey, objEffect2.FormKey); }); WrapPotentialThrow(cacheType, style, () => { Assert.True(package.TryResolve <ObjectEffect>(objEffect2.EditorID, out var rec)); Assert.Equal(rec.FormKey, objEffect2.FormKey); }); WrapPotentialThrow(cacheType, style, () => { Assert.True(package.TryResolve <IObjectEffect>(objEffect1.FormKey, out var rec)); Assert.Equal(rec.FormKey, objEffect1.FormKey); }); WrapPotentialThrow(cacheType, style, () => { Assert.True(package.TryResolve <IObjectEffect>(objEffect1.EditorID, out var rec)); Assert.Equal(rec.FormKey, objEffect1.FormKey); }); WrapPotentialThrow(cacheType, style, () => { Assert.True(package.TryResolve <IObjectEffect>(objEffect2.FormKey, out var rec)); Assert.Equal(rec.FormKey, objEffect2.FormKey); }); WrapPotentialThrow(cacheType, style, () => { Assert.True(package.TryResolve <IObjectEffect>(objEffect2.EditorID, out var rec)); Assert.Equal(rec.FormKey, objEffect2.FormKey); }); WrapPotentialThrow(cacheType, style, () => { Assert.True(package.TryResolve <IEffectRecord>(objEffect1.FormKey, out var rec)); Assert.Equal(rec.FormKey, objEffect1.FormKey); }); WrapPotentialThrow(cacheType, style, () => { Assert.True(package.TryResolve <IEffectRecord>(objEffect1.EditorID, out var rec)); Assert.Equal(rec.FormKey, objEffect1.FormKey); }); WrapPotentialThrow(cacheType, style, () => { Assert.True(package.TryResolve <IEffectRecord>(objEffect2.FormKey, out var rec)); Assert.Equal(rec.FormKey, objEffect2.FormKey); }); WrapPotentialThrow(cacheType, style, () => { Assert.True(package.TryResolve <IEffectRecord>(objEffect2.EditorID, out var rec)); Assert.Equal(rec.FormKey, objEffect2.FormKey); }); } }