Add test cases for markdown package

This commit is contained in:
ayn2op 2023-01-25 14:17:16 +05:30
parent 1bd90d5e4e
commit 2f76dcb84e
3 changed files with 28 additions and 17 deletions

View file

@ -51,7 +51,6 @@ func main() {
flag.Parse()
var err error
// If the token is passed via the flag, set it in the keyring.
if token != "" {
go keyring.Set(config.Name, "token", token)
} else {

View file

@ -5,18 +5,18 @@ import (
)
var (
boldRegex = regexp.MustCompile(`(?ms)\*\*(.*?)\*\*`)
italicRegex = regexp.MustCompile(`(?ms)\*(.*?)\*`)
underlineRegex = regexp.MustCompile(`(?ms)__(.*?)__`)
strikeThroughRegex = regexp.MustCompile(`(?ms)~~(.*?)~~`)
inlineCodeBlockRegex = regexp.MustCompile("(?ms)`" + `([^` + "`" + `\n]+)` + "`")
boldRe = regexp.MustCompile(`(?ms)\*\*(.*?)\*\*`)
italicRe = regexp.MustCompile(`(?ms)\*(.*?)\*`)
underlineRe = regexp.MustCompile(`(?ms)__(.*?)__`)
strikethroughRe = regexp.MustCompile(`(?ms)~~(.*?)~~`)
codeblockRe = regexp.MustCompile("(?ms)`" + `([^` + "`" + `\n]+)` + "`")
)
func Parse(input string) string {
input = boldRegex.ReplaceAllString(input, "[::b]$1[::-]")
input = italicRegex.ReplaceAllString(input, "[::i]$1[::-]")
input = underlineRegex.ReplaceAllString(input, "[::u]$1[::-]")
input = strikeThroughRegex.ReplaceAllString(input, "[::s]$1[::-]")
input = inlineCodeBlockRegex.ReplaceAllString(input, "[::r]$1[::-]")
input = boldRe.ReplaceAllString(input, "[::b]$1[::-]")
input = italicRe.ReplaceAllString(input, "[::i]$1[::-]")
input = underlineRe.ReplaceAllString(input, "[::u]$1[::-]")
input = strikethroughRe.ReplaceAllString(input, "[::s]$1[::-]")
input = codeblockRe.ReplaceAllString(input, "[::r]$1[::-]")
return input
}

View file

@ -4,18 +4,30 @@ import (
"testing"
)
const input = `**Lorem** ipsum dolor sit amet, consectetur adipiscing __elit.__ Nullam ante magna, luctus in ~~molestie non, elementum sit~~ amet tortor. Nunc euismod urna ac massa dictum ultrices. Donec tempor __dignissim__ ullamcorper. Mauris ultricies, risus non malesuada consectetur, *purus leo interdum purus*, nec vestibulum lacus neque non nulla.`
func TestParse(t *testing.T) {
const want = `[::b]Lorem[::-] ipsum dolor sit amet, consectetur adipiscing [::u]elit.[::-] Nullam ante magna, luctus in [::s]molestie non, elementum sit[::-] amet tortor. Nunc euismod urna ac massa dictum ultrices. Donec tempor [::u]dignissim[::-] ullamcorper. Mauris ultricies, risus non malesuada consectetur, [::i]purus leo interdum purus[::-], nec vestibulum lacus neque non nulla.`
testcases := []struct{ input, want string }{
// Bold
{"Don't **communicate** by sharing memory, share memory by communicating.", "Don't [::b]communicate[::-] by sharing memory, share memory by communicating."},
// Italic
{"*Concurrency* is not parallelism.", "[::i]Concurrency[::-] is not parallelism."},
// Underline
{"Channels __orchestrate__; mutexes __serialize__.", "Channels [::u]orchestrate[::-]; mutexes [::u]serialize[::-]."},
// Strikethrough
{"~~Cgo~~ is not Go.", "[::s]Cgo[::-] is not Go."},
// Codeblock
{"Don't just check `errors`, handle them `gracefully`.", "Don't just check [::r]errors[::-], handle them [::r]gracefully[::-]."},
}
got := Parse(input)
if got != want {
t.Errorf("got %s; want %s", got, want)
for _, testcase := range testcases {
if got := Parse(testcase.input); got != testcase.want {
t.Errorf("got %s; want %s", got, testcase.want)
}
}
}
func BenchmarkParse(b *testing.B) {
const input = `**Lorem** ipsum dolor sit amet, consectetur adipiscing __elit.__ Nullam ante magna, luctus in ~~molestie non, elementum sit~~ amet tortor. Nunc euismod urna ac massa dictum ultrices. Donec tempor __dignissim__ ullamcorper. Mauris ultricies, risus non malesuada consectetur, *purus leo interdum purus*, nec vestibulum lacus neque non nulla.`
for i := 0; i < b.N; i++ {
_ = Parse(input)
}