'use strict'; require('../common'); const ArrayStream = require('../common/arraystream'); const assert = require('assert'); const repl = require('repl'); let evalCount = 0; let recovered = false; let rendered = false; function customEval(code, context, file, cb) { evalCount++; return cb(evalCount === 1 ? new repl.Recoverable() : null, true); } const putIn = new ArrayStream(); putIn.write = function(msg) { if (msg === '... ') { recovered = true; } if (msg === 'true\n') { rendered = true; } }; repl.start('', putIn, customEval); // https://github.com/nodejs/node/issues/2939 // Expose recoverable errors to the consumer. putIn.emit('data', '1\n'); putIn.emit('data', '2\n'); process.on('exit', function() { assert(recovered, 'REPL never recovered'); assert(rendered, 'REPL never rendered the result'); assert.strictEqual(evalCount, 2); });