🏡 index : quine-global/ava-typescript.git

import path from 'node:path';
import test from 'ava';
import {deleteAsync} from 'del';
import {execaNode} from 'execa';
import createProviderMacro from './_with-provider.js';

test.beforeEach('deleting compiled files', async t => {
	t.log(await deleteAsync('test/fixtures/typescript/compiled'));
	t.log(await deleteAsync('test/broken-fixtures/typescript/compiled'));
});

const compile = async provider => ({
	state: await provider
		.main({
			config: {
				rewritePaths: {
					'ts/': 'typescript/',
					'compiled/': 'typescript/compiled/',
				},
				compile: 'tsc',
			},
		})
		.compile(),
});

for (const [identifier, withProvider, withAltProvider] of [
	[
		'ava-6',
		createProviderMacro(
			'ava-6',
			'6.0.0',
			path.join(import.meta.dirname, 'fixtures'),
		),
		createProviderMacro(
			'ava-6',
			'6.0.0',
			path.join(import.meta.dirname, 'broken-fixtures'),
		),
	],
	[
		'ava-8',
		createProviderMacro(
			'ava-8',
			'8.0.0',
			path.join(import.meta.dirname, 'fixtures'),
		),
		createProviderMacro(
			'ava-8',
			'8.0.0',
			path.join(import.meta.dirname, 'broken-fixtures'),
		),
	],
]) {
	test(
		'worker(): load rewritten paths files',
		withProvider,
		async (t, provider) => {
			const {state} = await compile(provider);
			const {stdout, stderr} = await execaNode(
				path.join(import.meta.dirname, 'fixtures/install-and-load'),
				[
					identifier,
					JSON.stringify({state}),
					path.join(import.meta.dirname, 'fixtures/ts', 'file.ts'),
				],
				{cwd: path.join(import.meta.dirname, 'fixtures')},
			);
			if (stderr.length > 0) {
				t.log(stderr);
			}

			t.snapshot(stdout);
		},
	);

	test('worker(): runs compiled files', withProvider, async (t, provider) => {
		const {state} = await compile(provider);
		const {stdout, stderr} = await execaNode(
			path.join(import.meta.dirname, 'fixtures/install-and-load'),
			[
				identifier,
				JSON.stringify({state}),
				path.join(import.meta.dirname, 'fixtures/compiled', 'index.ts'),
			],
			{cwd: path.join(import.meta.dirname, 'fixtures')},
		);
		if (stderr.length > 0) {
			t.log(stderr);
		}

		t.snapshot(stdout);
	});

	test('compile() error', withAltProvider, async (t, provider) => {
		const {message} = await t.throwsAsync(compile(provider));

		t.snapshot(message);
	});
}