|
|
|
import * as fs from 'node:fs';
|
|
|
|
import * as path from 'node:path';
|
|
|
|
import { assert, describe, expect, it } from 'vitest';
|
|
|
|
import { compile } from 'svelte/compiler';
|
|
|
|
|
|
|
|
const configs = import.meta.glob('./samples/*/_config.js', { import: 'default', eager: true });
|
|
|
|
|
|
|
|
describe('compiler-errors', () => {
|
|
|
|
function run_test(dir) {
|
|
|
|
if (dir[0] === '.') return;
|
|
|
|
|
|
|
|
const config = configs[`./samples/${dir}/_config.js`];
|
|
|
|
|
|
|
|
assert.ok(config, `Missing config for ${dir}`);
|
|
|
|
|
|
|
|
const solo = config.solo || /\.solo/.test(dir);
|
|
|
|
|
|
|
|
const it_fn = config.skip ? it.skip : solo ? it.only : it;
|
|
|
|
|
|
|
|
it_fn(dir, () => {
|
|
|
|
const cwd = path.resolve(`${__dirname}/samples/${dir}`);
|
|
|
|
|
|
|
|
const compileOptions = Object.assign({}, config.compileOptions || {}, {
|
|
|
|
immutable: config.immutable,
|
|
|
|
accessors: 'accessors' in config ? config.accessors : true,
|
|
|
|
generate: 'dom'
|
|
|
|
});
|
|
|
|
|
|
|
|
try {
|
|
|
|
compile(fs.readFileSync(`${cwd}/main.svelte`, 'utf-8'), compileOptions);
|
|
|
|
} catch (error) {
|
|
|
|
if (typeof config.error === 'function') {
|
|
|
|
config.error(assert, error);
|
|
|
|
} else {
|
|
|
|
expect(error.message).toMatch(config.error);
|
|
|
|
}
|
|
|
|
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
assert.fail('Expected an error');
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
const samples = fs.readdirSync(`${__dirname}/samples`);
|
|
|
|
samples.forEach((sample) => run_test(sample));
|
|
|
|
});
|