package main import ( "testing" "github.com/Azareal/Gosora/common" ) func TestPreparser(t *testing.T) { var msgList = &METriList{nil} // Note: The open tag is evaluated without knowledge of the close tag for efficiency and simplicity, so the parser autofills the associated close tag when it finds an open tag without a partner msgList.Add("", "") msgList.Add(" ", "") msgList.Add(" hi", "hi") msgList.Add("hi ", "hi") msgList.Add("hi", "hi") msgList.Add(":grinning:", "😀") msgList.Add("😀", "😀") msgList.Add(" ", "") msgList.Add("

", "") msgList.Add("

", "") msgList.Add("

", "") msgList.Add("<", "<") msgList.Add(">", ">") msgList.Add("", "<meow>") msgList.Add("<", "&lt;") msgList.Add("&", "&") // Note: strings.TrimSpace strips newlines, if there's nothing before or after them msgList.Add("
", "") msgList.Add("
", "") msgList.Add("\\n", "\n", "") msgList.Add("\\n\\n", "\n\n", "") msgList.Add("\\n\\n\\n", "\n\n\n", "") msgList.Add("\\r\\n", "\r\n", "") // Windows style line ending msgList.Add("\\n\\r", "\n\r", "") msgList.Add("ho
ho", "ho\n\nho") msgList.Add("ho
ho", "ho\n\nho") msgList.Add("ho\\nho", "ho\nho", "ho\nho") msgList.Add("ho\\n\\nho", "ho\n\nho", "ho\n\nho") //msgList.Add("ho\\n\\n\\n\\nho", "ho\n\n\n\nho", "ho\n\n\nho") msgList.Add("ho\\r\\nho", "ho\r\nho", "ho\nho") // Windows style line ending msgList.Add("ho\\n\\rho", "ho\n\rho", "ho\nho") msgList.Add("", "") msgList.Add("hi", "hi") msgList.Add("hi", "hi") msgList.Add("hi", "hi") msgList.Add("hi", "hi") msgList.Add("hi", "hi") msgList.Add("hi", "hi") msgList.Add("hi", "hi") msgList.Add("hi", "hi") msgList.Add("hi", "hi") msgList.Add("hi", "hi") msgList.Add("hi", "hi") msgList.Add("
hi
", "<div>hi</div>") msgList.Add("hi", "hi") // This is stripped since the editor (Trumbowyg) likes blasting useless spans msgList.Add("hi", "hi") msgList.Add("hi", "hi") msgList.Add(">hi", ">hi") msgList.Add("hi", "hi") msgList.Add("hi", "hi</b>") msgList.Add("", "</b>") msgList.Add("", "</del>") msgList.Add("", "</strong>") msgList.Add("", "") msgList.Add("hi", "hi") msgList.Add("hi", "hi") msgList.Add("", "") msgList.Add("", "") msgList.Add("", "") msgList.Add("", "") msgList.Add("", "") msgList.Add("<>", "<></>") msgList.Add("<>", "</><>") msgList.Add("<>", "<>") msgList.Add("", "</>") msgList.Add("

hi

", "hi") msgList.Add("

", "") msgList.Add("
hi
", "
hi
") msgList.Add("
hi
", "
hi
") msgList.Add("
hi
", "
<meow>hi</meow>
") msgList.Add("\\
hi
", "<blockquote>hi</blockquote>") //msgList.Add("\\\\
hi
", "\\
<meow>hi</meow>
") // TODO: Double escapes should print a literal backslash //msgList.Add("<blockquote>hi</blockquote>", "<blockquote>hi</blockquote>") // TODO: Stop double-entitising this msgList.Add("\\
hi
\\
hi
", "<blockquote>hi</blockquote><blockquote>hi</blockquote>") msgList.Add("\\Admin", "<a itemprop="author">Admin</a>") msgList.Add("
\\Admin
", "
<a itemprop="author">Admin</a>
") msgList.Add("\n
\\Admin
\n", "
<a itemprop="author">Admin</a>
") msgList.Add("tt\n
\\Admin
\ntt", "tt\n
<a itemprop="author">Admin</a>
\ntt") msgList.Add("@", "@") msgList.Add("@Admin", "@1") msgList.Add("@Bah", "@Bah") msgList.Add(" @Admin", "@1") msgList.Add("\n@Admin", "@1") msgList.Add("@Admin\n", "@1") msgList.Add("@Admin\ndd", "@1\ndd") msgList.Add("d@Admin", "d@Admin") msgList.Add("\\@Admin", "@Admin") //msgList.Add("\\\\@Admin", "@1") //msgList.Add("byte 0", string([]byte{0}), "") msgList.Add("byte 'a'", string([]byte{'a'}), "a") //msgList.Add("byte 255", string([]byte{255}), "") //msgList.Add("rune 0", string([]rune{0}), "") // TODO: Do a test with invalid UTF-8 input for _, item := range msgList.Items { res := common.PreparseMessage(item.Msg) if res != item.Expects { if item.Name != "" { t.Error("Name: ", item.Name) } t.Error("Testing string '" + item.Msg + "'") t.Error("Bad output:", "'"+res+"'") //t.Error("Ouput in bytes:", []byte(res)) t.Error("Expected:", "'"+item.Expects+"'") } } } func TestParser(t *testing.T) { var msgList = &METriList{nil} url := "github.com/Azareal/Gosora" msgList.Add("//"+url, "//"+url+"") msgList.Add("https://"+url, "https://"+url+"") msgList.Add("http://"+url, "http://"+url+"") msgList.Add("//"+url+"\n", "//"+url+"
") msgList.Add("\n//"+url, "
//"+url+"") msgList.Add("\n//"+url+"\n", "
//"+url+"
") msgList.Add("//"+url+"\n//"+url, "//"+url+"
//"+url+"") msgList.Add("//"+url+"\n\n//"+url, "//"+url+"

//"+url+"") msgList.Add("//"+common.Site.URL, "//"+common.Site.URL+"") msgList.Add("//"+common.Site.URL+"\n", "//"+common.Site.URL+"
") msgList.Add("//"+common.Site.URL+"\n//"+common.Site.URL, "//"+common.Site.URL+"
//"+common.Site.URL+"") msgList.Add("#tid-1", "#tid-1") msgList.Add("https://"+url+"/#tid-1", "https://"+url+"/#tid-1") msgList.Add("#fid-1", "#fid-1") msgList.Add("@1", "@Admin") msgList.Add("@0", "[Invalid Profile]") msgList.Add("@-1", "[Invalid Profile]1") for _, item := range msgList.Items { res := common.ParseMessage(item.Msg, 1, "forums") if res != item.Expects { if item.Name != "" { t.Error("Name: ", item.Name) } t.Error("Testing string '" + item.Msg + "'") t.Error("Bad output:", "'"+res+"'") t.Error("Expected:", "'"+item.Expects+"'") } } }