コード例 #1
0
        public void WhenFileIsSaved_AnalysisIsRequested_ButOnlyIfATaggerIsRegistered()
        {
            // Arrange
            var testSubject = new TextBufferIssueTracker(taggerProvider.dte, taggerProvider,
                                                         mockedJavascriptDocumentFooJs.Object, javascriptLanguage, new TestLogger());

            // 1. No tagger -> analysis not requested
            RaiseFileSavedEvent(mockedJavascriptDocumentFooJs);
            CheckAnalysisWasNotRequested();

            // 2. Add a tagger and raise -> analysis requested
            var tagger = new IssueTagger(testSubject);

            mockAnalyzerController.Invocations.Clear();

            RaiseFileSavedEvent(mockedJavascriptDocumentFooJs);
            mockAnalyzerController.Verify(x => x.ExecuteAnalysis("foo.js", "utf-8", new AnalysisLanguage[] { AnalysisLanguage.Javascript }, testSubject, It.IsAny <ProjectItem>()), Times.Once);

            // 3. Unregister tagger and raise -> analysis not requested
            tagger.Dispose();
            mockAnalyzerController.Invocations.Clear();

            RaiseFileSavedEvent(mockedJavascriptDocumentFooJs);
            CheckAnalysisWasNotRequested();
        }
        public void WhenNewIssuesAreFound_ButForIncorrectFile_ListenersAreNotUpdated()
        {
            // Arrange
            var issues = new[] { new Sonarlint.Issue {
                                     RuleKey = "S123", StartLine = 1, EndLine = 1
                                 } };

            // Add a couple of error list listeners
            var errorListSinkMock1 = RegisterNewErrorListSink();
            var errorListSinkMock2 = RegisterNewErrorListSink();

            var testSubject = new TextBufferIssueTracker(taggerProvider.dte, taggerProvider,
                                                         mockedJavascriptDocumentFooJs.Object, javascriptLanguage, new TestLogger());
            var tagger = new IssueTagger(testSubject);

            // Act
            using (new AssertIgnoreScope())
            {
                ((IIssueConsumer)testSubject).Accept("aRandomFile.xxx", issues);
            }

            // Assert
            CheckSinkNotNotified(errorListSinkMock1);
            CheckSinkNotNotified(errorListSinkMock2);
        }
        public void WhenFileIsSaved_AnalysisIsRequested_ButOnlyIfATaggerIsRegistered()
        {
            // Arrange
            var testSubject = new TextBufferIssueTracker(taggerProvider.dte, taggerProvider,
                                                         mockedJavascriptDocumentFooJs.Object, javascriptLanguage, new TestLogger());

            // 1. No tagger -> analysis not requested
            RaiseFileSavedEvent(mockedJavascriptDocumentFooJs);
            CheckAnalysisWasNotRequested();

            // 2. Add a tagger and raise -> analysis requested
            var tagger = new IssueTagger(testSubject);

            daemonMock.ResetCalls();

            RaiseFileSavedEvent(mockedJavascriptDocumentFooJs);
            daemonMock.Verify(x => x.RequestAnalysis("foo.js", "utf-8", "js", null, testSubject), Times.Once);

            // 3. Unregister tagger and raise -> analysis not requested
            tagger.Dispose();
            daemonMock.ResetCalls();

            RaiseFileSavedEvent(mockedJavascriptDocumentFooJs);
            CheckAnalysisWasNotRequested();
        }
        public void WhenTaggerIsRegistered_AnalysisIsRequested()
        {
            // 1. No tagger -> analysis not requested
            CheckAnalysisWasNotRequested();

            // 2. Add a tagger -> analysis requested
            using (var tagger = new IssueTagger(testSubject))
            {
                mockAnalyzerController.Verify(x => x.ExecuteAnalysis("foo.js", "utf-8", new AnalysisLanguage[] { AnalysisLanguage.Javascript }, testSubject, It.IsAny <ProjectItem>()), Times.Once);
            }
        }
コード例 #5
0
        public void WhenTaggerIsRegistered_AnalysisIsRequested()
        {
            // 1. No tagger -> analysis not requested
            CheckAnalysisWasNotRequested();

            // 2. Add a tagger -> analysis requested
            using (var tagger = new IssueTagger(testSubject))
            {
                mockAnalyzerController.Verify(x => x.ExecuteAnalysis("foo.js", "utf-8", new AnalysisLanguage[] { AnalysisLanguage.Javascript }, testSubject, It.IsAny <ProjectItem>(),
                                                                     (IAnalyzerOptions)null /* no expecting any options when a new tagger is added */,
                                                                     It.IsAny <CancellationToken>()), Times.Once);
            }
        }
        public void WhenTaggerIsRegistered_AnalysisIsRequested()
        {
            // Arrange
            var testSubject = new TextBufferIssueTracker(taggerProvider.dte, taggerProvider,
                                                         mockedJavascriptDocumentFooJs.Object, javascriptLanguage, new TestLogger());

            // 1. No tagger -> analysis not requested
            CheckAnalysisWasNotRequested();

            // 2. Add a tagger -> analysis requested
            var tagger = new IssueTagger(testSubject);

            daemonMock.Verify(x => x.RequestAnalysis("foo.js", "utf-8", "js", null, testSubject), Times.Once);
        }
        public void WhenFileIsLoaded_AnalysisIsNotRequested()
        {
            using (var tagger = new IssueTagger(testSubject))
            {
                mockAnalyzerController.Invocations.Clear();

                // Act
                RaiseFileLoadedEvent(mockedJavascriptDocumentFooJs);
                CheckAnalysisWasNotRequested();

                // Sanity check (that the test setup is correct and that events are actually being handled)
                RaiseFileSavedEvent(mockedJavascriptDocumentFooJs);
                mockAnalyzerController.Verify(x => x.ExecuteAnalysis("foo.js", "utf-8", new AnalysisLanguage[] { AnalysisLanguage.Javascript }, testSubject, It.IsAny <ProjectItem>()), Times.Once);
            }
        }
コード例 #8
0
        public void WhenTaggerIsRegistered_AnalysisIsRequested()
        {
            // Arrange
            var testSubject = new TextBufferIssueTracker(taggerProvider.dte, taggerProvider,
                                                         mockedJavascriptDocumentFooJs.Object, javascriptLanguage, new TestLogger());

            // 1. No tagger -> analysis not requested
            CheckAnalysisWasNotRequested();

            // 2. Add a tagger -> analysis requested
            using (var tagger = new IssueTagger(testSubject))
            {
                mockAnalyzerController.Verify(x => x.ExecuteAnalysis("foo.js", "utf-8", new AnalysisLanguage[] { AnalysisLanguage.Javascript }, testSubject, It.IsAny <ProjectItem>()), Times.Once);
            }
        }
        public void WhenNewIssuesAreFound_ListenersAreUpdated()
        {
            // Arrange
            var issues = new[] {
                new Sonarlint.Issue {
                    RuleKey = "S111", StartLine = 1, EndLine = 1
                },
                // The next issue is outside the range of the new snapshot and should be ignored
                new Sonarlint.Issue {
                    RuleKey = "S222", StartLine = 99999998, EndLine = 99999999
                },
                new Sonarlint.Issue {
                    RuleKey = "S333", StartLine = 100, EndLine = 101
                }
            };

            // Add a couple of error list listeners
            var errorListSinkMock1 = RegisterNewErrorListSink();
            var errorListSinkMock2 = RegisterNewErrorListSink();

            var testSubject = new TextBufferIssueTracker(taggerProvider.dte, taggerProvider,
                                                         mockedJavascriptDocumentFooJs.Object, javascriptLanguage, new TestLogger());
            var tagger = new IssueTagger(testSubject);

            // Sanity check
            testSubject.LastIssues.Should().BeNull();
            testSubject.Factory.CurrentSnapshot.VersionNumber.Should().Be(0);
            testSubject.Factory.CurrentSnapshot.IssueMarkers.Count().Should().Be(0);

            // Act
            ((IIssueConsumer)testSubject).Accept(mockedJavascriptDocumentFooJs.Object.FilePath, issues);

            // Assert
            // We can't check that the editors listeners are notified: we can't mock
            // SnapshotSpan well enough for the product code to work -> affected span
            // is always null so the taggers don't notify their listeners.
            CheckSinkNotified(errorListSinkMock1, 1);
            CheckSinkNotified(errorListSinkMock2, 1);

            testSubject.LastIssues.Should().NotBeNull();
            testSubject.Factory.CurrentSnapshot.VersionNumber.Should().Be(1);
            testSubject.Factory.CurrentSnapshot.IssueMarkers.Count().Should().Be(2);

            var actualMarkers = testSubject.Factory.CurrentSnapshot.IssueMarkers.ToArray();

            actualMarkers[0].Issue.RuleKey.Should().Be("S111");
            actualMarkers[1].Issue.RuleKey.Should().Be("S333");
        }
        public void WhenFileIsLoaded_AnalysisIsNotRequested()
        {
            // Arrange
            var testSubject = new TextBufferIssueTracker(taggerProvider.dte, taggerProvider,
                                                         mockedJavascriptDocumentFooJs.Object, javascriptLanguage, new TestLogger());

            var tagger = new IssueTagger(testSubject);

            daemonMock.ResetCalls();

            // Act
            RaiseFileLoadedEvent(mockedJavascriptDocumentFooJs);
            CheckAnalysisWasNotRequested();

            // Sanity check (that the test setup is correct and that events are actually being handled)
            RaiseFileSavedEvent(mockedJavascriptDocumentFooJs);
            daemonMock.Verify(x => x.RequestAnalysis("foo.js", "utf-8", "js", null, testSubject), Times.Once);
        }
コード例 #11
0
        public void WhenFileIsSaved_AnalysisIsRequested_ButOnlyIfATaggerIsRegistered()
        {
            // 1. No tagger -> analysis not requested
            RaiseFileSavedEvent(mockedJavascriptDocumentFooJs);
            CheckAnalysisWasNotRequested();

            // 2. Add a tagger and raise -> analysis requested
            var tagger = new IssueTagger(testSubject);

            mockAnalyzerController.Invocations.Clear();


            RaiseFileSavedEvent(mockedJavascriptDocumentFooJs);
            mockAnalyzerController.Verify(x => x.ExecuteAnalysis("foo.js", "utf-8", new AnalysisLanguage[] { AnalysisLanguage.Javascript }, testSubject, It.IsAny <ProjectItem>(),
                                                                 (IAnalyzerOptions)null /* no expecting any options when the settings file is updated */,
                                                                 It.IsAny <CancellationToken>()), Times.Once);

            // 3. Unregister tagger and raise -> analysis not requested
            tagger.Dispose();
            mockAnalyzerController.Invocations.Clear();

            RaiseFileSavedEvent(mockedJavascriptDocumentFooJs);
            CheckAnalysisWasNotRequested();
        }