public void ActivatesOpenModulesWithSavedOpenStateOnNextParseAfterRecoverOpenStateOnNextParse()
        {
            var selectionServiceMock = TestSelectionServiceMock();
            var openModules          = _testModuleSelections.Take(3)
                                       .Select(qualifiedSelection => qualifiedSelection.QualifiedName)
                                       .ToHashSet();

            selectionServiceMock.Setup(m => m.OpenModules()).Returns(openModules);

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

            var modulesForWhichToSaveOpenState = _testModuleSelections.Skip(1)
                                                 .Select(qualifiedSelection => qualifiedSelection.QualifiedName)
                                                 .ToHashSet();

            selectionRecoverer.SaveOpenState(modulesForWhichToSaveOpenState);
            selectionRecoverer.RecoverOpenStateOnNextParse();

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

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

            selectionServiceMock.Verify(m => m.TryActivate(_testModuleSelections[1].QualifiedName), Times.Once);
            selectionServiceMock.Verify(m => m.TryActivate(_testModuleSelections[2].QualifiedName), Times.Once);
            selectionServiceMock.Verify(m => m.TryActivate(_testModuleSelections[0].QualifiedName), Times.Never);
            selectionServiceMock.Verify(m => m.TryActivate(_testModuleSelections[3].QualifiedName), Times.Never);
        }
        public void OnNextParseAfterSetupOpenModulesWithSavedOpenStateBeforeSettingSelection()
        {
            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");

            var openModules = _testModuleSelections.Take(3)
                              .Select(qualifiedSelection => qualifiedSelection.QualifiedName)
                              .ToHashSet();

            selectionServiceMock.Setup(m => m.OpenModules()).Returns(openModules);

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

            var modulesForWhichToSaveOpenState = _testModuleSelections.Skip(1)
                                                 .Select(qualifiedSelection => qualifiedSelection.QualifiedName)
                                                 .ToHashSet();
            var selectionRecoveryModules = _testModuleSelections
                                           .Select(qualifiedSelection => qualifiedSelection.QualifiedName).Take(2);

            selectionRecoverer.SaveSelections(selectionRecoveryModules);
            selectionRecoverer.RecoverSavedSelectionsOnNextParse();
            selectionRecoverer.SaveOpenState(modulesForWhichToSaveOpenState);
            selectionRecoverer.RecoverOpenStateOnNextParse();

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

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

            Assert.AreEqual("TrySetSelection", lastCalledMethod);
        }