193fb6ee3Sopenharmony_ciimport * as assert from 'node:assert';
293fb6ee3Sopenharmony_ciimport * as fs from 'node:fs';
393fb6ee3Sopenharmony_ciimport { type TreeAdapterTypeMap, type SerializerOptions, parse } from 'parse5';
493fb6ee3Sopenharmony_ciimport { generateTestsForEachTreeAdapter, getStringDiffMsg } from './common.js';
593fb6ee3Sopenharmony_ci
693fb6ee3Sopenharmony_ciexport function generateSerializerTests(
793fb6ee3Sopenharmony_ci    name: string,
893fb6ee3Sopenharmony_ci    prefix: string,
993fb6ee3Sopenharmony_ci    serialize: (
1093fb6ee3Sopenharmony_ci        document: TreeAdapterTypeMap['document'],
1193fb6ee3Sopenharmony_ci        opts: SerializerOptions<TreeAdapterTypeMap>
1293fb6ee3Sopenharmony_ci    ) => Promise<string> | string
1393fb6ee3Sopenharmony_ci): void {
1493fb6ee3Sopenharmony_ci    const data = fs.readFileSync(new URL('../data/serialization/tests.json', import.meta.url)).toString('utf8');
1593fb6ee3Sopenharmony_ci    const tests = JSON.parse(data) as {
1693fb6ee3Sopenharmony_ci        name: string;
1793fb6ee3Sopenharmony_ci        options?: SerializerOptions<TreeAdapterTypeMap>;
1893fb6ee3Sopenharmony_ci        input: string;
1993fb6ee3Sopenharmony_ci        expected: string;
2093fb6ee3Sopenharmony_ci    }[];
2193fb6ee3Sopenharmony_ci
2293fb6ee3Sopenharmony_ci    generateTestsForEachTreeAdapter(name, (treeAdapter) => {
2393fb6ee3Sopenharmony_ci        for (const [idx, test] of tests.entries()) {
2493fb6ee3Sopenharmony_ci            it(`${prefix} - ${idx}.${test.name}`, async () => {
2593fb6ee3Sopenharmony_ci                const opts = { ...test.options, treeAdapter };
2693fb6ee3Sopenharmony_ci                const document = parse(test.input, opts);
2793fb6ee3Sopenharmony_ci                const serializedResult = await serialize(document, opts);
2893fb6ee3Sopenharmony_ci
2993fb6ee3Sopenharmony_ci                //NOTE: use ok assertion, so output will not be polluted by the whole content of the strings
3093fb6ee3Sopenharmony_ci                assert.ok(serializedResult === test.expected, getStringDiffMsg(serializedResult, test.expected));
3193fb6ee3Sopenharmony_ci            });
3293fb6ee3Sopenharmony_ci        }
3393fb6ee3Sopenharmony_ci    });
3493fb6ee3Sopenharmony_ci}
35