// Copyright 2017 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.

const {session, contextGroup, Protocol} =
    InspectorTest.start('Checks liveedit with ES6 modules.');

const moduleSource = `
export function foo() {
  console.log('module1');
  return 42;
}
foo()`;

const newModuleSource = `
export function foo() {
  console.log('patched module1');
  return 42;
}
foo()`;

const callFooSource = `
import { foo } from 'module';
foo();`;

(async function test() {
  await Protocol.Runtime.enable();
  await Protocol.Debugger.enable();
  contextGroup.addModule(moduleSource, 'module');
  const [{ params: { scriptId } }, { params: { args }}] = [
    await Protocol.Debugger.onceScriptParsed(),
    await Protocol.Runtime.onceConsoleAPICalled()
  ];
  InspectorTest.log('console.log message from function before patching:')
  InspectorTest.logMessage(args[0]);

  const {result} = await Protocol.Debugger.setScriptSource({
    scriptId,
    scriptSource: newModuleSource
  });
  InspectorTest.log('Debugger.setScriptSource result:');
  InspectorTest.logMessage(result);

  contextGroup.addModule(callFooSource, 'callFoo');
  const { params: {args: patchedArgs } } =
      await Protocol.Runtime.onceConsoleAPICalled();
  InspectorTest.log('console.log message from function after patching:')
  InspectorTest.logMessage(patchedArgs[0]);
  InspectorTest.completeTest();
})()