| 'use strict'; |
| |
| const common = require('../common'); |
| const fixtures = require('../common/fixtures'); |
| const assert = require('assert'); |
| const net = require('net'); |
| |
| if (!common.isMainThread) |
| common.skip('process.chdir is not available in Workers'); |
| |
| process.chdir(fixtures.fixturesDir); |
| const repl = require('repl'); |
| |
| { |
| const server = net.createServer((conn) => { |
| repl.start('', conn).on('exit', () => { |
| conn.destroy(); |
| server.close(); |
| }); |
| }); |
| |
| const host = common.localhostIPv4; |
| const port = 0; |
| const options = { host, port }; |
| |
| let answer = ''; |
| server.listen(options, function() { |
| options.port = this.address().port; |
| const conn = net.connect(options); |
| conn.setEncoding('utf8'); |
| conn.on('data', (data) => answer += data); |
| conn.write('require("baz")\nrequire("./baz")\n.exit\n'); |
| }); |
| |
| process.on('exit', function() { |
| assert.doesNotMatch(answer, /Cannot find module/); |
| assert.doesNotMatch(answer, /Error/); |
| assert.strictEqual(answer, '\'eye catcher\'\n\'perhaps I work\'\n'); |
| }); |
| } |
| |
| // Test for https://github.com/nodejs/node/issues/30808 |
| // In REPL, we shouldn't look up relative modules from 'node_modules'. |
| { |
| const server = net.createServer((conn) => { |
| repl.start('', conn).on('exit', () => { |
| conn.destroy(); |
| server.close(); |
| }); |
| }); |
| |
| const host = common.localhostIPv4; |
| const port = 0; |
| const options = { host, port }; |
| |
| let answer = ''; |
| server.listen(options, function() { |
| options.port = this.address().port; |
| const conn = net.connect(options); |
| conn.setEncoding('utf8'); |
| conn.on('data', (data) => answer += data); |
| conn.write('require("./bar")\n.exit\n'); |
| }); |
| |
| process.on('exit', function() { |
| assert.match(answer, /Uncaught Error: Cannot find module '\.\/bar'/); |
| |
| assert.match(answer, /code: 'MODULE_NOT_FOUND'/); |
| assert.match(answer, /requireStack: \[ '<repl>' \]/); |
| }); |
| } |