blob: 4718313cf65c0b2584b54888815be581ebcc89bc [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 that console produces instant previews for arrays and objects.\n`);
await TestRunner.loadModule('console_test_runner');
await TestRunner.showPanel('console');
await TestRunner.evaluateInPagePromise(`
console.log("Mutating object in a loop");
var object = { a: 0, b: 0 };
for (var i = 0; i < 3; ++i) {
object.c = i;
console.log(object);
}
console.log("Mutating array in a loop");
var array = [0, 0, 0];
for (var i = 0; i < 3; ++i) {
array[2] = i;
console.log(array);
}
console.log("Object with many properties");
var objectWithManyProperties = {};
for (var i = 0; i < 10; ++i) {
objectWithManyProperties["property_" + i] = i;
}
console.log(objectWithManyProperties);
console.log("Array with many properties");
var arrayWithManyProperties = [0, 1];
for (var i = 0; i < 10; ++i) {
arrayWithManyProperties["property_" + i] = i;
}
console.log(arrayWithManyProperties);
console.log("Array with gaps and overflow");
var arrayWithGapsAndOverflow = [];
for (var i = 0; i < 101; i++) {
arrayWithGapsAndOverflow[57 * i + 32] = i;
}
console.log(arrayWithGapsAndOverflow);
console.log("Array with gaps without overflow");
var arrayWithGapsWithoutOverflow = [];
for (var i = 0; i < 99; i++) {
arrayWithGapsWithoutOverflow[57 * i + 32] = i;
}
console.log(arrayWithGapsWithoutOverflow);
console.log("Object with proto");
var objectWithProto = { d: 1 };
objectWithProto.__proto__ = object;
console.log(objectWithProto);
console.log("Sparse array");
var sparseArray = new Array(150);
sparseArray[50] = 50;
console.log(sparseArray);
console.log("Dense array with indexes and propeties");
var denseArray = new Array(150);
for (var i = 0; i < 150; ++i) {
denseArray[i] = i;
denseArray["property_" + i] = i;
}
console.log(denseArray);
console.log("Object with properties containing whitespaces");
var obj = {};
obj[" a b "] = " a b ";
obj["c d"] = "c d";
obj[""] = "";
obj[" "] = " ";
obj["a\\n\\nb\\nc"] = "a\\n\\nb\\nc";
console.log(obj);
console.log("Object with a document.all property");
console.log({all: document.all});
console.log("Object with special numbers");
var obj = { nan: NaN, posInf: Infinity, negInf: -Infinity, negZero: -0 };
console.log(obj);
console.log("Object with exactly 5 properties: expected to be lossless");
console.log({a:1, b:2, c:3, d:4, e:5});
console.log({null:null, undef:undefined, regexp: \/^[regexp]$\/g, bool: false});
class IHavePrivateProperties {
#privateProperty1 = 1;
#privateProperty2 = 2;
regularProperty = 3;
}
console.log(new IHavePrivateProperties)
`);
await ConsoleTestRunner.dumpConsoleMessages();
TestRunner.addResult('Expanded all messages');
ConsoleTestRunner.expandConsoleMessages(step3);
async function step3() {
await ConsoleTestRunner.dumpConsoleMessages();
TestRunner.completeTest();
}
})();