* Upgrade xo to v0.57.0 and lint sources, tests, and examples Disabled `unicorn/prevent-abbreviations` because it introduces too many opinionated changes. * Update reporter logs which are sensitive to line numbers changing --------- Co-authored-by: Mark Wubben <mark@novemberborn.net>
97 lines
2.2 KiB
JavaScript
97 lines
2.2 KiB
JavaScript
import {pathToFileURL} from 'node:url';
|
|
|
|
import {Chalk} from 'chalk'; // eslint-disable-line unicorn/import-style
|
|
import {test} from 'tap';
|
|
import {temporaryFile, temporaryWriteSync} from 'tempy';
|
|
|
|
import {set as setChalk} from '../lib/chalk.js';
|
|
import codeExcerpt from '../lib/code-excerpt.js';
|
|
|
|
setChalk({level: 1});
|
|
|
|
const chalk = new Chalk({level: 1});
|
|
|
|
test('read code excerpt', t => {
|
|
const file = pathToFileURL(temporaryWriteSync(`function a() {
|
|
alert();
|
|
}`));
|
|
|
|
const excerpt = codeExcerpt({
|
|
file, line: 2, isWithinProject: true, isDependency: false,
|
|
});
|
|
const expected = [
|
|
` ${chalk.grey('1:')} function a() {`,
|
|
chalk.bgRed.bold(' 2: alert(); '),
|
|
` ${chalk.grey('3:')} } `,
|
|
].join('\n');
|
|
|
|
t.equal(excerpt, expected);
|
|
t.end();
|
|
});
|
|
|
|
test('truncate lines', t => {
|
|
const file = pathToFileURL(temporaryWriteSync(`function a() {
|
|
alert();
|
|
}`));
|
|
|
|
const excerpt = codeExcerpt({
|
|
file, line: 2, isWithinProject: true, isDependency: false,
|
|
}, {maxWidth: 14});
|
|
const expected = [
|
|
` ${chalk.grey('1:')} functio…`,
|
|
chalk.bgRed.bold(' 2: alert…'),
|
|
` ${chalk.grey('3:')} } `,
|
|
].join('\n');
|
|
|
|
t.equal(excerpt, expected);
|
|
t.end();
|
|
});
|
|
|
|
test('format line numbers', t => {
|
|
const file = pathToFileURL(temporaryWriteSync(`
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function a() {
|
|
alert();
|
|
}`));
|
|
|
|
const excerpt = codeExcerpt({
|
|
file, line: 10, isWithinProject: true, isDependency: false,
|
|
});
|
|
const expected = [
|
|
` ${chalk.grey(' 9:')} function a() {`,
|
|
chalk.bgRed.bold(' 10: alert(); '),
|
|
` ${chalk.grey('11:')} } `,
|
|
].join('\n');
|
|
|
|
t.equal(excerpt, expected);
|
|
t.end();
|
|
});
|
|
|
|
test('noop if file cannot be read', t => {
|
|
const file = pathToFileURL(temporaryFile());
|
|
const excerpt = codeExcerpt({
|
|
file, line: 10, isWithinProject: true, isDependency: false,
|
|
});
|
|
t.equal(excerpt, null);
|
|
t.end();
|
|
});
|
|
|
|
test('noop if file is not within project', t => {
|
|
const excerpt = codeExcerpt({isWithinProject: false, file: import.meta.url, line: 1});
|
|
t.equal(excerpt, null);
|
|
t.end();
|
|
});
|
|
|
|
test('noop if file is a dependency', t => {
|
|
const excerpt = codeExcerpt({
|
|
isWithinProject: true, isDependency: true, file: import.meta.url, line: 1,
|
|
});
|
|
t.equal(excerpt, null);
|
|
t.end();
|
|
});
|