Web Inspector: add protocol test for existing error handling performed by the backend
[WebKit-https.git] / LayoutTests / inspector / protocol / backend-dispatcher-argument-errors.html
1 <!doctype html>
2 <html>
3 <head>
4 <script src="../../http/tests/inspector/resources/protocol-test.js"></script>
5 <script>
6 function test()
7 {
8     let suite = ProtocolTest.createAsyncSuite("Protocol.ArgumentModeErrors");
9
10     let errorCodes = {
11         ParseError: -32700,
12         InvalidRequest: -32600,
13         MethodNotFound: -32601,
14         InvalidParams: -32602,
15         InternalError: -32603,
16         ServerError: -32000,
17     };
18
19     function addErrorResponseTestCase(args)
20     {
21         let {name, description, message, expectedError} = args;
22
23         suite.addTestCase({
24             name,
25             description,
26             test: (resolve, reject) => {
27                 let stringifiedMessage = (typeof message !== "string") ? JSON.stringify(message) : message;
28                 ProtocolTest.log("Sending message: " + stringifiedMessage);
29                 InspectorProtocol.awaitMessage(message)
30                 .then(function resolved(response) {
31                     ProtocolTest.log("FAIL: the backend should send a protocol error when receiving an invalid message.");
32                     reject();
33                 }, function rejected(response) {
34                     ProtocolTest.log("PASS: the backend should send a protocol error when receiving an invalid message.");
35                     ProtocolTest.expectThat(response.code === errorCodes[expectedError], `the reported error should be "${expectedError}" (${errorCodes[expectedError]})`);
36                     ProtocolTest.log("Actual error code: " + response.code);
37                     ProtocolTest.log("Actual error message: " + response.message);
38                     if (response.data)
39                         ProtocolTest.log("Actual error data: " + response.data);
40
41                     resolve();
42                 })
43                 .catch(reject);
44             }
45         });
46     }
47
48     addErrorResponseTestCase({
49         name: "ParametersNotAnObject",
50         description: "The backend should return an error if a message has a non-object 'params'.",
51         message: {id: 123, method: "Runtime.evaluate", params: "junk"},
52         expectedError: "InvalidParams"
53     });
54
55     addErrorResponseTestCase({
56         name: "MissingRequiredParameter",
57         description: "The backend should return an error if a message is missing a required parameter.",
58         message: {id: 123, method: "Runtime.evaluate", params: {stuff: 123}},
59         expectedError: "InvalidParams"
60     });
61
62     addErrorResponseTestCase({
63         name: "RequiredParameterWrongType",
64         description: "The backend should return an error if a message has a required parameter with wrong type.",
65         message: {id: 123, method: "Runtime.evaluate", params: {expression: []}},
66         expectedError: "InvalidParams"
67     });
68
69     addErrorResponseTestCase({
70         name: "OptionalParameterWrongType",
71         description: "The backend should return an error if a message has an optional parameter with wrong type.",
72         message: {id: 123, method: "Runtime.evaluate", params: {expression: "42", includeCommandLineAPI: 123}},
73         expectedError: "InvalidParams"
74     });
75
76     addErrorResponseTestCase({
77         name: "TestErrorCodeForSyncServerError",
78         description: "The backend should return a server error with the correct error code.",
79         message: {id: 123, method: "Database.getDatabaseTableNames", params: {databaseId: "thisisNotADatabase"}},
80         expectedError: "ServerError"
81     });
82
83     addErrorResponseTestCase({
84         name: "TestErrorCodeForAsyncServerError",
85         description: "The backend should return a server error with the correct error code.",
86         message: {id: 123, method: "Database.executeSQL", params: {databaseId: "thisisNotADatabase", query: "asdf"}},
87         expectedError: "ServerError"
88     });
89
90     addErrorResponseTestCase({
91         name: "CommandWithBadArgumentValue",
92         description: "The backend should return an error if something went wrong when invoking the agent's method.",
93         message: {id: 123, method: "Runtime.getProperties", params: {objectId: "thisisNotAnId"}},
94         expectedError: "ServerError"
95     });
96
97     suite.runTestCasesAndFinish();
98 }
99 </script>
100 </head>
101 <body onload="runTest()">
102     <p>Testing the inspector backend's error handling when sending messages with wrong parameters.</p>
103 </body>
104 </html>