Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / LayoutTests / http / tests / inspector / console-test.js
1 var initialize_ConsoleTest = function() {
2
3 InspectorTest.preloadPanel("console");
4
5 InspectorTest.evaluateInConsole = function(code, callback)
6 {
7     callback = InspectorTest.safeWrap(callback);
8
9     var consoleView = WebInspector.ConsolePanel._view();
10     consoleView.visible = true;
11     consoleView._prompt.text = code;
12     var event = document.createEvent("KeyboardEvent");
13     event.initKeyboardEvent("keydown", true, true, null, "Enter", "");
14     consoleView._prompt.proxyElement.dispatchEvent(event);
15     InspectorTest.addConsoleViewSniffer(function(commandResult) {
16         callback(commandResult.toMessageElement().deepTextContent());
17     });
18 }
19
20 InspectorTest.addConsoleViewSniffer = function(override, opt_sticky)
21 {
22     var sniffer = function (viewMessage) {
23         override(viewMessage);
24     };
25
26     InspectorTest.addSniffer(WebInspector.ConsoleView.prototype, "_consoleMessageAddedForTest", sniffer, opt_sticky);
27 }
28
29 InspectorTest.evaluateInConsoleAndDump = function(code, callback)
30 {
31     callback = InspectorTest.safeWrap(callback);
32
33     function mycallback(text)
34     {
35         InspectorTest.addResult(code + " = " + text);
36         callback(text);
37     }
38     InspectorTest.evaluateInConsole(code, mycallback);
39 }
40
41 InspectorTest.prepareConsoleMessageText = function(messageElement, consoleMessage)
42 {
43     var messageText = messageElement.deepTextContent().replace(/\u200b/g, "");
44     // Replace scriptIds with generic scriptId string to avoid flakiness.
45     messageText = messageText.replace(/VM\d+/g, "VM");
46     // Strip out InjectedScript line numbers from stack traces to avoid rebaselining each time InjectedScriptSource is edited.
47     messageText = messageText.replace(/VM:\d+ InjectedScript\./g, " InjectedScript.");
48     // Strip out InjectedScript line numbers from console message anchor.
49     var functionName = consoleMessage && consoleMessage.stackTrace && consoleMessage.stackTrace[0] && consoleMessage.stackTrace[0].functionName || "";
50     if (functionName.indexOf("InjectedScript") !== -1)
51         messageText = messageText.replace(/\bVM:\d+/, ""); // Only first replace.
52     if (messageText.startsWith("Navigated to")) {
53         var fileName = messageText.split(" ").pop().split("/").pop();
54         messageText = "Navigated to " + fileName;
55     }
56     // The message might be extremely long in case of dumping stack overflow message.
57     messageText = messageText.substring(0, 1024);
58     return messageText;
59 }
60
61 InspectorTest.disableConsoleViewport = function()
62 {
63     InspectorTest.fixConsoleViewportDimensions(600, 2000);
64 }
65
66 InspectorTest.fixConsoleViewportDimensions = function(width, height)
67 {
68     var viewport = WebInspector.ConsolePanel._view()._viewport;
69     viewport.element.style.width = width + "px";
70     viewport.element.style.height = height + "px";
71     viewport.element.style.position = "absolute";
72     viewport.invalidate();
73 }
74
75 InspectorTest.consoleMessagesCount = function()
76 {
77     var consoleView = WebInspector.ConsolePanel._view();
78     return consoleView._consoleMessages.length;
79 }
80
81 InspectorTest.dumpConsoleMessages = function(printOriginatingCommand, dumpClassNames, formatter)
82 {
83     InspectorTest.addResults(InspectorTest.dumpConsoleMessagesIntoArray(printOriginatingCommand, dumpClassNames, formatter));
84 }
85
86 InspectorTest.dumpConsoleMessagesIntoArray = function(printOriginatingCommand, dumpClassNames, formatter)
87 {
88     formatter = formatter || InspectorTest.prepareConsoleMessageText;
89     var result = [];
90     InspectorTest.disableConsoleViewport();
91     var consoleView = WebInspector.ConsolePanel._view();
92     if (consoleView._needsFullUpdate)
93         consoleView._updateMessageList();
94     var viewMessages = consoleView._visibleViewMessages;
95     for (var i = 0; i < viewMessages.length; ++i) {
96         var uiMessage = viewMessages[i];
97         var message = uiMessage.consoleMessage();
98         var element = uiMessage.contentElement();
99
100         if (dumpClassNames) {
101             var classNames = [];
102             for (var node = element.firstChild; node; node = node.traverseNextNode(element)) {
103                 if (node.nodeType === Node.ELEMENT_NODE && node.className)
104                     classNames.push(node.className);
105             }
106         }
107
108         if (InspectorTest.dumpConsoleTableMessage(uiMessage, false, result)) {
109             if (dumpClassNames)
110                 result.push(classNames.join(" > "));
111         } else {
112             var messageText = formatter(element, message);
113             result.push(messageText + (dumpClassNames ? " " + classNames.join(" > ") : ""));
114         }
115
116         if (printOriginatingCommand && uiMessage.consoleMessage().originatingMessage())
117             result.push("Originating from: " + uiMessage.consoleMessage().originatingMessage().messageText);
118     }
119     return result;
120 }
121
122 InspectorTest.dumpConsoleTableMessage = function(viewMessage, forceInvalidate, results)
123 {
124     if (forceInvalidate)
125         WebInspector.ConsolePanel._view()._viewport.invalidate();
126     var table = viewMessage.contentElement();
127     var headers = table.querySelectorAll("th div");
128     if (!headers.length)
129         return false;
130
131     var headerLine = "";
132     for (var i = 0; i < headers.length; i++)
133         headerLine += headers[i].textContent + " | ";
134
135     addResult("HEADER " + headerLine);
136
137     var rows = table.querySelectorAll(".data-container tr");
138
139     for (var i = 0; i < rows.length; i++) {
140         var row = rows[i];
141         var rowLine = "";
142         var items = row.querySelectorAll("td > span");
143         for (var j = 0; j < items.length; j++)
144             rowLine += items[j].textContent + " | ";
145
146         if (rowLine.trim())
147             addResult("ROW " + rowLine);
148     }
149
150     function addResult(x)
151     {
152         if (results)
153             results.push(x);
154         else
155             InspectorTest.addResult(x);
156     }
157
158     return true;
159 }
160
161 InspectorTest.dumpConsoleMessagesWithStyles = function(sortMessages)
162 {
163     var result = [];
164     var messageViews = WebInspector.ConsolePanel._view()._visibleViewMessages;
165     for (var i = 0; i < messageViews.length; ++i) {
166         var element = messageViews[i].contentElement();
167         var messageText = InspectorTest.prepareConsoleMessageText(element)
168         InspectorTest.addResult(messageText);
169         var spans = element.querySelectorAll(".console-message-text > span > span");
170         for (var j = 0; j < spans.length; j++)
171             InspectorTest.addResult("Styled text #" + j + ": " + (spans[j].style.cssText || "NO STYLES DEFINED"));
172     }
173 }
174
175 InspectorTest.dumpConsoleMessagesWithClasses = function(sortMessages) {
176     var result = [];
177     var messageViews = WebInspector.ConsolePanel._view()._visibleViewMessages;
178     for (var i = 0; i < messageViews.length; ++i) {
179         var element = messageViews[i].contentElement();
180         var messageText = InspectorTest.prepareConsoleMessageText(element);
181         result.push(messageText + " " + element.getAttribute("class"));
182     }
183     if (sortMessages)
184         result.sort();
185     for (var i = 0; i < result.length; ++i)
186         InspectorTest.addResult(result[i]);
187 }
188
189 InspectorTest.expandConsoleMessages = function(callback, deepFilter, sectionFilter)
190 {
191     var messageViews = WebInspector.ConsolePanel._view()._visibleViewMessages;
192
193     // Initiate round-trips to fetch necessary data for further rendering.
194     for (var i = 0; i < messageViews.length; ++i)
195         messageViews[i].contentElement();
196
197     InspectorTest.runAfterPendingDispatches(expandTreeElements);
198
199     function expandTreeElements()
200     {
201         for (var i = 0; i < messageViews.length; ++i) {
202             var element = messageViews[i].contentElement();
203             for (var node = element; node; node = node.traverseNextNode(element)) {
204                 if (node.treeElementForTest)
205                     node.treeElementForTest.expand();
206                 if (!node._section)
207                     continue;
208                 if (sectionFilter && !sectionFilter(node._section))
209                     continue;
210                 node._section.expanded = true;
211
212                 if (!deepFilter)
213                     continue;
214                 var treeElements = node._section.propertiesTreeOutline.children;
215                 for (var j = 0; j < treeElements.length; ++j) {
216                     for (var treeElement = treeElements[j]; treeElement; treeElement = treeElement.traverseNextTreeElement(false, null, false)) {
217                         if (deepFilter(treeElement))
218                             treeElement.expand();
219                     }
220                 }
221             }
222         }
223         InspectorTest.runAfterPendingDispatches(callback);
224     }
225 }
226
227 InspectorTest.waitForRemoteObjectsConsoleMessages = function(callback)
228 {
229     var messages = WebInspector.ConsolePanel._view()._visibleViewMessages;
230     for (var i = 0; i < messages.length; ++i)
231         messages[i].toMessageElement();
232     InspectorTest.runAfterPendingDispatches(callback);
233 }
234
235 InspectorTest.checkConsoleMessagesDontHaveParameters = function()
236 {
237     var messageViews = WebInspector.ConsolePanel._view()._visibleViewMessages;
238     for (var i = 0; i < messageViews.length; ++i) {
239         var m = messageViews[i].consoleMessage();
240         InspectorTest.addResult("Message[" + i + "]:");
241         InspectorTest.addResult("Message: " + WebInspector.displayNameForURL(m.url) + ":" + m.line + " " + m.message);
242         if ("_parameters" in m) {
243             if (m._parameters)
244                 InspectorTest.addResult("FAILED: message parameters list is not empty: " + m.parameters);
245             else
246                 InspectorTest.addResult("SUCCESS: message parameters list is empty. ");
247         } else {
248             InspectorTest.addResult("FAILED: didn't find _parameters field in the message.");
249         }
250     }
251 }
252
253 InspectorTest.waitUntilMessageReceived = function(callback)
254 {
255     InspectorTest.addSniffer(WebInspector.consoleModel, "addMessage", callback, false);
256 }
257
258 InspectorTest.waitUntilNthMessageReceived = function(count, callback)
259 {
260     function override()
261     {
262         if (--count === 0)
263             InspectorTest.safeWrap(callback)();
264         else
265             InspectorTest.addSniffer(WebInspector.consoleModel, "addMessage", override, false);
266     }
267     InspectorTest.addSniffer(WebInspector.consoleModel, "addMessage", override, false);
268 }
269
270 InspectorTest.changeExecutionContext = function(namePrefix)
271 {
272     var selector = WebInspector.ConsolePanel._view()._executionContextSelector._selectElement;
273     var option = selector.firstChild;
274     while (option) {
275         if (option.textContent && option.textContent.startsWith(namePrefix))
276             break;
277         option = option.nextSibling;
278     }
279     if (!option) {
280         InspectorTest.addResult("FAILED: context with prefix: "  + namePrefix + " not found in the context list");
281         return;
282     }
283     option.selected = true;
284     WebInspector.ConsolePanel._view()._executionContextChanged();
285 }
286
287 }