summaryrefslogtreecommitdiff
path: root/test/sequential/test-inspector-contexts.js
blob: 54acfab0d5cace4492b3fd28794ee8292d5d4d96 (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
'use strict';

// Flags: --expose-gc

const common = require('../common');
common.skipIfInspectorDisabled();

const { strictEqual } = require('assert');
const { runInNewContext } = require('vm');
const { Session } = require('inspector');

const session = new Session();
session.connect();

function notificationPromise(method) {
  return new Promise((resolve) => session.once(method, resolve));
}

async function testContextCreatedAndDestroyed() {
  console.log('Testing context created/destroyed notifications');
  const mainContextPromise =
      notificationPromise('Runtime.executionContextCreated');

  session.post('Runtime.enable');
  let contextCreated = await mainContextPromise;
  strictEqual('Node.js Main Context',
              contextCreated.params.context.name,
              JSON.stringify(contextCreated));

  const secondContextCreatedPromise =
      notificationPromise('Runtime.executionContextCreated');

  let contextDestroyed = null;
  session.once('Runtime.executionContextDestroyed',
               (notification) => contextDestroyed = notification);

  runInNewContext('1 + 1', {});

  contextCreated = await secondContextCreatedPromise;
  strictEqual('VM Context 1',
              contextCreated.params.context.name,
              JSON.stringify(contextCreated));

  // GC is unpredictable...
  while (!contextDestroyed)
    global.gc();

  strictEqual(contextCreated.params.context.id,
              contextDestroyed.params.executionContextId,
              JSON.stringify(contextDestroyed));
}

async function testBreakpointHit() {
  console.log('Testing breakpoint is hit in a new context');
  session.post('Debugger.enable');

  const pausedPromise = notificationPromise('Debugger.paused');
  runInNewContext('debugger', {});
  await pausedPromise;
}

common.crashOnUnhandledRejection();
testContextCreatedAndDestroyed().then(testBreakpointHit);