1 var initialize_ConsoleTest = function() {
3 InspectorTest.preloadPanel("console");
5 InspectorTest.evaluateInConsole = function(code, callback)
7 callback = InspectorTest.safeWrap(callback);
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());
20 InspectorTest.addConsoleViewSniffer = function(override, opt_sticky)
22 var sniffer = function (viewMessage) {
23 override(viewMessage);
26 InspectorTest.addSniffer(WebInspector.ConsoleView.prototype, "_consoleMessageAddedForTest", sniffer, opt_sticky);
29 InspectorTest.evaluateInConsoleAndDump = function(code, callback)
31 callback = InspectorTest.safeWrap(callback);
33 function mycallback(text)
35 InspectorTest.addResult(code + " = " + text);
38 InspectorTest.evaluateInConsole(code, mycallback);
41 InspectorTest.prepareConsoleMessageText = function(messageElement, consoleMessage)
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;
56 // The message might be extremely long in case of dumping stack overflow message.
57 messageText = messageText.substring(0, 1024);
61 InspectorTest.disableConsoleViewport = function()
63 InspectorTest.fixConsoleViewportDimensions(600, 2000);
66 InspectorTest.fixConsoleViewportDimensions = function(width, height)
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();
75 InspectorTest.consoleMessagesCount = function()
77 var consoleView = WebInspector.ConsolePanel._view();
78 return consoleView._consoleMessages.length;
81 InspectorTest.dumpConsoleMessages = function(printOriginatingCommand, dumpClassNames, formatter)
83 InspectorTest.addResults(InspectorTest.dumpConsoleMessagesIntoArray(printOriginatingCommand, dumpClassNames, formatter));
86 InspectorTest.dumpConsoleMessagesIntoArray = function(printOriginatingCommand, dumpClassNames, formatter)
88 formatter = formatter || InspectorTest.prepareConsoleMessageText;
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();
100 if (dumpClassNames) {
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);
108 if (InspectorTest.dumpConsoleTableMessage(uiMessage, false, result)) {
110 result.push(classNames.join(" > "));
112 var messageText = formatter(element, message);
113 result.push(messageText + (dumpClassNames ? " " + classNames.join(" > ") : ""));
116 if (printOriginatingCommand && uiMessage.consoleMessage().originatingMessage())
117 result.push("Originating from: " + uiMessage.consoleMessage().originatingMessage().messageText);
122 InspectorTest.dumpConsoleTableMessage = function(viewMessage, forceInvalidate, results)
125 WebInspector.ConsolePanel._view()._viewport.invalidate();
126 var table = viewMessage.contentElement();
127 var headers = table.querySelectorAll("th div");
132 for (var i = 0; i < headers.length; i++)
133 headerLine += headers[i].textContent + " | ";
135 addResult("HEADER " + headerLine);
137 var rows = table.querySelectorAll(".data-container tr");
139 for (var i = 0; i < rows.length; i++) {
142 var items = row.querySelectorAll("td > span");
143 for (var j = 0; j < items.length; j++)
144 rowLine += items[j].textContent + " | ";
147 addResult("ROW " + rowLine);
150 function addResult(x)
155 InspectorTest.addResult(x);
161 InspectorTest.dumpConsoleMessagesWithStyles = function(sortMessages)
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"));
175 InspectorTest.dumpConsoleMessagesWithClasses = function(sortMessages) {
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"));
185 for (var i = 0; i < result.length; ++i)
186 InspectorTest.addResult(result[i]);
189 InspectorTest.expandConsoleMessages = function(callback, deepFilter, sectionFilter)
191 var messageViews = WebInspector.ConsolePanel._view()._visibleViewMessages;
193 // Initiate round-trips to fetch necessary data for further rendering.
194 for (var i = 0; i < messageViews.length; ++i)
195 messageViews[i].contentElement();
197 InspectorTest.runAfterPendingDispatches(expandTreeElements);
199 function expandTreeElements()
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();
208 if (sectionFilter && !sectionFilter(node._section))
210 node._section.expanded = true;
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();
223 InspectorTest.runAfterPendingDispatches(callback);
227 InspectorTest.waitForRemoteObjectsConsoleMessages = function(callback)
229 var messages = WebInspector.ConsolePanel._view()._visibleViewMessages;
230 for (var i = 0; i < messages.length; ++i)
231 messages[i].toMessageElement();
232 InspectorTest.runAfterPendingDispatches(callback);
235 InspectorTest.checkConsoleMessagesDontHaveParameters = function()
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) {
244 InspectorTest.addResult("FAILED: message parameters list is not empty: " + m.parameters);
246 InspectorTest.addResult("SUCCESS: message parameters list is empty. ");
248 InspectorTest.addResult("FAILED: didn't find _parameters field in the message.");
253 InspectorTest.waitUntilMessageReceived = function(callback)
255 InspectorTest.addSniffer(WebInspector.consoleModel, "addMessage", callback, false);
258 InspectorTest.waitUntilNthMessageReceived = function(count, callback)
263 InspectorTest.safeWrap(callback)();
265 InspectorTest.addSniffer(WebInspector.consoleModel, "addMessage", override, false);
267 InspectorTest.addSniffer(WebInspector.consoleModel, "addMessage", override, false);
270 InspectorTest.changeExecutionContext = function(namePrefix)
272 var selector = WebInspector.ConsolePanel._view()._executionContextSelector._selectElement;
273 var option = selector.firstChild;
275 if (option.textContent && option.textContent.startsWith(namePrefix))
277 option = option.nextSibling;
280 InspectorTest.addResult("FAILED: context with prefix: " + namePrefix + " not found in the context list");
283 option.selected = true;
284 WebInspector.ConsolePanel._view()._executionContextChanged();