More racial template entries
This commit is contained in:
@@ -1193,6 +1193,61 @@ func TestWikiTemplateCanRenderRacialFactsAndFeatListInHTML(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestWikiTemplateRacialOptionalFactsRenderOnlyWhenPresent(t *testing.T) {
|
||||||
|
ctx := &wikiContext{}
|
||||||
|
template := `{{#if present(ECL)}}ECL={{ECL}}{{/if}}
|
||||||
|
{{#if present(PreferredAlignments)}}Preferred={{PreferredAlignments}}{{/if}}
|
||||||
|
{{#if present(StartLanguages)}}Start={{StartLanguages}}{{/if}}
|
||||||
|
{{#if present(BonusLanguages)}}Bonus={{BonusLanguages}}{{/if}}`
|
||||||
|
page := wikiTemplatePage{
|
||||||
|
PageID: "racialtypes:human",
|
||||||
|
Category: "racialtypes",
|
||||||
|
Key: "racialtypes:human",
|
||||||
|
Title: "Human",
|
||||||
|
Row: map[string]any{
|
||||||
|
"ECL": 0,
|
||||||
|
"PreferredAlignments": "0x00",
|
||||||
|
"StartLanguages": "regional",
|
||||||
|
"BonusLanguages": "all",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
got, err := ctx.renderWikiTemplateString("racialtypes.html", template, page)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("render template: %v", err)
|
||||||
|
}
|
||||||
|
for _, want := range []string{
|
||||||
|
"ECL=0",
|
||||||
|
"Preferred=0x00",
|
||||||
|
"Start=regional",
|
||||||
|
"Bonus=all",
|
||||||
|
} {
|
||||||
|
if !strings.Contains(got, want) {
|
||||||
|
t.Fatalf("expected rendered output to contain %q:\n%s", want, got)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
page.Row = map[string]any{
|
||||||
|
"ECL": nil,
|
||||||
|
"PreferredAlignments": "",
|
||||||
|
"StartLanguages": "****",
|
||||||
|
}
|
||||||
|
got, err = ctx.renderWikiTemplateString("racialtypes.html", template, page)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("render template with absent values: %v", err)
|
||||||
|
}
|
||||||
|
for _, unwanted := range []string{
|
||||||
|
"ECL=",
|
||||||
|
"Preferred=",
|
||||||
|
"Start=",
|
||||||
|
"Bonus=",
|
||||||
|
} {
|
||||||
|
if strings.Contains(got, unwanted) {
|
||||||
|
t.Fatalf("expected rendered output to omit %q for absent values:\n%s", unwanted, got)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestWikiTemplateDescriptionFiltersExtractParagraphsAndSections(t *testing.T) {
|
func TestWikiTemplateDescriptionFiltersExtractParagraphsAndSections(t *testing.T) {
|
||||||
ctx := &wikiContext{}
|
ctx := &wikiContext{}
|
||||||
page := wikiTemplatePage{
|
page := wikiTemplatePage{
|
||||||
|
|||||||
@@ -855,9 +855,14 @@ func (p *wikiExprParser) parsePrimary() (any, error) {
|
|||||||
p.pos++
|
p.pos++
|
||||||
args := []any{}
|
args := []any{}
|
||||||
if p.peek().kind != wikiExprRParen {
|
if p.peek().kind != wikiExprRParen {
|
||||||
|
previousAllowMissing := p.allowMissingFields
|
||||||
|
if wikiExprHelperAllowsMissingArgs(token.text) {
|
||||||
|
p.allowMissingFields = true
|
||||||
|
}
|
||||||
for {
|
for {
|
||||||
arg, err := p.parseComparison()
|
arg, err := p.parseComparison()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
p.allowMissingFields = previousAllowMissing
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
args = append(args, arg)
|
args = append(args, arg)
|
||||||
@@ -865,6 +870,7 @@ func (p *wikiExprParser) parsePrimary() (any, error) {
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
p.allowMissingFields = previousAllowMissing
|
||||||
}
|
}
|
||||||
if _, ok := p.take(wikiExprRParen); !ok {
|
if _, ok := p.take(wikiExprRParen); !ok {
|
||||||
return nil, fmt.Errorf("missing closing parenthesis for %s", token.text)
|
return nil, fmt.Errorf("missing closing parenthesis for %s", token.text)
|
||||||
@@ -887,6 +893,15 @@ func (p *wikiExprParser) parsePrimary() (any, error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func wikiExprHelperAllowsMissingArgs(name string) bool {
|
||||||
|
switch name {
|
||||||
|
case "present", "all_present", "any_present":
|
||||||
|
return true
|
||||||
|
default:
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (p *wikiExprParser) resolveField(name string) (any, error) {
|
func (p *wikiExprParser) resolveField(name string) (any, error) {
|
||||||
name = strings.TrimPrefix(name, "row.")
|
name = strings.TrimPrefix(name, "row.")
|
||||||
if name == "HasSpellProgression" {
|
if name == "HasSpellProgression" {
|
||||||
|
|||||||
Reference in New Issue
Block a user