public void DiscoverProjects_AddsMatchingProjectsToBinding() { // Arrange ThreadHelper.SetCurrentThreadAsUIThread(); var csProject1 = new ProjectMock("cs1.csproj"); var csProject2 = new ProjectMock("cs2.csproj"); csProject1.SetCSProjectKind(); csProject2.SetCSProjectKind(); var matchingProjects = new[] { csProject1, csProject2 }; this.projectSystemHelper.FilteredProjects = matchingProjects; var testSubject = this.CreateTestSubject(); this.host.SupportedPluginLanguages.UnionWith(new[] { Language.CSharp }); // Act var result = testSubject.DiscoverProjects(); // Assert result.Should().BeTrue(); CollectionAssert.AreEqual(matchingProjects, testSubject.InternalState.BindingProjects.ToArray(), "Unexpected projects selected for binding"); }
public void Language_ForProject_KnownLanguage_ReturnsCorrectLanguage() { // Test case 1: Unknown // Setup var otherProject = new ProjectMock("other.proj"); // Act var otherProjectLanguage = Language.ForProject(otherProject); // Verify Assert.AreEqual(Language.Unknown, otherProjectLanguage, "Unexpected Language for unknown project"); // Test case 2: C# // Setup var csProject = new ProjectMock("cs1.csproj"); csProject.SetCSProjectKind(); // Act var csProjectLanguage = Language.ForProject(csProject); // Verify Assert.AreEqual(Language.CSharp, csProjectLanguage, "Unexpected Language for C# project"); // Test case 3: VB // Setup var vbNetProject = new ProjectMock("vb1.vbproj"); vbNetProject.SetVBProjectKind(); // Act var vbNetProjectLanguage = Language.ForProject(vbNetProject); // Verify Assert.AreEqual(Language.VBNET, vbNetProjectLanguage, "Unexpected Language for C# project"); }
private static ProjectMock CreateCsProject(string projectName) { var project = new ProjectMock(projectName); project.SetCSProjectKind(); return(project); }
public void BindingWorkflow_DiscoverProjects_AddsMatchingProjectsToBinding() { // Arrange ThreadHelper.SetCurrentThreadAsUIThread(); var controller = new ConfigurableProgressController(); var progressEvents = new ConfigurableProgressStepExecutionEvents(); var csProject1 = new ProjectMock("cs1.csproj"); var csProject2 = new ProjectMock("cs2.csproj"); csProject1.SetCSProjectKind(); csProject2.SetCSProjectKind(); var matchingProjects = new[] { csProject1, csProject2 }; this.projectSystemHelper.FilteredProjects = matchingProjects; var testSubject = this.CreateTestSubject(); this.host.SupportedPluginLanguages.UnionWith(new[] { Language.CSharp }); // Act testSubject.DiscoverProjects(controller, progressEvents); // Assert CollectionAssert.AreEqual(matchingProjects, testSubject.BindingProjects.ToArray(), "Unexpected projects selected for binding"); progressEvents.AssertProgressMessages(Strings.DiscoveringSolutionProjectsProgressMessage); }
private void BindingWorkflow_DiscoverProjects_GenericPart(ConfigurableProgressController controller, ConfigurableProgressStepExecutionEvents progressEvents, int numberOfProjectsToCreate, int numberOfProjectsToInclude) { // Arrange List <Project> projects = new List <Project>(); for (int i = 0; i < numberOfProjectsToCreate; i++) { var project = new ProjectMock($"cs{i}.csproj"); project.SetCSProjectKind(); projects.Add(project); } this.projectSystemHelper.FilteredProjects = projects.Take(numberOfProjectsToInclude); this.projectSystemHelper.Projects = projects; var testSubject = this.CreateTestSubject(); this.host.SupportedPluginLanguages.UnionWith(new[] { Language.CSharp }); // Act testSubject.DiscoverProjects(controller, progressEvents); // Assert testSubject.BindingProjects.Should().HaveCount(numberOfProjectsToInclude, "Expected " + numberOfProjectsToInclude + " project(s) selected for binding"); progressEvents.AssertProgressMessages(Strings.DiscoveringSolutionProjectsProgressMessage); this.outputWindowPane.AssertOutputStrings(1); // Returns expected output message var expectedOutput = new StringBuilder(); expectedOutput.AppendFormat(Strings.SubTextPaddingFormat, Strings.DiscoveringSolutionIncludedProjectsHeader).AppendLine(); if (numberOfProjectsToInclude > 0) { this.projectSystemHelper.FilteredProjects.ToList().ForEach(p => expectedOutput.AppendFormat(" * {0}\r\n", p.Name)); } else { var msg = string.Format(Strings.DiscoveredIncludedOrExcludedProjectFormat, Strings.NoProjectsExcludedFromBinding); expectedOutput.AppendFormat(Strings.SubTextPaddingFormat, msg).AppendLine(); } expectedOutput.AppendFormat(Strings.SubTextPaddingFormat, Strings.DiscoveringSolutionExcludedProjectsHeader).AppendLine(); if (numberOfProjectsToCreate - numberOfProjectsToInclude > 0) { this.projectSystemHelper.Projects.Except(this.projectSystemHelper.FilteredProjects) .ToList() .ForEach(p => expectedOutput.AppendFormat(" * {0}\r\n", p.Name)); } else { var msg = string.Format(Strings.DiscoveredIncludedOrExcludedProjectFormat, Strings.NoProjectsExcludedFromBinding); expectedOutput.AppendFormat(Strings.SubTextPaddingFormat, msg).AppendLine(); } expectedOutput.AppendFormat(Strings.SubTextPaddingFormat, Strings.FilteredOutProjectFromBindingEnding); this.outputWindowPane.AssertOutputStrings(expectedOutput.ToString()); }
public void Mapper_ForProject_KnownLanguage_ReturnsCorrectLanguage_CS() { // Arrange var csProject = new ProjectMock("cs1.csproj"); csProject.SetCSProjectKind(); // Act var csProjectLanguage = ProjectToLanguageMapper.GetLanguageForProject(csProject); // Assert csProjectLanguage.Should().Be(Language.CSharp, "Unexpected Language for C# project"); }
private void SetValidProjects(int numberOfProjects = 1) { List <ProjectMock> projects = new List <ProjectMock>(); for (int i = 0; i < numberOfProjects; i++) { ProjectMock project = this.dte.Solution.AddOrGetProject($@"X:\Solution\Project\Project{i}.csproj"); project.SetCSProjectKind(); projects.Add(project); } this.projectHelper.FilteredProjects = projects; }
private void SetValidFilteredProjects() { var project1 = new ProjectMock(@"c:\SolutionRoot\Project1\Project1.csproj"); project1.SetCSProjectKind(); var project2 = new ProjectMock(@"c:\SolutionRoot\Project2\project2.csproj"); project2.SetCSProjectKind(); this.projectSystemHelper.FilteredProjects = new Project[] { project1, project2 }; this.projectSystemHelper.Projects = new Project[] { new ProjectMock(@"c:\SolutionRoot\excluded.csproj") }; this.ruleSetInfoProvider.SolutionRootFolder = @"c:\SolutionRoot"; this.SetValidProjectConfiguration(project1); this.SetValidProjectConfiguration(project2); }
public void ProjectPropertyManager_GetSelectedProjects_HasSelectedProjects_ReturnsProjects() { // Setup var p1 = new ProjectMock("p1.proj"); var p2 = new ProjectMock("p2.proj"); var p3 = new ProjectMock("p3.proj"); p1.SetCSProjectKind(); p2.SetVBProjectKind(); // p3 is unknown kind var expectedProjects = new ProjectMock[] { p1, p2, p3 }; this.projectSystem.SelectedProjects = expectedProjects; ProjectPropertyManager testSubject = this.CreateTestSubject(); // Act Project[] actualProjects = testSubject.GetSelectedProjects().ToArray(); // Verify CollectionAssert.AreEquivalent(expectedProjects, actualProjects, "Unexpected selected projects"); }
public void ErrorListInfoBarController_CurrentBackgroundProcessorCancellation() { // Setup this.IsActiveSolutionBound = true; var testSubject = new ErrorListInfoBarController(this.host); this.ConfigureLoadedSolution(hasUnboundProject: false); var projectSystem = new ConfigurableVsProjectSystemHelper(this.serviceProvider); this.serviceProvider.RegisterService(typeof(IProjectSystemHelper), projectSystem); var project = new ProjectMock("project.proj"); project.SetCSProjectKind(); projectSystem.FilteredProjects = new[] { project }; this.solutionBindingSerializer.CurrentBinding.Profiles = new Dictionary <Language, Persistence.ApplicableQualityProfile>(); this.solutionBindingSerializer.CurrentBinding.Profiles[Language.CSharp] = new Persistence.ApplicableQualityProfile { ProfileKey = "Profile", ProfileTimestamp = DateTime.Now }; var sqService = new ConfigurableSonarQubeServiceWrapper(); this.host.SonarQubeService = sqService; sqService.ReturnProfile[Language.CSharp] = new QualityProfile(); // Act testSubject.ProcessSolutionBinding(); // Verify Assert.IsNotNull(testSubject.CurrentBackgroundProcessor?.BackgroundTask, "Background task is expected"); Assert.IsTrue(testSubject.CurrentBackgroundProcessor.BackgroundTask.Wait(TimeSpan.FromSeconds(2)), "Timeout waiting for the background task"); this.infoBarManager.AssertHasNoAttachedInfoBar(ErrorListInfoBarController.ErrorListToolWindowGuid); // Act (refresh again and let the blocked UI thread run to completion) testSubject.ProcessSolutionBinding(); DispatcherHelper.DispatchFrame(DispatcherPriority.Normal); this.IsActiveSolutionBound = false; // Verify that no info bar was added (due to the last action in which the state will not cause the info bar to appear) this.infoBarManager.AssertHasNoAttachedInfoBar(ErrorListInfoBarController.ErrorListToolWindowGuid); }
public void ProjectPropertyManager_GetSelectedProjects_HasSelectedProjects_ReturnsProjects() { // Arrange var p1 = new ProjectMock("p1.proj"); var p2 = new ProjectMock("p2.proj"); var p3 = new ProjectMock("p3.proj"); p1.SetCSProjectKind(); p2.SetVBProjectKind(); // p3 is unknown kind var expectedProjects = new ProjectMock[] { p1, p2, p3 }; this.projectSystem.SelectedProjects = expectedProjects; ProjectPropertyManager testSubject = this.CreateTestSubject(); // Act Project[] actualProjects = testSubject.GetSelectedProjects().ToArray(); // Assert CollectionAssert.AreEquivalent(expectedProjects, actualProjects, "Unexpected selected projects"); }
public void BindingWorkflow_GetBindingLanguages_FiltersProjectsWithUnsupportedPluginLanguage() { // Arrange var testSubject = this.CreateTestSubject(); var csProject1 = new ProjectMock("cs1.csproj"); var csProject2 = new ProjectMock("cs2.csproj"); var csProject3 = new ProjectMock("cs3.csproj"); csProject1.SetCSProjectKind(); csProject2.SetCSProjectKind(); csProject3.SetCSProjectKind(); var vbNetProject1 = new ProjectMock("vb1.vbproj"); var vbNetProject2 = new ProjectMock("vb2.vbproj"); vbNetProject1.SetVBProjectKind(); vbNetProject2.SetVBProjectKind(); var projects = new[] { csProject1, csProject2, vbNetProject1, csProject3, vbNetProject2 }; testSubject.BindingProjects.AddRange(projects); var expectedLanguages = new[] { Language.VBNET }; this.host.SupportedPluginLanguages.UnionWith(expectedLanguages); // Act var actualLanguages = testSubject.GetBindingLanguages(); // Assert CollectionAssert.AreEquivalent(expectedLanguages, actualLanguages.ToArray(), "Unexpected languages for binding projects"); }
public void ErrorListInfoBarController_CurrentBackgroundProcessorCancellation() { // Arrange this.SetBindingMode(SonarLintMode.LegacyConnected); var testSubject = new ErrorListInfoBarController(this.host, this.unboundProjectFinder); this.ConfigureLoadedSolution(hasUnboundProject: false); var projectSystem = new ConfigurableVsProjectSystemHelper(this.serviceProvider); this.serviceProvider.RegisterService(typeof(IProjectSystemHelper), projectSystem); var project = new ProjectMock("project.proj"); project.SetCSProjectKind(); projectSystem.FilteredProjects = new[] { project }; this.configProvider.ProjectToReturn.Profiles = new Dictionary <Language, ApplicableQualityProfile>(); this.configProvider.ProjectToReturn.Profiles[Language.CSharp] = new ApplicableQualityProfile { ProfileKey = "Profile", ProfileTimestamp = DateTime.Now }; this.configProvider.ModeToReturn = SonarLintMode.LegacyConnected; // Act testSubject.ProcessSolutionBinding(); // Assert testSubject.CurrentBackgroundProcessor?.BackgroundTask.Should().NotBeNull("Background task is expected"); testSubject.CurrentBackgroundProcessor.BackgroundTask.Wait(TimeSpan.FromSeconds(2)).Should().BeTrue("Timeout waiting for the background task"); this.infoBarManager.AssertHasNoAttachedInfoBar(ErrorListInfoBarController.ErrorListToolWindowGuid); // Act (refresh again and let the blocked UI thread run to completion) testSubject.ProcessSolutionBinding(); DispatcherHelper.DispatchFrame(DispatcherPriority.Normal); this.SetBindingMode(SonarLintMode.Standalone); // Assert that no info bar was added (due to the last action in which the state will not cause the info bar to appear) this.infoBarManager.AssertHasNoAttachedInfoBar(ErrorListInfoBarController.ErrorListToolWindowGuid); }
public void BindingWorkflow_GetBindingLanguages_ReturnsDistinctLanguagesForProjects() { // Setup var testSubject = this.CreateTestSubject(); var csProject1 = new ProjectMock("cs1.csproj"); var csProject2 = new ProjectMock("cs2.csproj"); var csProject3 = new ProjectMock("cs3.csproj"); csProject1.SetCSProjectKind(); csProject2.SetCSProjectKind(); csProject3.SetCSProjectKind(); var vbNetProject1 = new ProjectMock("vb1.vbproj"); var vbNetProject2 = new ProjectMock("vb2.vbproj"); vbNetProject1.SetVBProjectKind(); vbNetProject2.SetVBProjectKind(); var projects = new[] { csProject1, csProject2, vbNetProject1, csProject3, vbNetProject2 }; testSubject.BindingProjects.AddRange(projects); var expectedLanguages = new[] { Language.CSharp, Language.VBNET }; // Act var actualLanguages = testSubject.GetBindingLanguages(); // Verify CollectionAssert.AreEquivalent(expectedLanguages, actualLanguages.ToArray(), "Unexpected languages for binding projects"); }
public void Language_ForProject_KnownLanguage_ReturnsCorrectLanguage() { // Test case 1: Unknown // Arrange var otherProject = new ProjectMock("other.proj"); // Act var otherProjectLanguage = Language.ForProject(otherProject); // Assert otherProjectLanguage.Should().Be(Language.Unknown, "Unexpected Language for unknown project"); // Test case 2: C# // Arrange var csProject = new ProjectMock("cs1.csproj"); csProject.SetCSProjectKind(); // Act var csProjectLanguage = Language.ForProject(csProject); // Assert csProjectLanguage.Should().Be(Language.CSharp, "Unexpected Language for C# project"); // Test case 3: VB // Arrange var vbNetProject = new ProjectMock("vb1.vbproj"); vbNetProject.SetVBProjectKind(); // Act var vbNetProjectLanguage = Language.ForProject(vbNetProject); // Assert vbNetProjectLanguage.Should().Be(Language.VBNET, "Unexpected Language for C# project"); }
private void ConfigureSupportedBindingProject(BindingProcessImpl.BindingProcessState internalState, Language language) { // Mark the language as supported by the host host.SupportedPluginLanguages.Add(language); // Create a dummy project and add it to the internal state var project = new ProjectMock(null); switch (language.Id) { case "VB": project.SetVBProjectKind(); break; case "CSharp": project.SetCSProjectKind(); break; default: Assert.Fail($"Test setup error: unknown language: {language}"); break; } internalState.BindingProjects.Add(project); }
public void ErrorListInfoBarController_CurrentBackgroundProcessorCancellation() { // Setup this.IsActiveSolutionBound = true; var testSubject = new ErrorListInfoBarController(this.host); this.ConfigureLoadedSolution(hasUnboundProject: false); var projectSystem = new ConfigurableVsProjectSystemHelper(this.serviceProvider); this.serviceProvider.RegisterService(typeof(IProjectSystemHelper), projectSystem); var project = new ProjectMock("project.proj"); project.SetCSProjectKind(); projectSystem.FilteredProjects = new[] { project }; this.solutionBindingSerializer.CurrentBinding.Profiles = new Dictionary<Language, Persistence.ApplicableQualityProfile>(); this.solutionBindingSerializer.CurrentBinding.Profiles[Language.CSharp] = new Persistence.ApplicableQualityProfile { ProfileKey = "Profile", ProfileTimestamp = DateTime.Now }; var sqService = new ConfigurableSonarQubeServiceWrapper(); this.host.SonarQubeService = sqService; sqService.ReturnProfile[Language.CSharp] = new QualityProfile(); // Act testSubject.ProcessSolutionBinding(); // Verify Assert.IsNotNull(testSubject.CurrentBackgroundProcessor?.BackgroundTask, "Background task is expected"); Assert.IsTrue(testSubject.CurrentBackgroundProcessor.BackgroundTask.Wait(TimeSpan.FromSeconds(2)), "Timeout waiting for the background task"); this.infoBarManager.AssertHasNoAttachedInfoBar(ErrorListInfoBarController.ErrorListToolWindowGuid); // Act (refresh again and let the blocked UI thread run to completion) testSubject.ProcessSolutionBinding(); DispatcherHelper.DispatchFrame(DispatcherPriority.Normal); this.IsActiveSolutionBound = false; // Verify that no info bar was added (due to the last action in which the state will not cause the info bar to appear) this.infoBarManager.AssertHasNoAttachedInfoBar(ErrorListInfoBarController.ErrorListToolWindowGuid); }
public void BindingWorkflow_DiscoverProjects_AddsMatchingProjectsToBinding() { // Setup ThreadHelper.SetCurrentThreadAsUIThread(); var controller = new ConfigurableProgressController(); var progressEvents = new ConfigurableProgressStepExecutionEvents(); var csProject1 = new ProjectMock("cs1.csproj"); var csProject2 = new ProjectMock("cs2.csproj"); csProject1.SetCSProjectKind(); csProject2.SetCSProjectKind(); var matchingProjects = new[] { csProject1, csProject2 }; this.projectSystemHelper.FilteredProjects = matchingProjects; var testSubject = this.CreateTestSubject(); // Act testSubject.DiscoverProjects(controller, progressEvents); // Verify CollectionAssert.AreEqual(matchingProjects, testSubject.BindingProjects.ToArray(), "Unexpected projects selected for binding"); progressEvents.AssertProgressMessages(Strings.DiscoveringSolutionProjectsProgressMessage); }