summaryrefslogtreecommitdiff
path: root/deps/v8/test/inspector/debugger/set-script-source-2.js
blob: 335bc4764411a003e212a44c522f9e9401d95111 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
// 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.

// Flags: --no-always-opt

let {session, contextGroup, Protocol} =
    InspectorTest.start('Tests Debugger.setScriptSource');

session.setupScriptMap();

function foo(a,b,c) {
var x = a;
debugger;
return x + b;
}

function boo() {
debugger;
var x = 1;
return x + 2;
}

InspectorTest.runAsyncTestSuite([
  async function addLineAfter() {
    await Protocol.Debugger.enable();
    Protocol.Runtime.evaluate({expression: foo.toString()});
    let {params:{scriptId}} = await Protocol.Debugger.onceScriptParsed();
    Protocol.Runtime.evaluate({
      expression: 'setTimeout(() => foo(1,2,3), 0)//# sourceURL=test.js'});
    let {params:{callFrames}} = await Protocol.Debugger.oncePaused();
    await session.logSourceLocation(callFrames[0].location);
    await replaceInSource(scriptId, 'debugger;', 'debugger;\nvar x = 3;');

    Protocol.Debugger.resume();
    await Protocol.Debugger.oncePaused();
    await Protocol.Debugger.disable();
  },

  async function addLineBefore() {
    await Protocol.Debugger.enable();
    Protocol.Runtime.evaluate({expression: foo.toString()});
    let {params:{scriptId}} = await Protocol.Debugger.onceScriptParsed();
    Protocol.Runtime.evaluate({
      expression: 'setTimeout(foo, 0)//# sourceURL=test.js'});
    let {params:{callFrames}} = await Protocol.Debugger.oncePaused();
    await session.logSourceLocation(callFrames[0].location);
    await replaceInSource(scriptId, 'debugger;', 'var x = 3;\ndebugger;');

    Protocol.Debugger.resume();
    await Protocol.Debugger.oncePaused();
    await Protocol.Debugger.disable();
  },

  async function breakAtFirstLineAddLineAfter() {
    await Protocol.Debugger.enable();
    Protocol.Runtime.evaluate({expression: boo.toString()});
    let {params:{scriptId}} = await Protocol.Debugger.onceScriptParsed();
    Protocol.Runtime.evaluate({
      expression: 'setTimeout(boo, 0)//# sourceURL=test.js'});
    let {params:{callFrames}} = await Protocol.Debugger.oncePaused();
    await session.logSourceLocation(callFrames[0].location);
    await replaceInSource(scriptId, 'debugger;', 'debugger;\nvar x = 3;');

    await Protocol.Debugger.disable();
  },

  async function breakAtFirstLineAddLineBefore() {
    await Protocol.Debugger.enable();
    Protocol.Runtime.evaluate({expression: boo.toString()});
    let {params:{scriptId}} = await Protocol.Debugger.onceScriptParsed();
    Protocol.Runtime.evaluate({
      expression: 'setTimeout(boo, 0)//# sourceURL=test.js'});
    let {params:{callFrames}} = await Protocol.Debugger.oncePaused();
    await session.logSourceLocation(callFrames[0].location);
    await replaceInSource(scriptId, 'debugger;', 'var x = 3;\ndebugger;');

    await Protocol.Debugger.disable();
  }
]);

async function replaceInSource(scriptId, oldString, newString) {
  InspectorTest.log('---');
  let {result:{scriptSource}} =
      await Protocol.Debugger.getScriptSource({scriptId});
  let {result} = await Protocol.Debugger.setScriptSource({
    scriptId,
    scriptSource: scriptSource.replace(oldString, newString)
  });
  InspectorTest.log('Break location after LiveEdit:');
  await session.logSourceLocation(result.callFrames[0].location, true);
  InspectorTest.log('stackChanged: ' + result.stackChanged);
  if (result.stackChanged) {
    InspectorTest.log('Protocol.Debugger.stepInto');
    Protocol.Debugger.stepInto();
    var {params:{callFrames}} = await Protocol.Debugger.oncePaused();
    await session.logSourceLocation(callFrames[0].location);
  }
}