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