diff --git a/lib/worker/fake-tty.js b/lib/worker/fake-tty.js index c40153c77..a8292c225 100644 --- a/lib/worker/fake-tty.js +++ b/lib/worker/fake-tty.js @@ -1,5 +1,6 @@ 'use strict'; const tty = require('tty'); +const ansiEscapes = require('ansi-escapes'); const options = require('./options').get(); const fakeTTYs = new Set(); @@ -10,6 +11,27 @@ tty.isatty = fd => fakeTTYs.has(fd) || isatty(fd); const simulateTTY = (stream, {colorDepth, columns, rows}) => { Object.assign(stream, {isTTY: true, columns, rows}); + stream.clearLine = dir => { + switch (dir) { + case -1: + stream.write(ansiEscapes.eraseStartLine); + break; + case 1: + stream.write(ansiEscapes.eraseEndLine); + break; + default: + stream.write(ansiEscapes.eraseLine); + } + }; + + stream.clearScreenDown = () => stream.write(ansiEscapes.eraseDown); + + stream.cursorTo = (x, y) => stream.write(ansiEscapes.cursorTo(x, y)); + + stream.getWindowSize = () => [80, 24]; + + stream.moveCursor = (x, y) => stream.write(ansiEscapes.cursorMove(x, y)); + if (colorDepth !== undefined) { stream.getColorDepth = () => colorDepth; } diff --git a/test/fixture/tty/is-tty.js b/test/fixture/tty/is-tty.js index 8dc8a4b05..9478ea433 100644 --- a/test/fixture/tty/is-tty.js +++ b/test/fixture/tty/is-tty.js @@ -4,6 +4,11 @@ const assertTTY = (t, stream) => { t.true(stream.isTTY); t.is(typeof stream.columns, 'number'); t.is(typeof stream.rows, 'number'); + t.is(typeof stream.clearLine, 'function'); + t.is(typeof stream.clearScreenDown, 'function'); + t.is(typeof stream.cursorTo, 'function'); + t.is(typeof stream.getWindowSize, 'function'); + t.is(typeof stream.moveCursor, 'function'); }; test('stderr is a TTY', assertTTY, process.stderr);