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