| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- // NOTICE: This file is generated by Rollup. To modify it,
- // please instead edit the ESM counterpart and rebuild with Rollup (npm run build).
- 'use strict';
- const validateTypes = require('../utils/validateTypes.cjs');
- const preprocessWarnings = require('./preprocessWarnings.cjs');
- /** @import {Warning, Formatter} from 'stylelint' */
- /** @typedef {Array<Omit<Warning, 'rule'>>} Warnings */
- /** @type {Formatter} */
- function tapFormatter(results) {
- const lines = ['TAP version 14', `1..${results.length}`];
- for (const [index, result] of results.entries()) {
- preprocessWarnings(result);
- // SKIP indicates "that a test was not run, or if it was,
- // that its success or failure is being temporarily ignored."
- // skipped tests must not be treated as test failures though
- // if a file is ignored, errored is currently always false
- const ignored = result.ignored ? ' # SKIP ignored' : '';
- const error = result.errored ? 'not ' : '';
- lines.push(`${error}ok ${index + 1} - ${getEscapedSource(result.source)}${ignored}`);
- if (error) {
- lines.push(' ---');
- /** @type {Record<string, Warnings>} */
- const rules = {};
- for (const { rule, ...rest } of result.warnings) {
- const name = rule || 'unknown';
- const warnings = (rules[name] ??= []);
- warnings.push(rest);
- }
- for (const [ruleName, warnings] of Object.entries(rules)) {
- lines.push(` ${ruleName}:`);
- for (const { text, severity, line, column, endLine, endColumn } of warnings) {
- lines.push(
- ` - message: ${JSON.stringify(text)}`,
- ` severity: ${severity}`,
- ` line: ${line}`,
- ` column: ${column}`,
- );
- if (validateTypes.isNumber(endLine)) lines.push(` endLine: ${endLine}`);
- if (validateTypes.isNumber(endColumn)) lines.push(` endColumn: ${endColumn}`);
- }
- }
- lines.push(' ...');
- }
- }
- lines.push('');
- return lines.join('\n');
- }
- /**
- * Apply TAP escaping to the source that is part of the test point description
- * @see {@link https://testanything.org/tap-version-14-specification.html#escaping TAP 14 specification}
- * @param {string} [source]
- */
- function getEscapedSource(source) {
- if (!source) return source;
- let output = '';
- for (const char of source) {
- switch (char.codePointAt(0)) {
- case 0x005c: // `\`
- case 0x0023: // `#`
- output += '\\';
- output += char;
- break;
- default:
- output += char;
- break;
- }
- }
- return output;
- }
- module.exports = tapFormatter;
|