public void GetNestedDependencies() { var dependencies = ModConfig.GetDependencies(TestData.TestModConfigC); Assert.Contains(TestData.TestModConfigA, dependencies.Configurations); Assert.Contains(TestData.TestModConfigB, dependencies.Configurations); }
public void GetNestedMissingDependencies() { var dependencies = ModConfig.GetDependencies(TestData.TestModConfigC); foreach (var missingDependency in TestData.NonexistingDependencies) { Assert.Contains(missingDependency, dependencies.MissingConfigurations); } }
public void SortMods() { var dependencies = ModConfig.GetDependencies(TestData.TestModConfigC); var allMods = new List <ModConfig>(); allMods.Add(TestData.TestModConfigC); allMods.AddRange(dependencies.Configurations); allMods = ModConfig.SortMods(allMods); Assert.Equal(TestData.TestModConfigA, allMods[0]); Assert.Equal(TestData.TestModConfigB, allMods[1]); Assert.Equal(TestData.TestModConfigC, allMods[2]); }
/// <summary> /// Retrieves all of the dependencies for a given set of mods. /// </summary> /// <exception cref="FileNotFoundException">A dependency for any of the mods has not been found.</exception> private HashSet <ModConfig> GetDependenciesForMods(IEnumerable <ModConfig> mods, IEnumerable <ModConfig> allMods, string modDirectory) { if (allMods == null) { allMods = ModConfig.GetAllMods(LoaderConfig.GetModConfigDirectory()).Select(x => x.Config); } var dependencies = ModConfig.GetDependencies(mods, allMods, modDirectory); if (dependencies.MissingConfigurations.Count > 0 && !IsTesting) { string missingMods = String.Join(",", dependencies.MissingConfigurations); throw new FileNotFoundException($"Reloaded II was unable to find all dependencies for the mod(s) to be loaded.\n" + $"Aborting load.\n" + $"Missing dependencies: {missingMods}"); } return(dependencies.Configurations); }
/// <summary> /// Executes the dependency metadata writer on all mod configurations. /// </summary> /// <returns>True if a change has been made.</returns> public static async Task <bool> ExecuteAllAsync(ModConfigService service, bool saveToFile = true) { var existingModTuples = service.Items.ToArray(); var existingConfigurations = existingModTuples.Select(x => x.Config).ToArray(); bool result = false; foreach (var mod in existingModTuples) { // Fast fail. if (mod.Config.ModDependencies.Length <= 0) { continue; } // Get mod dependencies. var dependencies = ModConfig.GetDependencies(mod.Config, existingConfigurations); bool needsWriting = false; // Try to update config. foreach (var writer in All) { if (writer.Update(mod.Config, dependencies.Configurations)) { needsWriting = true; } } // Save new config. if (needsWriting) { result = true; if (saveToFile) { await mod.SaveAsync(); } } } return(result); }