public void TestInitialFixup() { var scopeFactory = new TestPowerFxScopeFactory((string documentUri) => new MockSqlEngine()); var testServer = new TestLanguageServer(_sendToClientData.Add, scopeFactory); var documentUri = "powerfx://app?context={\"A\":1,\"B\":[1,2,3]}"; testServer.OnDataReceived(JsonSerializer.Serialize(new { jsonrpc = "2.0", id = "123", method = "$/initialFixup", @params = new InitialFixupParams() { TextDocument = new TextDocumentItem() { Uri = documentUri, LanguageId = "powerfx", Version = 1, Text = "new_price * new_quantity" } } })); Assert.Single(_sendToClientData); var response = JsonSerializer.Deserialize <JsonRpcInitialFixupResponse>(_sendToClientData[0], _jsonSerializerOptions); Assert.Equal("123", response.Id); Assert.Equal(documentUri, response.Result.Uri); Assert.Equal("Price * Quantity", response.Result.Text); // no change _sendToClientData.Clear(); testServer.OnDataReceived(JsonSerializer.Serialize(new { jsonrpc = "2.0", id = "123", method = "$/initialFixup", @params = new InitialFixupParams() { TextDocument = new TextDocumentItem() { Uri = documentUri, LanguageId = "powerfx", Version = 1, Text = "Price * Quantity" } } })); Assert.Single(_sendToClientData); response = JsonSerializer.Deserialize <JsonRpcInitialFixupResponse>(_sendToClientData[0], _jsonSerializerOptions); Assert.Equal("123", response.Id); Assert.Equal(documentUri, response.Result.Uri); Assert.Equal("Price * Quantity", response.Result.Text); }
public void TestLanguageServerCommunication() { // bad payload _testServer.OnDataReceived(JsonSerializer.Serialize(new { })); // bad jsonrpc payload _testServer.OnDataReceived(JsonSerializer.Serialize(new { jsonrpc = "2.0" })); // bad notification payload _testServer.OnDataReceived(JsonSerializer.Serialize(new { jsonrpc = "2.0", method = "unknown", @params = "unkown" })); // bad request payload _testServer.OnDataReceived(JsonSerializer.Serialize(new { jsonrpc = "2.0", id = "abc", method = "unknown", @params = "unkown" })); // verify we have 4 json rpc responeses Assert.Equal(4, _sendToClientData.Count); var errorResponse = JsonSerializer.Deserialize <JsonRpcErrorResponse>(_sendToClientData[0], _jsonSerializerOptions); Assert.Equal("2.0", errorResponse.Jsonrpc); Assert.Null(errorResponse.Id); Assert.Equal(-32600, errorResponse.Error.Code); errorResponse = JsonSerializer.Deserialize <JsonRpcErrorResponse>(_sendToClientData[1], _jsonSerializerOptions); Assert.Equal("2.0", errorResponse.Jsonrpc); Assert.Null(errorResponse.Id); Assert.Equal(-32600, errorResponse.Error.Code); errorResponse = JsonSerializer.Deserialize <JsonRpcErrorResponse>(_sendToClientData[2], _jsonSerializerOptions); Assert.Equal("2.0", errorResponse.Jsonrpc); Assert.Null(errorResponse.Id); Assert.Equal(-32601, errorResponse.Error.Code); errorResponse = JsonSerializer.Deserialize <JsonRpcErrorResponse>(_sendToClientData[3], _jsonSerializerOptions); Assert.Equal("2.0", errorResponse.Jsonrpc); Assert.Equal("abc", errorResponse.Id); Assert.Equal(-32601, errorResponse.Error.Code); }