| Index: LayoutTests/inspector/console/console-log-side-effects.html
|
| diff --git a/LayoutTests/inspector/console/console-log-side-effects.html b/LayoutTests/inspector/console/console-log-side-effects.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..fcbd86fb5f4352dadc4acf94cd3ef574925c942e
|
| --- /dev/null
|
| +++ b/LayoutTests/inspector/console/console-log-side-effects.html
|
| @@ -0,0 +1,114 @@
|
| +<html>
|
| +<head>
|
| +<script>
|
| +
|
| +function overrideToString()
|
| +{
|
| + console.error("FAIL: side effects, should not be called.");
|
| + return "FAIL";
|
| +}
|
| +
|
| +function test()
|
| +{
|
| + [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);
|
| +}
|
| +
|
| +function runTest()
|
| +{
|
| + if (window.testRunner) {
|
| + testRunner.dumpAsText();
|
| + testRunner.waitUntilDone();
|
| + }
|
| + try {
|
| + test();
|
| + } finally {
|
| + if (window.testRunner)
|
| + testRunner.notifyDone();
|
| + }
|
| +}
|
| +
|
| +</script>
|
| +</head>
|
| +<body onload="runTest()">
|
| +<p id ="node">
|
| +Tests various extreme usages of console.log()
|
| +</p>
|
| +</body>
|
| +</html>
|
|
|