From abea2239b1d87fba2a8c51ffa54fed763accb621 Mon Sep 17 00:00:00 2001 From: Adam Majer Date: Thu, 30 Apr 2020 12:42:34 +0200 Subject: [PATCH] test: skip some console tests on dumb terminal Add capabilities to common test module to detect and skip tests on dumb terminals. In some of our build environments, like s390x, the terminal is a dumb terminal meaning it has very rudimentary capabilities. These in turn prevent some of the tests from completing with errors as below. not ok 1777 parallel/test-readline-tab-complete --- duration_ms: 0.365 severity: fail exitcode: 1 stack: |- assert.js:103 throw new AssertionError(obj); ^ AssertionError [ERR_ASSERTION]: Expected values to be strictly equal: '\t' !== '' at /home/abuild/rpmbuild/BUILD/node-git.8698dd98bb/test/parallel/test-readline-tab-complete.js:63:14 at Array.forEach () at /home/abuild/rpmbuild/BUILD/node-git.8698dd98bb/test/parallel/test-readline-tab-complete.js:18:17 at Array.forEach () at Object. (/home/abuild/rpmbuild/BUILD/node-git.8698dd98bb/test/parallel/test-readline-tab-complete.js:17:3) at Module._compile (internal/modules/cjs/loader.js:1176:30) at Object.Module._extensions..js (internal/modules/cjs/loader.js:1196:10) at Module.load (internal/modules/cjs/loader.js:1040:32) at Function.Module._load (internal/modules/cjs/loader.js:929:14) at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12) { generatedMessage: true, code: 'ERR_ASSERTION', actual: '\t', expected: '', operator: 'strictEqual' } ... --- test/common/README.md | 8 ++++++++ test/common/index.js | 10 ++++++++++ test/common/index.mjs | 4 ++++ test/parallel/test-console-clear.js | 6 ++++-- test/parallel/test-readline-interface.js | 1 + test/parallel/test-readline-position.js | 4 +++- test/parallel/test-readline-tab-complete.js | 2 ++ test/parallel/test-readline-undefined-columns.js | 2 ++ test/parallel/test-readline.js | 2 ++ test/parallel/test-repl-editor.js | 4 +++- test/parallel/test-repl-history-navigation.js | 2 ++ test/parallel/test-repl-load-multiline.js | 4 +++- test/parallel/test-repl-persistent-history.js | 2 ++ test/parallel/test-repl-preview.js | 1 + test/parallel/test-repl-programmatic-history.js | 2 ++ test/parallel/test-repl-reverse-search.js | 1 + 16 files changed, 50 insertions(+), 5 deletions(-) diff --git a/test/common/README.md b/test/common/README.md index 5479a39d8c215c..52b25fdcfe81a6 100644 --- a/test/common/README.md +++ b/test/common/README.md @@ -223,6 +223,10 @@ Platform check for Advanced Interactive eXecutive (AIX). Attempts to 'kill' `pid` +### `isDumbTerminal` + +* [<boolean>][] + ### `isFreeBSD` * [<boolean>][] @@ -385,6 +389,10 @@ will not be run. Logs '1..0 # Skipped: ' + `msg` and exits with exit code `0`. +### `skipIfDumbTerminal()` + +Skip the rest of the tests if the current terminal is a dumb terminal + ### `skipIfEslintMissing()` Skip the rest of the tests in the current file when `ESLint` is not available diff --git a/test/common/index.js b/test/common/index.js index e77e7b95059947..a75287499263b7 100644 --- a/test/common/index.js +++ b/test/common/index.js @@ -112,6 +112,8 @@ const isOpenBSD = process.platform === 'openbsd'; const isLinux = process.platform === 'linux'; const isOSX = process.platform === 'darwin'; +const isDumbTerminal = process.env.TERM === 'dumb'; + const rootDir = isWindows ? 'c:\\' : '/'; const buildType = process.config.target_defaults ? @@ -653,6 +655,12 @@ function invalidArgTypeHelper(input) { return ` Received type ${typeof input} (${inspected})`; } +function skipIfDumbTerminal() { + if (isDumbTerminal) { + skip('skipping - dumb terminal'); + } +} + const common = { allowGlobals, buildType, @@ -672,6 +680,7 @@ const common = { invalidArgTypeHelper, isAIX, isAlive, + isDumbTerminal, isFreeBSD, isLinux, isMainThread, @@ -692,6 +701,7 @@ const common = { runWithInvalidFD, skip, skipIf32Bits, + skipIfDumbTerminal, skipIfEslintMissing, skipIfInspectorDisabled, skipIfWorker, diff --git a/test/common/index.mjs b/test/common/index.mjs index 96e6699e3c6f99..fe5ed9872948b7 100644 --- a/test/common/index.mjs +++ b/test/common/index.mjs @@ -12,6 +12,7 @@ const { isIBMi, isLinuxPPCBE, isSunOS, + isDumbTerminal, isFreeBSD, isOpenBSD, isLinux, @@ -31,6 +32,7 @@ const { mustCall, mustCallAtLeast, hasMultiLocalhost, + skipIfDumbTerminal, skipIfEslintMissing, canCreateSymLink, getCallSite, @@ -57,6 +59,7 @@ export { isIBMi, isLinuxPPCBE, isSunOS, + isDumbTerminal, isFreeBSD, isOpenBSD, isLinux, @@ -76,6 +79,7 @@ export { mustCall, mustCallAtLeast, hasMultiLocalhost, + skipIfDumbTerminal, skipIfEslintMissing, canCreateSymLink, getCallSite, diff --git a/test/parallel/test-console-clear.js b/test/parallel/test-console-clear.js index b6fc003165dc66..5975602547922a 100644 --- a/test/parallel/test-console-clear.js +++ b/test/parallel/test-console-clear.js @@ -1,6 +1,6 @@ 'use strict'; -require('../common'); +const common = require('../common'); const assert = require('assert'); const stdoutWrite = process.stdout.write; @@ -18,5 +18,7 @@ function doTest(isTTY, check) { } // Fake TTY -doTest(true, check); +if (!common.isDumbTerminal) { + doTest(true, check); +} doTest(false, ''); diff --git a/test/parallel/test-readline-interface.js b/test/parallel/test-readline-interface.js index 59a65e8ca2020e..e7247a65c04319 100644 --- a/test/parallel/test-readline-interface.js +++ b/test/parallel/test-readline-interface.js @@ -22,6 +22,7 @@ // Flags: --expose-internals 'use strict'; const common = require('../common'); +common.skipIfDumbTerminal(); const assert = require('assert'); const readline = require('readline'); diff --git a/test/parallel/test-readline-position.js b/test/parallel/test-readline-position.js index 88e4d6104b5047..f01786eaf19d3c 100644 --- a/test/parallel/test-readline-position.js +++ b/test/parallel/test-readline-position.js @@ -1,6 +1,6 @@ // Flags: --expose-internals 'use strict'; -require('../common'); +const common = require('../common'); const { internalBinding } = require('internal/test/binding'); const { PassThrough } = require('stream'); const readline = require('readline'); @@ -8,6 +8,8 @@ const assert = require('assert'); const ctrlU = { ctrl: true, name: 'u' }; +common.skipIfDumbTerminal(); + { const input = new PassThrough(); const rl = readline.createInterface({ diff --git a/test/parallel/test-readline-tab-complete.js b/test/parallel/test-readline-tab-complete.js index d7a4bb7a9a0690..e8871863402cb1 100644 --- a/test/parallel/test-readline-tab-complete.js +++ b/test/parallel/test-readline-tab-complete.js @@ -8,6 +8,8 @@ const assert = require('assert'); const EventEmitter = require('events').EventEmitter; const { getStringWidth } = require('internal/util/inspect'); +common.skipIfDumbTerminal(); + // This test verifies that the tab completion supports unicode and the writes // are limited to the minimum. [ diff --git a/test/parallel/test-readline-undefined-columns.js b/test/parallel/test-readline-undefined-columns.js index 40fe2c16d609e9..f1ef7b5bba2eee 100644 --- a/test/parallel/test-readline-undefined-columns.js +++ b/test/parallel/test-readline-undefined-columns.js @@ -5,6 +5,8 @@ const assert = require('assert'); const PassThrough = require('stream').PassThrough; const readline = require('readline'); +common.skipIfDumbTerminal(); + // Checks that tab completion still works // when output column size is undefined diff --git a/test/parallel/test-readline.js b/test/parallel/test-readline.js index d464fdc440c58b..b336996cd2e53e 100644 --- a/test/parallel/test-readline.js +++ b/test/parallel/test-readline.js @@ -4,6 +4,8 @@ const { PassThrough } = require('stream'); const readline = require('readline'); const assert = require('assert'); +common.skipIfDumbTerminal(); + { const input = new PassThrough(); const rl = readline.createInterface({ diff --git a/test/parallel/test-repl-editor.js b/test/parallel/test-repl-editor.js index 6871fbdcb1a882..41685f06e72c06 100644 --- a/test/parallel/test-repl-editor.js +++ b/test/parallel/test-repl-editor.js @@ -1,10 +1,12 @@ 'use strict'; -require('../common'); +const common = require('../common'); const assert = require('assert'); const repl = require('repl'); const ArrayStream = require('../common/arraystream'); +common.skipIfDumbTerminal(); + // \u001b[nG - Moves the cursor to n st column // \u001b[0J - Clear screen // \u001b[0K - Clear to line end diff --git a/test/parallel/test-repl-history-navigation.js b/test/parallel/test-repl-history-navigation.js index 8eda8e3ceceeef..640106f38ed4c7 100644 --- a/test/parallel/test-repl-history-navigation.js +++ b/test/parallel/test-repl-history-navigation.js @@ -10,6 +10,8 @@ const fs = require('fs'); const path = require('path'); const { inspect } = require('util'); +common.skipIfDumbTerminal(); + const tmpdir = require('../common/tmpdir'); tmpdir.refresh(); diff --git a/test/parallel/test-repl-load-multiline.js b/test/parallel/test-repl-load-multiline.js index b2bee8d6e4647e..4fcf206bef1be1 100644 --- a/test/parallel/test-repl-load-multiline.js +++ b/test/parallel/test-repl-load-multiline.js @@ -1,10 +1,12 @@ 'use strict'; -require('../common'); +const common = require('../common'); const ArrayStream = require('../common/arraystream'); const fixtures = require('../common/fixtures'); const assert = require('assert'); const repl = require('repl'); +common.skipIfDumbTerminal(); + const command = `.load ${fixtures.path('repl-load-multiline.js')}`; const terminalCode = '\u001b[1G\u001b[0J \u001b[1G'; const terminalCodeRegex = new RegExp(terminalCode.replace(/\[/g, '\\['), 'g'); diff --git a/test/parallel/test-repl-persistent-history.js b/test/parallel/test-repl-persistent-history.js index 1d1261a3752365..705a7c7c236fb0 100644 --- a/test/parallel/test-repl-persistent-history.js +++ b/test/parallel/test-repl-persistent-history.js @@ -12,6 +12,8 @@ const path = require('path'); const os = require('os'); const util = require('util'); +common.skipIfDumbTerminal(); + const tmpdir = require('../common/tmpdir'); tmpdir.refresh(); diff --git a/test/parallel/test-repl-preview.js b/test/parallel/test-repl-preview.js index b8dbbf3f9a993d..754963e08ebeb3 100644 --- a/test/parallel/test-repl-preview.js +++ b/test/parallel/test-repl-preview.js @@ -7,6 +7,7 @@ const { Stream } = require('stream'); const { inspect } = require('util'); common.skipIfInspectorDisabled(); +common.skipIfDumbTerminal(); const PROMPT = 'repl > '; diff --git a/test/parallel/test-repl-programmatic-history.js b/test/parallel/test-repl-programmatic-history.js index 5307ae0556ae74..0eccea655263cd 100644 --- a/test/parallel/test-repl-programmatic-history.js +++ b/test/parallel/test-repl-programmatic-history.js @@ -10,6 +10,8 @@ const path = require('path'); const os = require('os'); const util = require('util'); +common.skipIfDumbTerminal(); + const tmpdir = require('../common/tmpdir'); tmpdir.refresh(); diff --git a/test/parallel/test-repl-reverse-search.js b/test/parallel/test-repl-reverse-search.js index 45a7ec327f7232..5027bd7da497fe 100644 --- a/test/parallel/test-repl-reverse-search.js +++ b/test/parallel/test-repl-reverse-search.js @@ -10,6 +10,7 @@ const fs = require('fs'); const path = require('path'); const { inspect } = require('util'); +common.skipIfDumbTerminal(); common.allowGlobals('aaaa'); const tmpdir = require('../common/tmpdir');