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 (<anonymous>)
            at /home/abuild/rpmbuild/BUILD/node-git.8698dd98bb/test/parallel/test-readline-tab-complete.js:18:17
            at Array.forEach (<anonymous>)
            at Object.<anonymous> (/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 <ruben@bridgewater.de>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
This commit is contained in:
Adam Majer 2020-04-30 12:42:34 +02:00 committed by Anna Henningsen
parent 4d4e3c3674
commit df8db42082
No known key found for this signature in database
GPG Key ID: A94130F0BFC8EBE9
16 changed files with 50 additions and 5 deletions

View File

@ -223,6 +223,10 @@ Platform check for Advanced Interactive eXecutive (AIX).
Attempts to 'kill' `pid`
### `isDumbTerminal`
* [&lt;boolean>][]
### `isFreeBSD`
* [&lt;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

View File

@ -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,

View File

@ -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,

View File

@ -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, '');

View File

@ -22,6 +22,7 @@
// Flags: --expose-internals
'use strict';
const common = require('../common');
common.skipIfDumbTerminal();
const assert = require('assert');
const readline = require('readline');

View File

@ -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({

View File

@ -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.
[

View File

@ -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

View File

@ -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({

View File

@ -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

View File

@ -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();

View File

@ -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');

View File

@ -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();

View File

@ -7,6 +7,7 @@ const { Stream } = require('stream');
const { inspect } = require('util');
common.skipIfInspectorDisabled();
common.skipIfDumbTerminal();
const PROMPT = 'repl > ';

View File

@ -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();

View File

@ -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');