44 lines
1.3 KiB
TypeScript
44 lines
1.3 KiB
TypeScript
import { existsSync, readdirSync, readFileSync } from "fs";
|
|
import { join } from "path";
|
|
import { format, Options } from "prettier";
|
|
import * as jinjaPlugin from "../src/index";
|
|
|
|
const prettify = (code: string, options: Options) =>
|
|
format(code, {
|
|
parser: "askama-template",
|
|
plugins: [jinjaPlugin],
|
|
...options,
|
|
});
|
|
|
|
const testFolder = join(__dirname, "cases");
|
|
const tests = readdirSync(testFolder);
|
|
|
|
tests.forEach((test) => {
|
|
if (test.startsWith("_")) {
|
|
return;
|
|
}
|
|
return it(test, async () => {
|
|
const path = join(testFolder, test);
|
|
const input = readFileSync(join(path, "input.html")).toString();
|
|
const expected = readFileSync(join(path, "expected.html")).toString();
|
|
|
|
const configPath = join(path, "config.json");
|
|
const configString =
|
|
existsSync(configPath) && readFileSync(configPath)?.toString();
|
|
const configObject = configString ? JSON.parse(configString) : {};
|
|
|
|
const format = () => prettify(input, configObject);
|
|
|
|
const expectedError = expected.match(/Error\(["'`](?<message>.*)["'`]\)/)
|
|
?.groups?.message;
|
|
|
|
if (expectedError) {
|
|
jest.spyOn(console, "error").mockImplementation(() => {});
|
|
await expect(format()).rejects.toThrow(expectedError);
|
|
} else {
|
|
const result = await format();
|
|
expect(result).toEqual(expected);
|
|
expect(await prettify(result, configObject)).toEqual(expected);
|
|
}
|
|
});
|
|
});
|