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, "alert(1)", 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", "
") wantContains(t, got, "

plain

") wantNotContains(t, got, "