From 2f76dcb84e5e3a4f90edf78fd5197844e9f33e93 Mon Sep 17 00:00:00 2001 From: ayn2op Date: Wed, 25 Jan 2023 14:17:16 +0530 Subject: [PATCH] Add test cases for markdown package --- main.go | 1 - pkg/markdown/markdown.go | 20 ++++++++++---------- pkg/markdown/markdown_test.go | 24 ++++++++++++++++++------ 3 files changed, 28 insertions(+), 17 deletions(-) diff --git a/main.go b/main.go index 3b5cea6..7f9f01d 100644 --- a/main.go +++ b/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 { diff --git a/pkg/markdown/markdown.go b/pkg/markdown/markdown.go index 8f0cd04..a16a1a4 100644 --- a/pkg/markdown/markdown.go +++ b/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 } diff --git a/pkg/markdown/markdown_test.go b/pkg/markdown/markdown_test.go index 171f067..b1debba 100644 --- a/pkg/markdown/markdown_test.go +++ b/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) }