public void Dispose_NoPreviousInfoBar_NoException()
        {
            var infoBarManager = new Mock <IInfoBarManager>();
            var testSubject    = new OpenInIDEFailureInfoBar(infoBarManager.Object, Mock.Of <IOutputWindowService>());

            testSubject.Dispose();

            infoBarManager.VerifyNoOtherCalls();
        }
        public async Task Clear_NoPreviousInfoBar_NoException()
        {
            var infoBarManager = new Mock <IInfoBarManager>();
            var testSubject    = new OpenInIDEFailureInfoBar(infoBarManager.Object, Mock.Of <IOutputWindowService>());

            // Act
            await testSubject.ClearAsync();

            infoBarManager.Invocations.Should().BeEmpty();
        }
        public async Task Show_NoPreviousInfoBar_InfoBarIsShown()
        {
            var infoBar = new Mock <IInfoBar>();

            SetupInfoBarEvents(infoBar);

            var infoBarManager = new Mock <IInfoBarManager>();

            infoBarManager
            .Setup(x => x.AttachInfoBarWithButton(ValidToolWindowId, It.IsAny <string>(), It.IsAny <string>(), default))
            .Returns(infoBar.Object);

            var testSubject = new OpenInIDEFailureInfoBar(infoBarManager.Object, Mock.Of <IOutputWindowService>());

            // Act
            await testSubject.ShowAsync(ValidToolWindowId);

            CheckInfoBarWithEventsAdded(infoBarManager, infoBar, ValidToolWindowId);
            infoBar.VerifyNoOtherCalls();
        }
        private async static Task <OpenInIDEFailureInfoBar> CreateTestSubjectWithPreviousInfoBar(
            Mock <IInfoBarManager> infoBarManager = null,
            Mock <IInfoBar> infoBar = null,
            Mock <IOutputWindowService> outputWindow = null)
        {
            infoBar ??= new Mock <IInfoBar>();
            infoBarManager ??= new Mock <IInfoBarManager>();
            outputWindow ??= new Mock <IOutputWindowService>();

            infoBarManager
            .Setup(x => x.AttachInfoBarWithButton(ValidToolWindowId, It.IsAny <string>(), It.IsAny <string>(), default))
            .Returns(infoBar.Object);

            var testSubject = new OpenInIDEFailureInfoBar(infoBarManager.Object, outputWindow.Object);

            // Call "Show" to create an infobar and check it was added
            await testSubject.ShowAsync(ValidToolWindowId);

            infoBarManager.VerifyAll();
            infoBarManager.VerifyNoOtherCalls();
            outputWindow.Invocations.Should().BeEmpty();

            return(testSubject);
        }
        public async Task Show_HasPreviousInfoBar_InfoBarReplaced()
        {
            var firstInfoBar   = new Mock <IInfoBar>();
            var secondInfoBar  = new Mock <IInfoBar>();
            var infoBarManager = new Mock <IInfoBarManager>();

            infoBarManager
            .SetupSequence(x => x.AttachInfoBarWithButton(ValidToolWindowId, It.IsAny <string>(), It.IsAny <string>(), default))
            .Returns(firstInfoBar.Object)
            .Returns(secondInfoBar.Object);

            var testSubject = new OpenInIDEFailureInfoBar(infoBarManager.Object, Mock.Of <IOutputWindowService>());

            // Act
            await testSubject.ShowAsync(ValidToolWindowId); // show first bar

            await testSubject.ShowAsync(ValidToolWindowId); // show second bar

            firstInfoBar.VerifyNoOtherCalls();
            secondInfoBar.VerifyNoOtherCalls();
            infoBarManager.VerifyAll();
            infoBarManager.Verify(x => x.DetachInfoBar(firstInfoBar.Object), Times.Once);
            infoBarManager.VerifyNoOtherCalls();
        }