| // 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. |
| |
| (async function() { |
| TestRunner.addResult('Tests that console logging dumps large arrays properly.\n'); |
| |
| await TestRunner.loadModule('console_test_runner'); |
| await TestRunner.showPanel('console'); |
| |
| await TestRunner.evaluateInPagePromise(` |
| (function onload() |
| { |
| var a = []; |
| for (var i = 0; i < 42; ++i) |
| a[i] = i; |
| a[100] = 100; |
| console.dir(a); |
| |
| var b = []; |
| for (var i = 0; i < 10; ++i) |
| b[i] = undefined; |
| console.dir(b); |
| |
| var c = []; |
| for (var i = 0; i < 10; ++i) |
| c[i] = i; |
| c[100] = 100; |
| console.dir(c); |
| |
| var d = []; |
| for (var i = 0; i < 405; ++i) |
| d[i] = i; |
| console.dir(d); |
| |
| var e = []; |
| for (var i = 0; i < 10; ++i) |
| e[i] = i; |
| e[123] = 123; |
| e[-123] = -123; |
| e[3.14] = 3.14; |
| e[4294967295] = 4294967295; |
| e[4294967296] = 4294967296; |
| e[Infinity] = Infinity; |
| e[-Infinity] = -Infinity; |
| e[NaN] = NaN; |
| console.log("%O", e); |
| |
| var f = []; |
| f[4294967294] = 4294967294; |
| for (var i = 20; i >= 0; i -= 2) |
| f[i] = i; |
| for (var i = 2, n = 33; n--; i *= 2) |
| f[i] = i; |
| for (var i = 1; i < 20; i += 2) |
| f[i] = i; |
| console.log("%O", f) |
| |
| var g = new Uint8Array(new ArrayBuffer(Math.pow(20, 6) + Math.pow(20, 4) + 3)); |
| console.dir(g); |
| |
| })(); |
| `); |
| |
| ObjectUI.ArrayGroupingTreeElement._bucketThreshold = 20; |
| var messages = Console.ConsoleView.instance()._visibleViewMessages; |
| var sections = []; |
| |
| for (var i = 0; i < messages.length; ++i) { |
| var consoleMessage = messages[i].consoleMessage(); |
| var element = messages[i].element(); |
| var node = element.traverseNextNode(element); |
| |
| while (node) { |
| const section = |
| ObjectUI.ObjectPropertiesSection.getObjectPropertiesSectionFrom(node); |
| if (section) { |
| sections.push(section); |
| section.expand(); |
| } |
| |
| node = node.traverseNextNode(element); |
| } |
| } |
| |
| TestRunner.addSniffer(ObjectUI.ArrayGroupingTreeElement.prototype, 'onpopulate', populateCalled, true); |
| var populated = false; |
| |
| function populateCalled() { |
| populated = true; |
| } |
| |
| TestRunner.deprecatedRunAfterPendingDispatches(expandRecursively); |
| |
| function expandRecursively() { |
| for (var i = 0; i < sections.length; ++i) { |
| var children = sections[i].rootElement().children(); |
| |
| for (var j = 0; j < children.length; ++j) { |
| for (var treeElement = children[j]; treeElement; treeElement = treeElement.traverseNextTreeElement(true, null, true)) { |
| if (treeElement.listItemElement.textContent.indexOf('__proto__') === -1) |
| treeElement.expand(); |
| } |
| } |
| } |
| |
| if (populated) |
| TestRunner.deprecatedRunAfterPendingDispatches(completeTest); |
| else |
| TestRunner.deprecatedRunAfterPendingDispatches(expandRecursively); |
| } |
| |
| async function completeTest() { |
| await ConsoleTestRunner.dumpConsoleMessages(false, false, TestRunner.textContentWithLineBreaks); |
| TestRunner.completeTest(); |
| } |
| })(); |