// Copyright 2020 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

let {session, contextGroup, Protocol} =
    InspectorTest.start('Regression test for crbug.com/1140845. Check that a "then" gettter on the object prototype does not crash V8');

const setupScript = `
  let obj = Object.prototype;
  obj.__defineGetter__('then', function() {console.log("foo")});
`;

(async function() {
  await Protocol.Debugger.enable();

  // Set a custom `then` method on the Object prototype. This causes termination
  // when 'then' is retrieved, as the 'then' getter is side-effecting.
  await Protocol.Runtime.evaluate({
    expression: setupScript,
  });

  InspectorTest.log(`Evaluating a simple string 'foo' does not cause a crash, but a side-effect exception.`);
  InspectorTest.logMessage(await Protocol.Runtime.evaluate({
    expression: `"foo"`,
    replMode: true,
    throwOnSideEffect: true,
  }));

  InspectorTest.log(`Evaluating a simple string 'foo' with side-effets should give us the string.`);
  InspectorTest.logMessage(await Protocol.Runtime.evaluate({
    expression: `"foo"`,
    replMode: true,
  }));

  InspectorTest.completeTest();
})();
