chromium/third_party/blink/web_tests/http/tests/devtools/inspected-objects-not-overriden.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';

/* TODO(chromium:1050549)
 * once that bug is complete we can lose this test
 * as DevTools will no longer touch built-in prototypes.
 */


(async function() {
  TestRunner.addResult(
      `Tests that opening inspector front-end doesn't change methods defined by the inspected application.\n`);


  await TestRunner.loadHTML(`
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <div id="output"></div>
  `);

  await TestRunner.evaluateInPagePromise(`
    function output(message) {
      if (!self._output)
          self._output = [];
      self._output.push(message);
    }

    function myImpl() {
      return "my value";
    }

    // Provide some custom methods.
    Object.type = myImpl;
    Object.hasProperties = myImpl;
    Object.describe = myImpl;
    Object.className = myImpl;
    String.prototype.testStringProtoFunc = myImpl;
    var originalJSONStringify = JSON.stringify;
    JSON.stringify = myImpl;

    function dumpValues()
    {
        // Check that the methods haven't changed.
        output("myImpl() => " + myImpl());
        output("Object.type === myImpl => " + (Object.type === myImpl));
        output("Object.hasProperties === myImpl => " + (Object.hasProperties === myImpl));
        output("Object.describe === myImpl => " + (Object.describe === myImpl));
        output("Object.className === myImpl => " + (Object.className === myImpl));
        output("String.prototype.testStringProtoFunc === myImpl => " + (String.prototype.testStringProtoFunc === myImpl));
        output("JSON.stringify === myImpl => " + (JSON.stringify === myImpl));
    }
  `);


  async function callback() {
    const output = await TestRunner.evaluateInPageAsync('originalJSONStringify(self._output)');
    TestRunner.addResults(JSON.parse(output));
    TestRunner.completeTest();
  }

  TestRunner.evaluateInPage('dumpValues()', callback);
})();