github.com/Azareal/Gosora@v0.0.0-20210729070923-553e66b59003/plugin_test.go (about) 1 package main 2 3 import ( 4 "strconv" 5 "testing" 6 7 c "github.com/Azareal/Gosora/common" 8 e "github.com/Azareal/Gosora/extend" 9 ) 10 11 // go test -v 12 13 // TODO: Write a test for Hello World? 14 15 type MEPair struct { 16 Msg string 17 Expects string 18 } 19 20 type MEPairList struct { 21 Items []MEPair 22 } 23 24 func (l *MEPairList) Add(msg, expects string) { 25 l.Items = append(l.Items, MEPair{msg, expects}) 26 } 27 28 func TestBBCodeRender(t *testing.T) { 29 //t.Skip() 30 if e := e.InitBbcode(c.Plugins["bbcode"]); e != nil { 31 t.Fatal(e) 32 } 33 34 var res string 35 l := &MEPairList{nil} 36 l.Add("", "") 37 l.Add(" ", " ") 38 l.Add(" ", " ") 39 l.Add(" ", " ") 40 l.Add("[b]", "<b></b>") 41 l.Add("[b][/b]", "<b></b>") 42 l.Add("hi", "hi") 43 l.Add("😀", "😀") 44 l.Add("[b]😀[/b]", "<b>😀</b>") 45 l.Add("[b]😀😀😀[/b]", "<b>😀😀😀</b>") 46 l.Add("[b]hi[/b]", "<b>hi</b>") 47 l.Add("[u]hi[/u]", "<u>hi</u>") 48 l.Add("[i]hi[/i]", "<i>hi</i>") 49 l.Add("[s]hi[/s]", "<s>hi</s>") 50 l.Add("[c]hi[/c]", "[c]hi[/c]") 51 l.Add("[h1]hi", "[h1]hi") 52 l.Add("[h1]hi[/h1]", "<h2>hi</h2>") 53 if !testing.Short() { 54 //l.Add("[b]hi[/i]", "[b]hi[/i]") 55 //l.Add("[/b]hi[b]", "[/b]hi[b]") 56 //l.Add("[/b]hi[/b]", "[/b]hi[/b]") 57 //l.Add("[b][b]hi[/b]", "<b>hi</b>") 58 //l.Add("[b][b]hi", "[b][b]hi") 59 //l.Add("[b][b][b]hi", "[b][b][b]hi") 60 //l.Add("[/b]hi", "[/b]hi") 61 } 62 l.Add("[spoiler]hi[/spoiler]", "<spoiler>hi</spoiler>") 63 l.Add("[code]hi[/code]", "<span class='codequotes'>hi</span>") 64 l.Add("[code][b]hi[/b][/code]", "<span class='codequotes'>[b]hi[/b]</span>") 65 l.Add("[code][b]hi[/code][/b]", "<span class='codequotes'>[b]hi</span>[/b]") 66 l.Add("[quote]hi[/quote]", "<blockquote>hi</blockquote>") 67 l.Add("[quote][b]hi[/b][/quote]", "<blockquote><b>hi</b></blockquote>") 68 l.Add("[quote][b]h[/b][/quote]", "<blockquote><b>h</b></blockquote>") 69 l.Add("[quote][b][/b][/quote]", "<blockquote><b></b></blockquote>") 70 l.Add("[url][/url]", "<a href=''></a>") 71 l.Add("[url]https://github.com/Azareal/Gosora[/url]", "<a href='https://github.com/Azareal/Gosora'>https://github.com/Azareal/Gosora</a>") 72 l.Add("[url]http://github.com/Azareal/Gosora[/url]", "<a href='http://github.com/Azareal/Gosora'>http://github.com/Azareal/Gosora</a>") 73 l.Add("[url]//github.com/Azareal/Gosora[/url]", "<a href='//github.com/Azareal/Gosora'>//github.com/Azareal/Gosora</a>") 74 l.Add("-ä½ å¥½-", "-ä½ å¥½-") 75 l.Add("[i]-ä½ å¥½-[/i]", "<i>-ä½ å¥½-</i>") // TODO: More of these Unicode tests? Emoji, Chinese, etc.? 76 77 t.Log("Testing BbcodeFullParse") 78 for _, item := range l.Items { 79 res = e.BbcodeFullParse(item.Msg) 80 if res != item.Expects { 81 t.Error("Testing string '" + item.Msg + "'") 82 t.Error("Bad output:", "'"+res+"'") 83 t.Error("Expected:", "'"+item.Expects+"'") 84 } 85 } 86 87 f := func(msg, expects string) { 88 t.Log("Testing string '" + msg + "'") 89 res := e.BbcodeFullParse(msg) 90 if res != expects { 91 t.Error("Bad output:", "'"+res+"'") 92 t.Error("Expected:", "'"+expects+"'") 93 } 94 } 95 f("[rand][/rand]", "<red>[Invalid Number]</red>[rand][/rand]") 96 f("[rand]-1[/rand]", "<red>[No Negative Numbers]</red>[rand]-1[/rand]") 97 f("[rand]-01[/rand]", "<red>[No Negative Numbers]</red>[rand]-01[/rand]") 98 f("[rand]NaN[/rand]", "<red>[Invalid Number]</red>[rand]NaN[/rand]") 99 f("[rand]Inf[/rand]", "<red>[Invalid Number]</red>[rand]Inf[/rand]") 100 f("[rand]+[/rand]", "<red>[Invalid Number]</red>[rand]+[/rand]") 101 f("[rand]1+1[/rand]", "<red>[Invalid Number]</red>[rand]1+1[/rand]") 102 103 msg := "[rand]1[/rand]" 104 t.Log("Testing string '" + msg + "'") 105 res = e.BbcodeFullParse(msg) 106 conv, err := strconv.Atoi(res) 107 if err != nil || (conv > 1 || conv < 0) { 108 t.Error("Bad output:", "'"+res+"'") 109 t.Error("Expected a number in the range 0-1") 110 } 111 112 msg = "[rand]0[/rand]" 113 t.Log("Testing string '" + msg + "'") 114 res = e.BbcodeFullParse(msg) 115 conv, err = strconv.Atoi(res) 116 if err != nil || conv != 0 { 117 t.Error("Bad output:", "'"+res+"'") 118 t.Error("Expected the number 0") 119 } 120 121 msg = "[rand]2147483647[/rand]" // Signed 32-bit MAX 122 t.Log("Testing string '" + msg + "'") 123 res = e.BbcodeFullParse(msg) 124 conv, err = strconv.Atoi(res) 125 if err != nil || (conv > 2147483647 || conv < 0) { 126 t.Error("Bad output:", "'"+res+"'") 127 t.Error("Expected a number between 0 and 2147483647") 128 } 129 130 msg = "[rand]9223372036854775807[/rand]" // Signed 64-bit MAX 131 t.Log("Testing string '" + msg + "'") 132 res = e.BbcodeFullParse(msg) 133 conv, err = strconv.Atoi(res) 134 if err != nil || (conv > 9223372036854775807 || conv < 0) { 135 t.Error("Bad output:", "'"+res+"'") 136 t.Error("Expected a number between 0 and 9223372036854775807") 137 } 138 139 // Note: conv is commented out in these two, as these numbers overflow int 140 msg = "[rand]18446744073709551615[/rand]" // Unsigned 64-bit MAX 141 t.Log("Testing string '" + msg + "'") 142 res = e.BbcodeFullParse(msg) 143 _, err = strconv.Atoi(res) 144 if err != nil && res != "<red>[Invalid Number]</red>[rand]18446744073709551615[/rand]" { 145 t.Error("Bad output:", "'"+res+"'") 146 t.Error("Expected a number between 0 and 18446744073709551615") 147 } 148 msg = "[rand]170141183460469231731687303715884105727[/rand]" // Signed 128-bit MAX 149 t.Log("Testing string '" + msg + "'") 150 res = e.BbcodeFullParse(msg) 151 _, err = strconv.Atoi(res) 152 if err != nil && res != "<red>[Invalid Number]</red>[rand]170141183460469231731687303715884105727[/rand]" { 153 t.Error("Bad output:", "'"+res+"'") 154 t.Error("Expected a number between 0 and 170141183460469231731687303715884105727") 155 } 156 157 /*t.Log("Testing bbcode_regex_parse") 158 for _, item := range l.Items { 159 t.Log("Testing string '" + item.Msg + "'") 160 res = bbcodeRegexParse(item.Msg) 161 if res != item.Expects { 162 t.Error("Bad output:", "'"+res+"'") 163 t.Error("Expected:", item.Expects) 164 } 165 }*/ 166 167 l = &MEPairList{nil} 168 l.Add("", "") 169 l.Add("ddd", "ddd") 170 l.Add("[b][/b]", "") 171 l.Add("[b]ddd[/b]", "ddd") 172 l.Add("ddd[b]ddd[/b]ddd", "ddddddddd") 173 l.Add("ddd\n[b]ddd[/b]\nddd", "ddd\nddd\nddd") 174 t.Log("Testing BbcodeStripTags") 175 for _, item := range l.Items { 176 res = e.BbcodeStripTags(item.Msg) 177 if res != item.Expects { 178 t.Error("Testing string '" + item.Msg + "'") 179 t.Error("Bad output:", "'"+res+"'") 180 t.Error("Expected:", "'"+item.Expects+"'") 181 } 182 } 183 } 184 185 func TestMarkdownRender(t *testing.T) { 186 //t.Skip() 187 if err := e.InitMarkdown(c.Plugins["markdown"]); err != nil { 188 t.Fatal(err) 189 } 190 191 l := &MEPairList{nil} 192 l2 := &MEPairList{nil} 193 // TODO: Fix more of these odd cases 194 l.Add("", "") 195 l.Add(" ", " ") 196 l.Add(" ", " ") 197 l.Add(" ", " ") 198 l.Add("\t", "\t") 199 l.Add("\n", "\n") 200 l.Add("*", "*") 201 l.Add("`", "`") 202 //l.Add("**", "<i></i>") 203 l.Add("h", "h") 204 l.Add("hi", "hi") 205 l.Add("**h**", "<b>h</b>") 206 l.Add("**hi**", "<b>hi</b>") 207 l.Add("_h_", "<u>h</u>") 208 l.Add("_hi_", "<u>hi</u>") 209 l.Add(" _hi_", " <u>hi</u>") 210 l.Add("h_hi_h", "h_hi_h") 211 l.Add("h _hi_ h", "h <u>hi</u> h") 212 l.Add("h _hi_h", "h <u>hi</u>h") 213 l.Add("*h*", "<i>h</i>") 214 l.Add("*hi*", "<i>hi</i>") 215 l.Add("~h~", "<s>h</s>") 216 l.Add("~hi~", "<s>hi</s>") 217 l.Add("`hi`", "<blockquote>hi</blockquote>") 218 // TODO: Hide the backslash after escaping the item 219 // TODO: Doesn't behave consistently with d in-front of it 220 l2.Add("\\`hi`", "\\`hi`") 221 l2.Add("#", "#") 222 l2.Add("#h", "<h2>h</h2>") 223 l2.Add("#hi", "<h2>hi</h2>") 224 l2.Add("# hi", "<h2>hi</h2>") 225 l2.Add("# hi", "<h2>hi</h2>") 226 l.Add("\n#", "\n#") 227 l.Add("\n#h", "\n<h2>h</h2>") 228 l.Add("\n#hi", "\n<h2>hi</h2>") 229 l.Add("\n#h\n", "\n<h2>h</h2>") 230 l.Add("\n#hi\n", "\n<h2>hi</h2>") 231 l.Add("*hi**", "<i>hi</i>*") 232 l.Add("**hi***", "<b>hi</b>*") 233 //l.Add("**hi*", "*<i>hi</i>") 234 l.Add("***hi***", "<b><i>hi</i></b>") 235 l.Add("***h***", "<b><i>h</i></b>") 236 l.Add("\\***h**\\*", "*<b>h</b>*") 237 l.Add("\\*\\**h*\\*\\*", "**<i>h</i>**") 238 l.Add("\\*hi\\*", "*hi*") 239 l.Add("d\\*hi\\*", "d*hi*") 240 l.Add("\\*hi\\*d", "*hi*d") 241 l.Add("d\\*hi\\*d", "d*hi*d") 242 l.Add("\\", "\\") 243 l.Add("\\\\", "\\\\") 244 l.Add("\\d", "\\d") 245 l.Add("\\\\d", "\\\\d") 246 l.Add("\\\\\\d", "\\\\\\d") 247 l.Add("d\\", "d\\") 248 l.Add("\\d\\", "\\d\\") 249 l.Add("*_hi_*", "<i><u>hi</u></i>") 250 l.Add("*~hi~*", "<i><s>hi</s></i>") 251 //l.Add("~*hi*~", "<s><i>hi</i></s>") 252 //l.Add("~ *hi* ~", "<s> <i>hi</i> </s>") 253 l.Add("_~hi~_", "<u><s>hi</s></u>") 254 l.Add("***~hi~***", "<b><i><s>hi</s></i></b>") 255 l.Add("**", "**") 256 l.Add("***", "***") 257 l.Add("****", "****") 258 l.Add("*****", "*****") 259 l.Add("******", "******") 260 l.Add("*******", "*******") 261 l.Add("~~", "~~") 262 l.Add("~~~", "~~~") 263 l.Add("~~~~", "~~~~") 264 l.Add("~~~~~", "~~~~~") 265 l.Add("|hi|", "<spoiler>hi</spoiler>") 266 l.Add("__", "__") 267 l.Add("___", "___") 268 l.Add("_ _", "<u> </u>") 269 l.Add("* *", "<i> </i>") 270 l.Add("** **", "<b> </b>") 271 l.Add("*** ***", "<b><i> </i></b>") 272 l.Add("-ä½ å¥½-", "-ä½ å¥½-") 273 l.Add("*-ä½ å¥½-*", "<i>-ä½ å¥½-</i>") // TODO: More of these Unicode tests? Emoji, Chinese, etc.? 274 275 for _, item := range l.Items { 276 if res := e.MarkdownParse(item.Msg); res != item.Expects { 277 t.Error("Testing string '" + item.Msg + "'") 278 t.Error("Bad output:", "'"+res+"'") 279 //t.Error("Ouput in bytes:", []byte(res)) 280 t.Error("Expected:", "'"+item.Expects+"'") 281 } 282 } 283 284 for _, item := range l2.Items { 285 if res := e.MarkdownParse(item.Msg); res != item.Expects { 286 t.Error("Testing string '" + item.Msg + "'") 287 t.Error("Bad output:", "'"+res+"'") 288 //t.Error("Ouput in bytes:", []byte(res)) 289 t.Error("Expected:", "'"+item.Expects+"'") 290 } 291 } 292 293 /*for _, item := range l.Items { 294 if res := e.MarkdownParse("d" + item.Msg); res != "d"+item.Expects { 295 t.Error("Testing string 'd" + item.Msg + "'") 296 t.Error("Bad output:", "'"+res+"'") 297 //t.Error("Ouput in bytes:", []byte(res)) 298 t.Error("Expected:", "'d"+item.Expects+"'") 299 } 300 }*/ 301 302 // TODO: Write suffix tests and double string tests 303 // TODO: Write similar prefix, suffix, and double string tests for plugin_bbcode. Ditto for the outer parser along with suitable tests for that like making sure the URL parser and media embedder works. 304 }