From 4b5a8160a4d624b35802616aaa5a79617cd3e8b2 Mon Sep 17 00:00:00 2001 From: cjihrig Date: Sat, 11 Nov 2017 23:03:57 -0500 Subject: test: add coverage to tty module PR-URL: https://github.com/nodejs/node/pull/16959 Reviewed-By: Gireesh Punathil Reviewed-By: James M Snell Reviewed-By: Anna Henningsen --- test/pseudo-tty/test-tty-window-size.js | 85 +++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 test/pseudo-tty/test-tty-window-size.js (limited to 'test/pseudo-tty/test-tty-window-size.js') diff --git a/test/pseudo-tty/test-tty-window-size.js b/test/pseudo-tty/test-tty-window-size.js new file mode 100644 index 0000000000..782b66802e --- /dev/null +++ b/test/pseudo-tty/test-tty-window-size.js @@ -0,0 +1,85 @@ +'use strict'; +const common = require('../common'); +const assert = require('assert'); +const { WriteStream } = require('tty'); +const { TTY } = process.binding('tty_wrap'); +const getWindowSize = TTY.prototype.getWindowSize; + +function monkeyPatchGetWindowSize(fn) { + TTY.prototype.getWindowSize = function() { + TTY.prototype.getWindowSize = getWindowSize; + return fn.apply(this, arguments); + }; +} + +{ + // tty.WriteStream constructor does not define columns and rows if an error + // occurs while retrieving the window size from the handle. + monkeyPatchGetWindowSize(function() { + return -1; + }); + + const stream = WriteStream(1); + + assert(stream instanceof WriteStream); + assert.strictEqual(stream.columns, undefined); + assert.strictEqual(stream.rows, undefined); +} + +{ + // _refreshSize() emits an error if an error occurs while retrieving the + // window size from the handle. + const stream = WriteStream(1); + + stream.on('error', common.mustCall((err) => { + assert.strictEqual(err.syscall, 'getWindowSize'); + })); + + monkeyPatchGetWindowSize(function() { + return -1; + }); + + stream._refreshSize(); +} + +{ + // _refreshSize() emits a 'resize' event when the window size changes. + monkeyPatchGetWindowSize(function(size) { + size[0] = 80; + size[1] = 24; + return 0; + }); + + const stream = WriteStream(1); + + stream.on('resize', common.mustCall(() => { + assert.strictEqual(stream.columns, 82); + assert.strictEqual(stream.rows, 26); + })); + + assert.strictEqual(stream.columns, 80); + assert.strictEqual(stream.rows, 24); + + monkeyPatchGetWindowSize(function(size) { + size[0] = 82; + size[1] = 26; + return 0; + }); + + stream._refreshSize(); +} + +{ + // WriteStream.prototype.getWindowSize() returns the current columns and rows. + monkeyPatchGetWindowSize(function(size) { + size[0] = 99; + size[1] = 32; + return 0; + }); + + const stream = WriteStream(1); + + assert.strictEqual(stream.columns, 99); + assert.strictEqual(stream.rows, 32); + assert.deepStrictEqual(stream.getWindowSize(), [99, 32]); +} -- cgit v1.2.3