private RunSettingsContainer SetupFinalRunSettingsContainer( string solutionSolutionWorkingDir, string solutionProject1WorkingDir, string solutionProject2WorkingDir, string userSolutionWorkingDir, string userProject1WorkingDir, string userProject3WorkingDir) { var globalSettings = new RunSettings { ProjectRegex = null, WorkingDir = GlobalWorkingDir }; var mockGlobalRunSettings = new Mock <IGlobalRunSettings2>(); mockGlobalRunSettings.Setup(grs => grs.RunSettings).Returns(globalSettings); var solutionSettingsContainer = SetupSettingsContainer(solutionSolutionWorkingDir, solutionProject1WorkingDir, solutionProject2WorkingDir, null); var solutionSettingsNavigator = EmbedSettingsIntoRunSettings(solutionSettingsContainer); var solutionSettingsFile = SerializeSolutionSettings(solutionSettingsNavigator); var userSettingsContainer = SetupSettingsContainer(userSolutionWorkingDir, userProject1WorkingDir, null, userProject3WorkingDir); var userSettingsNavigator = EmbedSettingsIntoRunSettings(userSettingsContainer); IXPathNavigable navigable; try { var serviceUnderTest = new RunSettingsServiceUnderTest(mockGlobalRunSettings.Object, solutionSettingsFile); navigable = serviceUnderTest.AddRunSettings(userSettingsNavigator, new Mock <IRunSettingsConfigurationInfo>().Object, new Mock <ILogger>().Object); } finally { File.Delete(solutionSettingsFile); } var navigator = navigable.CreateNavigator(); navigator.MoveToChild(Constants.RunSettingsName, ""); navigator.MoveToChild(GoogleTestConstants.SettingsName, ""); return(RunSettingsContainer.LoadFromXml(navigator)); }
public void AddRunSettings_ComplexConfiguration_IsMergedCorrectly() { string global = "GlobalSettings"; string solutionSolution = "solutionSolution"; string solutionProject1 = "solutionProject1"; string solutionProject2 = "solutionProject2"; string userSolution = "userSolution"; string userProject1 = "userProject1"; string userProject3 = "userProject3"; var solutionSettingsContainer = new RunSettingsContainer { SolutionSettings = new RunSettings { ProjectRegex = null, AdditionalTestExecutionParam = solutionSolution, PathExtension = solutionSolution, TestDiscoveryRegex = solutionSolution, TraitsRegexesAfter = solutionSolution, WorkingDir = solutionSolution, MaxNrOfThreads = 1, }, ProjectSettings = new List <RunSettings> { new RunSettings { ProjectRegex = "project1", AdditionalTestExecutionParam = solutionProject1, BatchForTestTeardown = solutionProject1, PathExtension = solutionProject1, TestDiscoveryRegex = solutionProject1, NrOfTestRepetitions = 2, ShuffleTestsSeed = 2 }, new RunSettings { ProjectRegex = "project2", AdditionalTestExecutionParam = solutionProject2, BatchForTestTeardown = solutionProject2, TestNameSeparator = solutionProject2, TraitsRegexesAfter = solutionProject2, WorkingDir = solutionProject2, NrOfTestRepetitions = 3, } } }; var userSettingsContainer = new RunSettingsContainer { SolutionSettings = new RunSettings { ProjectRegex = null, BatchForTestSetup = userSolution, BatchForTestTeardown = userSolution, TestDiscoveryRegex = userSolution, TraitsRegexesAfter = userSolution, MaxNrOfThreads = 4, ShuffleTestsSeed = 4 }, ProjectSettings = new List <RunSettings> { new RunSettings { ProjectRegex = "project1", BatchForTestTeardown = userProject1, PathExtension = userProject1, TestNameSeparator = userProject1, WorkingDir = userProject1, MaxNrOfThreads = 5, ShuffleTestsSeed = 5 }, new RunSettings { ProjectRegex = "project3", AdditionalTestExecutionParam = userProject3, BatchForTestTeardown = userProject3, TestDiscoveryRegex = userProject3, TestNameSeparator = userProject3, TraitsRegexesBefore = userProject3, MaxNrOfThreads = 6, } } }; var globalSettings = new RunSettings { ProjectRegex = null, AdditionalTestExecutionParam = global, BatchForTestSetup = global, BatchForTestTeardown = global, PathExtension = global, TestDiscoveryRegex = global, TestNameSeparator = global, TraitsRegexesAfter = global, TraitsRegexesBefore = global, WorkingDir = global, MaxNrOfThreads = 0, NrOfTestRepetitions = 0, ShuffleTestsSeed = 0 }; var mockGlobalRunSettings = new Mock <IGlobalRunSettings>(); mockGlobalRunSettings.Setup(grs => grs.RunSettings).Returns(globalSettings); var userSettingsNavigator = EmbedSettingsIntoRunSettings(userSettingsContainer); string solutionSettingsFile = SerializeSettingsContainer(solutionSettingsContainer); IXPathNavigable navigable; try { var serviceUnderTest = new RunSettingsServiceUnderTest(mockGlobalRunSettings.Object, solutionSettingsFile); navigable = serviceUnderTest.AddRunSettings(userSettingsNavigator, new Mock <IRunSettingsConfigurationInfo>().Object, new Mock <ILogger>().Object); } finally { File.Delete(solutionSettingsFile); } var navigator = navigable.CreateNavigator(); navigator.MoveToChild("RunSettings", ""); navigator.MoveToChild(GoogleTestConstants.SettingsName, ""); var resultingContainer = RunSettingsContainer.LoadFromXml(navigator.ReadSubtree()); resultingContainer.Should().NotBeNull(); resultingContainer.SolutionSettings.Should().NotBeNull(); resultingContainer.ProjectSettings.Count.Should().Be(3); resultingContainer.SolutionSettings.AdditionalTestExecutionParam.Should().Be(solutionSolution); resultingContainer.SolutionSettings.BatchForTestSetup.Should().Be(userSolution); resultingContainer.SolutionSettings.BatchForTestTeardown.Should().Be(userSolution); resultingContainer.SolutionSettings.PathExtension.Should().Be(solutionSolution); resultingContainer.SolutionSettings.TestDiscoveryRegex.Should().Be(userSolution); resultingContainer.SolutionSettings.TestNameSeparator.Should().Be(global); resultingContainer.SolutionSettings.TraitsRegexesAfter.Should().Be(userSolution); resultingContainer.SolutionSettings.TraitsRegexesBefore.Should().Be(global); resultingContainer.SolutionSettings.WorkingDir.Should().Be(solutionSolution); resultingContainer.SolutionSettings.MaxNrOfThreads.Should().Be(4); resultingContainer.SolutionSettings.MaxNrOfThreads.Should().Be(4); resultingContainer.SolutionSettings.NrOfTestRepetitions.Should().Be(0); var projectContainer = resultingContainer.GetSettingsForExecutable("project1"); projectContainer.Should().NotBeNull(); projectContainer.AdditionalTestExecutionParam.Should().Be(solutionProject1); projectContainer.BatchForTestSetup.Should().Be(userSolution); projectContainer.BatchForTestTeardown.Should().Be(userProject1); projectContainer.PathExtension.Should().Be(userProject1); projectContainer.TestDiscoveryRegex.Should().Be(userSolution); projectContainer.TestNameSeparator.Should().Be(userProject1); projectContainer.TraitsRegexesAfter.Should().Be(userSolution); projectContainer.TraitsRegexesBefore.Should().Be(global); projectContainer.WorkingDir.Should().Be(userProject1); projectContainer.MaxNrOfThreads.Should().Be(5); projectContainer.MaxNrOfThreads.Should().Be(5); projectContainer.NrOfTestRepetitions.Should().Be(2); projectContainer = resultingContainer.GetSettingsForExecutable("project2"); projectContainer.Should().NotBeNull(); projectContainer.AdditionalTestExecutionParam.Should().Be(solutionProject2); projectContainer.BatchForTestSetup.Should().Be(global); projectContainer.BatchForTestTeardown.Should().Be(solutionProject2); projectContainer.PathExtension.Should().Be(solutionSolution); projectContainer.TestDiscoveryRegex.Should().Be(solutionSolution); projectContainer.TestNameSeparator.Should().Be(solutionProject2); projectContainer.TraitsRegexesAfter.Should().Be(solutionProject2); projectContainer.TraitsRegexesBefore.Should().Be(global); projectContainer.WorkingDir.Should().Be(solutionProject2); projectContainer.MaxNrOfThreads.Should().Be(1); projectContainer.MaxNrOfThreads.Should().Be(1); projectContainer.NrOfTestRepetitions.Should().Be(3); projectContainer = resultingContainer.GetSettingsForExecutable("project3"); projectContainer.Should().NotBeNull(); projectContainer.AdditionalTestExecutionParam.Should().Be(userProject3); projectContainer.BatchForTestSetup.Should().Be(userSolution); projectContainer.BatchForTestTeardown.Should().Be(userProject3); projectContainer.PathExtension.Should().Be(global); projectContainer.TestDiscoveryRegex.Should().Be(userProject3); projectContainer.TestNameSeparator.Should().Be(userProject3); projectContainer.TraitsRegexesAfter.Should().Be(userSolution); projectContainer.TraitsRegexesBefore.Should().Be(userProject3); projectContainer.WorkingDir.Should().Be(global); projectContainer.MaxNrOfThreads.Should().Be(6); projectContainer.MaxNrOfThreads.Should().Be(6); projectContainer.NrOfTestRepetitions.Should().Be(0); }