IInfoBar IInfoBarManager.AttachInfoBar(Guid toolwindowGuid, string message, string buttonText, ImageMoniker imageMoniker) { Assert.IsFalse(this.attached.ContainsKey(toolwindowGuid), "Info bar is already attached to tool window {0}", toolwindowGuid); var infoBar = new ConfigurableInfoBar(message, buttonText, imageMoniker); this.attached[toolwindowGuid] = infoBar; return infoBar; }
public void ErrorListInfoBarController_Refresh_ActiveSolutionBoundAndFullyLoaded_HasUnboundProjects() { // Arrange this.SetBindingMode(SonarLintMode.LegacyConnected); SetSolutionExistsAndFullyLoadedContextState(isActive: true); this.solutionBindingInformationProvider.BoundProjects = new[] { new ProjectMock("bound.csproj") }; this.solutionBindingInformationProvider.UnboundProjects = new[] { new ProjectMock("unbound.csproj") }; var testSubject = new ErrorListInfoBarController(this.host, this.solutionBindingInformationProvider); // Act testSubject.Refresh(); RunAsyncAction(); // Assert this.outputWindowPane.AssertOutputStrings(2); this.outputWindowPane.AssertMessageContainsAllWordsCaseSensitive(1, new[] { "unbound.csproj" }, splitter: "\r\n\t ()".ToArray()); ConfigurableInfoBar infoBar = this.infoBarManager.AssertHasAttachedInfoBar(ErrorListInfoBarController.ErrorListToolWindowGuid); VerifyInfoBar(infoBar); }
public void ErrorListInfoBarController_InfoBar_ClickButton_HasActiveSection_WasBusyAndInfoBarClosed() { // Arrange this.SetBindingMode(SonarLintMode.LegacyConnected); var testSubject = new ErrorListInfoBarController(this.host, this.unboundProjectFinder); this.ConfigureLoadedSolution(); int executed = 0; ProjectViewModel project = null; ConfigurableSectionController section = this.ConfigureActiveSectionWithBindCommand(args => { executed++; args.ProjectKey.Should().Be(project.Key); args.ProjectName.Should().Be(project.ProjectName); }); project = this.ConfigureProjectViewModel(section); testSubject.Refresh(); RunAsyncAction(); this.stateManager.SetAndInvokeBusyChanged(true); // Sanity ConfigurableInfoBar infoBar = this.infoBarManager.AssertHasAttachedInfoBar(ErrorListInfoBarController.ErrorListToolWindowGuid); VerifyInfoBar(infoBar); // Act (command enabled) infoBar.SimulateButtonClickEvent(); // Assert executed.Should().Be(0, "Busy, should not be executed"); // Act (close the current info bar) testSubject.Reset(); this.stateManager.SetAndInvokeBusyChanged(false); // Assert executed.Should().Be(1, "Once started, the process can only be canceled from team explorer, closing the info bar should not impact the running update execution"); this.infoBarManager.AssertHasNoAttachedInfoBar(ErrorListInfoBarController.ErrorListToolWindowGuid); infoBar.VerifyAllEventsUnregistered(); }
public void ErrorListInfoBarController_InfoBar_ClickButton_HasDisconnectedActiveSection_ConnectCommandIsBusy() { // Arrange this.SetBindingMode(SonarLintMode.LegacyConnected); var testSubject = new ErrorListInfoBarController(this.host, this.unboundProjectFinder); this.ConfigureLoadedSolution(); int bindingCalled = 0; ProjectViewModel project = null; this.ConfigureActiveSectionWithBindCommand(args => { bindingCalled++; args.ProjectKey.Should().Be(project.Key); args.ProjectName.Should().Be(project.ProjectName); }); int refreshCalled = 0; this.ConfigureActiveSectionWithRefreshCommand(connection => { refreshCalled++; }, connection => false); testSubject.Refresh(); RunAsyncAction(); this.outputWindowPane.Reset(); // Sanity ConfigurableInfoBar infoBar = this.infoBarManager.AssertHasAttachedInfoBar(ErrorListInfoBarController.ErrorListToolWindowGuid); VerifyInfoBar(infoBar); // Act (kick off connection) infoBar.SimulateButtonClickEvent(); // Assert refreshCalled.Should().Be(0, "Expected to connect once"); bindingCalled.Should().Be(0, "Not expected to bind yet"); this.outputWindowPane.AssertOutputStrings(1); infoBar.VerifyAllEventsRegistered(); this.infoBarManager.AssertHasAttachedInfoBar(ErrorListInfoBarController.ErrorListToolWindowGuid); }
public void ErrorListInfoBarController_InfoBar_ClickButton_HasActiveSection_WasBusyAndSectionClosed() { // Arrange this.SetBindingMode(SonarLintMode.LegacyConnected); var testSubject = new ErrorListInfoBarController(this.host, this.unboundProjectFinder); this.ConfigureLoadedSolution(); int executed = 0; ProjectViewModel project = null; ConfigurableSectionController section = this.ConfigureActiveSectionWithBindCommand(args => { executed++; }); project = this.ConfigureProjectViewModel(section); testSubject.Refresh(); RunAsyncAction(); this.stateManager.SetAndInvokeBusyChanged(true); // Sanity ConfigurableInfoBar infoBar = this.infoBarManager.AssertHasAttachedInfoBar(ErrorListInfoBarController.ErrorListToolWindowGuid); VerifyInfoBar(infoBar); this.teamExplorerController.ShowConnectionsPageCallsCount.Should().Be(0); // Act (command enabled) infoBar.SimulateButtonClickEvent(); // Assert executed.Should().Be(0, "Busy, should not be executed"); // Act (close the current section) this.host.ClearActiveSection(); this.stateManager.SetAndInvokeBusyChanged(false); RunAsyncAction(); // Assert executed.Should().Be(0, "Update was not expected to be executed since there is not ActiveSection"); this.infoBarManager.AssertHasAttachedInfoBar(ErrorListInfoBarController.ErrorListToolWindowGuid); infoBar.VerifyAllEventsRegistered(); // Should be usable }
public void ErrorListInfoBarController_InfoBar_ClickButton_NoActiveSection_NavigatesToSection() { // Arrange this.SetBindingMode(SonarLintMode.LegacyConnected); var testSubject = new ErrorListInfoBarController(this.host, this.unboundProjectFinder); this.ConfigureLoadedSolution(); testSubject.Refresh(); RunAsyncAction(); // Sanity ConfigurableInfoBar infoBar = this.infoBarManager.AssertHasAttachedInfoBar(ErrorListInfoBarController.ErrorListToolWindowGuid); VerifyInfoBar(infoBar); // Act infoBar.SimulateButtonClickEvent(); // Assert this.teamExplorerController.ShowConnectionsPageCallsCount.Should().Be(1); }
public void ErrorListInfoBarController_InfoBar_ClickButton_NoActiveSection_NavigatesToSection() { // Setup this.IsActiveSolutionBound = true; var testSubject = new ErrorListInfoBarController(this.host); this.ConfigureLoadedSolution(); testSubject.Refresh(); RunAsyncAction(); // Sanity ConfigurableInfoBar infoBar = this.infoBarManager.AssertHasAttachedInfoBar(ErrorListInfoBarController.ErrorListToolWindowGuid); VerifyInfoBar(infoBar); // Act infoBar.SimulateButtonClickEvent(); // Verify this.teamExplorerController.AssertExpectedNumCallsShowConnectionsPage(1); }
public void ErrorListInfoBarController_InfoBar_ClickButton_HasActiveSection_WasBusyAndInfoBarClosed() { // Setup this.IsActiveSolutionBound = true; var testSubject = new ErrorListInfoBarController(this.host); this.ConfigureLoadedSolution(); int executed = 0; ProjectViewModel project = null; ConfigurableSectionController section = this.ConfigureActiveSectionWithBindCommand(vm => { executed++; Assert.AreSame(project, vm); }); project = this.ConfigureProjectViewModel(section); testSubject.Refresh(); RunAsyncAction(); this.stateManager.SetAndInvokeBusyChanged(true); // Sanity ConfigurableInfoBar infoBar = this.infoBarManager.AssertHasAttachedInfoBar(ErrorListInfoBarController.ErrorListToolWindowGuid); VerifyInfoBar(infoBar); // Act (command enabled) infoBar.SimulateButtonClickEvent(); // Verify Assert.AreEqual(0, executed, "Busy, should not be executed"); // Act (close the current info bar) testSubject.Reset(); this.stateManager.SetAndInvokeBusyChanged(false); // Verify Assert.AreEqual(1, executed, "Once started, the process can only be canceled from team explorer, closing the info bar should not impact the running update execution"); this.infoBarManager.AssertHasNoAttachedInfoBar(ErrorListInfoBarController.ErrorListToolWindowGuid); infoBar.VerifyAllEventsUnregistered(); }
public void ErrorListInfoBarController_InfoBar_ClickButton_HasDisconnectedActiveSection_ConnectCommandIsBusy() { // Setup this.IsActiveSolutionBound = true; var testSubject = new ErrorListInfoBarController(this.host); this.ConfigureLoadedSolution(); int bindingCalled = 0; ProjectViewModel project = null; this.ConfigureActiveSectionWithBindCommand(vm => { bindingCalled++; Assert.AreSame(project, vm); }); int refreshCalled = 0; this.ConfigureActiveSectionWithRefreshCommand(connection => { refreshCalled++; }, connection => false); testSubject.Refresh(); RunAsyncAction(); this.outputWindowPane.Reset(); // Sanity ConfigurableInfoBar infoBar = this.infoBarManager.AssertHasAttachedInfoBar(ErrorListInfoBarController.ErrorListToolWindowGuid); VerifyInfoBar(infoBar); // Act (kick off connection) infoBar.SimulateButtonClickEvent(); // Verify Assert.AreEqual(0, refreshCalled, "Expected to connect once"); Assert.AreEqual(0, bindingCalled, "Not expected to bind yet"); this.outputWindowPane.AssertOutputStrings(1); infoBar.VerifyAllEventsRegistered(); this.infoBarManager.AssertHasAttachedInfoBar(ErrorListInfoBarController.ErrorListToolWindowGuid); }
public void ErrorListInfoBarController_InfoBar_ClickButton_HasConnectedActiveSection_IsBusy() { // Arrange this.SetBindingMode(SonarLintMode.LegacyConnected); var testSubject = new ErrorListInfoBarController(this.host, this.unboundProjectFinder); this.ConfigureLoadedSolution(); int executed = 0; ProjectViewModel project = null; ConfigurableSectionController section = this.ConfigureActiveSectionWithBindCommand(args => { executed++; args.ProjectKey.Should().Be(project.Key); }); project = this.ConfigureProjectViewModel(section); testSubject.Refresh(); RunAsyncAction(); this.stateManager.SetAndInvokeBusyChanged(true); // Sanity ConfigurableInfoBar infoBar = this.infoBarManager.AssertHasAttachedInfoBar(ErrorListInfoBarController.ErrorListToolWindowGuid); VerifyInfoBar(infoBar); // Act (command enabled) infoBar.SimulateButtonClickEvent(); // Assert executed.Should().Be(0, "Busy, should not be executed"); // Act this.stateManager.SetAndInvokeBusyChanged(false); // Assert executed.Should().Be(1, "Update was expected to be executed"); this.infoBarManager.AssertHasNoAttachedInfoBar(ErrorListInfoBarController.ErrorListToolWindowGuid); infoBar.VerifyAllEventsUnregistered(); }
public void ErrorListInfoBarController_RefreshShowInfoBar_ClickClose_UnregisterEvents() { // Setup this.IsActiveSolutionBound = true; var testSubject = new ErrorListInfoBarController(this.host); this.ConfigureLoadedSolution(); testSubject.Refresh(); RunAsyncAction(); // Sanity ConfigurableInfoBar infoBar = this.infoBarManager.AssertHasAttachedInfoBar(ErrorListInfoBarController.ErrorListToolWindowGuid); VerifyInfoBar(infoBar); // Act infoBar.SimulateClosedEvent(); // Verify infoBar.VerifyAllEventsUnregistered(); this.teamExplorerController.AssertExpectedNumCallsShowConnectionsPage(0); }
public void ErrorListInfoBarController_InfoBar_ClickButton_HasActiveSection_NavigatesToSection() { // Arrange this.IsActiveSolutionBound = true; var testSubject = new ErrorListInfoBarController(this.host); this.ConfigureLoadedSolution(); this.host.SetActiveSection(ConfigurableSectionController.CreateDefault()); testSubject.Refresh(); RunAsyncAction(); // Sanity ConfigurableInfoBar infoBar = this.infoBarManager.AssertHasAttachedInfoBar(ErrorListInfoBarController.ErrorListToolWindowGuid); VerifyInfoBar(infoBar); // Act infoBar.SimulateButtonClickEvent(); // Assert this.teamExplorerController.ShowConnectionsPageCallsCount.Should().Be(1); }
public void ErrorListInfoBarController_InfoBar_ClickButton_HasConnectedActiveSection_IsBusy() { // Setup this.IsActiveSolutionBound = true; var testSubject = new ErrorListInfoBarController(this.host); this.ConfigureLoadedSolution(); int executed = 0; ProjectViewModel project = null; ConfigurableSectionController section = this.ConfigureActiveSectionWithBindCommand(vm => { executed++; Assert.AreSame(project, vm); }); project = this.ConfigureProjectViewModel(section); testSubject.Refresh(); RunAsyncAction(); this.stateManager.SetAndInvokeBusyChanged(true); // Sanity ConfigurableInfoBar infoBar = this.infoBarManager.AssertHasAttachedInfoBar(ErrorListInfoBarController.ErrorListToolWindowGuid); VerifyInfoBar(infoBar); // Act (command enabled) infoBar.SimulateButtonClickEvent(); // Verify Assert.AreEqual(0, executed, "Busy, should not be executed"); // Act this.stateManager.SetAndInvokeBusyChanged(false); // Verify Assert.AreEqual(1, executed, "Update was expected to be executed"); this.infoBarManager.AssertHasNoAttachedInfoBar(ErrorListInfoBarController.ErrorListToolWindowGuid); infoBar.VerifyAllEventsUnregistered(); }
public void ErrorListInfoBarController_RefreshShowInfoBar_ClickClose_UnregisterEvents() { // Arrange this.SetBindingMode(SonarLintMode.LegacyConnected); var testSubject = new ErrorListInfoBarController(this.host, this.unboundProjectFinder); this.ConfigureLoadedSolution(); testSubject.Refresh(); RunAsyncAction(); // Sanity ConfigurableInfoBar infoBar = this.infoBarManager.AssertHasAttachedInfoBar(ErrorListInfoBarController.ErrorListToolWindowGuid); VerifyInfoBar(infoBar); // Act infoBar.SimulateClosedEvent(); // Assert infoBar.VerifyAllEventsUnregistered(); this.teamExplorerController.ShowConnectionsPageCallsCount.Should().Be(0); }
private static void VerifyInfoBar(ConfigurableInfoBar infoBar) { Assert.AreEqual(Strings.SonarLintInfoBarUnboundProjectsMessage, infoBar.Message); Assert.AreEqual(Strings.SonarLintInfoBarUpdateCommandText, infoBar.ButtonText); Assert.AreEqual(KnownMonikers.RuleWarning, infoBar.Image); }
private static void VerifyInfoBar(ConfigurableInfoBar infoBar) { infoBar.Message.Should().Be(Strings.SonarLintInfoBarUnboundProjectsMessage); infoBar.ButtonText.Should().Be(Strings.SonarLintInfoBarUpdateCommandText); infoBar.Image.Should().BeEquivalentTo(new SonarLintImageMoniker(KnownMonikers.RuleWarning.Guid, KnownMonikers.RuleWarning.Id)); }