Use a proper macro to create providers; suffix test titles with identifier when used outside of protocol-specific tests

This commit is contained in:
Mark Wubben 2026-04-12 22:26:42 +02:00
parent ff8eca4239
commit b4ae7ad7c1

View file

@ -1,21 +1,45 @@
// eslint-disable-line ava/no-ignored-test-files
import path from 'node:path';
import test from 'ava';
import pkg from '../package.json' with {type: 'json'};
import makeProvider from '@ava/typescript';
const createProviderMacro = (identifier, avaVersion, projectDirectory = import.meta.dirname) => (t, run) => run(t, makeProvider({
negotiateProtocol(identifiers, {version}) {
t.true(identifiers.includes(identifier));
t.is(version, pkg.version);
return {
ava: {avaVersion},
identifier,
normalizeGlobPatterns: patterns => patterns,
async findFiles({patterns}) {
return patterns.map(file => path.join(projectDirectory, file));
},
projectDir: projectDirectory,
};
},
}));
const {file: testFile} = test.meta;
const createProviderMacro = (
identifier,
avaVersion,
projectDirectory = import.meta.dirname,
) =>
test.macro({
exec(t, run) {
return run(
t,
makeProvider({
negotiateProtocol(identifiers, {version}) {
t.true(identifiers.includes(identifier));
t.is(version, pkg.version);
return {
ava: {avaVersion},
identifier,
normalizeGlobPatterns: patterns => patterns,
async findFiles({patterns}) {
return patterns.map(file =>
path.join(projectDirectory, file));
},
projectDir: projectDirectory,
};
},
}),
);
},
title(title = '') {
if (testFile.includes(identifier)) {
return title;
}
return `${title} (with ${identifier} provider)`;
},
});
export default createProviderMacro;