package markup
import (
"strings"
"testing"
)
// schemeRes knows one forum post and answers ResolvePath for it only.
type schemeRes struct{ fakeRes }
func (schemeRes) ResolvePath(p string) string {
switch p {
case "/forumpost/2ed79a01ae":
return "/r/x/forum/2ed79a01ae"
case "/tktview/a7f5b0856f":
return "/r/x/ticket/a7f5b0856f"
}
return ""
}
func TestFossilSchemeLinksResolve(t *testing.T) {
for _, c := range []struct{ src, href string }{
{"[p](forum:/forumpost/2ed79a01ae)", "/r/x/forum/2ed79a01ae"},
{"[p](forum:2ed79a01ae)", "/r/x/forum/2ed79a01ae"},
{"[t](ticket:a7f5b0856f)", "/r/x/ticket/a7f5b0856f"},
{"[t](ticket:/tktview/a7f5b0856f)", "/r/x/ticket/a7f5b0856f"},
{"[w](wiki:Design)", "/r/x/wiki/Design"},
{"[c](checkin:abcdef0123456789)", "/r/x/checkin/abcdef0123456789"},
{"[c](checkin:/abcdef0123456789)", "/r/x/checkin/abcdef0123456789"},
{"[i](info:abcdef0123456789)", "/r/x/checkin/abcdef0123456789"},
} {
out, err := Render([]byte(c.src+"\n"), schemeRes{})
if err != nil {
t.Fatal(err)
}
if !strings.Contains(string(out), `href="`+c.href+`"`) {
t.Errorf("%s: want href %s in\n%s", c.src, c.href, out)
}
}
}
func TestFossilSchemeUnresolvedIsTextNeverALink(t *testing.T) {
for _, src := range []string{
"[p](forum:/forumpost/0000000000)", "[w](wiki:Missing)", "[t](ticket:nothex)",
} {
for _, r := range []Resolver{schemeRes{}, nil} {
out, err := Render([]byte(src+"\n"), r)
if err != nil {
t.Fatal(err)
}
got := string(out)
if strings.Contains(got, "<a") || strings.Contains(got, "forum:") ||
strings.Contains(got, "wiki:") || strings.Contains(got, "ticket:") {
t.Errorf("%s: scheme or link survived:\n%s", src, got)
}
if !strings.Contains(got, ">p<") && !strings.Contains(got, ">w<") && !strings.Contains(got, ">t<") &&
!strings.Contains(got, "p</p>") && !strings.Contains(got, "w</p>") && !strings.Contains(got, "t</p>") {
t.Errorf("%s: label lost:\n%s", src, got)
}
}
}
}
func TestFossilWikiSchemeBracketLink(t *testing.T) {
out, err := RenderFossilWiki([]byte("[forum:/forumpost/2ed79a01ae | the post]\n"), schemeRes{})
if err != nil {
t.Fatal(err)
}
if !strings.Contains(string(out), `href="/r/x/forum/2ed79a01ae"`) {
t.Fatalf("bracket form not resolved:\n%s", out)
}
}