mirror of
https://github.com/nodejs/node.git
synced 2025-08-15 13:48:44 +02:00

PR-URL: https://github.com/nodejs/node/pull/52655 Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Moshe Atlow <moshe@atlow.co.il> Reviewed-By: Chemi Atlow <chemi@atlow.co.il>
93 lines
2.7 KiB
JavaScript
93 lines
2.7 KiB
JavaScript
'use strict';
|
|
const {
|
|
ArrayPrototypeJoin,
|
|
RegExpPrototypeSymbolSplit,
|
|
SafeMap,
|
|
StringPrototypeRepeat,
|
|
hardenRegExp,
|
|
} = primordials;
|
|
const colors = require('internal/util/colors');
|
|
const { inspectWithNoCustomRetry } = require('internal/errors');
|
|
const indentMemo = new SafeMap();
|
|
|
|
const inspectOptions = {
|
|
__proto__: null,
|
|
colors: colors.shouldColorize(process.stdout),
|
|
breakLength: Infinity,
|
|
};
|
|
|
|
const reporterUnicodeSymbolMap = {
|
|
'__proto__': null,
|
|
'test:fail': '\u2716 ',
|
|
'test:pass': '\u2714 ',
|
|
'test:diagnostic': '\u2139 ',
|
|
'test:coverage': '\u2139 ',
|
|
'arrow:right': '\u25B6 ',
|
|
'hyphen:minus': '\uFE63 ',
|
|
};
|
|
|
|
const reporterColorMap = {
|
|
'__proto__': null,
|
|
get 'test:fail'() {
|
|
return colors.red;
|
|
},
|
|
get 'test:pass'() {
|
|
return colors.green;
|
|
},
|
|
get 'test:diagnostic'() {
|
|
return colors.blue;
|
|
},
|
|
};
|
|
|
|
function indent(nesting) {
|
|
let value = indentMemo.get(nesting);
|
|
if (value === undefined) {
|
|
value = StringPrototypeRepeat(' ', nesting);
|
|
indentMemo.set(nesting, value);
|
|
}
|
|
return value;
|
|
}
|
|
|
|
function formatError(error, indent) {
|
|
if (!error) return '';
|
|
const err = error.code === 'ERR_TEST_FAILURE' ? error.cause : error;
|
|
const message = ArrayPrototypeJoin(
|
|
RegExpPrototypeSymbolSplit(
|
|
hardenRegExp(/\r?\n/),
|
|
inspectWithNoCustomRetry(err, inspectOptions),
|
|
), `\n${indent} `);
|
|
return `\n${indent} ${message}\n`;
|
|
}
|
|
|
|
function formatTestReport(type, data, prefix = '', indent = '', hasChildren = false) {
|
|
let color = reporterColorMap[type] ?? colors.white;
|
|
let symbol = reporterUnicodeSymbolMap[type] ?? ' ';
|
|
const { skip, todo } = data;
|
|
const duration_ms = data.details?.duration_ms ? ` ${colors.gray}(${data.details.duration_ms}ms)${colors.white}` : '';
|
|
let title = `${data.name}${duration_ms}`;
|
|
|
|
if (skip !== undefined) {
|
|
title += ` # ${typeof skip === 'string' && skip.length ? skip : 'SKIP'}`;
|
|
} else if (todo !== undefined) {
|
|
title += ` # ${typeof todo === 'string' && todo.length ? todo : 'TODO'}`;
|
|
}
|
|
const error = formatError(data.details?.error, indent);
|
|
if (hasChildren) {
|
|
// If this test has had children - it was already reported, so slightly modify the output
|
|
const err = !error || data.details?.error?.failureType === 'subtestsFailed' ? '' : `\n${error}`;
|
|
return `${prefix}${indent}${color}${reporterUnicodeSymbolMap['arrow:right']}${colors.white}${title}${err}`;
|
|
}
|
|
if (skip !== undefined) {
|
|
color = colors.gray;
|
|
symbol = reporterUnicodeSymbolMap['hyphen:minus'];
|
|
}
|
|
return `${prefix}${indent}${color}${symbol}${title}${colors.white}${error}`;
|
|
}
|
|
|
|
module.exports = {
|
|
__proto__: null,
|
|
reporterUnicodeSymbolMap,
|
|
reporterColorMap,
|
|
formatTestReport,
|
|
indent,
|
|
};
|