package breakwater_test
import (
"strings"
"sync"
"testing"
"git.golem15.com/golem15/summercms/modules/breakwater"
)
// The corpora of the PHP golem15/forum ForumMarkdownRenderTest, verbatim.
const (
xssCorpus = "\n\n[x](javascript:alert(1))\n\n\n\n"
gfmCorpus = "| A | B |\n|---|---|\n| 1 | 2 |\n\n```php\necho 'wave';\n```"
)
func wantContains(t *testing.T, got string, subs ...string) {
t.Helper()
for _, s := range subs {
if !strings.Contains(got, s) {
t.Errorf("output lacks %q:\n%s", s, got)
}
}
}
func wantNotContains(t *testing.T, got string, subs ...string) {
t.Helper()
for _, s := range subs {
if strings.Contains(got, s) {
t.Errorf("output contains %q:\n%s", s, got)
}
}
}
func TestRenderXSS(t *testing.T) {
got := breakwater.Render(xssCorpus)
lower := strings.ToLower(got)
wantNotContains(t, lower, "", nil},
{"inline", "text bold more", []string{"text", "more"}},
}
for _, tc := range cases {
t.Run(tc.name, func(t *testing.T) {
got := breakwater.Render(tc.in)
wantNotContains(t, got, "alert(1)", "onclick", "
plain
") wantNotContains(t, got, "