mirror of
https://github.com/ckaczor/sqltoolsservice.git
synced 2026-02-16 10:58:30 -05:00
include additional data for error object (#1539)
* include additional data for error * fix tests
This commit is contained in:
@@ -21,9 +21,14 @@ namespace Microsoft.SqlTools.Hosting.Contracts
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public string Message { get; set; }
|
public string Message { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Additional data.
|
||||||
|
/// </summary>
|
||||||
|
public string Data { get; set; }
|
||||||
|
|
||||||
public override string ToString()
|
public override string ToString()
|
||||||
{
|
{
|
||||||
return $"Error(Code={Code},Message='{Message}')";
|
return $"Error(Code={Code},Message='{Message}',Data='{Data}')";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -38,13 +38,14 @@ namespace Microsoft.SqlTools.Hosting.Protocol
|
|||||||
eventParams);
|
eventParams);
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual Task SendError(string errorMessage, int errorCode = 0)
|
public virtual Task SendError(string errorMessage, int errorCode = 0, string data = null)
|
||||||
{
|
{
|
||||||
// Build the error message
|
// Build the error message
|
||||||
Error error = new Error
|
Error error = new Error
|
||||||
{
|
{
|
||||||
Message = errorMessage,
|
Message = errorMessage,
|
||||||
Code = errorCode
|
Code = errorCode,
|
||||||
|
Data = data
|
||||||
};
|
};
|
||||||
return this.messageWriter.WriteError(
|
return this.messageWriter.WriteError(
|
||||||
requestMessage.Method,
|
requestMessage.Method,
|
||||||
@@ -55,7 +56,7 @@ namespace Microsoft.SqlTools.Hosting.Protocol
|
|||||||
public virtual Task SendError(Exception e)
|
public virtual Task SendError(Exception e)
|
||||||
{
|
{
|
||||||
// Overload to use the parameterized error handler
|
// Overload to use the parameterized error handler
|
||||||
return SendError(e.Message, e.HResult);
|
return SendError(e.Message, e.HResult, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -136,7 +136,7 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.LanguageServer
|
|||||||
var requestContext = new Mock<SqlTools.Hosting.Protocol.RequestContext<bool>>();
|
var requestContext = new Mock<SqlTools.Hosting.Protocol.RequestContext<bool>>();
|
||||||
requestContext.Setup(x => x.SendResult(It.IsAny<bool>()))
|
requestContext.Setup(x => x.SendResult(It.IsAny<bool>()))
|
||||||
.Returns(Task.FromResult(true));
|
.Returns(Task.FromResult(true));
|
||||||
requestContext.Setup(x => x.SendError(It.IsAny<string>(), 0))
|
requestContext.Setup(x => x.SendError(It.IsAny<string>(), 0, It.IsAny<string>()))
|
||||||
.Returns(Task.FromResult(true));
|
.Returns(Task.FromResult(true));
|
||||||
|
|
||||||
//Create completion extension parameters
|
//Create completion extension parameters
|
||||||
@@ -151,13 +151,13 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.LanguageServer
|
|||||||
await autoCompleteService.HandleCompletionExtLoadRequest(extensionParams, requestContext.Object);
|
await autoCompleteService.HandleCompletionExtLoadRequest(extensionParams, requestContext.Object);
|
||||||
|
|
||||||
requestContext.Verify(x => x.SendResult(It.IsAny<bool>()), Times.Once);
|
requestContext.Verify(x => x.SendResult(It.IsAny<bool>()), Times.Once);
|
||||||
requestContext.Verify(x => x.SendError(It.IsAny<string>(), 0), Times.Never);
|
requestContext.Verify(x => x.SendError(It.IsAny<string>(), 0, It.IsAny<string>()), Times.Never);
|
||||||
|
|
||||||
//Try to load the same completion extension second time, expect an error sent
|
//Try to load the same completion extension second time, expect an error sent
|
||||||
await autoCompleteService.HandleCompletionExtLoadRequest(extensionParams, requestContext.Object);
|
await autoCompleteService.HandleCompletionExtLoadRequest(extensionParams, requestContext.Object);
|
||||||
|
|
||||||
requestContext.Verify(x => x.SendResult(It.IsAny<bool>()), Times.Once);
|
requestContext.Verify(x => x.SendResult(It.IsAny<bool>()), Times.Once);
|
||||||
requestContext.Verify(x => x.SendError(It.IsAny<string>(), 0), Times.Once);
|
requestContext.Verify(x => x.SendError(It.IsAny<string>(), 0, It.IsAny<string>()), Times.Once);
|
||||||
|
|
||||||
//Try to load the completion extension with new modified timestamp, expect a success
|
//Try to load the completion extension with new modified timestamp, expect a success
|
||||||
var assemblyCopyPath = CopyFileWithNewModifiedTime(extensionParams.AssemblyPath);
|
var assemblyCopyPath = CopyFileWithNewModifiedTime(extensionParams.AssemblyPath);
|
||||||
@@ -173,7 +173,7 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.LanguageServer
|
|||||||
await autoCompleteService.HandleCompletionExtLoadRequest(extensionParams, requestContext.Object);
|
await autoCompleteService.HandleCompletionExtLoadRequest(extensionParams, requestContext.Object);
|
||||||
|
|
||||||
requestContext.Verify(x => x.SendResult(It.IsAny<bool>()), Times.Exactly(2));
|
requestContext.Verify(x => x.SendResult(It.IsAny<bool>()), Times.Exactly(2));
|
||||||
requestContext.Verify(x => x.SendError(It.IsAny<string>(), 0), Times.Once);
|
requestContext.Verify(x => x.SendError(It.IsAny<string>(), 0, It.IsAny<string>()), Times.Once);
|
||||||
|
|
||||||
ScriptParseInfo scriptInfo = new ScriptParseInfo { IsConnected = true };
|
ScriptParseInfo scriptInfo = new ScriptParseInfo { IsConnected = true };
|
||||||
autoCompleteService.ParseAndBind(result.ScriptFile, result.ConnectionInfo);
|
autoCompleteService.ParseAndBind(result.ScriptFile, result.ConnectionInfo);
|
||||||
@@ -354,7 +354,7 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.LanguageServer
|
|||||||
// Create a workspace and add file to it so that its found for intellense building
|
// Create a workspace and add file to it so that its found for intellense building
|
||||||
var workspace = new ServiceLayer.Workspace.Workspace();
|
var workspace = new ServiceLayer.Workspace.Workspace();
|
||||||
var workspaceService = new WorkspaceService<SqlToolsSettings> { Workspace = workspace };
|
var workspaceService = new WorkspaceService<SqlToolsSettings> { Workspace = workspace };
|
||||||
var langService = new LanguageService() { WorkspaceServiceInstance = workspaceService };
|
var langService = new LanguageService() { WorkspaceServiceInstance = workspaceService };
|
||||||
langService.CurrentWorkspace.GetFile(scriptFile.ClientUri);
|
langService.CurrentWorkspace.GetFile(scriptFile.ClientUri);
|
||||||
langService.CurrentWorkspaceSettings.SqlTools.IntelliSense.EnableIntellisense = true;
|
langService.CurrentWorkspaceSettings.SqlTools.IntelliSense.EnableIntellisense = true;
|
||||||
|
|
||||||
@@ -448,7 +448,7 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.LanguageServer
|
|||||||
// Now create tables that should show up in the completion list
|
// Now create tables that should show up in the completion list
|
||||||
testDb.RunQuery(createTableQueries);
|
testDb.RunQuery(createTableQueries);
|
||||||
|
|
||||||
// And refresh the cache
|
// And refresh the cache
|
||||||
await langService.HandleRebuildIntelliSenseNotification(
|
await langService.HandleRebuildIntelliSenseNotification(
|
||||||
new RebuildIntelliSenseParams() { OwnerUri = connectionInfoResult.ScriptFile.ClientUri },
|
new RebuildIntelliSenseParams() { OwnerUri = connectionInfoResult.ScriptFile.ClientUri },
|
||||||
new TestEventContext());
|
new TestEventContext());
|
||||||
@@ -462,7 +462,7 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.LanguageServer
|
|||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
testDb.Cleanup();
|
testDb.Cleanup();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -114,11 +114,11 @@ namespace Microsoft.SqlTools.ServiceLayer.Test.Common.RequestContextMocking
|
|||||||
.Returns(Task.FromResult(0));
|
.Returns(Task.FromResult(0));
|
||||||
|
|
||||||
// Add general handler for error event
|
// Add general handler for error event
|
||||||
Context.AddErrorHandling((msg, code) =>
|
Context.AddErrorHandling((msg, code, data) =>
|
||||||
{
|
{
|
||||||
ReceivedEvents.Add(new ReceivedEvent
|
ReceivedEvents.Add(new ReceivedEvent
|
||||||
{
|
{
|
||||||
EventObject = new Error {Message = msg, Code = code},
|
EventObject = new Error { Message = msg, Code = code, Data = data },
|
||||||
EventType = EventTypes.Error
|
EventType = EventTypes.Error
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -154,15 +154,15 @@ namespace Microsoft.SqlTools.ServiceLayer.Test.Common.RequestContextMocking
|
|||||||
// Step 1) Make sure the event type matches
|
// Step 1) Make sure the event type matches
|
||||||
Assert.True(expected.EventType.Equals(received.EventType),
|
Assert.True(expected.EventType.Equals(received.EventType),
|
||||||
string.Format("Expected EventType {0} but got {1}. Received object is {2}", expected.EventType, received.EventType, received.EventObject.ToString()));
|
string.Format("Expected EventType {0} but got {1}. Received object is {2}", expected.EventType, received.EventType, received.EventObject.ToString()));
|
||||||
|
|
||||||
// Step 2) Make sure the param type matches
|
// Step 2) Make sure the param type matches
|
||||||
Assert.True( expected.ParamType == received.EventObject.GetType()
|
Assert.True(expected.ParamType == received.EventObject.GetType()
|
||||||
, $"expected and received event types differ for event Number: {i+1}. Expected EventType: {expected.ParamType} & Received EventType: {received.EventObject.GetType()}\r\n"
|
, $"expected and received event types differ for event Number: {i + 1}. Expected EventType: {expected.ParamType} & Received EventType: {received.EventObject.GetType()}\r\n"
|
||||||
+ $"\there is the full list of expected and received events::"
|
+ $"\there is the full list of expected and received events::"
|
||||||
+ $"\r\n\t\t expected event types:{string.Join("\r\n\t\t", ExpectedEvents.ConvertAll(evt=>evt.ParamType))}"
|
+ $"\r\n\t\t expected event types:{string.Join("\r\n\t\t", ExpectedEvents.ConvertAll(evt => evt.ParamType))}"
|
||||||
+ $"\r\n\t\t received event types:{string.Join("\r\n\t\t", ReceivedEvents.ConvertAll(evt=>evt.EventObject.GetType()))}"
|
+ $"\r\n\t\t received event types:{string.Join("\r\n\t\t", ReceivedEvents.ConvertAll(evt => evt.EventObject.GetType()))}"
|
||||||
);
|
);
|
||||||
|
|
||||||
// Step 3) Run the validator on the param object
|
// Step 3) Run the validator on the param object
|
||||||
Assert.NotNull(received.EventObject);
|
Assert.NotNull(received.EventObject);
|
||||||
expected.Validator?.DynamicInvoke(received.EventObject);
|
expected.Validator?.DynamicInvoke(received.EventObject);
|
||||||
|
|||||||
@@ -48,14 +48,14 @@ namespace Microsoft.SqlTools.ServiceLayer.Test.Common.RequestContextMocking
|
|||||||
|
|
||||||
public static Mock<RequestContext<TResponse>> AddErrorHandling<TResponse>(
|
public static Mock<RequestContext<TResponse>> AddErrorHandling<TResponse>(
|
||||||
this Mock<RequestContext<TResponse>> mock,
|
this Mock<RequestContext<TResponse>> mock,
|
||||||
Action<string, int> errorCallback)
|
Action<string, int, string> errorCallback)
|
||||||
{
|
{
|
||||||
// Setup the mock for SendError
|
// Setup the mock for SendError
|
||||||
var sendErrorFlow = mock.Setup(rc => rc.SendError(It.IsAny<string>(), It.IsAny<int>()))
|
var sendErrorFlow = mock.Setup(rc => rc.SendError(It.IsAny<string>(), It.IsAny<int>(), It.IsAny<string>()))
|
||||||
.Returns(Task.FromResult(0));
|
.Returns(Task.FromResult(0));
|
||||||
if (errorCallback != null)
|
if (errorCallback != null)
|
||||||
{
|
{
|
||||||
sendErrorFlow.Callback<string, int>(errorCallback);
|
sendErrorFlow.Callback<string, int, string>(errorCallback);
|
||||||
}
|
}
|
||||||
|
|
||||||
return mock;
|
return mock;
|
||||||
|
|||||||
@@ -78,7 +78,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Credentials
|
|||||||
public async Task SaveCredentialThrowsIfCredentialIdMissing()
|
public async Task SaveCredentialThrowsIfCredentialIdMissing()
|
||||||
{
|
{
|
||||||
string errorResponse = null;
|
string errorResponse = null;
|
||||||
var contextMock = RequestContextMocks.Create<bool>(null).AddErrorHandling((msg, code) => errorResponse = msg);
|
var contextMock = RequestContextMocks.Create<bool>(null).AddErrorHandling((msg, code, data) => errorResponse = msg);
|
||||||
|
|
||||||
await service.HandleSaveCredentialRequest(new Credential(null), contextMock.Object);
|
await service.HandleSaveCredentialRequest(new Credential(null), contextMock.Object);
|
||||||
TestUtils.VerifyErrorSent(contextMock);
|
TestUtils.VerifyErrorSent(contextMock);
|
||||||
@@ -89,7 +89,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Credentials
|
|||||||
public async Task SaveCredentialThrowsIfPasswordMissing()
|
public async Task SaveCredentialThrowsIfPasswordMissing()
|
||||||
{
|
{
|
||||||
string errorResponse = null;
|
string errorResponse = null;
|
||||||
var contextMock = RequestContextMocks.Create<bool>(null).AddErrorHandling((msg, code) => errorResponse = msg);
|
var contextMock = RequestContextMocks.Create<bool>(null).AddErrorHandling((msg, code, data) => errorResponse = msg);
|
||||||
|
|
||||||
await service.HandleSaveCredentialRequest(new Credential(CredentialId), contextMock.Object);
|
await service.HandleSaveCredentialRequest(new Credential(CredentialId), contextMock.Object);
|
||||||
TestUtils.VerifyErrorSent(contextMock);
|
TestUtils.VerifyErrorSent(contextMock);
|
||||||
@@ -196,7 +196,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Credentials
|
|||||||
public async Task ReadCredentialThrowsIfCredentialIsNull()
|
public async Task ReadCredentialThrowsIfCredentialIsNull()
|
||||||
{
|
{
|
||||||
string errorResponse = null;
|
string errorResponse = null;
|
||||||
var contextMock = RequestContextMocks.Create<Credential>(null).AddErrorHandling((msg, code) => errorResponse = msg);
|
var contextMock = RequestContextMocks.Create<Credential>(null).AddErrorHandling((msg, code, data) => errorResponse = msg);
|
||||||
|
|
||||||
// Verify throws on null, and this is sent as an error
|
// Verify throws on null, and this is sent as an error
|
||||||
await service.HandleReadCredentialRequest(null, contextMock.Object);
|
await service.HandleReadCredentialRequest(null, contextMock.Object);
|
||||||
@@ -208,7 +208,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Credentials
|
|||||||
public async Task ReadCredentialThrowsIfIdMissing()
|
public async Task ReadCredentialThrowsIfIdMissing()
|
||||||
{
|
{
|
||||||
string errorResponse = null;
|
string errorResponse = null;
|
||||||
var contextMock = RequestContextMocks.Create<Credential>(null).AddErrorHandling((msg, code) => errorResponse = msg);
|
var contextMock = RequestContextMocks.Create<Credential>(null).AddErrorHandling((msg, code, data) => errorResponse = msg);
|
||||||
|
|
||||||
// Verify throws with no ID
|
// Verify throws with no ID
|
||||||
await service.HandleReadCredentialRequest(new Credential(), contextMock.Object);
|
await service.HandleReadCredentialRequest(new Credential(), contextMock.Object);
|
||||||
@@ -238,7 +238,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Credentials
|
|||||||
public async Task DeleteCredentialThrowsIfIdMissing()
|
public async Task DeleteCredentialThrowsIfIdMissing()
|
||||||
{
|
{
|
||||||
object errorResponse = null;
|
object errorResponse = null;
|
||||||
var contextMock = RequestContextMocks.Create<bool>(null).AddErrorHandling((msg, code) => errorResponse = msg);
|
var contextMock = RequestContextMocks.Create<bool>(null).AddErrorHandling((msg, code, data) => errorResponse = msg);
|
||||||
|
|
||||||
// Verify throws with no ID
|
// Verify throws with no ID
|
||||||
await service.HandleDeleteCredentialRequest(new Credential(), contextMock.Object);
|
await service.HandleDeleteCredentialRequest(new Credential(), contextMock.Object);
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Formatter
|
|||||||
{
|
{
|
||||||
public class TSqlFormatterServiceTests : FormatterUnitTestsBase
|
public class TSqlFormatterServiceTests : FormatterUnitTestsBase
|
||||||
{
|
{
|
||||||
private Mock<ServiceLayer.Workspace.Workspace> workspaceMock;
|
private Mock<ServiceLayer.Workspace.Workspace> workspaceMock;
|
||||||
private TextDocumentIdentifier textDocument;
|
private TextDocumentIdentifier textDocument;
|
||||||
DocumentFormattingParams docFormatParams;
|
DocumentFormattingParams docFormatParams;
|
||||||
DocumentRangeFormattingParams rangeFormatParams;
|
DocumentRangeFormattingParams rangeFormatParams;
|
||||||
@@ -60,7 +60,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Formatter
|
|||||||
C1 int NOT NULL,
|
C1 int NOT NULL,
|
||||||
C2 nvarchar(50) NULL
|
C2 nvarchar(50) NULL
|
||||||
)");
|
)");
|
||||||
|
|
||||||
private void SetupLanguageService(bool skipFile = false)
|
private void SetupLanguageService(bool skipFile = false)
|
||||||
{
|
{
|
||||||
LanguageServiceMock.Setup(x => x.ShouldSkipNonMssqlFile(It.IsAny<string>())).Returns(skipFile);
|
LanguageServiceMock.Setup(x => x.ShouldSkipNonMssqlFile(It.IsAny<string>())).Returns(skipFile);
|
||||||
@@ -216,11 +216,11 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Formatter
|
|||||||
await test(contextMock.Object);
|
await test(contextMock.Object);
|
||||||
VerifyResult(contextMock, verify);
|
VerifyResult(contextMock, verify);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void VerifyResult<T>(Mock<RequestContext<T>> contextMock, Action verify)
|
public static void VerifyResult<T>(Mock<RequestContext<T>> contextMock, Action verify)
|
||||||
{
|
{
|
||||||
contextMock.Verify(c => c.SendResult(It.IsAny<T>()), Times.Once);
|
contextMock.Verify(c => c.SendResult(It.IsAny<T>()), Times.Once);
|
||||||
contextMock.Verify(c => c.SendError(It.IsAny<string>(), It.IsAny<int>()), Times.Never);
|
contextMock.Verify(c => c.SendError(It.IsAny<string>(), It.IsAny<int>(), It.IsAny<string>()), Times.Never);
|
||||||
verify();
|
verify();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -253,7 +253,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Formatter
|
|||||||
};
|
};
|
||||||
return scriptFile;
|
return scriptFile;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -56,15 +56,17 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.LanguageServer
|
|||||||
var signatureRequestContext = new Mock<RequestContext<SignatureHelp>>();
|
var signatureRequestContext = new Mock<RequestContext<SignatureHelp>>();
|
||||||
SignatureHelp result = null;
|
SignatureHelp result = null;
|
||||||
signatureRequestContext.Setup(rc => rc.SendResult(It.IsAny<SignatureHelp>()))
|
signatureRequestContext.Setup(rc => rc.SendResult(It.IsAny<SignatureHelp>()))
|
||||||
.Returns<SignatureHelp>((signature) => {
|
.Returns<SignatureHelp>((signature) =>
|
||||||
|
{
|
||||||
result = signature;
|
result = signature;
|
||||||
return Task.FromResult(0);
|
return Task.FromResult(0);
|
||||||
});
|
});
|
||||||
signatureRequestContext.Setup(rc => rc.SendError(It.IsAny<string>(), It.IsAny<int>())).Returns(Task.FromResult(0));
|
signatureRequestContext.Setup(rc => rc.SendError(It.IsAny<string>(), It.IsAny<int>(), It.IsAny<string>())).Returns(Task.FromResult(0));
|
||||||
|
|
||||||
|
|
||||||
langService.CurrentWorkspaceSettings.SqlTools.IntelliSense.EnableIntellisense = true;
|
langService.CurrentWorkspaceSettings.SqlTools.IntelliSense.EnableIntellisense = true;
|
||||||
await langService.HandleDidChangeLanguageFlavorNotification(new LanguageFlavorChangeParams {
|
await langService.HandleDidChangeLanguageFlavorNotification(new LanguageFlavorChangeParams
|
||||||
|
{
|
||||||
Uri = textDocument.TextDocument.Uri,
|
Uri = textDocument.TextDocument.Uri,
|
||||||
Language = LanguageService.SQL_LANG.ToLower(),
|
Language = LanguageService.SQL_LANG.ToLower(),
|
||||||
Flavor = "NotMSSQL"
|
Flavor = "NotMSSQL"
|
||||||
@@ -73,8 +75,8 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.LanguageServer
|
|||||||
// verify that the response was sent with a null response value
|
// verify that the response was sent with a null response value
|
||||||
signatureRequestContext.Verify(m => m.SendResult(It.IsAny<SignatureHelp>()), Times.Once());
|
signatureRequestContext.Verify(m => m.SendResult(It.IsAny<SignatureHelp>()), Times.Once());
|
||||||
Assert.Null(result);
|
Assert.Null(result);
|
||||||
signatureRequestContext.Verify(m => m.SendError(It.IsAny<string>(), It.IsAny<int>()), Times.Never());
|
signatureRequestContext.Verify(m => m.SendError(It.IsAny<string>(), It.IsAny<int>(), It.IsAny<string>()), Times.Never());
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
public void AddOrUpdateScriptParseInfoNullUri()
|
public void AddOrUpdateScriptParseInfoNullUri()
|
||||||
@@ -94,7 +96,8 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.LanguageServer
|
|||||||
var definitionRequestContext = new Mock<RequestContext<Location[]>>();
|
var definitionRequestContext = new Mock<RequestContext<Location[]>>();
|
||||||
Location[] result = null;
|
Location[] result = null;
|
||||||
definitionRequestContext.Setup(rc => rc.SendResult(It.IsAny<Location[]>()))
|
definitionRequestContext.Setup(rc => rc.SendResult(It.IsAny<Location[]>()))
|
||||||
.Returns<Location[]>((resultDetails) => {
|
.Returns<Location[]>((resultDetails) =>
|
||||||
|
{
|
||||||
result = resultDetails;
|
result = resultDetails;
|
||||||
return Task.FromResult(0);
|
return Task.FromResult(0);
|
||||||
});
|
});
|
||||||
@@ -102,7 +105,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.LanguageServer
|
|||||||
await langService.HandleDefinitionRequest(textDocument, definitionRequestContext.Object);
|
await langService.HandleDefinitionRequest(textDocument, definitionRequestContext.Object);
|
||||||
// Should get an empty array when passed
|
// Should get an empty array when passed
|
||||||
Assert.NotNull(result);
|
Assert.NotNull(result);
|
||||||
Assert.True(result.Length == 0, $"Unexpected values passed to SendResult : [{ string.Join(",", (object[])result)}]");
|
Assert.True(result.Length == 0, $"Unexpected values passed to SendResult : [{string.Join(",", (object[])result)}]");
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
@@ -126,7 +129,8 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.LanguageServer
|
|||||||
// setup the mock for SendResult to capture the items
|
// setup the mock for SendResult to capture the items
|
||||||
CompletionItem[] completionItems = null;
|
CompletionItem[] completionItems = null;
|
||||||
requestContext.Setup(x => x.SendResult(It.IsAny<CompletionItem[]>()))
|
requestContext.Setup(x => x.SendResult(It.IsAny<CompletionItem[]>()))
|
||||||
.Returns<CompletionItem[]>((resultDetails) => {
|
.Returns<CompletionItem[]>((resultDetails) =>
|
||||||
|
{
|
||||||
completionItems = resultDetails;
|
completionItems = resultDetails;
|
||||||
return Task.FromResult(0);
|
return Task.FromResult(0);
|
||||||
});
|
});
|
||||||
@@ -154,7 +158,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.LanguageServer
|
|||||||
EndColumnNumber = 1,
|
EndColumnNumber = 1,
|
||||||
EndOffset = 0
|
EndOffset = 0
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
var diagnostic = DiagnosticsHelper.GetDiagnosticFromMarker(scriptFileMarker);
|
var diagnostic = DiagnosticsHelper.GetDiagnosticFromMarker(scriptFileMarker);
|
||||||
Assert.AreEqual(diagnostic.Message, scriptFileMarker.Message);
|
Assert.AreEqual(diagnostic.Message, scriptFileMarker.Message);
|
||||||
}
|
}
|
||||||
@@ -211,13 +215,13 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.LanguageServer
|
|||||||
Contents = sqlText
|
Contents = sqlText
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
ParseResult parseResult = langService.ParseAndBind(scriptFile, null);
|
ParseResult parseResult = langService.ParseAndBind(scriptFile, null);
|
||||||
ScriptParseInfo scriptParseInfo = langService.GetScriptParseInfo(scriptFile.ClientUri, true);
|
ScriptParseInfo scriptParseInfo = langService.GetScriptParseInfo(scriptFile.ClientUri, true);
|
||||||
|
|
||||||
return new ScriptDocumentInfo(textDocumentPosition, scriptFile, scriptParseInfo);
|
return new ScriptDocumentInfo(textDocumentPosition, scriptFile, scriptParseInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
//complete select query with the cursor at * should return a sqlselectstarexpression object.
|
//complete select query with the cursor at * should return a sqlselectstarexpression object.
|
||||||
[TestCase("select * from sys.all_objects", 0, 8, "SelectStarExpression is not returned on complete select query with star")]
|
[TestCase("select * from sys.all_objects", 0, 8, "SelectStarExpression is not returned on complete select query with star")]
|
||||||
@@ -250,7 +254,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.LanguageServer
|
|||||||
[Test]
|
[Test]
|
||||||
public void TryGetSqlSelectStarStatementNullFileTest()
|
public void TryGetSqlSelectStarStatementNullFileTest()
|
||||||
{
|
{
|
||||||
Assert.Null(AutoCompleteHelper.TryGetSelectStarStatement(null, null), "null is not returned on null file");
|
Assert.Null(AutoCompleteHelper.TryGetSelectStarStatement(null, null), "null is not returned on null file");
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
|
|||||||
@@ -92,7 +92,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.LanguageServer
|
|||||||
requestContext = new Mock<RequestContext<T[]>>();
|
requestContext = new Mock<RequestContext<T[]>>();
|
||||||
requestContext.Setup(rc => rc.SendResult(It.IsAny<T[]>()))
|
requestContext.Setup(rc => rc.SendResult(It.IsAny<T[]>()))
|
||||||
.Returns(Task.FromResult(0));
|
.Returns(Task.FromResult(0));
|
||||||
requestContext.Setup(rc => rc.SendError(It.IsAny<string>(), It.IsAny<int>())).Returns(Task.FromResult(0));
|
requestContext.Setup(rc => rc.SendError(It.IsAny<string>(), It.IsAny<int>(), It.IsAny<string>())).Returns(Task.FromResult(0));
|
||||||
requestContext.Setup(r => r.SendEvent(It.IsAny<EventType<TelemetryParams>>(), It.IsAny<TelemetryParams>())).Returns(Task.FromResult(0));
|
requestContext.Setup(r => r.SendEvent(It.IsAny<EventType<TelemetryParams>>(), It.IsAny<TelemetryParams>())).Returns(Task.FromResult(0));
|
||||||
requestContext.Setup(r => r.SendEvent(It.IsAny<EventType<StatusChangeParams>>(), It.IsAny<StatusChangeParams>())).Returns(Task.FromResult(0));
|
requestContext.Setup(r => r.SendEvent(It.IsAny<EventType<StatusChangeParams>>(), It.IsAny<StatusChangeParams>())).Returns(Task.FromResult(0));
|
||||||
|
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.LanguageServer
|
|||||||
await definitionTask;
|
await definitionTask;
|
||||||
// verify that send result was called once and send error was not called
|
// verify that send result was called once and send error was not called
|
||||||
requestContext.Verify(m => m.SendResult(It.IsAny<Location[]>()), Times.Once());
|
requestContext.Verify(m => m.SendResult(It.IsAny<Location[]>()), Times.Once());
|
||||||
requestContext.Verify(m => m.SendError(It.IsAny<string>(), It.IsAny<int>()), Times.Never());
|
requestContext.Verify(m => m.SendError(It.IsAny<string>(), It.IsAny<int>(), It.IsAny<string>()), Times.Never());
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.ObjectExplorer
|
|||||||
{
|
{
|
||||||
object errorResponse = null;
|
object errorResponse = null;
|
||||||
var contextMock = RequestContextMocks.Create<CreateSessionResponse>(null)
|
var contextMock = RequestContextMocks.Create<CreateSessionResponse>(null)
|
||||||
.AddErrorHandling((errorMessage, errorCode) => errorResponse = errorMessage);
|
.AddErrorHandling((errorMessage, errorCode, data) => errorResponse = errorMessage);
|
||||||
|
|
||||||
await service.HandleCreateSessionRequest(null, contextMock.Object);
|
await service.HandleCreateSessionRequest(null, contextMock.Object);
|
||||||
VerifyErrorSent(contextMock);
|
VerifyErrorSent(contextMock);
|
||||||
|
|||||||
@@ -61,21 +61,21 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests
|
|||||||
protected void VerifyResult<T, TResult>(Mock<RequestContext<T>> contextMock, Action<TResult> verify, TResult actual)
|
protected void VerifyResult<T, TResult>(Mock<RequestContext<T>> contextMock, Action<TResult> verify, TResult actual)
|
||||||
{
|
{
|
||||||
contextMock.Verify(c => c.SendResult(It.IsAny<T>()), Times.Once);
|
contextMock.Verify(c => c.SendResult(It.IsAny<T>()), Times.Once);
|
||||||
contextMock.Verify(c => c.SendError(It.IsAny<string>(), It.IsAny<int>()), Times.Never);
|
contextMock.Verify(c => c.SendError(It.IsAny<string>(), It.IsAny<int>(), It.IsAny<string>()), Times.Never);
|
||||||
verify(actual);
|
verify(actual);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void VerifyResult<T>(Mock<RequestContext<T>> contextMock, Action<T> verify, T actual)
|
protected void VerifyResult<T>(Mock<RequestContext<T>> contextMock, Action<T> verify, T actual)
|
||||||
{
|
{
|
||||||
contextMock.Verify(c => c.SendResult(It.IsAny<T>()), Times.Once);
|
contextMock.Verify(c => c.SendResult(It.IsAny<T>()), Times.Once);
|
||||||
contextMock.Verify(c => c.SendError(It.IsAny<string>(), It.IsAny<int>()), Times.Never);
|
contextMock.Verify(c => c.SendError(It.IsAny<string>(), It.IsAny<int>(), It.IsAny<string>()), Times.Never);
|
||||||
verify(actual);
|
verify(actual);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void VerifyErrorSent<T>(Mock<RequestContext<T>> contextMock)
|
protected void VerifyErrorSent<T>(Mock<RequestContext<T>> contextMock)
|
||||||
{
|
{
|
||||||
contextMock.Verify(c => c.SendResult(It.IsAny<T>()), Times.Never);
|
contextMock.Verify(c => c.SendResult(It.IsAny<T>()), Times.Never);
|
||||||
contextMock.Verify(c => c.SendError(It.IsAny<string>(), It.IsAny<int>()), Times.Once);
|
contextMock.Verify(c => c.SendError(It.IsAny<string>(), It.IsAny<int>(), It.IsAny<string>()), Times.Once);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.TaskServices
|
|||||||
{
|
{
|
||||||
object errorResponse = null;
|
object errorResponse = null;
|
||||||
var contextMock = RequestContextMocks.Create<ListTasksResponse>(null)
|
var contextMock = RequestContextMocks.Create<ListTasksResponse>(null)
|
||||||
.AddErrorHandling((errorMessage, errorCode) => errorResponse = errorMessage);
|
.AddErrorHandling((errorMessage, errorCode, data) => errorResponse = errorMessage);
|
||||||
|
|
||||||
await service.HandleListTasksRequest(null, contextMock.Object);
|
await service.HandleListTasksRequest(null, contextMock.Object);
|
||||||
VerifyErrorSent(contextMock);
|
VerifyErrorSent(contextMock);
|
||||||
|
|||||||
@@ -46,20 +46,20 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Utility
|
|||||||
public static void VerifyErrorSent<T>(Mock<RequestContext<T>> contextMock)
|
public static void VerifyErrorSent<T>(Mock<RequestContext<T>> contextMock)
|
||||||
{
|
{
|
||||||
contextMock.Verify(c => c.SendResult(It.IsAny<T>()), Times.Never);
|
contextMock.Verify(c => c.SendResult(It.IsAny<T>()), Times.Never);
|
||||||
contextMock.Verify(c => c.SendError(It.IsAny<string>(), It.IsAny<int>()), Times.Once);
|
contextMock.Verify(c => c.SendError(It.IsAny<string>(), It.IsAny<int>(), It.IsAny<string>()), Times.Once);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void VerifyResult<T, U>(Mock<RequestContext<T>> contextMock, U expected, U actual)
|
public static void VerifyResult<T, U>(Mock<RequestContext<T>> contextMock, U expected, U actual)
|
||||||
{
|
{
|
||||||
contextMock.Verify(c => c.SendResult(It.IsAny<T>()), Times.Once);
|
contextMock.Verify(c => c.SendResult(It.IsAny<T>()), Times.Once);
|
||||||
Assert.AreEqual(expected, actual);
|
Assert.AreEqual(expected, actual);
|
||||||
contextMock.Verify(c => c.SendError(It.IsAny<string>(), It.IsAny<int>()), Times.Never);
|
contextMock.Verify(c => c.SendError(It.IsAny<string>(), It.IsAny<int>(), It.IsAny<string>()), Times.Never);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void VerifyResult<T>(Mock<RequestContext<T>> contextMock, Action<T> verify, T actual)
|
public static void VerifyResult<T>(Mock<RequestContext<T>> contextMock, Action<T> verify, T actual)
|
||||||
{
|
{
|
||||||
contextMock.Verify(c => c.SendResult(It.IsAny<T>()), Times.Once);
|
contextMock.Verify(c => c.SendResult(It.IsAny<T>()), Times.Once);
|
||||||
contextMock.Verify(c => c.SendError(It.IsAny<string>(), It.IsAny<int>()), Times.Never);
|
contextMock.Verify(c => c.SendError(It.IsAny<string>(), It.IsAny<int>(), It.IsAny<string>()), Times.Never);
|
||||||
verify(actual);
|
verify(actual);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user