public void OnNextParseAfterSetupSetsSelectionsBeforeReactivatingTheActiveCodePane()
        {
            var lastCalledMethod     = string.Empty;
            var selectionServiceMock = TestSelectionServiceMock();

            selectionServiceMock.Setup(m => m.TryActivate(It.IsAny <QualifiedModuleName>()))
            .Callback((QualifiedModuleName module) => lastCalledMethod = "TryActivate");
            selectionServiceMock.Setup(m => m.TrySetSelection(It.IsAny <QualifiedModuleName>(), It.IsAny <Selection>()))
            .Callback((QualifiedModuleName module, Selection selection) => lastCalledMethod = "TrySetSelection");

            selectionServiceMock.Setup(m => m.ActiveSelection()).Returns(() => _testModuleSelections[1]);

            var parseManagerMock   = new Mock <IParseManager>();
            var selectionRecoverer = new SelectionRecoverer(selectionServiceMock.Object, parseManagerMock.Object);

            var selectionRecoveryModules = _testModuleSelections
                                           .Select(qualifiedSelection => qualifiedSelection.QualifiedName).Take(2);

            selectionRecoverer.SaveSelections(selectionRecoveryModules);
            selectionRecoverer.RecoverSavedSelectionsOnNextParse();
            selectionRecoverer.SaveActiveCodePane();
            selectionRecoverer.RecoverActiveCodePaneOnNextParse();

            var stateEventArgs = new ParserStateEventArgs(_stateExpectedToTriggerTheRecovery, ParserState.Pending,
                                                          CancellationToken.None);

            parseManagerMock.Raise(m => m.StateChanged += null, stateEventArgs);

            Assert.AreEqual("TryActivate", lastCalledMethod);
        }
        public void DoesNotActivateAnythingOnRecoverActiveCodePane_ActiveSelectionDoesNotExist()
        {
            var selectionServiceMock = TestSelectionServiceMock();

            selectionServiceMock.Setup(m => m.ActiveSelection()).Returns((QualifiedSelection?)null);

            var parseManagerMock   = new Mock <IParseManager>();
            var selectionRecoverer = new SelectionRecoverer(selectionServiceMock.Object, parseManagerMock.Object);

            selectionRecoverer.SaveActiveCodePane();
            selectionRecoverer.RecoverActiveCodePane();

            selectionServiceMock.Verify(m => m.TryActivate(It.IsAny <QualifiedModuleName>()), Times.Never);
        }
        public void RecoverActiveCodePaneOnNextParseDoesNotDoAnythingImmediately()
        {
            var selectionServiceMock = TestSelectionServiceMock();
            var activeSelection      = _testModuleSelections[1];

            selectionServiceMock.Setup(m => m.ActiveSelection()).Returns(activeSelection);

            var parseManagerMock   = new Mock <IParseManager>();
            var selectionRecoverer = new SelectionRecoverer(selectionServiceMock.Object, parseManagerMock.Object);

            selectionRecoverer.SaveActiveCodePane();
            selectionRecoverer.RecoverActiveCodePaneOnNextParse();

            selectionServiceMock.Verify(m => m.TryActivate(activeSelection.QualifiedName), Times.Never);
        }
        public void ActivatesSavedActiveCodePaneOnRecoverActiveCodePane_ActiveSelectionExists()
        {
            var selectionServiceMock = TestSelectionServiceMock();
            var activeSelection      = _testModuleSelections[1];

            selectionServiceMock.Setup(m => m.ActiveSelection()).Returns(activeSelection);

            var parseManagerMock   = new Mock <IParseManager>();
            var selectionRecoverer = new SelectionRecoverer(selectionServiceMock.Object, parseManagerMock.Object);

            selectionRecoverer.SaveActiveCodePane();
            selectionRecoverer.RecoverActiveCodePane();

            selectionServiceMock.Verify(m => m.TryActivate(activeSelection.QualifiedName), Times.Once);
        }
        DoesNotActivateAnythingOnNextParseAfterOnRecoverActiveCodePaneOnNextParse_ActiveSelectionDoesNotExist()
        {
            var selectionServiceMock = TestSelectionServiceMock();

            selectionServiceMock.Setup(m => m.ActiveSelection()).Returns((QualifiedSelection?)null);

            var parseManagerMock   = new Mock <IParseManager>();
            var selectionRecoverer = new SelectionRecoverer(selectionServiceMock.Object, parseManagerMock.Object);

            selectionRecoverer.SaveActiveCodePane();
            selectionRecoverer.RecoverActiveCodePaneOnNextParse();

            var stateEventArgs = new ParserStateEventArgs(_stateExpectedToTriggerTheRecovery, ParserState.Pending,
                                                          CancellationToken.None);

            parseManagerMock.Raise(m => m.StateChanged += null, stateEventArgs);

            selectionServiceMock.Verify(m => m.TryActivate(It.IsAny <QualifiedModuleName>()), Times.Never);
        }
        ActivatesSavedActiveCodePaneOnNextParseAfterOnRecoverActiveCodePaneOnNextParse_ActiveSelectionExists()
        {
            var selectionServiceMock = TestSelectionServiceMock();
            var activeSelection      = _testModuleSelections[1];

            selectionServiceMock.Setup(m => m.ActiveSelection()).Returns(activeSelection);

            var parseManagerMock   = new Mock <IParseManager>();
            var selectionRecoverer = new SelectionRecoverer(selectionServiceMock.Object, parseManagerMock.Object);

            selectionRecoverer.SaveActiveCodePane();
            selectionRecoverer.RecoverActiveCodePaneOnNextParse();

            var stateEventArgs = new ParserStateEventArgs(_stateExpectedToTriggerTheRecovery, ParserState.Pending,
                                                          CancellationToken.None);

            parseManagerMock.Raise(m => m.StateChanged += null, stateEventArgs);

            selectionServiceMock.Verify(m => m.TryActivate(activeSelection.QualifiedName), Times.Once);
        }