public void ShouldIgnoreLaunchersThatAreExcludedInTheUserSettings() { using (var directory = new TemporaryDirectory()) { Directory.CreateDirectory($"{directory.Location}\\Launchers"); File.WriteAllText($"{directory.Location}\\Launchers\\file1.xml", ""); File.WriteAllText($"{directory.Location}\\Launchers\\file2.json", ""); var xmlNode = new LaunchersNode() { Header = "Header1" }; var jsonNode = new LaunchersNode() { Header = "Header2" }; var xmlLoader = ConfigureProcessMock($"{directory.Location}\\Launchers\\file1.xml", xmlNode, ".xml"); var jsonLoader = ConfigureProcessMock($"{directory.Location}\\Launchers\\file2.json", jsonNode, ".json"); var loader = new ConfigLoader() { AllConfigurationProcessors = new[] { xmlLoader.Object, jsonLoader.Object }, Context = new OneLaunchContextMock() .WithExcludedLaunchers($"{directory.Location}\\Launchers\\file1.xml") // We exclude the first file .WithUserSettingsDirectory(directory.Location) }; var launchers = loader.LoadConfiguration(directory.Location).ToList(); Assert.That(launchers, Has.Count.EqualTo(1)); Assert.That(launchers[0], Is.SameAs(jsonNode)); } }
private LaunchersNode ProcessNode(XmlLauncherNode node, Repository root, string header = null) { var result = new LaunchersNode() { Header = header ?? node.Header }; if (node.SubGroups != null) { foreach (var group in node.SubGroups) { result.SubGroups.Add(ProcessNode(group, root)); } } if (node.Launchers != null) { foreach (var launcher in node.Launchers) { result.Launchers.Add(ProcessLauncherLink(root, launcher)); } } return(result); }
public void LaunchersNodeShouldBeClonable() { var launchers = new LaunchersNode() { Header = "Repo1", Launchers = { new LauncherLink() { Header = "Launcher1", Commands = new List <LauncherCommand>() { new ExecuteCommand() { Command = "Command1" }, new FileCopierCommand() { SourceFilePath = "Source1", TargetFilePath = "Target1" } } } }, SubGroups = { new LaunchersNode() { Header = "SubGroup1", Launchers = { new LauncherLink() { Header = "Launcher1", Commands = new List <LauncherCommand>() { new ExecuteCommand() { Command = "Command1" }, new FileCopierCommand() { SourceFilePath = "Source1", TargetFilePath = "Target1" } } } }, }, new LaunchersNode() { Header = "SubGroup2" } } }; // This test ensures that WCF serialization works, even though LauncherLink class contains a collection made of statically unknown subclasses // To overcome the issue, we have provided a KnownType collection for the LauncherCommand class launchers.DeepClone(); }
public void ShouldReadAllFilesLocatedInTheConfigurationAndUserSettingsDirectoriesWithTheRightPlugin() { using (var configurationDirectory = new TemporaryDirectory()) using (var userSettingsDirectory = new TemporaryDirectory()) { Directory.CreateDirectory($"{configurationDirectory.Location}\\Launchers"); Directory.CreateDirectory($"{userSettingsDirectory.Location}\\OneLauncher"); Directory.CreateDirectory($"{userSettingsDirectory.Location}\\OneLauncher\\Launchers"); // First, we fill the configuration directory with some launcher files File.WriteAllText($"{configurationDirectory.Location}\\Launchers\\file1.xml", ""); File.WriteAllText($"{configurationDirectory.Location}\\Launchers\\file2.json", ""); // This one is not known by any plugin, it should be ignored File.WriteAllText($"{configurationDirectory.Location}\\Launchers\\file3.bin", ""); // Now, we'll add one more file, in the user settings directory this time File.WriteAllText($"{userSettingsDirectory.Location}\\OneLauncher\\Launchers\\file4.txt", ""); var xmlNode = new LaunchersNode() { Header = "Header1" }; var jsonNode = new LaunchersNode() { Header = "Header2" }; var txtNode = new LaunchersNode() { Header = "Header3" }; var xmlLoader = ConfigureProcessMock($"{configurationDirectory.Location}\\Launchers\\file1.xml", xmlNode, ".xml"); var jsonLoader = ConfigureProcessMock($"{configurationDirectory.Location}\\Launchers\\file2.json", jsonNode, ".json"); var txtLoader = ConfigureProcessMock($"{userSettingsDirectory.Location}\\OneLauncher\\Launchers\\file4.txt", txtNode, ".txt"); var loader = new ConfigLoader() { AllConfigurationProcessors = new[] { xmlLoader.Object, jsonLoader.Object, txtLoader.Object }, Context = new OneLaunchContextMock().WithUserSettingsDirectory(userSettingsDirectory.Location) }; var launchers = loader.LoadConfiguration(configurationDirectory.Location).ToList(); Assert.That(launchers, Has.Count.EqualTo(3)); Assert.That(launchers[0], Is.SameAs(xmlNode)); Assert.That(launchers[1], Is.SameAs(jsonNode)); Assert.That(launchers[2], Is.SameAs(txtNode)); xmlLoader.VerifyAll(); jsonLoader.VerifyAll(); txtLoader.VerifyAll(); } }
public RadialMenuItem GetNodeMenuItem(LaunchersNode launchers) { var item = new RadialMenuItem { Header = launchers.Header }; foreach (var group in launchers.SubGroups) { item.Items.Add(GetNodeMenuItem(group)); } foreach (var launcher in launchers.Launchers) { item.Items.Add(GetLauncherMenuItem(launcher)); } return(item); }
private void AssertNode(LaunchersNode rootGroup, string rootDirectory, string expectedHeader) { Assert.That(rootGroup.Header, Is.EqualTo(expectedHeader)); Assert.That(rootGroup.SubGroups, Is.Not.Null); Assert.That(rootGroup.SubGroups.Count, Is.EqualTo(2)); Assert.That(rootGroup.SubGroups[0], Is.Not.Null); Assert.That(rootGroup.SubGroups[0].Header, Is.EqualTo("Solutions")); Assert.That(rootGroup.SubGroups[0].Launchers, Is.Not.Null); Assert.That(rootGroup.SubGroups[0].Launchers.Count, Is.EqualTo(2)); Assert.That(rootGroup.SubGroups[0].Launchers[0].Header, Is.EqualTo("Base.sln")); Assert.That(rootGroup.SubGroups[0].Launchers[0].Commands, Has.Count.EqualTo(3)); AssertExecuteCommand(rootGroup.SubGroups[0].Launchers[0].Commands[0], rootDirectory + "/Rebels/Yavin/base.sln"); Assert.That(rootGroup.SubGroups[0].Launchers[0].Commands[1], Is.InstanceOf <XPathReplacerCommand>()); Assert.That(((XPathReplacerCommand)rootGroup.SubGroups[0].Launchers[0].Commands[1]).FilePath, Is.EqualTo(rootDirectory + "/assembly.dll.config")); Assert.That(((XPathReplacerCommand)rootGroup.SubGroups[0].Launchers[0].Commands[1]).XPath, Is.EqualTo("configuration/appSettings[@name='who's the best jedi ?']")); Assert.That(((XPathReplacerCommand)rootGroup.SubGroups[0].Launchers[0].Commands[1]).Value, Is.EqualTo("yoda")); Assert.That(rootGroup.SubGroups[0].Launchers[0].Commands[2], Is.InstanceOf <FileCopierCommand>()); Assert.That(((FileCopierCommand)rootGroup.SubGroups[0].Launchers[0].Commands[2]).SourceFilePath, Is.EqualTo(rootDirectory + "/somewhere/assembly.dll.config")); Assert.That(((FileCopierCommand)rootGroup.SubGroups[0].Launchers[0].Commands[2]).TargetFilePath, Is.EqualTo(rootDirectory + "/somewhere else/assembly.dll.config")); Assert.That(rootGroup.SubGroups[0].Launchers[1].Header, Is.EqualTo("Padawan.sln")); AssertExecuteCommand(rootGroup.SubGroups[0].Launchers[1].Commands[0], rootDirectory + "/Jedis/padawan.sln"); Assert.That(rootGroup.SubGroups[1], Is.Not.Null); Assert.That(rootGroup.SubGroups[1].Header, Is.EqualTo("Launchers")); Assert.That(rootGroup.SubGroups[1].Launchers, Is.Not.Null); Assert.That(rootGroup.SubGroups[1].Launchers.Count, Is.EqualTo(1)); Assert.That(rootGroup.SubGroups[1].Launchers[0].Header, Is.EqualTo("Rebellion")); AssertExecuteCommand(rootGroup.SubGroups[1].Launchers[0].Commands[0], rootDirectory + "/Rebels/Yavin/bin/debug/Start rebellion.cmd"); }
public void ShouldMergeLauncherFilesWhenRepoHasTheSameName() { var firstNode = new LaunchersNode() { Header = "Repo1", Launchers = { new LauncherLink(), new LauncherLink() }, SubGroups = { new LaunchersNode() { Header = "SubGroup1", Launchers ={ new LauncherLink() }, SubGroups = { new LaunchersNode() { Header = "SubGroup1-1", Launchers ={ new LauncherLink() } } } }, new LaunchersNode() { Header = "SubGroup2" } } }; var secondNode = new LaunchersNode() { Header = "Repo2", Launchers = { new LauncherLink(), new LauncherLink() }, SubGroups = { new LaunchersNode() { Header = "SubGroup1", // Same name than for the first node, but as the higher level differs, it won't be merged Launchers ={ new LauncherLink() }, SubGroups = { new LaunchersNode() { Header = "SubGroup1-1", Launchers ={ new LauncherLink() } } } } } }; var thirdNode = new LaunchersNode() { Header = "Repo1", // Same repo than the initial one, should be merged Launchers = { new LauncherLink() }, SubGroups = { new LaunchersNode() { Header = "SubGroup3" // New node, won't be merged }, new LaunchersNode() { Header = "SubGroup1", // Existing node, will be merged Launchers ={ new LauncherLink() }, SubGroups = { new LaunchersNode() { Header = "SubGroup1-2", // New subgroup, won't be merged Launchers ={ new LauncherLink() } } } } } }; var fourthNode = new LaunchersNode() { Header = "Repo1", // Again same repo than the initial one, should be merged Launchers = { new LauncherLink() } }; using (var configurationDirectory = new TemporaryDirectory()) using (var userSettingsDirectory = new TemporaryDirectory()) { Directory.CreateDirectory($"{configurationDirectory.Location}\\Launchers"); File.WriteAllText($"{configurationDirectory.Location}\\Launchers\\1.1", ""); var loaderMock = CreateMockProcessor(firstNode, secondNode, thirdNode, fourthNode); var loader = new ConfigLoader() { AllConfigurationProcessors = new[] { loaderMock.Object }, Context = new OneLaunchContextMock().WithUserSettingsDirectory(userSettingsDirectory.Location) }; var launchers = loader.LoadConfiguration(configurationDirectory.Location).ToList(); Assert.That(launchers, Has.Count.EqualTo(2)); Assert.That(launchers[0].Header, Is.EqualTo("Repo1")); Assert.That(launchers[0].Launchers, Is.EquivalentTo(new[] { firstNode.Launchers[0], firstNode.Launchers[1], thirdNode.Launchers[0], fourthNode.Launchers[0] })); Assert.That(launchers[0].SubGroups, Has.Count.EqualTo(3)); Assert.That(launchers[0].SubGroups[0].Header, Is.EqualTo("SubGroup1")); Assert.That(launchers[0].SubGroups[0].Launchers, Is.EquivalentTo(new[] { firstNode.SubGroups[0].Launchers[0], thirdNode.SubGroups[1].Launchers[0] })); Assert.That(launchers[0].SubGroups[0].SubGroups, Has.Count.EqualTo(2)); Assert.That(launchers[0].SubGroups[0].SubGroups[0].Header, Is.EqualTo("SubGroup1-1")); Assert.That(launchers[0].SubGroups[0].SubGroups[0].Launchers, Is.EquivalentTo(new[] { firstNode.SubGroups[0].SubGroups[0].Launchers[0] })); Assert.That(launchers[0].SubGroups[0].SubGroups[1].Header, Is.EqualTo("SubGroup1-2")); Assert.That(launchers[0].SubGroups[0].SubGroups[1].Launchers, Is.EquivalentTo(new[] { thirdNode.SubGroups[1].SubGroups[0].Launchers[0] })); Assert.That(launchers[0].SubGroups[1].Header, Is.EqualTo("SubGroup2")); Assert.That(launchers[0].SubGroups[1].Launchers, Is.Null.Or.Empty); Assert.That(launchers[0].SubGroups[2].Header, Is.EqualTo("SubGroup3")); Assert.That(launchers[0].SubGroups[1].Launchers, Is.Null.Or.Empty); Assert.That(launchers[1].Header, Is.EqualTo("Repo2")); Assert.That(launchers[1].Launchers, Is.EquivalentTo(new[] { secondNode.Launchers[0], secondNode.Launchers[1] })); Assert.That(launchers[1].SubGroups, Has.Count.EqualTo(1)); Assert.That(launchers[1].SubGroups[0].Header, Is.EqualTo("SubGroup1")); Assert.That(launchers[1].SubGroups[0].Launchers, Is.EquivalentTo(new[] { secondNode.SubGroups[0].Launchers[0] })); Assert.That(launchers[1].SubGroups[0].SubGroups, Has.Count.EqualTo(1)); Assert.That(launchers[1].SubGroups[0].SubGroups[0].Header, Is.EqualTo("SubGroup1-1")); Assert.That(launchers[1].SubGroups[0].SubGroups[0].Launchers, Is.EquivalentTo(new[] { secondNode.SubGroups[0].SubGroups[0].Launchers[0] })); } }
private Mock <ILauncherConfigurationProcessor> ConfigureProcessMock(string filePath, LaunchersNode returnedNode, string filePatterm) { var loader = new Mock <ILauncherConfigurationProcessor>(MockBehavior.Strict); loader .Setup(mock => mock.CanProcess(It.IsAny <string>())) .Returns <string>(s => s.EndsWith(filePatterm)) .Verifiable(); loader .Setup(mock => mock.Load(filePath)) .Returns(new[] { returnedNode }) .Verifiable(); return(loader); }