Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(801)

Unified Diff: third_party/WebKit/Source/devtools/front_end/console_test_runner/ConsoleTestRunner.js

Issue 2837083003: DevTools: create test infrastructure so devtools drives the test (Closed)
Patch Set: rebaseline Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/devtools/front_end/console_test_runner/ConsoleTestRunner.js
diff --git a/third_party/WebKit/Source/devtools/front_end/console_test_runner/ConsoleTestRunner.js b/third_party/WebKit/Source/devtools/front_end/console_test_runner/ConsoleTestRunner.js
new file mode 100644
index 0000000000000000000000000000000000000000..1f84b8738f8794a4c78c9a1915beaf1af1e46a52
--- /dev/null
+++ b/third_party/WebKit/Source/devtools/front_end/console_test_runner/ConsoleTestRunner.js
@@ -0,0 +1,146 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+/**
+ * @fileoverview using private properties isn't a Closure violation in tests.
+ * @suppress {accessControls}
+ */
+
+/**
+ * @param {boolean} printOriginatingCommand
+ * @param {boolean} dumpClassNames
+ * @param {function(!Element, !ConsoleModel.ConsoleMessage):string=} formatter
+ */
+ConsoleTestRunner.dumpConsoleMessages = function(printOriginatingCommand, dumpClassNames, formatter) {
+ TestRunner.addResults(
+ ConsoleTestRunner.dumpConsoleMessagesIntoArray(printOriginatingCommand, dumpClassNames, formatter));
+};
+
+/**
+ * @param {boolean} printOriginatingCommand
+ * @param {boolean} dumpClassNames
+ * @param {function(!Element, !ConsoleModel.ConsoleMessage):string=} formatter
+ * @return {!Array<string>}
+ */
+ConsoleTestRunner.dumpConsoleMessagesIntoArray = function(printOriginatingCommand, dumpClassNames, formatter) {
+ formatter = formatter || ConsoleTestRunner.prepareConsoleMessageText;
+ var result = [];
+ ConsoleTestRunner.disableConsoleViewport();
+ var consoleView = Console.ConsoleView.instance();
+ if (consoleView._needsFullUpdate)
+ consoleView._updateMessageList();
+ var viewMessages = consoleView._visibleViewMessages;
+ for (var i = 0; i < viewMessages.length; ++i) {
+ var uiMessage = viewMessages[i];
+ var message = uiMessage.consoleMessage();
+ var element = uiMessage.element();
+
+ if (dumpClassNames) {
+ var classNames = [];
+ for (var node = element.firstChild; node; node = node.traverseNextNode(element)) {
+ if (node.nodeType === Node.ELEMENT_NODE && node.className) {
+ classNames.push(node.className.replace('platform-linux', 'platform-*')
+ .replace('platform-mac', 'platform-*')
+ .replace('platform-windows', 'platform-*'));
+ }
+ }
+ }
+
+ if (ConsoleTestRunner.dumpConsoleTableMessage(uiMessage, false, result)) {
+ if (dumpClassNames)
+ result.push(classNames.join(' > '));
+ } else {
+ var messageText = formatter(element, message);
+ messageText = messageText.replace(/VM\d+/g, 'VM');
+ result.push(messageText + (dumpClassNames ? ' ' + classNames.join(' > ') : ''));
+ }
+
+ if (printOriginatingCommand && uiMessage.consoleMessage().originatingMessage())
+ result.push('Originating from: ' + uiMessage.consoleMessage().originatingMessage().messageText);
+ }
+ return result;
+};
+
+/**
+ * @param {!Element} messageElement
+ * @param {!ConsoleModel.ConsoleMessage} consoleMessage
+ * @return {string}
+ */
+ConsoleTestRunner.prepareConsoleMessageText = function(messageElement, consoleMessage) {
+ var messageText = messageElement.deepTextContent().replace(/\u200b/g, '');
+ // Replace scriptIds with generic scriptId string to avoid flakiness.
+ messageText = messageText.replace(/VM\d+/g, 'VM');
+ // Remove line and column of evaluate method.
+ messageText = messageText.replace(/(at eval \(eval at evaluate) \(:\d+:\d+\)/, '$1');
+
+ if (messageText.startsWith('Navigated to')) {
+ var fileName = messageText.split(' ').pop().split('/').pop();
+ messageText = 'Navigated to ' + fileName;
+ }
+ // The message might be extremely long in case of dumping stack overflow message.
+ messageText = messageText.substring(0, 1024);
+ return messageText;
+};
+
+/**
+ * @param {!Console.ConsoleViewMessage} viewMessage
+ * @param {boolean} forceInvalidate
+ * @param {!Array<string>} results
+ * @return {boolean}
+ */
+ConsoleTestRunner.dumpConsoleTableMessage = function(viewMessage, forceInvalidate, results) {
+ if (forceInvalidate)
+ Console.ConsoleView.instance()._viewport.invalidate();
+ var table = viewMessage.element();
+ var headers = table.querySelectorAll('th > div:first-child');
+ if (!headers.length)
+ return false;
+
+ var headerLine = '';
+ for (var i = 0; i < headers.length; i++)
+ headerLine += headers[i].textContent + ' | ';
+
+ addResult('HEADER ' + headerLine);
+
+ var rows = table.querySelectorAll('.data-container tr');
+
+ for (var i = 0; i < rows.length; i++) {
+ var row = rows[i];
+ var rowLine = '';
+ var items = row.querySelectorAll('td > span');
+ for (var j = 0; j < items.length; j++)
+ rowLine += items[j].textContent + ' | ';
+
+ if (rowLine.trim())
+ addResult('ROW ' + rowLine);
+ }
+
+ /**
+ * @param {string} x
+ */
+ function addResult(x) {
+ if (results)
+ results.push(x);
+ else
+ TestRunner.addResult(x);
+ }
+
+ return true;
+};
+
+ConsoleTestRunner.disableConsoleViewport = function() {
+ ConsoleTestRunner.fixConsoleViewportDimensions(600, 2000);
+};
+
+/**
+ * @param {number} width
+ * @param {number} height
+ */
+ConsoleTestRunner.fixConsoleViewportDimensions = function(width, height) {
+ var viewport = Console.ConsoleView.instance()._viewport;
+ viewport.element.style.width = width + 'px';
+ viewport.element.style.height = height + 'px';
+ viewport.element.style.position = 'absolute';
+ viewport.invalidate();
+};

Powered by Google App Engine
This is Rietveld 408576698