diff options
Diffstat (limited to 'test/parallel/test-inspector-contexts.js')
-rw-r--r-- | test/parallel/test-inspector-contexts.js | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/test/parallel/test-inspector-contexts.js b/test/parallel/test-inspector-contexts.js new file mode 100644 index 0000000000..54acfab0d5 --- /dev/null +++ b/test/parallel/test-inspector-contexts.js @@ -0,0 +1,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); |