Goodbye legacy DokuWiki translators...

This commit is contained in:
2026-05-24 07:32:56 +02:00
parent 025995815d
commit 418cd2fa69
6 changed files with 451 additions and 289 deletions
+39 -1
View File
@@ -53,7 +53,7 @@ func TestBuildNativeGeneratesAndSkipsWikiPages(t *testing.T) {
if !strings.Contains(text, "<h1>Athletics</h1>") || !strings.Contains(text, `class="wiki-callout wiki-callout--status"`) || !strings.Contains(text, "This skill is unchanged from vanilla.") {
t.Fatalf("unexpected generated page:\n%s", text)
}
if !strings.Contains(text, `<!-- sow-topdata-wiki:page=skills:athletics -->`) || strings.Contains(text, `wiki_slug=`) || !strings.Contains(text, `<!-- sow-topdata-wiki:managed:start hash="sha256:`) || !strings.Contains(text, "Ability: Strength.") || !strings.Contains(text, "<li>Climb</li>") {
if !strings.Contains(text, `<!-- sow-topdata-wiki:page=skills:athletics -->`) || strings.Contains(text, `wiki_slug=`) || !strings.Contains(text, `<!-- sow-topdata-wiki:managed:start hash="sha256:`) || !strings.Contains(text, "Ability: Strength.") || !strings.Contains(text, "Uses:<br>- Climb<br>- Swim") {
t.Fatalf("expected HTML managed markers and description to be rendered into wiki page:\n%s", text)
}
if strings.Contains(text, "[//]: #") || strings.Contains(text, "<WRAP>") {
@@ -180,6 +180,44 @@ func TestBuildWikiRegeneratesMissingCachedPages(t *testing.T) {
}
}
func TestRenderNodeBBManagedHTMLPreservesHeadinglessTemplateHTML(t *testing.T) {
source := strings.TrimSpace(`
<p class="wiki-callout wiki-callout--status">This is generated.</p>
<!-- sow-topdata-wiki:manual:start id="user_top" -->
<p></p>
<!-- sow-topdata-wiki:manual:end id="user_top" -->
<p>Generated description.</p>
<table class="wiki-facts"><tbody><tr><th scope="row">Hit Die</th><td>d6</td></tr></tbody></table>
<h3>Class Skills</h3>
<div class="wiki-media-row"><ul><li>[[Skills/Heal|Heal]]</li></ul></div>
`)
got := renderNodeBBManagedHTML("classes:adept", source, []wikiManualSection{
{ID: "user_top", Alias: "UserTopSection", InitialHTML: "<p></p>"},
{ID: "user_bottom", Alias: "UserBottomSection", InitialHTML: "<p></p>"},
})
for _, want := range []string{
`<table class="wiki-facts">`,
`<h3>Class Skills</h3>`,
`<div class="wiki-media-row">`,
`<li>[[Skills/Heal|Heal]]</li>`,
} {
if !strings.Contains(got, want) {
t.Fatalf("expected generated HTML to preserve %q:\n%s", want, got)
}
}
if strings.Contains(got, "&lt;table") || strings.Contains(got, "&lt;div") || strings.Contains(got, "<p>&lt;") {
t.Fatalf("expected generated HTML not to be escaped into plain text:\n%s", got)
}
if strings.Count(got, `manual:start id="user_top"`) != 1 {
t.Fatalf("expected existing user_top manual section not to be duplicated:\n%s", got)
}
if strings.Count(got, `manual:start id="user_bottom"`) != 1 {
t.Fatalf("expected missing user_bottom manual section to be bootstrapped once:\n%s", got)
}
}
func TestBuildNativeIndexesUnregisteredStatusPagesWithDeclaredNamespacePath(t *testing.T) {
root := testProjectRoot(t)
mkdirAll(t, filepath.Join(root, "topdata", "data", "skills"))