public void CloseNonExistentCompilation_ShouldClearDiagnostics() { PublishDiagnosticsParams?receivedParams = null; var document = CreateMockDocument(p => receivedParams = p); var server = CreateMockServer(document); var manager = new BicepCompilationManager(server.Object, new BicepCompilationProvider(TestResourceTypeProvider.Create(), CreateEmptyFileResolver()), new Workspace()); var uri = DocumentUri.File(this.TestContext.TestName); manager.CloseCompilation(uri); // close should have cleared diagnostics document.Verify(m => m.SendNotification(It.IsAny <PublishDiagnosticsParams>()), Times.Once); // expect zero diagnostics and 0 version receivedParams.Should().NotBeNull(); receivedParams !.Uri.Should().Be(uri); receivedParams.Version.Should().Be(0); receivedParams.Diagnostics.Should().BeEmpty(); // reset call counts document.Invocations.Clear(); }
public void FatalException_ShouldProduceCorrectDiagnosticsAndClearThemWhenFileIsClosed() { PublishDiagnosticsParams?receivedParams = null; var document = CreateMockDocument(p => receivedParams = p); var server = CreateMockServer(document); var provider = Repository.Create <ICompilationProvider>(); const string expectedMessage = "Internal bicep exception."; provider.Setup(m => m.Create(It.IsAny <IReadOnlyWorkspace>(), It.IsAny <DocumentUri>())).Throws(new InvalidOperationException(expectedMessage)); var manager = new BicepCompilationManager(server.Object, provider.Object, new Workspace()); const int version = 74; var uri = DocumentUri.File(this.TestContext.TestName); // upsert should fail because of the mock fatal exception manager.UpsertCompilation(uri, version, "fake"); manager.GetCompilation(uri).Should().BeNull(); // diagnostics should have been published once document.Verify(m => m.SendNotification(It.IsAny <PublishDiagnosticsParams>()), Times.Once); receivedParams.Should().NotBeNull(); receivedParams !.Uri.Should().Be(uri); receivedParams.Version.Should().Be(version); receivedParams.Diagnostics.Should().HaveCount(1); var fatalDiagnostic = receivedParams.Diagnostics.Single(); fatalDiagnostic.Message.Should().Be(expectedMessage); fatalDiagnostic.Severity.Should().Be(DiagnosticSeverity.Error); // reset counts document.Invocations.Clear(); // close the compilation (even if it wasn't opened successfully) manager.CloseCompilation(uri); // diagnostics should have been published once document.Verify(m => m.SendNotification(It.IsAny <PublishDiagnosticsParams>()), Times.Once); // 0 diagnostics expected receivedParams.Should().NotBeNull(); receivedParams !.Uri.Should().Be(uri); receivedParams.Version.Should().Be(0); receivedParams.Diagnostics.Should().BeEmpty(); }
public void CloseAfterUpsert_ShouldClearDiagnostics() { PublishDiagnosticsParams?receivedParams = null; var document = CreateMockDocument(p => receivedParams = p); var server = CreateMockServer(document); var manager = new BicepCompilationManager(server.Object, new BicepCompilationProvider(TestResourceTypeProvider.Create(), CreateEmptyFileResolver()), new Workspace()); const int version = 42; var uri = DocumentUri.File(this.TestContext.TestName); // first get should not return anything manager.GetCompilation(uri).Should().BeNull(); // upsert the compilation manager.UpsertCompilation(uri, version, "hello"); document.Verify(m => m.SendNotification(It.IsAny <PublishDiagnosticsParams>()), Times.Once); // there should have been 1 diagnostic receivedParams.Should().NotBeNull(); receivedParams !.Uri.Should().Be(uri); receivedParams.Version.Should().Be(version); receivedParams.Diagnostics.Should().NotBeNullOrEmpty(); receivedParams.Diagnostics.Count().Should().Be(1); // reset tracked calls document.Invocations.Clear(); // get again var actual = manager.GetCompilation(uri); actual.Should().NotBeNull(); // get should not have pushed diagnostics document.Verify(m => m.SendNotification(It.IsAny <PublishDiagnosticsParams>()), Times.Never); // 2nd get should be the same manager.GetCompilation(uri).Should().BeSameAs(actual); // get should not have pushed diagnostics document.Verify(m => m.SendNotification(It.IsAny <PublishDiagnosticsParams>()), Times.Never); // close compilation manager.CloseCompilation(uri); // close should have cleared diagnostics document.Verify(m => m.SendNotification(It.IsAny <PublishDiagnosticsParams>()), Times.Once); // expect zero diagnostics and 0 version receivedParams.Should().NotBeNull(); receivedParams.Uri.Should().Be(uri); receivedParams.Version.Should().Be(0); receivedParams.Diagnostics.Should().BeEmpty(); // reset call counts document.Invocations.Clear(); // get again manager.GetCompilation(uri).Should().BeNull(); // get should not have pushed diagnostics document.Verify(m => m.SendNotification(It.IsAny <PublishDiagnosticsParams>()), Times.Never); }