Tightened the preparser up a little and wrote more tests to cover more bases.
Green is a little misleading, as we Gosora doesn't call home to check for new versions yet.
This commit is contained in:
parent
6eb3429c25
commit
65ceaef4ea
|
@ -6,6 +6,7 @@ import (
|
||||||
"regexp"
|
"regexp"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
"unicode/utf8"
|
||||||
)
|
)
|
||||||
|
|
||||||
var SpaceGap = []byte(" ")
|
var SpaceGap = []byte(" ")
|
||||||
|
@ -170,19 +171,29 @@ type TagToAction struct {
|
||||||
PartialMode bool
|
PartialMode bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Write tests for this
|
|
||||||
// TODO: Preparse Markdown and normalize it into HTML?
|
// TODO: Preparse Markdown and normalize it into HTML?
|
||||||
func PreparseMessage(msg string) string {
|
func PreparseMessage(msg string) string {
|
||||||
|
//fmt.Println("initial msg: ", msg)
|
||||||
|
//fmt.Println("initial []byte(msg): ", []byte(msg))
|
||||||
|
// TODO: Kick this check down a level into SanitiseBody?
|
||||||
|
if !utf8.ValidString(msg) {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
msg = strings.Replace(msg, "<p><br>", "\n\n", -1)
|
msg = strings.Replace(msg, "<p><br>", "\n\n", -1)
|
||||||
msg = strings.Replace(msg, "<p>", "\n\n", -1)
|
msg = strings.Replace(msg, "<p>", "\n\n", -1)
|
||||||
msg = strings.Replace(msg, "</p>", "", -1)
|
msg = strings.Replace(msg, "</p>", "", -1)
|
||||||
|
// TODO: Make this looser by moving it to the reverse HTML parser?
|
||||||
msg = strings.Replace(msg, "<br>", "\n\n", -1)
|
msg = strings.Replace(msg, "<br>", "\n\n", -1)
|
||||||
|
msg = strings.Replace(msg, "<br />", "\n\n", -1) // XHTML style
|
||||||
|
msg = strings.Replace(msg, " ", "", -1)
|
||||||
|
msg = strings.Replace(msg, "\r", "", -1) // Windows artifact
|
||||||
|
//msg = strings.Replace(msg, "\n\n\n\n", "\n\n\n", -1)
|
||||||
msg = RunSshook("preparse_preassign", msg)
|
msg = RunSshook("preparse_preassign", msg)
|
||||||
// There are a few useful cases for having spaces, but I'd like to stop the WYSIWYG from inserting random lines here and there
|
// There are a few useful cases for having spaces, but I'd like to stop the WYSIWYG from inserting random lines here and there
|
||||||
msg = SanitiseBody(msg)
|
msg = SanitiseBody(msg)
|
||||||
msg = strings.Replace(msg, " ", "", -1)
|
|
||||||
|
|
||||||
//fmt.Println("before msg: ", msg)
|
//fmt.Println("before msg: ", msg)
|
||||||
|
//fmt.Println("before []byte(msg): ", []byte(msg))
|
||||||
var runes = []rune(msg)
|
var runes = []rune(msg)
|
||||||
msg = ""
|
msg = ""
|
||||||
var stepForward = func(i int, step int, runes []rune) int {
|
var stepForward = func(i int, step int, runes []rune) int {
|
||||||
|
@ -348,7 +359,7 @@ func PreparseMessage(msg string) string {
|
||||||
}
|
}
|
||||||
//fmt.Println("msg: ", msg)
|
//fmt.Println("msg: ", msg)
|
||||||
|
|
||||||
return shortcodeToUnicode(msg)
|
return strings.TrimSpace(shortcodeToUnicode(msg))
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Test this
|
// TODO: Test this
|
||||||
|
|
121
misc_test.go
121
misc_test.go
|
@ -956,49 +956,100 @@ func passwordTest(t *testing.T, realPassword string, hashedPassword string) {
|
||||||
expect(t, err != nil, "The two shouldn't match!")
|
expect(t, err != nil, "The two shouldn't match!")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type METri struct {
|
||||||
|
Name string // Optional, this is here for tests involving invisible characters so we know what's going in
|
||||||
|
Msg string
|
||||||
|
Expects string
|
||||||
|
}
|
||||||
|
|
||||||
|
func addMETri(msgList []METri, args ...string) []METri {
|
||||||
|
if len(args) < 2 {
|
||||||
|
panic("need 2 or more args")
|
||||||
|
}
|
||||||
|
if len(args) > 2 {
|
||||||
|
return append(msgList, METri{args[0], args[1], args[2]})
|
||||||
|
}
|
||||||
|
return append(msgList, METri{"", args[0], args[1]})
|
||||||
|
}
|
||||||
|
|
||||||
func TestPreparser(t *testing.T) {
|
func TestPreparser(t *testing.T) {
|
||||||
var res string
|
var res string
|
||||||
var msgList []MEPair
|
var msgList []METri
|
||||||
|
|
||||||
// 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
|
// 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 = addMEPair(msgList, "", "")
|
msgList = addMETri(msgList, "", "")
|
||||||
msgList = addMEPair(msgList, "hi", "hi")
|
msgList = addMETri(msgList, " ", "")
|
||||||
msgList = addMEPair(msgList, "<b></b>", "<strong></strong>")
|
msgList = addMETri(msgList, " hi", "hi")
|
||||||
msgList = addMEPair(msgList, "<b>hi</b>", "<strong>hi</strong>")
|
msgList = addMETri(msgList, "hi ", "hi")
|
||||||
msgList = addMEPair(msgList, "<s>hi</s>", "<del>hi</del>")
|
msgList = addMETri(msgList, "hi", "hi")
|
||||||
msgList = addMEPair(msgList, "<del>hi</del>", "<del>hi</del>")
|
msgList = addMETri(msgList, ":grinning:", "😀")
|
||||||
msgList = addMEPair(msgList, "<u>hi</u>", "<u>hi</u>")
|
msgList = addMETri(msgList, "😀", "😀")
|
||||||
msgList = addMEPair(msgList, "<em>hi</em>", "<em>hi</em>")
|
msgList = addMETri(msgList, " ", "")
|
||||||
msgList = addMEPair(msgList, "<i>hi</i>", "<em>hi</em>")
|
msgList = addMETri(msgList, "<p>", "")
|
||||||
msgList = addMEPair(msgList, "<strong>hi</strong>", "<strong>hi</strong>")
|
msgList = addMETri(msgList, "</p>", "")
|
||||||
msgList = addMEPair(msgList, "<b><i>hi</i></b>", "<strong><em>hi</em></strong>")
|
msgList = addMETri(msgList, "<p></p>", "")
|
||||||
msgList = addMEPair(msgList, "<strong><em>hi</em></strong>", "<strong><em>hi</em></strong>")
|
|
||||||
msgList = addMEPair(msgList, "<b><i><b>hi</b></i></b>", "<strong><em><strong>hi</strong></em></strong>")
|
// Note: strings.TrimSpace strips newlines, if there's nothing before or after them
|
||||||
msgList = addMEPair(msgList, "<strong><em><strong>hi</strong></em></strong>", "<strong><em><strong>hi</strong></em></strong>")
|
msgList = addMETri(msgList, "<br>", "")
|
||||||
msgList = addMEPair(msgList, "<div>hi</div>", "<div>hi</div>")
|
msgList = addMETri(msgList, "<br />", "")
|
||||||
msgList = addMEPair(msgList, "<span>hi</span>", "hi") // This is stripped since the editor (Trumbowyg) likes blasting useless spans
|
msgList = addMETri(msgList, "\\n", "\n", "")
|
||||||
msgList = addMEPair(msgList, "<span >hi</span>", "hi")
|
msgList = addMETri(msgList, "\\n\\n", "\n\n", "")
|
||||||
msgList = addMEPair(msgList, "<span style='background-color: yellow;'>hi</span>", "hi")
|
msgList = addMETri(msgList, "\\n\\n\\n", "\n\n\n", "")
|
||||||
msgList = addMEPair(msgList, "<span style='background-color: yellow;'>>hi</span>", ">hi")
|
msgList = addMETri(msgList, "\\r\\n", "\r\n", "") // Windows style line ending
|
||||||
msgList = addMEPair(msgList, "<b>hi", "<strong>hi</strong>")
|
msgList = addMETri(msgList, "\\n\\r", "\n\r", "")
|
||||||
msgList = addMEPair(msgList, "hi</b>", "hi</b>")
|
|
||||||
msgList = addMEPair(msgList, "</b>", "</b>")
|
msgList = addMETri(msgList, "ho<br>ho", "ho\n\nho")
|
||||||
msgList = addMEPair(msgList, "</del>", "</del>")
|
msgList = addMETri(msgList, "ho<br />ho", "ho\n\nho")
|
||||||
msgList = addMEPair(msgList, "</strong>", "</strong>")
|
msgList = addMETri(msgList, "ho\\nho", "ho\nho", "ho\nho")
|
||||||
msgList = addMEPair(msgList, "<b>", "<strong></strong>")
|
msgList = addMETri(msgList, "ho\\n\\nho", "ho\n\nho", "ho\n\nho")
|
||||||
msgList = addMEPair(msgList, "<span style='background-color: yellow;'>hi", "hi")
|
//msgList = addMETri(msgList, "ho\\n\\n\\n\\nho", "ho\n\n\n\nho", "ho\n\n\nho")
|
||||||
msgList = addMEPair(msgList, "hi</span>", "hi")
|
msgList = addMETri(msgList, "ho\\r\\nho", "ho\r\nho", "ho\nho") // Windows style line ending
|
||||||
msgList = addMEPair(msgList, "</span>", "")
|
msgList = addMETri(msgList, "ho\\n\\rho", "ho\n\rho", "ho\nho")
|
||||||
msgList = addMEPair(msgList, "<span></span>", "")
|
|
||||||
msgList = addMEPair(msgList, "<span ></span>", "")
|
msgList = addMETri(msgList, "<b></b>", "<strong></strong>")
|
||||||
msgList = addMEPair(msgList, "<></>", "<></>")
|
msgList = addMETri(msgList, "<b>hi</b>", "<strong>hi</strong>")
|
||||||
msgList = addMEPair(msgList, "</><>", "</><>")
|
msgList = addMETri(msgList, "<s>hi</s>", "<del>hi</del>")
|
||||||
msgList = addMEPair(msgList, "<>", "<>")
|
msgList = addMETri(msgList, "<del>hi</del>", "<del>hi</del>")
|
||||||
msgList = addMEPair(msgList, "</>", "</>")
|
msgList = addMETri(msgList, "<u>hi</u>", "<u>hi</u>")
|
||||||
|
msgList = addMETri(msgList, "<em>hi</em>", "<em>hi</em>")
|
||||||
|
msgList = addMETri(msgList, "<i>hi</i>", "<em>hi</em>")
|
||||||
|
msgList = addMETri(msgList, "<strong>hi</strong>", "<strong>hi</strong>")
|
||||||
|
msgList = addMETri(msgList, "<b><i>hi</i></b>", "<strong><em>hi</em></strong>")
|
||||||
|
msgList = addMETri(msgList, "<strong><em>hi</em></strong>", "<strong><em>hi</em></strong>")
|
||||||
|
msgList = addMETri(msgList, "<b><i><b>hi</b></i></b>", "<strong><em><strong>hi</strong></em></strong>")
|
||||||
|
msgList = addMETri(msgList, "<strong><em><strong>hi</strong></em></strong>", "<strong><em><strong>hi</strong></em></strong>")
|
||||||
|
msgList = addMETri(msgList, "<div>hi</div>", "<div>hi</div>")
|
||||||
|
msgList = addMETri(msgList, "<span>hi</span>", "hi") // This is stripped since the editor (Trumbowyg) likes blasting useless spans
|
||||||
|
msgList = addMETri(msgList, "<span >hi</span>", "hi")
|
||||||
|
msgList = addMETri(msgList, "<span style='background-color: yellow;'>hi</span>", "hi")
|
||||||
|
msgList = addMETri(msgList, "<span style='background-color: yellow;'>>hi</span>", ">hi")
|
||||||
|
msgList = addMETri(msgList, "<b>hi", "<strong>hi</strong>")
|
||||||
|
msgList = addMETri(msgList, "hi</b>", "hi</b>")
|
||||||
|
msgList = addMETri(msgList, "</b>", "</b>")
|
||||||
|
msgList = addMETri(msgList, "</del>", "</del>")
|
||||||
|
msgList = addMETri(msgList, "</strong>", "</strong>")
|
||||||
|
msgList = addMETri(msgList, "<b>", "<strong></strong>")
|
||||||
|
msgList = addMETri(msgList, "<span style='background-color: yellow;'>hi", "hi")
|
||||||
|
msgList = addMETri(msgList, "hi</span>", "hi")
|
||||||
|
msgList = addMETri(msgList, "</span>", "")
|
||||||
|
msgList = addMETri(msgList, "<span></span>", "")
|
||||||
|
msgList = addMETri(msgList, "<span ></span>", "")
|
||||||
|
msgList = addMETri(msgList, "<></>", "<></>")
|
||||||
|
msgList = addMETri(msgList, "</><>", "</><>")
|
||||||
|
msgList = addMETri(msgList, "<>", "<>")
|
||||||
|
msgList = addMETri(msgList, "</>", "</>")
|
||||||
|
//msgList = addMETri(msgList, "byte 0", string([]byte{0}), "")
|
||||||
|
msgList = addMETri(msgList, "byte 'a'", string([]byte{'a'}), "a")
|
||||||
|
//msgList = addMETri(msgList, "byte 255", string([]byte{255}), "")
|
||||||
|
//msgList = addMETri(msgList, "rune 0", string([]rune{0}), "")
|
||||||
|
// TODO: Do a test with invalid UTF-8 input
|
||||||
|
|
||||||
for _, item := range msgList {
|
for _, item := range msgList {
|
||||||
res = common.PreparseMessage(item.Msg)
|
res = common.PreparseMessage(item.Msg)
|
||||||
if res != item.Expects {
|
if res != item.Expects {
|
||||||
|
if item.Name != "" {
|
||||||
|
t.Error("Name: ", item.Name)
|
||||||
|
}
|
||||||
t.Error("Testing string '" + item.Msg + "'")
|
t.Error("Testing string '" + item.Msg + "'")
|
||||||
t.Error("Bad output:", "'"+res+"'")
|
t.Error("Bad output:", "'"+res+"'")
|
||||||
//t.Error("Ouput in bytes:", []byte(res))
|
//t.Error("Ouput in bytes:", []byte(res))
|
||||||
|
|
|
@ -122,7 +122,10 @@ func routePanelDashboard(w http.ResponseWriter, r *http.Request, user common.Use
|
||||||
|
|
||||||
// TODO: Localise these
|
// TODO: Localise these
|
||||||
var gridElements = []common.GridElement{
|
var gridElements = []common.GridElement{
|
||||||
common.GridElement{"dash-version", "v" + version.String(), 0, "grid_istat stat_green", "", "", "Gosora is up-to-date :)"},
|
// TODO: Implement a check for new versions of Gosora
|
||||||
|
//common.GridElement{"dash-version", "v" + version.String(), 0, "grid_istat stat_green", "", "", "Gosora is up-to-date :)"},
|
||||||
|
common.GridElement{"dash-version", "v" + version.String(), 0, "grid_istat", "", "", ""},
|
||||||
|
|
||||||
common.GridElement{"dash-cpu", "CPU: " + cpustr, 1, "grid_istat " + cpuColour, "", "", "The global CPU usage of this server"},
|
common.GridElement{"dash-cpu", "CPU: " + cpustr, 1, "grid_istat " + cpuColour, "", "", "The global CPU usage of this server"},
|
||||||
common.GridElement{"dash-ram", "RAM: " + ramstr, 2, "grid_istat " + ramColour, "", "", "The global RAM usage of this server"},
|
common.GridElement{"dash-ram", "RAM: " + ramstr, 2, "grid_istat " + ramColour, "", "", "The global RAM usage of this server"},
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue