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

print('Checks that Debugger.setScriptSource doesn\'t crash with modules');

var module1 = `
export function foo() {
  return 42;
}`;

var editedModule1 = `
export function foo() {
  return 239;
}`;

var module2 = `
import { foo } from 'module1';
console.log(foo());
`;

var module1Id;
Protocol.Debugger.onScriptParsed(message => {
  if (message.params.url === 'module1')
    module1Id = message.params.scriptId;
});
Protocol.Debugger.enable()
  .then(() => InspectorTest.addModule(module1, 'module1'))
  .then(() => InspectorTest.addModule(module2, 'module2'))
  .then(() => InspectorTest.waitPendingTasks())
  .then(() => Protocol.Debugger.setScriptSource({ scriptId: module1Id, scriptSource: editedModule1 }))
  .then(InspectorTest.logMessage)
  .then(InspectorTest.completeTest);
