text: // 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.loadLegacyModule('console'); await TestRunner.loadTestModule('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();
    }
  })();
  