summaryrefslogtreecommitdiff
path: root/deps/v8/test/inspector/debugger/step-into-out.js
blob: 0394da41a9faf1537dade9fc22909481538062db (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
// 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(
  'Tests for stepInto out different places.');

session.setupScriptMap();
Protocol.Debugger.enable();
let stepAction;
Protocol.Debugger.setBlackboxPatterns({patterns: ['expr\.js']});
Protocol.Debugger.onPaused(async ({params:{callFrames:[topFrame]}}) => {
  if (stepAction !== 'resume') {
    await session.logSourceLocation(topFrame.location);
  }
  Protocol.Debugger[stepAction]();
});

InspectorTest.runAsyncTestSuite([
  async function testStepInOutBranch() {
    contextGroup.addScript(`
      function a() { b(false); c(); };
      function b(x) { if (x) { c(); }};
      function c() {};
      a(); b(); c();`);
    stepAction = 'stepInto';
    Protocol.Debugger.pause();
    await Protocol.Runtime.evaluate({expression: 'a()\n//# sourceURL=expr.js'});
    stepAction = 'resume';
    await Protocol.Runtime.evaluate({expression: ''});
  },

  async function testStepInOutTree() {
    contextGroup.addScript(`
      function a() { b(c(d()), d()); c(d()); d(); };
      function b(x,y) { c(); };
      function c(x) {};
      function d() {};
      a(); b(); c(); d();`);
    stepAction = 'stepInto';
    Protocol.Debugger.pause();
    InspectorTest.log('use stepInto..');
    await Protocol.Runtime.evaluate({expression: 'a()\n//# sourceURL=expr.js'});
    stepAction = 'resume';
    await Protocol.Runtime.evaluate({expression: ''});

    stepAction = 'stepOver';
    Protocol.Debugger.pause();
    InspectorTest.log('use stepOver..');
    await Protocol.Runtime.evaluate({expression: 'a()\n//# sourceURL=expr.js'});
    stepAction = 'resume';
    await Protocol.Runtime.evaluate({expression: ''});

    stepAction = 'stepOut';
    Protocol.Debugger.pause();
    InspectorTest.log('use stepOut..');
    await Protocol.Runtime.evaluate({expression: 'a()\n//# sourceURL=expr.js'});
    stepAction = 'resume';
    await Protocol.Runtime.evaluate({expression: ''});
  },

  async function testStepInOutSimple() {
    contextGroup.addScript(`
      function a() { b(); c(); }
      function b() { c(); }
      function c() {}
      a(); b(); c();`);
    stepAction = 'stepInto';
    Protocol.Debugger.pause();
    InspectorTest.log('use stepInto..');
    await Protocol.Runtime.evaluate({expression: 'a()\n//# sourceURL=expr.js'});
    stepAction = 'resume';
    await Protocol.Runtime.evaluate({expression: ''});

    stepAction = 'stepOver';
    Protocol.Debugger.pause();
    InspectorTest.log('use stepOver..');
    await Protocol.Runtime.evaluate({expression: 'a()\n//# sourceURL=expr.js'});
    stepAction = 'resume';
    await Protocol.Runtime.evaluate({expression: ''});

    stepAction = 'stepOut';
    Protocol.Debugger.pause();
    InspectorTest.log('use stepOut..');
    await Protocol.Runtime.evaluate({expression: 'a()\n//# sourceURL=expr.js'});
    stepAction = 'resume';
    await Protocol.Runtime.evaluate({expression: ''});
  }
]);