Previously, we detected options object based on amount of arguments
supplied. But if we're calling readline without new operator,
constructor gets re-called and will always have 4 arguments.
PR-URL: https://github.com/iojs/io.js/pull/1385
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
function Interface(input, output, completer, terminal) {
if (!(this instanceof Interface)) {
- return new Interface(input, output, completer, terminal);
+ // call the constructor preserving original number of arguments
+ const self = Object.create(Interface.prototype);
+ Interface.apply(self, arguments);
+ return self;
}
this._sawReturn = false;
fi.emit('data', ''); // removes listener
});
+ // calling readline without `new`
+ fi = new FakeInput();
+ rli = readline.Interface({ input: fi, output: fi, terminal: terminal });
+ called = false;
+ rli.on('line', function(line) {
+ called = true;
+ assert.equal(line, 'asdf');
+ });
+ fi.emit('data', 'asdf\n');
+ assert.ok(called);
+ rli.close();
+
if (terminal) {
// question
fi = new FakeInput();