예제 #1
0
        private void _state_StateChanged(object sender, ParserStateEventArgs e)
        {
            if (_viewModel == null)
            {
                return;
            }

            if (_state.Status != ParserState.Error && _state.Status != ParserState.Parsed)
            {
                return;
            }

            _uiDispatcher.InvokeAsync(UpdateTab);
        }
예제 #2
0
 private void StateChangedHandler(object sender, ParserStateEventArgs e)
 {
     if (!CanRun || e.IsError)
     {
         refreshBackoff = false;
     }
     // CanRun returned true already, only refresh tests if we're not backed off
     else if (!refreshBackoff && e.OldState != ParserState.Busy)
     {
         refreshBackoff = true;
         Tests          = TestDiscovery.GetAllTests(_state);
         _uiDispatcher.InvokeAsync(() => TestsRefreshed?.Invoke(this, EventArgs.Empty));
     }
 }
        private void _state_StateChanged(object sender, ParserStateEventArgs e)
        {
            if (e.State != ParserState.Ready)
            {
                return;
            }

            if (_viewModel == null)
            {
                return;
            }

            UiDispatcher.InvokeAsync(UpdateTab);
        }
예제 #4
0
        private void State_StateChanged(object sender, ParserStateEventArgs e)
        {
            if (e.State != ParserState.ResolvedDeclarations)
            {
                return;
            }

            _dispatcher.Invoke(() =>
            {
                var tests = UnitTestUtils.GetAllTests(_vbe, _state).ToList();

                var removedTests = Tests.Where(test =>
                                               !tests.Any(t =>
                                                          t.Declaration.ComponentName == test.Declaration.ComponentName &&
                                                          t.Declaration.IdentifierName == test.Declaration.IdentifierName &&
                                                          t.Declaration.ProjectId == test.Declaration.ProjectId)).ToList();

                // remove old tests
                foreach (var test in removedTests)
                {
                    Tests.Remove(test);
                }

                // update declarations for existing tests--declarations are immutable
                foreach (var test in Tests.Except(removedTests))
                {
                    var declaration = tests.First(t =>
                                                  t.Declaration.ComponentName == test.Declaration.ComponentName &&
                                                  t.Declaration.IdentifierName == test.Declaration.IdentifierName &&
                                                  t.Declaration.ProjectId == test.Declaration.ProjectId).Declaration;

                    test.SetDeclaration(declaration);
                }

                // add new tests
                foreach (var test in tests)
                {
                    if (!Tests.Any(t =>
                                   t.Declaration.ComponentName == test.Declaration.ComponentName &&
                                   t.Declaration.IdentifierName == test.Declaration.IdentifierName &&
                                   t.Declaration.ProjectId == test.Declaration.ProjectId))
                    {
                        Tests.Add(test);
                    }
                }
            });

            OnTestsRefreshed();
        }
예제 #5
0
        private void StateChangedHandler(object sender, ParserStateEventArgs e)
        {
            if (_testRequested && (e.State == ParserState.Ready))
            {
                _testRequested = false;
                _uiDispatcher.InvokeAsync(() =>
                {
                    RunInternal(_tests);
                });
            }

            if (_testRequested && !e.IsError)
            {
                _testRequested = false;
            }
        }
예제 #6
0
        private void OnStateChanged(object sender, ParserStateEventArgs e)
        {
            if (e.State != ParserState.Ready && e.State != ParserState.Error && e.State != ParserState.ResolverError && e.State != ParserState.UnexpectedError)
            {
                IsBusy = true;
            }

            if (e.State == ParserState.Ready)
            {
                UpdateData();
                IsBusy = false;
            }

            if (e.State == ParserState.Error || e.State == ParserState.ResolverError || e.State == ParserState.UnexpectedError)
            {
                IsBusy = false;
            }
        }
        private void OnStateChanged(object sender, ParserStateEventArgs e)
        {
            if (e.State != ParserState.Ready && e.State != ParserState.Error && e.State != ParserState.ResolverError && e.State != ParserState.UnexpectedError)
            {
                IsBusy = true;
            }

            if (e.State == ParserState.Ready)
            {
                ModuleMetrics = new ObservableCollection <ModuleMetricsResult>(_analyst.ModuleMetrics(_state));
                IsBusy        = false;
            }

            if (e.State == ParserState.Error || e.State == ParserState.ResolverError || e.State == ParserState.UnexpectedError)
            {
                IsBusy = false;
            }
        }
        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);
        }
예제 #10
0
        private void StateChanged(object sender, ParserStateEventArgs e)
        {
            if (e.State != ParserState.Ready)
            {
                return;
            }

            var stopwatch = new Stopwatch();

            _model.ClearLastRun();
            _model.IsBusy = true;

            stopwatch.Start();
            _engine.Run(_model.Tests);
            stopwatch.Stop();

            _model.IsBusy        = false;
            _state.StateChanged -= StateChanged;

            OnRunCompleted(new TestRunEventArgs(stopwatch.ElapsedMilliseconds));
        }
예제 #11
0
        private void StateChangedHandler(object sender, ParserStateEventArgs e)
        {
            if (e.OldState == ParserState.Started)
            {
                _uiDispatcher.InvokeAsync(() => TestsRefreshStarted?.Invoke(this, EventArgs.Empty));
                return;
            }

            if (!CanRun || e.IsError)
            {
                _listening = true;
            }
            // CanRun returned true already, only refresh tests if we're not backed off
            else if (_listening && e.OldState != ParserState.Busy)
            {
                _listening = false;
                var updates = TestDiscovery.GetAllTests(_state).ToList();
                var run     = new List <TestMethod>();
                var known   = new Dictionary <TestMethod, TestOutcome>();

                foreach (var test in updates)
                {
                    var match = _lastRun.FirstOrDefault(ut => ut.Equals(test));
                    if (match != null)
                    {
                        run.Add(match);
                    }

                    if (_knownOutcomes.ContainsKey(test))
                    {
                        known.Add(test, _knownOutcomes[test]);
                    }
                }

                _tests         = updates;
                _lastRun       = run;
                _knownOutcomes = known;
                _uiDispatcher.InvokeAsync(() => TestsRefreshed?.Invoke(this, EventArgs.Empty));
            }
        }
예제 #12
0
        public void SetReplacementSelectionOnNextParseAfterRecoverSelectionsOnNextParse_SelectionNotSavedPreviously_ModuleOpen()
        {
            var selectionServiceMock = TestSelectionServiceMock();
            var parseManagerMock     = new Mock <IParseManager>();
            var selectionRecoverer   = new SelectionRecoverer(selectionServiceMock.Object, parseManagerMock.Object);

            var selectionReplacement = new Selection(22, 2, 44, 5);

            selectionRecoverer.SaveSelections(_testModuleSelections.Select(qualifiedSelection => qualifiedSelection.QualifiedName).Take(2));
            selectionRecoverer.ReplaceSavedSelection(_testModuleSelections[2].QualifiedName, selectionReplacement);
            selectionRecoverer.RecoverSavedSelectionsOnNextParse();

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

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

            selectionServiceMock.Verify(m => m.TrySetSelection(_testModuleSelections[0].QualifiedName, _testModuleSelections[0].Selection), Times.Once);
            selectionServiceMock.Verify(m => m.TrySetSelection(_testModuleSelections[1].QualifiedName, _testModuleSelections[1].Selection), Times.Once);
            selectionServiceMock.Verify(m => m.TrySetSelection(_testModuleSelections[2].QualifiedName, selectionReplacement), Times.Once);
            selectionServiceMock.Verify(m => m.TrySetSelection(_testModuleSelections[3].QualifiedName, It.IsAny <Selection>()), Times.Never);
        }
        private void _state_StateChanged(object sender, ParserStateEventArgs e)
        {
            if (e.State != ParserState.Ready)
            {
                return;
            }

            QualifiedSelection?oldSelection = null;
            var pane   = _vbe.ActiveCodePane;
            var module = pane.CodeModule;
            {
                if (!module.IsWrappingNullReference)
                {
                    oldSelection = module.GetQualifiedSelection();
                }

                var newTarget = _state.AllUserDeclarations.FirstOrDefault(
                    item => item.ComponentName == _target.ComponentName &&
                    item.IdentifierName == _target.IdentifierName &&
                    item.ParentScope == _target.ParentScope &&
                    item.ProjectId == _target.ProjectId &&
                    Equals(item.Selection, _target.Selection));

                if (newTarget != null)
                {
                    UpdateCallsToOtherModule(newTarget.References.ToList());
                    RemoveField(newTarget);
                }

                if (oldSelection.HasValue)
                {
                    pane.Selection = oldSelection.Value.Selection;
                }

                _state.StateChanged -= _state_StateChanged;
                _state.OnParseRequested(this);
            }
        }
예제 #14
0
        public void ReplacementSelectionOverwritesAdjustmentOnParseAfterRecoverSelectionsOnNextParse()
        {
            var selectionServiceMock = TestSelectionServiceMock();
            var parseManagerMock     = new Mock <IParseManager>();
            var selectionRecoverer   = new SelectionRecoverer(selectionServiceMock.Object, parseManagerMock.Object);

            var selectionOffset      = new Selection(0, 2, 4, 5);
            var selectionReplacement = new Selection(22, 2, 44, 5);

            selectionRecoverer.SaveSelections(_testModuleSelections
                                              .Select(qualifiedSelection => qualifiedSelection.QualifiedName).Take(1));
            selectionRecoverer.AdjustSavedSelection(_testModuleSelections[0].QualifiedName, selectionOffset);
            selectionRecoverer.ReplaceSavedSelection(_testModuleSelections[0].QualifiedName, selectionReplacement);
            selectionRecoverer.RecoverSavedSelectionsOnNextParse();

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

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

            selectionServiceMock.Verify(
                m => m.TrySetSelection(_testModuleSelections[0].QualifiedName, selectionReplacement), Times.Once);
        }
        private void _state_StateChanged(object sender, ParserStateEventArgs e)
        {
            if (e.State != ParserState.Ready)
            {
                return;
            }

            var newTarget = _state.AllUserDeclarations.FirstOrDefault(
                item => item.ComponentName == _target.ComponentName &&
                item.IdentifierName == _target.IdentifierName &&
                item.ParentScope == _target.ParentScope &&
                item.Project == _target.Project &&
                Equals(item.Selection, _target.Selection));

            if (newTarget != null)
            {
                UpdateCallsToOtherModule(newTarget.References);
                RemoveField(newTarget);
            }

            _state.StateChanged -= _state_StateChanged;
            _state.OnParseRequested(this);
        }
예제 #16
0
        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);
        }
예제 #17
0
        public void SetsExactlySavedSelectionsOnParseAfterRecoverSelectionsOnNextParse()
        {
            var selectionServiceMock = TestSelectionServiceMock();
            var parseManagerMock     = new Mock <IParseManager>();
            var selectionRecoverer   = new SelectionRecoverer(selectionServiceMock.Object, parseManagerMock.Object);

            selectionRecoverer.SaveSelections(_testModuleSelections
                                              .Select(qualifiedSelection => qualifiedSelection.QualifiedName).Take(2));
            selectionRecoverer.RecoverSavedSelectionsOnNextParse();

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

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

            foreach (var qualifiedSelection in _testModuleSelections.Take(2))
            {
                selectionServiceMock.Verify(
                    m => m.TrySetSelection(qualifiedSelection.QualifiedName, qualifiedSelection.Selection), Times.Once);
            }

            selectionServiceMock.Verify(
                m => m.TrySetSelection(_testModuleSelections[2].QualifiedName, It.IsAny <Selection>()), Times.Never);
        }
        private void ExecuteRecovery(object sender, ParserStateEventArgs e)
        {
            if (e.State != ParserStateOnWhichToTriggerRecovery)
            {
                return;
            }

            _parseManager.StateChanged -= ExecuteRecovery;

            if (_openStateRecoveryPrimed)
            {
                ExecuteOpenStateRecovery();
            }

            if (_selectionRecoveryPrimed)
            {
                ExecuteSelectionRecovery();
            }

            if (_activeCodePaneRecoveryPrimed)
            {
                ExecuteActiveCodePaneRecovery();
            }
        }