'use strict'; const { test } = require('tap'); const startCLI = require('./start-cli'); test('examples/alive.js', (t) => { const cli = startCLI(['examples/alive.js']); function onFatal(error) { cli.quit(); throw error; } return cli.waitForInitialBreak() .then(() => cli.waitForPrompt()) .then(() => cli.command('exec [typeof heartbeat, typeof process.exit]')) .then(() => { t.match(cli.output, '[ \'function\', \'function\' ]', 'works w/o paren'); }) .then(() => cli.command('repl')) .then(() => { t.match( cli.output, 'Press Ctrl + C to leave debug repl\n> ', 'shows hint for how to leave repl'); t.notMatch(cli.output, 'debug>', 'changes the repl style'); }) .then(() => cli.command('[typeof heartbeat, typeof process.exit]')) .then(() => cli.waitFor(/function/)) .then(() => cli.waitForPrompt()) .then(() => { t.match( cli.output, '[ \'function\', \'function\' ]', 'can evaluate in the repl'); t.match(cli.output, /> $/); }) .then(() => cli.ctrlC()) .then(() => cli.waitFor(/debug> $/)) .then(() => cli.command('exec("[typeof heartbeat, typeof process.exit]")')) .then(() => { t.match(cli.output, '[ \'function\', \'function\' ]', 'works w/ paren'); }) .then(() => cli.command('cont')) .then(() => cli.command('exec [typeof heartbeat, typeof process.exit]')) .then(() => { t.match( cli.output, '[ \'undefined\', \'function\' ]', 'non-paused exec can see global but not module-scope values'); }) .then(() => cli.quit()) .then(null, onFatal); }); test('exec .scope', (t) => { const cli = startCLI(['examples/backtrace.js']); function onFatal(error) { cli.quit(); throw error; } return cli.waitForInitialBreak() .then(() => cli.waitForPrompt()) .then(() => cli.stepCommand('c')) .then(() => cli.command('exec .scope')) .then(() => { t.match( cli.output, '\'moduleScoped\'', 'displays closure from module body'); t.match(cli.output, '\'a\'', 'displays local / function arg'); t.match(cli.output, '\'l1\'', 'displays local scope'); t.notMatch(cli.output, '\'encodeURIComponent\'', 'omits global scope'); }) .then(() => cli.quit()) .then(null, onFatal); });