summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/api/readline.markdown5
-rw-r--r--test/parallel/test-readline-emit-keypress-events.js30
2 files changed, 35 insertions, 0 deletions
diff --git a/doc/api/readline.markdown b/doc/api/readline.markdown
index c2b77c5245..db543d2306 100644
--- a/doc/api/readline.markdown
+++ b/doc/api/readline.markdown
@@ -354,6 +354,11 @@ a `'resize'` event on the `output` if/when the columns ever change
Move cursor to the specified position in a given TTY stream.
+## readline.emitKeypressEvents(stream)
+
+Causes `stream` to begin emitting `'keypress'` events corresponding to its
+input.
+
## readline.moveCursor(stream, dx, dy)
Move cursor relative to it's current position in a given TTY stream.
diff --git a/test/parallel/test-readline-emit-keypress-events.js b/test/parallel/test-readline-emit-keypress-events.js
new file mode 100644
index 0000000000..ddadf6d223
--- /dev/null
+++ b/test/parallel/test-readline-emit-keypress-events.js
@@ -0,0 +1,30 @@
+'use strict';
+// emitKeypressEvents is thoroughly tested in test-readline-keys.js.
+// However, that test calls it implicitly. This is just a quick sanity check
+// to verify that it works when called explicitly.
+
+require('../common');
+const assert = require('assert');
+const readline = require('readline');
+const PassThrough = require('stream').PassThrough;
+const stream = new PassThrough();
+const sequence = [];
+const keys = [];
+
+readline.emitKeypressEvents(stream);
+
+stream.on('keypress', (s, k) => {
+ sequence.push(s);
+ keys.push(k);
+});
+
+stream.write('foo');
+
+process.on('exit', () => {
+ assert.deepStrictEqual(sequence, ['f', 'o', 'o']);
+ assert.deepStrictEqual(keys, [
+ { sequence: 'f', name: 'f', ctrl: false, meta: false, shift: false },
+ { sequence: 'o', name: 'o', ctrl: false, meta: false, shift: false },
+ { sequence: 'o', name: 'o', ctrl: false, meta: false, shift: false }
+ ]);
+});