'use strict'; const common = require('../common'); const assert = require('assert'); const { execFile } = require('child_process'); // eslint-disable-next-line no-control-regex const ANSI_SGR_REGEX = new RegExp('\x1b\\[[0-9;]*m', 'g'); function stripAnsi(text) { return text.replace(ANSI_SGR_REGEX, ''); } // Test: FORCE_COLOR=1 produces styled output { const env = { ...process.env, FORCE_COLOR: '1' }; execFile(process.execPath, ['--help'], { env }, common.mustSucceed((stdout) => { assert.ok(stdout.includes('\x1b[1m'), 'bold for headers should be present'); assert.ok(stdout.includes('\x1b[32m'), 'green for option names should be present'); assert.ok(stdout.includes('\x1b[35m'), 'magenta for env var names should be present'); assert.ok(stdout.includes('\x1b[34m'), 'blue for URL should be present'); assert.ok(stdout.includes('\x1b[4m'), 'underline for URL should be present'); })); } // Test: NO_COLOR=1 produces plain output { const env = { ...process.env, NO_COLOR: '1' }; delete env.FORCE_COLOR; execFile(process.execPath, ['--help'], { env }, common.mustSucceed((stdout) => { assert.ok(stripAnsi(stdout) === stdout, 'no ANSI escape sequences should be present with NO_COLOR=1'); })); } // Test: piped (non-TTY, no FORCE_COLOR) produces plain output { const env = { ...process.env }; delete env.FORCE_COLOR; delete env.NO_COLOR; delete env.NODE_DISABLE_COLORS; execFile(process.execPath, ['--help'], { env }, common.mustSucceed((stdout) => { assert.ok(stripAnsi(stdout) === stdout, 'no ANSI escape sequences should be present when piped (non-TTY)'); })); } // Test: alignment preservation - stripped styled output matches plain output { const envStyled = { ...process.env, FORCE_COLOR: '1' }; const envPlain = { ...process.env, NO_COLOR: '1' }; delete envPlain.FORCE_COLOR; execFile(process.execPath, ['--help'], { env: envStyled }, common.mustSucceed((styledStdout) => { execFile(process.execPath, ['--help'], { env: envPlain }, common.mustSucceed((plainStdout) => { assert.ok(stripAnsi(styledStdout) === plainStdout, 'stripped styled output should match plain output (alignment preservation)'); })); })); }