blob: bf6089219b7c49b403f8fc36c844a6540da9f600 [file] [log] [blame]
// 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 various extreme usages of console.log()\n`);
await TestRunner.loadModule('console_test_runner');
await TestRunner.showPanel('console');
await TestRunner.loadHTML(`
<p id="node">
</p>
`);
await TestRunner.evaluateInPagePromise(`
function overrideToString()
{
console.error("FAIL: side effects, should not be called.");
return "FAIL";
}
[Object, Array, Number, Boolean, String, Uint32Array, Node, Element].forEach(function(type) {
type.prototype.toString = overrideToString;
});
console.log('string');
console.log(42);
console.log(false);
console.log(undefined);
console.log(null);
console.log(NaN);
console.log(-Infinity);
console.log(-0);
console.log(new Number(42));
console.log(new Number(-42.42e-12));
console.log(new Boolean(true));
console.log(new String('foo'));
console.log({__proto__: null});
console.log(window);
// Test DOMWrapper object.
var node = document.getElementById('node');
node.toString = overrideToString;
node.__proto__.toString = overrideToString;
console.log(node);
var obj = {foo: 1, bar: 2};
var arr = [1, 2, 3];
console.log(obj);
console.log(arr);
console.log(new Uint32Array([1, 2, 3]));
arr.push(obj);
console.log(arr);
var overridden = {toString: overrideToString};
console.log(overridden);
arr.push(overridden);
console.log(arr);
// Test recursive arrays.
var a1 = [[1, [[2], 3], [[[[4]]], 5]]];
var a2 = [];
a2[3] = null;
a2[5] = NaN;
a1.push(a2);
a2.push(a1);
var a3 = [[a1], [[a2]]];
a3.push(a3);
console.log(a3);
// This used to timeout.
var timeout = {
toString: function() {
while (true) {
}
}
};
console.log(timeout);
arr.push(timeout);
console.log(arr);
// This used to crash out of memory.
const maxArrayLength = 4294967295;
for (var i = 100000; i < maxArrayLength; i *= 10) {
arr[i] = i;
console.log(arr);
}
arr[maxArrayLength - 1] = a3;
console.log(arr);
// Test array length limit.
const arrayLengthLimit = 10000;
var arr = [];
for (var i = 0; i < arrayLengthLimit + 1; ++i)
arr[i] = i;
console.log(arr);
// Test array stack depth limit.
var arr = [];
for (var i = 0; i < arrayLengthLimit; ++i)
arr = [arr];
console.log(arr);
`);
await ConsoleTestRunner.dumpConsoleMessages();
TestRunner.completeTest();
})();