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);
|