1'use strict';
2
3const common = require('../common');
4const tmpdir = require('../common/tmpdir');
5const assert = require('assert');
6const spawn = require('child_process').spawn;
7const path = require('path');
8
9tmpdir.refresh();
10
11const requirePath = JSON.stringify(path.join(tmpdir.path, 'non-existent.json'));
12
13// Use -i to force node into interactive mode, despite stdout not being a TTY
14const child = spawn(process.execPath, ['-i']);
15
16let out = '';
17const input = `try { require(${requirePath}); } catch {} ` +
18              `require('fs').writeFileSync(${requirePath}, '1');` +
19              `require(${requirePath});`;
20
21child.stderr.on('data', common.mustNotCall());
22
23child.stdout.setEncoding('utf8');
24child.stdout.on('data', (c) => {
25  out += c;
26});
27child.stdout.on('end', common.mustCall(() => {
28  assert.ok(out.endsWith('> 1\n> '));
29}));
30
31child.stdin.end(input);
32