import {fileURLToPath} from 'node:url'; import {test} from 'tap'; import fixReporterEnv from '../helper/fix-reporter-env.js'; import report from '../helper/report.js'; import TTYStream from '../helper/tty-stream.js'; const {restoreClock} = fixReporterEnv(); test(async t => { const {default: Reporter} = await import('../../lib/reporters/default.js'); const run = (type, sanitizers = []) => t => { t.plan(1); const logFile = fileURLToPath(new URL(`default.${type.toLowerCase()}.${process.version.split('.')[0]}.log`, import.meta.url)); const tty = new TTYStream({ columns: 200, sanitizers: [...sanitizers, report.sanitizers.cwd, report.sanitizers.experimentalWarning, report.sanitizers.posix, report.sanitizers.tapLoaders, report.sanitizers.timers, report.sanitizers.version], }); const reporter = new Reporter({ extensions: ['cjs'], projectDir: report.projectDir(type), durationThreshold: 60_000, reportStream: tty, stdStream: tty, watching: type === 'watch', }); return report[type](reporter) .then(() => { tty.end(); return tty.asBuffer(); }) .then(buffer => report.assert(t, logFile, buffer)) .catch(t.threw); }; t.test('default reporter - regular run', run('regular')); t.test('default reporter - failFast run', run('failFast')); t.test('default reporter - second failFast run', run('failFast2')); t.test('default reporter - only run', run('only')); t.test('default reporter - watch mode run', run('watch')); t.test('default reporter - edge cases', run('edgeCases', [report.sanitizers.acorn])); t.test('default reporter - timeout', t => { restoreClock(); t.test('single file run', run('timeoutInSingleFile')); t.test('multiple files run', run('timeoutInMultipleFiles')); t.test('single file with only certain tests matched run', run('timeoutWithMatch')); t.test('logs provided during a pending test logged at the end', run('timeoutContextLogs')); t.end(); }); });