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