Example #1
0
        public void Comparer_ModKeyList_Unknown()
        {
            List <ModKey> modKeys = new List <ModKey>()
            {
                ModKey.FromNameAndExtension("Oblivion.esm"),
                ModKey.FromNameAndExtension("Knights.esm"),
            };
            ModKey k1      = ModKey.FromNameAndExtension("MyMod.esm");
            ModKey k2      = ModKey.FromNameAndExtension("Oblivion.esm");
            var    compare = ModKey.LoadOrderComparer(modKeys);

            Assert.Throws <ArgumentOutOfRangeException>(() => compare.Compare(k1, k2));
        }
Example #2
0
        public void Comparer_ModKeyList_TypicalGreater()
        {
            List <ModKey> modKeys = new List <ModKey>()
            {
                ModKey.FromNameAndExtension("Oblivion.esm"),
                ModKey.FromNameAndExtension("Knights.esm"),
            };
            ModKey k1      = ModKey.FromNameAndExtension("Oblivion.esm");
            ModKey k2      = ModKey.FromNameAndExtension("Knights.esm");
            var    compare = ModKey.LoadOrderComparer(modKeys);

            Assert.True(compare.Compare(k2, k1) > 0);
        }
Example #3
0
        private void SortMasters(List <ModKey> modKeys)
        {
            switch (_params.MastersListOrdering)
            {
            case BinaryWriteParameters.MastersListOrderingEnumOption e:
                switch (e.Option)
                {
                case BinaryWriteParameters.MastersListOrderingOption.NoCheck:
                    return;

                case BinaryWriteParameters.MastersListOrderingOption.MastersFirst:
                    modKeys.Sort(ModKey.AlphabeticalAndMastersFirst);
                    return;

                default:
                    throw new NotImplementedException();
                }

            case BinaryWriteParameters.MastersListOrderingByLoadOrder lo:
                try
                {
                    modKeys.Sort(ModKey.LoadOrderComparer(lo.LoadOrder));
                }
                catch (Exception ex)
                {
                    if (!(ex is ArgumentOutOfRangeException) && !(ex is InvalidOperationException))
                    {
                        throw;
                    }
                    var keys = modKeys.ToHashSet();
                    keys.Remove(lo.LoadOrder);
                    var modToComplainAbout = keys.First();
                    throw new MissingModException(modToComplainAbout, $"A referenced mod was not present on the load order being sorted against: {modToComplainAbout}.  This mod was referenced by MajorRecord: {_modKeys[modToComplainAbout]}");
                }
                return;

            default:
                throw new NotImplementedException();
            }
        }