// Copyright 2018 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('Set breakpoint before function call.');

contextGroup.addScript(`
eval('function test1() {                \\n' +
     '  var a = 1;                      \\n' +
     '  return a;                       \\n' +
     '}                                 \\n' +
     '//# sourceURL=testScriptOne');

eval('function test2() {                \\n' +
     '  var b = 1;                      \\n' +
     '  return b;                       \\n' +
     '}                                 \\n' +
     '//# sourceURL=testScriptTwo');
`);

(async function test() {
  session.setupScriptMap();
  Protocol.Debugger.enable();
  Protocol.Runtime.evaluate({ expression: 'debugger; test1(); test2();' });
  await Protocol.Debugger.oncePaused();
  InspectorTest.log('Pause before function calls, set two breakpoints at:');
  await session.logSourceLocation((await Protocol.Debugger.setBreakpointByUrl({
    url: 'testScriptOne',
    lineNumber: 2
  })).result.locations[0]);
  await session.logSourceLocation((await Protocol.Debugger.setBreakpointByUrl({
    urlRegex: 'Scrip.Two',
    lineNumber: 2
  })).result.locations[0]);
  {
    InspectorTest.log('Resume..');
    Protocol.Debugger.resume();
    const {
      params:{
        callFrames:[{location}]
      }
    } = await Protocol.Debugger.oncePaused();
    InspectorTest.log('Paused at:');
    await session.logSourceLocation(location);
  }
  {
    InspectorTest.log('Resume..');
    Protocol.Debugger.resume();
    const {
      params:{
        callFrames:[{location}]
      }
    } = await Protocol.Debugger.oncePaused();
    InspectorTest.log('Paused at:');
    await session.logSourceLocation(location);
  }
  InspectorTest.completeTest();
})();