Ejemplo n.º 1
0
        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 _));
        }
Ejemplo n.º 2
0
        public void LoadOrderSingle(LinkCacheTestTypes cacheType)
        {
            var prototype  = new SkyrimMod(TestConstants.PluginModKey, SkyrimRelease.SkyrimLE);
            var objEffect1 = prototype.ObjectEffects.AddNew("EditorID1");
            var objEffect2 = prototype.ObjectEffects.AddNew("EditorID2");

            using var disp = ConvertMod(prototype, out var mod);
            var loadOrder = new LoadOrder <ISkyrimModGetter>();

            loadOrder.Add(mod);
            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>(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 <IEffectRecord>(objEffect1.FormKey, out var _));
                });
                WrapPotentialThrow(cacheType, style, () =>
                {
                    Assert.False(package.TryResolve <IEffectRecord>(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 <ObjectEffect>(objEffect1.FormKey, out var _));
                });
                WrapPotentialThrow(cacheType, style, () =>
                {
                    Assert.False(package.TryResolve <ObjectEffect>(objEffect2.FormKey, 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 _));
                });
                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 <ObjectEffect>(objEffect1.EditorID, out var _));
                });
                WrapPotentialThrow(cacheType, style, () =>
                {
                    Assert.False(package.TryResolve <ObjectEffect>(objEffect2.EditorID, out var _));
                });
            }
            else
            {
                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);
                });
                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 <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);
                });
            }
        }