Browse Source

Add test cases for markdown package

ayn2op 3 years ago
parent
commit
2f76dcb84e
3 changed files with 28 additions and 17 deletions
  1. 0 1
      main.go
  2. 10 10
      pkg/markdown/markdown.go
  3. 18 6
      pkg/markdown/markdown_test.go

+ 0 - 1
main.go

@@ -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 {

+ 10 - 10
pkg/markdown/markdown.go

@@ -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
 }

+ 18 - 6
pkg/markdown/markdown_test.go

@@ -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)
 	}