From df8db42082cd81f4c9f94a1d51fb99652a2dd438 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' } ... PR-URL: https://github.com/nodejs/node/pull/33165 Reviewed-By: Ruben Bridgewater Reviewed-By: Anna Henningsen --- 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 5479a39d8c2..52b25fdcfe8 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 e77e7b95059..a7528749926 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 96e6699e3c6..fe5ed987294 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 b6fc003165d..59756025479 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 59a65e8ca20..e7247a65c04 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 88e4d6104b5..f01786eaf19 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 d7a4bb7a9a0..e8871863402 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 40fe2c16d60..f1ef7b5bba2 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 d464fdc440c..b336996cd2e 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 6871fbdcb1a..41685f06e72 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 8eda8e3cece..640106f38ed 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 b2bee8d6e46..4fcf206bef1 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 1d1261a3752..705a7c7c236 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 b8dbbf3f9a9..754963e08eb 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 5307ae0556a..0eccea65526 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 45a7ec327f7..5027bd7da49 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');