| <!doctype html> |
| <html> |
| <head> |
| <script src="../../http/tests/inspector/resources/protocol-test.js"></script> |
| <script> |
| function test() |
| { |
| let suite = ProtocolTest.createAsyncSuite("Protocol.ArgumentModeErrors"); |
| |
| let errorCodes = { |
| ParseError: -32700, |
| InvalidRequest: -32600, |
| MethodNotFound: -32601, |
| InvalidParams: -32602, |
| InternalError: -32603, |
| ServerError: -32000, |
| }; |
| |
| function addErrorResponseTestCase(args) |
| { |
| let {name, description, message, expectedError} = args; |
| |
| suite.addTestCase({ |
| name, |
| description, |
| test(resolve, reject) { |
| let stringifiedMessage = (typeof message !== "string") ? JSON.stringify(message) : message; |
| ProtocolTest.log("Sending message: " + stringifiedMessage); |
| InspectorProtocol.awaitMessage(message) |
| .then(function resolved(response) { |
| ProtocolTest.log("FAIL: the backend should send a protocol error when receiving an invalid message."); |
| reject(); |
| }, function rejected(response) { |
| ProtocolTest.log("PASS: the backend should send a protocol error when receiving an invalid message."); |
| ProtocolTest.expectThat(response.code === errorCodes[expectedError], `the reported error should be "${expectedError}" (${errorCodes[expectedError]})`); |
| ProtocolTest.log("Actual error code: " + response.code); |
| ProtocolTest.log("Actual error message: " + response.message); |
| if (response.data) |
| ProtocolTest.log("Actual error data: " + JSON.stringify(response.data)); |
| |
| resolve(); |
| }) |
| .catch(reject); |
| } |
| }); |
| } |
| |
| addErrorResponseTestCase({ |
| name: "ParametersNotAnObject", |
| description: "The backend should return an error if a message has a non-object 'params'.", |
| message: {id: 123, method: "Runtime.evaluate", params: "junk"}, |
| expectedError: "InvalidParams" |
| }); |
| |
| addErrorResponseTestCase({ |
| name: "MissingRequiredParameter", |
| description: "The backend should return an error if a message is missing a required parameter.", |
| message: {id: 123, method: "Runtime.evaluate", params: {stuff: 123}}, |
| expectedError: "InvalidParams" |
| }); |
| |
| addErrorResponseTestCase({ |
| name: "RequiredParameterWrongType", |
| description: "The backend should return an error if a message has a required parameter with wrong type.", |
| message: {id: 123, method: "Runtime.evaluate", params: {expression: []}}, |
| expectedError: "InvalidParams" |
| }); |
| |
| addErrorResponseTestCase({ |
| name: "OptionalParameterWrongType", |
| description: "The backend should return an error if a message has an optional parameter with wrong type.", |
| message: {id: 123, method: "Runtime.evaluate", params: {expression: "42", includeCommandLineAPI: 123}}, |
| expectedError: "InvalidParams" |
| }); |
| |
| addErrorResponseTestCase({ |
| name: "TestErrorCodeForSyncServerError", |
| description: "The backend should return a server error with the correct error code.", |
| message: {id: 123, method: "Database.getDatabaseTableNames", params: {databaseId: "thisisNotADatabase"}}, |
| expectedError: "ServerError" |
| }); |
| |
| addErrorResponseTestCase({ |
| name: "TestErrorCodeForAsyncServerError", |
| description: "The backend should return a server error with the correct error code.", |
| message: {id: 123, method: "Database.executeSQL", params: {databaseId: "thisisNotADatabase", query: "asdf"}}, |
| expectedError: "ServerError" |
| }); |
| |
| addErrorResponseTestCase({ |
| name: "CommandWithBadArgumentValue", |
| description: "The backend should return an error if something went wrong when invoking the agent's method.", |
| message: {id: 123, method: "Runtime.getProperties", params: {objectId: "thisisNotAnId"}}, |
| expectedError: "ServerError" |
| }); |
| |
| suite.runTestCasesAndFinish(); |
| } |
| </script> |
| </head> |
| <body onload="runTest()"> |
| <p>Testing the inspector backend's error handling when sending messages with wrong parameters.</p> |
| </body> |
| </html> |