Skip to content
quarry Artifact [efe4608cff]
Login

Artifact [efe4608cff]

Artifact efe4608cff3ef8df90567b2b852caaae5a83c7368732f4c21f324474b16d6c80:


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)
	}
}