Revised checkbox-tree functions and related

This commit is contained in:
2026-07-12 21:45:55 -05:00
parent af325782a8
commit 9e7fbe0865
15 changed files with 1063 additions and 721 deletions
+32 -25
View File
@@ -1,11 +1,11 @@
/**
* Generates expected-parsed.json for each fixture directory that contains expected.md.
* Run manually: node test/generate-rendered-fixtures.mjs
* Run manually: node scripts/generate-rendered-fixtures.mjs
*/
import { readFileSync, writeFileSync, readdirSync } from 'node:fs';
import { join } from 'node:path';
import { fileURLToPath } from 'node:url';
import { join, resolve } from 'node:path';
import { fileURLToPath, pathToFileURL } from 'node:url';
import { JSDOM } from 'jsdom';
const { window } = new JSDOM('<!doctype html><html><body></body></html>');
@@ -20,31 +20,38 @@ globalThis.fetch = () => Promise.resolve({
const { parseMarkdownIssues, markdownSummaryToHtml } = await import('../web/js/issues.js');
const __dirname = fileURLToPath(new URL('.', import.meta.url));
const fixturesDir = join(__dirname, '../test/fixtures');
const defaultFixturesDir = join(__dirname, '../test/fixtures');
const fixtures = readdirSync(fixturesDir).filter(name => {
const contents = readdirSync(join(fixturesDir, name)).map(d => d);
return contents.includes('expected.md');
});
export function generateRenderedFixtures(fixturesDir = defaultFixturesDir) {
const fixtures = readdirSync(fixturesDir).filter(name => {
const contents = readdirSync(join(fixturesDir, name)).map(d => d);
return contents.includes('expected.md');
});
for (const fixtureId of fixtures) {
const fixturePath = join(fixturesDir, fixtureId);
const markdownText = readFileSync(join(fixturePath, 'expected.md'), 'utf-8');
const parsed = parseMarkdownIssues(markdownText);
for (const fixtureId of fixtures) {
const fixturePath = join(fixturesDir, fixtureId);
const markdownText = readFileSync(join(fixturePath, 'expected.md'), 'utf-8');
const parsed = parseMarkdownIssues(markdownText);
const result = parsed.map(issue => ({
id: issue.id,
summary: issue.summary,
resolved: issue.resolved,
caveat: issue.caveat,
renderedHtml: markdownSummaryToHtml(issue.summary, issue.resolved, issue.caveat)
}));
const result = parsed.map(issue => ({
id: issue.id,
summary: issue.summary,
resolved: issue.resolved,
caveat: issue.caveat,
renderedHtml: markdownSummaryToHtml(issue.summary, issue.resolved, issue.caveat)
}));
writeFileSync(
join(fixturePath, 'expected-parsed.json'),
JSON.stringify(result, null, 2) + '\n',
'utf-8'
);
writeFileSync(
join(fixturePath, 'expected-parsed.json'),
JSON.stringify(result, null, 2) + '\n',
'utf-8'
);
console.log(`Written ${fixtureId}/expected-parsed.json (${result.length} issues)`);
console.log(`Written ${fixtureId}/expected-parsed.json (${result.length} issues)`);
}
return { fixtures: fixtures.length };
}
if (process.argv[1] && import.meta.url === pathToFileURL(resolve(process.argv[1])).href) {
generateRenderedFixtures();
}