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); } }
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); } }
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); }
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(); }