toolkit/devtools/webconsole/test/test_cached_messages.html

changeset 0
6474c204b198
equal deleted inserted replaced
-1:000000000000 0:9f263bb31a93
1 <!DOCTYPE HTML>
2 <html lang="en">
3 <head>
4 <meta charset="utf8">
5 <title>Test for cached messages</title>
6 <script type="text/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
7 <script type="text/javascript;version=1.8" src="common.js"></script>
8 <!-- Any copyright is dedicated to the Public Domain.
9 - http://creativecommons.org/publicdomain/zero/1.0/ -->
10 </head>
11 <body>
12 <p>Test for cached messages</p>
13
14 <script class="testbody" type="application/javascript;version=1.8">
15 let expectedConsoleCalls = [];
16 let expectedPageErrors = [];
17
18 function doPageErrors()
19 {
20 Services.console.reset();
21
22 expectedPageErrors = [
23 {
24 _type: "PageError",
25 errorMessage: /fooColor/,
26 sourceName: /.+/,
27 category: "CSS Parser",
28 timeStamp: /^\d+$/,
29 error: false,
30 warning: true,
31 exception: false,
32 strict: false,
33 },
34 {
35 _type: "PageError",
36 errorMessage: /doTheImpossible/,
37 sourceName: /.+/,
38 category: "chrome javascript",
39 timeStamp: /^\d+$/,
40 error: false,
41 warning: false,
42 exception: true,
43 strict: false,
44 },
45 ];
46
47 let container = document.createElement("script");
48 document.body.appendChild(container);
49 container.textContent = "document.body.style.color = 'fooColor';";
50 document.body.removeChild(container);
51
52 SimpleTest.expectUncaughtException();
53
54 container = document.createElement("script");
55 document.body.appendChild(container);
56 container.textContent = "document.doTheImpossible();";
57 document.body.removeChild(container);
58 }
59
60 function doConsoleCalls()
61 {
62 ConsoleAPIStorage.clearEvents();
63
64 top.console.log("foobarBaz-log", undefined);
65 top.console.info("foobarBaz-info", null);
66 top.console.warn("foobarBaz-warn", document.body);
67
68 expectedConsoleCalls = [
69 {
70 _type: "ConsoleAPI",
71 level: "log",
72 filename: /test_cached_messages/,
73 functionName: "doConsoleCalls",
74 timeStamp: /^\d+$/,
75 arguments: ["foobarBaz-log", { type: "undefined" }],
76 },
77 {
78 _type: "ConsoleAPI",
79 level: "info",
80 filename: /test_cached_messages/,
81 functionName: "doConsoleCalls",
82 timeStamp: /^\d+$/,
83 arguments: ["foobarBaz-info", { type: "null" }],
84 },
85 {
86 _type: "ConsoleAPI",
87 level: "warn",
88 filename: /test_cached_messages/,
89 functionName: "doConsoleCalls",
90 timeStamp: /^\d+$/,
91 arguments: ["foobarBaz-warn", { type: "object", actor: /[a-z]/ }],
92 },
93 ];
94 }
95 </script>
96
97 <script class="testbody" type="text/javascript;version=1.8">
98 SimpleTest.waitForExplicitFinish();
99
100 let consoleAPIListener, consoleServiceListener;
101 let consoleAPICalls = 0;
102 let pageErrors = 0;
103
104 let handlers = {
105 onConsoleAPICall: function onConsoleAPICall(aMessage)
106 {
107 for (let msg of expectedConsoleCalls) {
108 if (msg.functionName == aMessage.functionName &&
109 msg.filename.test(aMessage.filename)) {
110 consoleAPICalls++;
111 break;
112 }
113 }
114 if (consoleAPICalls == expectedConsoleCalls.length) {
115 checkConsoleAPICache();
116 }
117 },
118
119 onConsoleServiceMessage: function onConsoleServiceMessage(aMessage)
120 {
121 if (!(aMessage instanceof Ci.nsIScriptError)) {
122 return;
123 }
124 for (let msg of expectedPageErrors) {
125 if (msg.category == aMessage.category &&
126 msg.errorMessage.test(aMessage.errorMessage)) {
127 pageErrors++;
128 break;
129 }
130 }
131 if (pageErrors == expectedPageErrors.length) {
132 testPageErrors();
133 }
134 },
135 };
136
137 function startTest()
138 {
139 removeEventListener("load", startTest);
140
141 consoleAPIListener = new ConsoleAPIListener(top, handlers);
142 consoleAPIListener.init();
143
144 doConsoleCalls();
145 }
146
147 function checkConsoleAPICache()
148 {
149 consoleAPIListener.destroy();
150 consoleAPIListener = null;
151 attachConsole(["ConsoleAPI"], onAttach1);
152 }
153
154 function onAttach1(aState, aResponse)
155 {
156 aState.client.getCachedMessages(["ConsoleAPI"],
157 onCachedConsoleAPI.bind(null, aState));
158 }
159
160 function onCachedConsoleAPI(aState, aResponse)
161 {
162 let msgs = aResponse.messages;
163 info("cached console messages: " + msgs.length);
164
165 ok(msgs.length >= expectedConsoleCalls.length,
166 "number of cached console messages");
167
168 for (let msg of msgs) {
169 for (let expected of expectedConsoleCalls) {
170 if (expected.functionName == msg.functionName &&
171 expected.filename.test(msg.filename)) {
172 expectedConsoleCalls.splice(expectedConsoleCalls.indexOf(expected));
173 checkConsoleAPICall(msg, expected);
174 break;
175 }
176 }
177 }
178
179 is(expectedConsoleCalls.length, 0, "all expected messages have been found");
180
181 closeDebugger(aState, function() {
182 consoleServiceListener = new ConsoleServiceListener(null, handlers);
183 consoleServiceListener.init();
184 doPageErrors();
185 });
186 }
187
188 function testPageErrors()
189 {
190 consoleServiceListener.destroy();
191 consoleServiceListener = null;
192 attachConsole(["PageError"], onAttach2);
193 }
194
195 function onAttach2(aState, aResponse)
196 {
197 aState.client.getCachedMessages(["PageError"],
198 onCachedPageErrors.bind(null, aState));
199 }
200
201 function onCachedPageErrors(aState, aResponse)
202 {
203 let msgs = aResponse.messages;
204 info("cached page errors: " + msgs.length);
205
206 ok(msgs.length >= expectedPageErrors.length,
207 "number of cached page errors");
208
209 for (let msg of msgs) {
210 for (let expected of expectedPageErrors) {
211 if (expected.category == msg.category &&
212 expected.errorMessage.test(msg.errorMessage)) {
213 expectedPageErrors.splice(expectedPageErrors.indexOf(expected));
214 checkObject(msg, expected);
215 break;
216 }
217 }
218 }
219
220 is(expectedPageErrors.length, 0, "all expected messages have been found");
221
222 closeDebugger(aState, function() {
223 SimpleTest.finish();
224 });
225 }
226
227 addEventListener("load", startTest);
228 </script>
229 </body>
230 </html>

mercurial