chromium/third_party/blink/web_tests/http/tests/devtools/console/console-object-preview.js

// Copyright 2017 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import {TestRunner} from 'test_runner';
import {ConsoleTestRunner} from 'console_test_runner';

(async function() {
  TestRunner.addResult(`Tests that console produces instant previews for arrays and objects.\n`);
  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();
  }
})();