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 5479a39d8c21..52b25fdcfe81 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 e77e7b950599..a75287499263 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 96e6699e3c6f..fe5ed9872948 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 b6fc003165dc..597560254792 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 59a65e8ca202..e7247a65c043 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 88e4d6104b50..f01786eaf19d 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 d7a4bb7a9a06..e8871863402c 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 40fe2c16d609..f1ef7b5bba2e 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 d464fdc440c5..b336996cd2e5 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 6871fbdcb1a8..41685f06e72c 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 8eda8e3cecee..640106f38ed4 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 b2bee8d6e464..4fcf206bef1b 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 1d1261a37523..705a7c7c236f 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 b8dbbf3f9a99..754963e08ebe 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 5307ae0556ae..0eccea655263 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 45a7ec327f72..5027bd7da497 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');