From 2f1debc7c995cd71595c64ac738e7e9504eb90be Mon Sep 17 00:00:00 2001 From: Connor Quagliana Date: Thu, 15 Dec 2016 11:40:10 -0800 Subject: [PATCH] Added positive test for GetSignatureHelp --- .../LanguageServer/LanguageServiceTests.cs | 60 ++++++++++++++----- .../Utility/TestObjects.cs | 16 +++++ 2 files changed, 60 insertions(+), 16 deletions(-) diff --git a/test/Microsoft.SqlTools.ServiceLayer.Test/LanguageServer/LanguageServiceTests.cs b/test/Microsoft.SqlTools.ServiceLayer.Test/LanguageServer/LanguageServiceTests.cs index a445fb49..841196f5 100644 --- a/test/Microsoft.SqlTools.ServiceLayer.Test/LanguageServer/LanguageServiceTests.cs +++ b/test/Microsoft.SqlTools.ServiceLayer.Test/LanguageServer/LanguageServiceTests.cs @@ -126,7 +126,11 @@ namespace Microsoft.SqlTools.ServiceLayer.Test.LanguageServer Assert.Equal(10, fileMarkers[1].ScriptRegion.EndColumnNumber); Assert.Equal(3, fileMarkers[1].ScriptRegion.EndLineNumber); } - + + /// + /// Verify that GetSignatureHelp returns null when the provided TextDocumentPosition + /// has no associated ScriptParseInfo. + /// [Fact] public void GetSignatureHelpReturnsNullIfParseInfoNotInitialized() { @@ -137,26 +141,12 @@ namespace Microsoft.SqlTools.ServiceLayer.Test.LanguageServer scriptFile.SetFileContents(docContent); // When requesting SignatureHelp - SignatureHelp signatureHelp = service.GetSignatureHelp(CreateDummyDocPosition(), scriptFile); + SignatureHelp signatureHelp = service.GetSignatureHelp(TestObjects.GetTestDocPosition(), scriptFile); // Then null is returned as no parse info can be used to find the signature Assert.Null(signatureHelp); } - private TextDocumentPosition CreateDummyDocPosition() - { - return new TextDocumentPosition - { - TextDocument = new TextDocumentIdentifier { Uri = TestObjects.ScriptUri }, - Position = new Position - { - Line = 0, - Character = 0 - } - }; - } - - #endregion #region "General Language Service tests" @@ -240,6 +230,44 @@ namespace Microsoft.SqlTools.ServiceLayer.Test.LanguageServer Assert.True(completions.Length > 0); } + /// + /// Verify that GetSignatureHelp returns not null when the provided TextDocumentPosition + /// has an associated ScriptParseInfo and the provided query has a function that should + /// provide signature help. + /// + [Fact] + public async void GetSignatureHelpReturnsNotNullIfParseInfoInitialized() + { + // When we make a connection to a live database + ScriptFile scriptFile; + ConnectionInfo connInfo = TestObjects.InitLiveConnectionInfo(out scriptFile); + + // And we place the cursor after a function that should prompt for signature help + string queryWithFunction = "EXEC sys.fn_isrolemember "; + scriptFile.Contents = queryWithFunction; + TextDocumentPosition textDocument = new TextDocumentPosition + { + TextDocument = new TextDocumentIdentifier + { + Uri = scriptFile.ClientFilePath + }, + Position = new Position + { + Line = 1, + Character = queryWithFunction.Length + } + }; + + // If we have a valid ScriptParseInfo and the SQL has already been parsed + var service = LanguageService.Instance; + ScriptParseInfo parseInfo = service.GetScriptParseInfo(scriptFile.ClientFilePath); + await service.UpdateLanguageServiceOnConnection(connInfo); + + // We should get back a non-null SignatureHelp + SignatureHelp signatureHelp = service.GetSignatureHelp(textDocument, scriptFile); + Assert.NotNull(signatureHelp); + } + #endif #endregion diff --git a/test/Microsoft.SqlTools.ServiceLayer.Test/Utility/TestObjects.cs b/test/Microsoft.SqlTools.ServiceLayer.Test/Utility/TestObjects.cs index 0f861433..00fc7f13 100644 --- a/test/Microsoft.SqlTools.ServiceLayer.Test/Utility/TestObjects.cs +++ b/test/Microsoft.SqlTools.ServiceLayer.Test/Utility/TestObjects.cs @@ -212,6 +212,22 @@ namespace Microsoft.SqlTools.Test.Utility connectionService.TryFindConnection(ownerUri, out connInfo); return connInfo; } + + /// + /// Creates and returns a dummy TextDocumentPosition + /// + public static TextDocumentPosition GetTestDocPosition() + { + return new TextDocumentPosition + { + TextDocument = new TextDocumentIdentifier { Uri = ScriptUri }, + Position = new Position + { + Line = 0, + Character = 0 + } + }; + } } ///