Skip to content Search Apps Documentation Source Content File Folder Download Copy Actions State String Boolean Number Struct Map Slice Pointer Function Closure Reference Nil Package Type Interface Unknown

Community realm. Read the code first. Community realm, deployed by its author. Read the code before you interact or send coins.

theme_test.gno

3.73 Kb · 109 lines
  1package theme
  2
  3import (
  4	"encoding/base64"
  5	"strings"
  6	"testing"
  7
  8	"gno.land/p/nt/uassert/v0"
  9	"gno.land/r/g1lnkytfqcjwllws63gvf0mv9yt04aswy4y9amhm/home"
 10)
 11
 12const self = "gno.land/r/g1lnkytfqcjwllws63gvf0mv9yt04aswy4y9amhm/home/theme/v0"
 13
 14// install stands in for the deploy-and-accept sequence: the harness does not
 15// deliver this realm's init as a transaction, so the registration is redone
 16// here, then accepted by the authority.
 17func install(cur realm) {
 18	testing.SetRealm(testing.NewCodeRealm(self))
 19	home.Register(cross(cur), instance)
 20	testing.SetRealm(testing.NewUserRealm(home.Admin))
 21	home.Accept(cross(cur), self)
 22}
 23
 24func set(cur realm, slug, body string) {
 25	testing.SetRealm(testing.NewUserRealm(home.Admin))
 26	home.Set(cross(cur), slug, body)
 27}
 28
 29// decodeCard pulls the SVG back out of the first data: image in out.
 30func decodeCard(t *testing.T, out string) string {
 31	const marker = "data:image/svg+xml;base64,"
 32	i := strings.Index(out, marker)
 33	if i < 0 {
 34		t.Fatalf("no svg image in output:\n%s", out)
 35	}
 36	rest := out[i+len(marker):]
 37	end := strings.Index(rest, ")")
 38	raw, err := base64.StdEncoding.DecodeString(rest[:end])
 39	uassert.NoError(t, err)
 40	return string(raw)
 41}
 42
 43func TestRenderProfilePage(cur realm, t *testing.T) {
 44	if home.LivePath() != self {
 45		install(cur)
 46	}
 47	set(cur, "name", "Clockwork")
 48	set(cur, "tagline", "Lead Frontend Engineer <at> AiB")
 49	set(cur, "handle", "@clockworkgr")
 50	set(cur, "now", "shipping")
 51
 52	out := home.Render("")
 53	uassert.True(t, strings.HasPrefix(out, "![Clockwork](data:image/svg+xml;base64,"), out)
 54	uassert.True(t, strings.Contains(out, "## Now\n\nshipping\n"), out)
 55	uassert.True(t, strings.Contains(out, "<gno-columns>"), out)
 56	uassert.True(t, strings.Contains(out, ":intro:"), "an unset slot stays visible: "+out)
 57	uassert.True(t, strings.Contains(out, "theme `"+self+"`"), out)
 58	uassert.True(t, strings.Contains(out, "[edit](/r/g1lnkytfqcjwllws63gvf0mv9yt04aswy4y9amhm/home:edit)"), out)
 59
 60	svg := decodeCard(t, out)
 61	uassert.True(t, strings.Contains(svg, ">Clockwork</text>"), svg)
 62	uassert.True(t, strings.Contains(svg, "Lead Frontend Engineer &lt;at&gt; AiB"), "text is escaped: "+svg)
 63	uassert.True(t, strings.Contains(svg, "@clockworkgr · rev "), svg)
 64	uassert.True(t, strings.Contains(svg, `fill="#D9A441"`), "default accent: "+svg)
 65}
 66
 67func TestStyleKnobs(cur realm, t *testing.T) {
 68	if home.LivePath() != self {
 69		install(cur)
 70	}
 71	set(cur, "name", "Clockwork")
 72	set(cur, "layout", ":header:\n\n:divider:\n")
 73
 74	set(cur, "style.accent", "#00AAFF")
 75	svg := decodeCard(t, home.Render(""))
 76	uassert.True(t, strings.Contains(svg, `fill="#00AAFF"`), svg)
 77
 78	set(cur, "style.accent", "red; injected")
 79	svg = decodeCard(t, home.Render(""))
 80	uassert.True(t, strings.Contains(svg, `fill="#D9A441"`), "a malformed color falls back: "+svg)
 81	uassert.False(t, strings.Contains(svg, "injected"))
 82
 83	set(cur, "style.header", "plain")
 84	out := home.Render("")
 85	uassert.True(t, strings.HasPrefix(out, "# Clockwork\n"), out)
 86	uassert.True(t, strings.Contains(out, "data:image/svg+xml"), "the divider is still an image")
 87
 88	set(cur, "style.header", "none")
 89	out = home.Render("")
 90	uassert.True(t, strings.HasPrefix(out, "\n\n![](data:image/svg+xml"), out)
 91}
 92
 93func TestOtherPathsDelegate(cur realm, t *testing.T) {
 94	if home.LivePath() != self {
 95		install(cur)
 96	}
 97	uassert.True(t, strings.Contains(home.Render("slots"), "# Slots"))
 98	uassert.True(t, strings.Contains(home.Render("system"), "["+self+"]"))
 99	uassert.True(t, strings.Contains(home.Render("edit"), "<gno-form exec=\"Set\">"))
100}
101
102func TestHexColor(t *testing.T) {
103	uassert.True(t, isHexColor("#abcdef"))
104	uassert.True(t, isHexColor("#ABCDEF"))
105	uassert.False(t, isHexColor("abcdef"))
106	uassert.False(t, isHexColor("#abc"))
107	uassert.False(t, isHexColor("#abcdeg"))
108	uassert.False(t, isHexColor("#abcdef\" onload=\"x"))
109}