Skip to content

Commit

Permalink
lib: ensure FORCE_COLOR forces color output in non-TTY environments
Browse files Browse the repository at this point in the history
PR-URL: nodejs#55404
Reviewed-By: Luigi Pinca <[email protected]>
Reviewed-By: Jake Yuesong Li <[email protected]>
Reviewed-By: Matteo Collina <[email protected]>
Reviewed-By: Chemi Atlow <[email protected]>
Reviewed-By: Moshe Atlow <[email protected]>
Reviewed-By: James M Snell <[email protected]>
  • Loading branch information
pmarchini authored and tpoisseau committed Nov 21, 2024
1 parent 0d4e1eb commit de44cd4
Show file tree
Hide file tree
Showing 6 changed files with 78 additions and 12 deletions.
22 changes: 10 additions & 12 deletions lib/internal/util/colors.js
Original file line number Diff line number Diff line change
Expand Up @@ -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;
},
};

Expand Down
6 changes: 6 additions & 0 deletions test/fixtures/test-runner/output/assertion-color-tty.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import assert from 'node:assert/strict'
import { test } from 'node:test'

test('failing assertion', () => {
assert.strictEqual('!Hello World', 'Hello World!')
})
37 changes: 37 additions & 0 deletions test/fixtures/test-runner/output/assertion-color-tty.snapshot
Original file line number Diff line number Diff line change
@@ -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
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
'use strict';

process.env.FORCE_COLOR = 1;

const test = require('node:test');
test('passing test', () => {});
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
✔ passing test (*ms)
ℹ tests 1
ℹ suites 0
ℹ pass 1
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms *
10 changes: 10 additions & 0 deletions test/parallel/test-runner-output.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -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'],
Expand Down

0 comments on commit de44cd4

Please sign in to comment.