lib: ensure FORCE_COLOR forces color output in non-TTY environments

PR-URL: https://github.com/nodejs/node/pull/55404
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Jake Yuesong Li <jake.yuesong@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Chemi Atlow <chemi@atlow.co.il>
Reviewed-By: Moshe Atlow <moshe@atlow.co.il>
Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
Pietro Marchini 2024-10-23 08:51:50 +02:00 committed by GitHub
parent e90704cd9e
commit 025d8ada5f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 78 additions and 12 deletions

View File

@ -24,18 +24,16 @@ module.exports = {
stream.getColorDepth() > 2 : true);
},
refresh() {
if (process.stderr.isTTY) {
const hasColors = module.exports.shouldColorize(process.stderr);
module.exports.blue = hasColors ? '\u001b[34m' : '';
module.exports.green = hasColors ? '\u001b[32m' : '';
module.exports.white = hasColors ? '\u001b[39m' : '';
module.exports.yellow = hasColors ? '\u001b[33m' : '';
module.exports.red = hasColors ? '\u001b[31m' : '';
module.exports.gray = hasColors ? '\u001b[90m' : '';
module.exports.clear = hasColors ? '\u001bc' : '';
module.exports.reset = hasColors ? '\u001b[0m' : '';
module.exports.hasColors = hasColors;
}
const hasColors = module.exports.shouldColorize(process.stderr);
module.exports.blue = hasColors ? '\u001b[34m' : '';
module.exports.green = hasColors ? '\u001b[32m' : '';
module.exports.white = hasColors ? '\u001b[39m' : '';
module.exports.yellow = hasColors ? '\u001b[33m' : '';
module.exports.red = hasColors ? '\u001b[31m' : '';
module.exports.gray = hasColors ? '\u001b[90m' : '';
module.exports.clear = hasColors ? '\u001bc' : '';
module.exports.reset = hasColors ? '\u001b[0m' : '';
module.exports.hasColors = hasColors;
},
};

View File

@ -0,0 +1,6 @@
import assert from 'node:assert/strict'
import { test } from 'node:test'
test('failing assertion', () => {
assert.strictEqual('!Hello World', 'Hello World!')
})

View File

@ -0,0 +1,37 @@
[31m✖ failing assertion [90m(*ms)[39m[39m
[AssertionError [ERR_ASSERTION]: Expected values to be strictly equal:
[32mactual[39m [31mexpected[39m
[39m'[39m[32m![39m[39mH[39m[39me[39m[39ml[39m[39ml[39m[39mo[39m[39m [39m[39mW[39m[39mo[39m[39mr[39m[39ml[39m[39md[39m[31m![39m[39m'[39m
] {
generatedMessage: [33mtrue[39m,
code: [32m'ERR_ASSERTION'[39m,
actual: [32m'!Hello World'[39m,
expected: [32m'Hello World!'[39m,
operator: [32m'strictEqual'[39m
}
[34m tests 1[39m
[34m suites 0[39m
[34m pass 0[39m
[34m fail 1[39m
[34m cancelled 0[39m
[34m skipped 0[39m
[34m todo 0[39m
[34m duration_ms *[39m
[31m✖ failing tests:[39m
*
[31m✖ failing assertion [90m(*ms)[39m[39m
[AssertionError [ERR_ASSERTION]: Expected values to be strictly equal:
[32mactual[39m [31mexpected[39m
[39m'[39m[32m![39m[39mH[39m[39me[39m[39ml[39m[39ml[39m[39mo[39m[39m [39m[39mW[39m[39mo[39m[39mr[39m[39ml[39m[39md[39m[31m![39m[39m'[39m
] {
generatedMessage: [33mtrue[39m,
code: [32m'ERR_ASSERTION'[39m,
actual: [32m'!Hello World'[39m,
expected: [32m'Hello World!'[39m,
operator: [32m'strictEqual'[39m
}

View File

@ -0,0 +1,6 @@
'use strict';
process.env.FORCE_COLOR = 1;
const test = require('node:test');
test('passing test', () => {});

View File

@ -0,0 +1,9 @@
✔ passing test (*ms)
 tests 1
 suites 0
 pass 1
 fail 0
 cancelled 0
 skipped 0
 todo 0
 duration_ms *

View File

@ -203,6 +203,16 @@ const tests = [
name: 'test-runner/output/arbitrary-output.js',
flags: ['--test-reporter=tap'],
},
{
name: 'test-runner/output/non-tty-forced-color-output.js',
transform: specTransform,
},
canColorize ? {
name: 'test-runner/output/assertion-color-tty.mjs',
flags: ['--test', '--stack-trace-limit=0'],
transform: specTransform,
tty: true,
} : false,
{
name: 'test-runner/output/async-test-scheduling.mjs',
flags: ['--test-reporter=tap'],