2018-11-22 07:21:43 +00:00
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 ( "<p>" , "" )
msgList . Add ( "</p>" , "" )
msgList . Add ( "<p></p>" , "" )
msgList . Add ( "<" , "<" )
msgList . Add ( ">" , ">" )
msgList . Add ( "<meow>" , "<meow>" )
msgList . Add ( "<" , "&lt;" )
msgList . Add ( "&" , "&" )
// Note: strings.TrimSpace strips newlines, if there's nothing before or after them
msgList . Add ( "<br>" , "" )
msgList . Add ( "<br />" , "" )
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<br>ho" , "ho\n\nho" )
msgList . Add ( "ho<br />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 ( "<b></b>" , "<strong></strong>" )
msgList . Add ( "<b>hi</b>" , "<strong>hi</strong>" )
2019-04-09 05:33:39 +00:00
msgList . Add ( "<b>h</b>" , "<strong>h</strong>" )
2018-11-22 07:21:43 +00:00
msgList . Add ( "<s>hi</s>" , "<del>hi</del>" )
msgList . Add ( "<del>hi</del>" , "<del>hi</del>" )
msgList . Add ( "<u>hi</u>" , "<u>hi</u>" )
msgList . Add ( "<em>hi</em>" , "<em>hi</em>" )
msgList . Add ( "<i>hi</i>" , "<em>hi</em>" )
msgList . Add ( "<strong>hi</strong>" , "<strong>hi</strong>" )
msgList . Add ( "<b><i>hi</i></b>" , "<strong><em>hi</em></strong>" )
msgList . Add ( "<strong><em>hi</em></strong>" , "<strong><em>hi</em></strong>" )
msgList . Add ( "<b><i><b>hi</b></i></b>" , "<strong><em><strong>hi</strong></em></strong>" )
msgList . Add ( "<strong><em><strong>hi</strong></em></strong>" , "<strong><em><strong>hi</strong></em></strong>" )
msgList . Add ( "<div>hi</div>" , "<div>hi</div>" )
msgList . Add ( "<span>hi</span>" , "hi" ) // This is stripped since the editor (Trumbowyg) likes blasting useless spans
msgList . Add ( "<span >hi</span>" , "hi" )
msgList . Add ( "<span style='background-color: yellow;'>hi</span>" , "hi" )
msgList . Add ( "<span style='background-color: yellow;'>>hi</span>" , ">hi" )
msgList . Add ( "<b>hi" , "<strong>hi</strong>" )
msgList . Add ( "hi</b>" , "hi</b>" )
msgList . Add ( "</b>" , "</b>" )
msgList . Add ( "</del>" , "</del>" )
msgList . Add ( "</strong>" , "</strong>" )
msgList . Add ( "<b>" , "<strong></strong>" )
msgList . Add ( "<span style='background-color: yellow;'>hi" , "hi" )
msgList . Add ( "hi</span>" , "hi" )
msgList . Add ( "</span>" , "" )
msgList . Add ( "<span></span>" , "" )
msgList . Add ( "<span ></span>" , "" )
2019-03-27 06:36:14 +00:00
msgList . Add ( "<span><span></span></span>" , "" )
msgList . Add ( "<span><b></b></span>" , "<strong></strong>" )
2019-04-09 05:33:39 +00:00
msgList . Add ( "<h1>t</h1>" , "<h2>t</h2>" )
msgList . Add ( "<h2>t</h2>" , "<h3>t</h3>" )
msgList . Add ( "<h3>t</h3>" , "<h4>t</h4>" )
2018-11-22 07:21:43 +00:00
msgList . Add ( "<></>" , "<></>" )
msgList . Add ( "</><>" , "</><>" )
msgList . Add ( "<>" , "<>" )
msgList . Add ( "</>" , "</>" )
2019-03-27 06:36:14 +00:00
msgList . Add ( "<p>hi</p>" , "hi" )
msgList . Add ( "<p></p>" , "" )
msgList . Add ( "<blockquote>hi</blockquote>" , "<blockquote>hi</blockquote>" )
msgList . Add ( "<blockquote><b>hi</b></blockquote>" , "<blockquote><strong>hi</strong></blockquote>" )
msgList . Add ( "<blockquote><meow>hi</meow></blockquote>" , "<blockquote><meow>hi</meow></blockquote>" )
msgList . Add ( "\\<blockquote>hi</blockquote>" , "<blockquote>hi</blockquote>" )
2019-04-08 07:50:10 +00:00
//msgList.Add("\\\\<blockquote><meow>hi</meow></blockquote>", "\\<blockquote><meow>hi</meow></blockquote>") // TODO: Double escapes should print a literal backslash
//msgList.Add("<blockquote>hi</blockquote>", "<blockquote>hi</blockquote>") // TODO: Stop double-entitising this
msgList . Add ( "\\<blockquote>hi</blockquote>\\<blockquote>hi</blockquote>" , "<blockquote>hi</blockquote><blockquote>hi</blockquote>" )
msgList . Add ( "\\<a itemprop=\"author\">Admin</a>" , "<a itemprop="author">Admin</a>" )
msgList . Add ( "<blockquote>\\<a itemprop=\"author\">Admin</a></blockquote>" , "<blockquote><a itemprop="author">Admin</a></blockquote>" )
msgList . Add ( "\n<blockquote>\\<a itemprop=\"author\">Admin</a></blockquote>\n" , "<blockquote><a itemprop="author">Admin</a></blockquote>" )
msgList . Add ( "tt\n<blockquote>\\<a itemprop=\"author\">Admin</a></blockquote>\ntt" , "tt\n<blockquote><a itemprop="author">Admin</a></blockquote>\ntt" )
2018-11-22 07:21:43 +00:00
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" )
2019-04-08 07:50:10 +00:00
msgList . Add ( "\\@Admin" , "@Admin" )
//msgList.Add("\\\\@Admin", "@1")
2018-11-22 07:21:43 +00:00
//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 , "<a href='//" + url + "'>//" + url + "</a>" )
msgList . Add ( "https://" + url , "<a href='https://" + url + "'>https://" + url + "</a>" )
msgList . Add ( "http://" + url , "<a href='http://" + url + "'>http://" + url + "</a>" )
msgList . Add ( "//" + url + "\n" , "<a href='//" + url + "'>//" + url + "</a><br>" )
msgList . Add ( "\n//" + url , "<br><a href='//" + url + "'>//" + url + "</a>" )
msgList . Add ( "\n//" + url + "\n" , "<br><a href='//" + url + "'>//" + url + "</a><br>" )
msgList . Add ( "//" + url + "\n//" + url , "<a href='//" + url + "'>//" + url + "</a><br><a href='//" + url + "'>//" + url + "</a>" )
msgList . Add ( "//" + url + "\n\n//" + url , "<a href='//" + url + "'>//" + url + "</a><br><br><a href='//" + url + "'>//" + url + "</a>" )
msgList . Add ( "//" + common . Site . URL , "<a href='//" + common . Site . URL + "'>//" + common . Site . URL + "</a>" )
msgList . Add ( "//" + common . Site . URL + "\n" , "<a href='//" + common . Site . URL + "'>//" + common . Site . URL + "</a><br>" )
msgList . Add ( "//" + common . Site . URL + "\n//" + common . Site . URL , "<a href='//" + common . Site . URL + "'>//" + common . Site . URL + "</a><br><a href='//" + common . Site . URL + "'>//" + common . Site . URL + "</a>" )
msgList . Add ( "#tid-1" , "<a href='/topic/1'>#tid-1</a>" )
msgList . Add ( "https://" + url + "/#tid-1" , "<a href='https://" + url + "/#tid-1'>https://" + url + "/#tid-1</a>" )
msgList . Add ( "#fid-1" , "<a href='/forum/1'>#fid-1</a>" )
msgList . Add ( "@1" , "<a href='/user/admin.1' class='mention'>@Admin</a>" )
msgList . Add ( "@0" , "<span style='color: red;'>[Invalid Profile]</span>" )
msgList . Add ( "@-1" , "<span style='color: red;'>[Invalid Profile]</span>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 + "'" )
}
}
}