fix some parser corner cases

add more parser test cases
This commit is contained in:
Azareal 2021-02-19 12:51:13 +10:00
parent 2176147dec
commit b66aeac966
2 changed files with 33 additions and 10 deletions

View File

@ -633,8 +633,8 @@ func ParseMessage2(msg string, sectionID int, sectionType string, settings *Pars
case 'h', 'f', 'g', '/': case 'h', 'f', 'g', '/':
//fmt.Println("s3") //fmt.Println("s3")
fch := msg[i+1] fch := msg[i+1]
if fch == 't' && len(msg) > i+5 && msg[i+2] == 't' && msg[i+3] == 'p' { if msg[i] == 'h' && fch == 't' && len(msg) > i+5 && msg[i+2] == 't' && msg[i+3] == 'p' {
if len(msg) > i+6 && msg[i+4] == 's' && msg[i+5] == ':' && msg[i+6] == '/' { if msg[i+4] == 's' && msg[i+5] == ':' && len(msg) > i+6 && msg[i+6] == '/' {
// Do nothing // Do nothing
} else if msg[i+4] == ':' && msg[i+5] == '/' { } else if msg[i+4] == ':' && msg[i+5] == '/' {
// Do nothing // Do nothing
@ -642,16 +642,16 @@ func ParseMessage2(msg string, sectionID int, sectionType string, settings *Pars
continue continue
} }
} else if len(msg) > i+4 { } else if len(msg) > i+4 {
if fch == 't' && msg[i+2] == 'p' && msg[i+3] == ':' && msg[i+4] == '/' { if fch == 't' && msg[i+2] == 'p' && msg[i+3] == ':' && msg[i+4] == '/' && msg[i] == 'f' {
// Do nothing // Do nothing
} else if fch == 'i' && msg[i+2] == 't' && msg[i+3] == ':' && msg[i+4] == '/' { } else if fch == 'i' && msg[i+2] == 't' && msg[i+3] == ':' && msg[i+4] == '/' && msg[i] == 'g' {
// Do nothing // Do nothing
} else if fch == '/' { } else if fch == '/' && msg[i] == '/' {
// Do nothing // Do nothing
} else { } else {
continue continue
} }
} else if fch == '/' { } else if fch == '/' && msg[i] == '/' {
// Do nothing // Do nothing
} else { } else {
continue continue

View File

@ -197,16 +197,17 @@ func TestParser(t *testing.T) {
l.Add("http:// t", "<red>[Invalid URL]</red> t") l.Add("http:// t", "<red>[Invalid URL]</red> t")
l.Add("g", "g") l.Add("g", "g")
l.Add("g/", "//") // todo: fix this l.Add("g/", "g/")
l.Add("g//", "g//")
l.Add("/g", "/g") l.Add("/g", "/g")
l.Add("/gg", "/gg") l.Add("/gg", "/gg")
l.Add("/g/", "/g/") l.Add("/g/", "/g/")
l.Add("hi", "hi") l.Add("hi", "hi")
l.Add("hit", "hit") l.Add("hit", "hit")
l.Add("hit:", "hit:") l.Add("hit:", "hit:")
l.Add("hit:/", "<a rel='ugc'href='hit:///'>/</a>") // todo: fix this l.Add("hit:/", "hit:/")
l.Add("hit://", "<a rel='ugc'href='hit://'></a>") // todo: fix this l.Add("hit://", "hit://")
l.Add("hit://t", "<a rel='ugc'href='hit://t'>t</a>") // todo: fix this l.Add("hit://t", "hit://t")
l.Add("h", "h") l.Add("h", "h")
l.Add("ht", "ht") l.Add("ht", "ht")
l.Add("htt", "htt") l.Add("htt", "htt")
@ -216,6 +217,9 @@ func TestParser(t *testing.T) {
//t l.Add("http:/d", "http:/d") //t l.Add("http:/d", "http:/d")
l.Add("http:d", "http:d") l.Add("http:d", "http:d")
l.Add("https:", "https:") l.Add("https:", "https:")
l.Add("gttps:", "gttps:")
l.Add("gttps:/", "gttps:/")
l.Add("gttps://", "gttps://")
l.Add("ftp:", "ftp:") l.Add("ftp:", "ftp:")
l.Add("git:", "git:") l.Add("git:", "git:")
l.Add("ssh:", "ssh:") l.Add("ssh:", "ssh:")
@ -424,6 +428,25 @@ func TestParser(t *testing.T) {
c.Site.URL = pre c.Site.URL = pre
c.Config.SslSchema = pre2 c.Config.SslSchema = pre2
l = &METriList{nil}
l.Add("//", "//")
l.Add("//z", "//z")
l.Add("//"+url, "//"+url)
l.Add("https://www.youtube.com/watch?v=lalalalala&t=1", "https://www.youtube.com/watch?v=lalalalala&t=1")
l.Add("#tid-1", "<a href='/topic/1'>#tid-1</a>")
c.GuestUser.Perms.AutoLink = false
for _, item := range l.Items {
if res := c.ParseMessage(item.Msg, 1, "forums", nil, nil); 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+"'")
break
}
}
c.AddHashLinkType("nnid-", func(sb *strings.Builder, msg string, i *int) { c.AddHashLinkType("nnid-", func(sb *strings.Builder, msg string, i *int) {
tid, intLen := c.CoerceIntString(msg[*i:]) tid, intLen := c.CoerceIntString(msg[*i:])
*i += intLen *i += intLen