From 00c0e12090bdfa85b17904e2a5dc113474ffa9be Mon Sep 17 00:00:00 2001 From: Rich Trott Date: Fri, 22 May 2015 00:05:26 -0700 Subject: [PATCH] more tests, fix check for completer being a function or undefined --- lib/readline.js | 3 +- test/parallel/test-readline-interface.js | 35 ++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/lib/readline.js b/lib/readline.js index cb28380cec6752..ef97108ae76834 100644 --- a/lib/readline.js +++ b/lib/readline.js @@ -12,7 +12,6 @@ const util = require('util'); const inherits = util.inherits; const EventEmitter = require('events').EventEmitter; - exports.createInterface = function(input, output, completer, terminal) { var rl; if (arguments.length === 1) { @@ -49,7 +48,7 @@ function Interface(input, output, completer, terminal) { completer = completer || undefined; - if (! typeof completer in ['function', 'undefined']) { + if (typeof completer !== 'function' && typeof completer !== 'undefined') { throw new TypeError('Argument \'completer\' must be a function'); } diff --git a/test/parallel/test-readline-interface.js b/test/parallel/test-readline-interface.js index a85fc63cbe50af..c93c97c96273af 100644 --- a/test/parallel/test-readline-interface.js +++ b/test/parallel/test-readline-interface.js @@ -190,6 +190,41 @@ function isWarned(emitter) { assert.equal(callCount, expectedLines.length); rli.close(); + // \t does not become part of the input when there is a completer function + fi = new FakeInput(); + var completer = function(line) { + return [[], line]; + }; + rli = new readline.Interface({ + input: fi, + output: fi, + terminal: true, + completer: completer + }); + expectedLines = ['foo']; + callCount = 0; + rli.on('line', function(line) { + assert.equal(line, expectedLines[callCount]); + callCount++; + }); + fi.emit('data', '\tfo\to\t'); + fi.emit('data', '\n'); + assert.equal(callCount, expectedLines.length); + rli.close(); + + // constructor throws if completer is not a function or undefined + fi = new FakeInput(); + assert.throws(function () { + readline.createInterface({ + input: fi, + completer: 'string is not valid' + }); + }, function (err) { + if ( (err instanceof TypeError) && /Argument \'completer\' must be a function/.test(err) ) { + return true; + } + }); + // sending a multi-byte utf8 char over multiple writes var buf = Buffer('☮', 'utf8'); fi = new FakeInput();