summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcjihrig <cjihrig@gmail.com>2019-07-16 11:46:59 -0400
committerMichaƫl Zasso <targos@protonmail.com>2019-07-20 11:29:58 +0200
commit487a417dd1b515ce32745e59ef01fd206576c9ca (patch)
treeb2fbe5d2b386b4f245cad520126ebfe98b9de420
parent88809a49f66e4e494d4e2c6565284d1e4a247bf2 (diff)
downloadandroid-node-v8-487a417dd1b515ce32745e59ef01fd206576c9ca.tar.gz
android-node-v8-487a417dd1b515ce32745e59ef01fd206576c9ca.tar.bz2
android-node-v8-487a417dd1b515ce32745e59ef01fd206576c9ca.zip
tty: expose stream API from readline methods
This commit exposes the return value and callback of the underlying readline APIs from the tty module. PR-URL: https://github.com/nodejs/node/pull/28721 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
-rw-r--r--doc/api/tty.md41
-rw-r--r--lib/tty.js16
-rw-r--r--test/parallel/test-tty-backwards-api.js31
3 files changed, 70 insertions, 18 deletions
diff --git a/doc/api/tty.md b/doc/api/tty.md
index a48d316853..e19e8160a0 100644
--- a/doc/api/tty.md
+++ b/doc/api/tty.md
@@ -99,24 +99,41 @@ process.stdout.on('resize', () => {
});
```
-### writeStream.clearLine(dir)
+### writeStream.clearLine(dir[, callback])
<!-- YAML
added: v0.7.7
+changes:
+ - version: REPLACEME
+ pr-url: https://github.com/nodejs/node/pull/28721
+ description: The stream's write() callback and return value are exposed.
-->
* `dir` {number}
* `-1` - to the left from cursor
* `1` - to the right from cursor
* `0` - the entire line
+* `callback` {Function} Invoked once the operation completes.
+* Returns: {boolean} `false` if the stream wishes for the calling code to wait
+ for the `'drain'` event to be emitted before continuing to write additional
+ data; otherwise `true`.
`writeStream.clearLine()` clears the current line of this `WriteStream` in a
direction identified by `dir`.
-### writeStream.clearScreenDown()
+### writeStream.clearScreenDown([callback])
<!-- YAML
added: v0.7.7
+changes:
+ - version: REPLACEME
+ pr-url: https://github.com/nodejs/node/pull/28721
+ description: The stream's write() callback and return value are exposed.
-->
+* `callback` {Function} Invoked once the operation completes.
+* Returns: {boolean} `false` if the stream wishes for the calling code to wait
+ for the `'drain'` event to be emitted before continuing to write additional
+ data; otherwise `true`.
+
`writeStream.clearScreenDown()` clears this `WriteStream` from the current
cursor down.
@@ -128,13 +145,21 @@ added: v0.7.7
A `number` specifying the number of columns the TTY currently has. This property
is updated whenever the `'resize'` event is emitted.
-### writeStream.cursorTo(x, y)
+### writeStream.cursorTo(x, y[, callback])
<!-- YAML
added: v0.7.7
+changes:
+ - version: REPLACEME
+ pr-url: https://github.com/nodejs/node/pull/28721
+ description: The stream's write() callback and return value are exposed.
-->
* `x` {number}
* `y` {number}
+* `callback` {Function} Invoked once the operation completes.
+* Returns: {boolean} `false` if the stream wishes for the calling code to wait
+ for the `'drain'` event to be emitted before continuing to write additional
+ data; otherwise `true`.
`writeStream.cursorTo()` moves this `WriteStream`'s cursor to the specified
position.
@@ -220,13 +245,21 @@ added: v0.5.8
A `boolean` that is always `true`.
-### writeStream.moveCursor(dx, dy)
+### writeStream.moveCursor(dx, dy[, callback])
<!-- YAML
added: v0.7.7
+changes:
+ - version: REPLACEME
+ pr-url: https://github.com/nodejs/node/pull/28721
+ description: The stream's write() callback and return value are exposed.
-->
* `dx` {number}
* `dy` {number}
+* `callback` {Function} Invoked once the operation completes.
+* Returns: {boolean} `false` if the stream wishes for the calling code to wait
+ for the `'drain'` event to be emitted before continuing to write additional
+ data; otherwise `true`.
`writeStream.moveCursor()` moves this `WriteStream`'s cursor *relative* to its
current position.
diff --git a/lib/tty.js b/lib/tty.js
index 9e7d7dbb31..cc22a3b499 100644
--- a/lib/tty.js
+++ b/lib/tty.js
@@ -137,21 +137,21 @@ WriteStream.prototype._refreshSize = function() {
};
// Backwards-compat
-WriteStream.prototype.cursorTo = function(x, y) {
+WriteStream.prototype.cursorTo = function(x, y, callback) {
if (readline === undefined) readline = require('readline');
- readline.cursorTo(this, x, y);
+ return readline.cursorTo(this, x, y, callback);
};
-WriteStream.prototype.moveCursor = function(dx, dy) {
+WriteStream.prototype.moveCursor = function(dx, dy, callback) {
if (readline === undefined) readline = require('readline');
- readline.moveCursor(this, dx, dy);
+ return readline.moveCursor(this, dx, dy, callback);
};
-WriteStream.prototype.clearLine = function(dir) {
+WriteStream.prototype.clearLine = function(dir, callback) {
if (readline === undefined) readline = require('readline');
- readline.clearLine(this, dir);
+ return readline.clearLine(this, dir, callback);
};
-WriteStream.prototype.clearScreenDown = function() {
+WriteStream.prototype.clearScreenDown = function(callback) {
if (readline === undefined) readline = require('readline');
- readline.clearScreenDown(this);
+ return readline.clearScreenDown(this, callback);
};
WriteStream.prototype.getWindowSize = function() {
return [this.columns, this.rows];
diff --git a/test/parallel/test-tty-backwards-api.js b/test/parallel/test-tty-backwards-api.js
index 7b6dc3c092..b4005bad61 100644
--- a/test/parallel/test-tty-backwards-api.js
+++ b/test/parallel/test-tty-backwards-api.js
@@ -1,6 +1,8 @@
// Flags: --expose-internals
'use strict';
const common = require('../common');
+const assert = require('assert');
+const readline = require('readline');
const noop = () => {};
const { internalBinding } = require('internal/test/binding');
@@ -13,15 +15,32 @@ TTY.prototype = {
const { WriteStream } = require('tty');
-const methods = [
+[
'cursorTo',
'moveCursor',
'clearLine',
'clearScreenDown'
-];
+].forEach((method) => {
+ readline[method] = common.mustCall(function() {
+ const lastArg = arguments[arguments.length - 1];
-methods.forEach((method) => {
- require('readline')[method] = common.mustCall();
- const writeStream = new WriteStream(1);
- writeStream[method](1, 2);
+ if (typeof lastArg === 'function') {
+ process.nextTick(lastArg);
+ }
+
+ return true;
+ }, 2);
});
+
+const writeStream = new WriteStream(1);
+
+// Verify that the corresponding readline methods are called, that the return
+// values are propagated, and any callbacks are invoked.
+assert.strictEqual(writeStream.cursorTo(1, 2), true);
+assert.strictEqual(writeStream.cursorTo(1, 2, common.mustCall()), true);
+assert.strictEqual(writeStream.moveCursor(1, 2), true);
+assert.strictEqual(writeStream.moveCursor(1, 2, common.mustCall()), true);
+assert.strictEqual(writeStream.clearLine(1), true);
+assert.strictEqual(writeStream.clearLine(1, common.mustCall()), true);
+assert.strictEqual(writeStream.clearScreenDown(), true);
+assert.strictEqual(writeStream.clearScreenDown(common.mustCall()), true);