GoBlog/markdown_test.go

133 lines
3.2 KiB
Go
Raw Permalink Normal View History

2021-06-14 14:29:22 +00:00
package main
import (
2021-06-14 20:41:58 +00:00
"os"
2021-06-14 14:29:22 +00:00
"testing"
"github.com/stretchr/testify/assert"
2021-09-01 06:29:21 +00:00
"github.com/stretchr/testify/require"
2022-02-11 23:48:59 +00:00
"go.goblog.app/app/pkgs/bufferpool"
2021-06-14 14:29:22 +00:00
)
2022-02-11 23:48:59 +00:00
func (a *goBlog) renderMarkdown(source string, absoluteLinks bool) (rendered []byte, err error) {
buffer := bufferpool.Get()
err = a.renderMarkdownToWriter(buffer, source, absoluteLinks)
rendered = buffer.Bytes()
bufferpool.Put(buffer)
return
}
2021-06-14 14:29:22 +00:00
func Test_markdown(t *testing.T) {
t.Run("Basic Markdown tests", func(t *testing.T) {
app := &goBlog{
cfg: &config{
Server: &configServer{
PublicAddress: "https://example.com",
},
},
}
app.initMarkdown()
// Relative / absolute links
rendered, err := app.renderMarkdown("[Relative](/relative)", false)
2021-09-01 06:29:21 +00:00
require.NoError(t, err)
assert.Contains(t, string(rendered), `href="/relative"`)
2021-06-14 14:29:22 +00:00
rendered, err = app.renderMarkdown("[Relative](/relative)", true)
2021-09-01 06:29:21 +00:00
require.NoError(t, err)
assert.Contains(t, string(rendered), `href="https://example.com/relative"`)
assert.NotContains(t, string(rendered), `target="_blank"`)
// Images
rendered, err = app.renderMarkdown("![](/relative)", false)
require.NoError(t, err)
assert.Contains(t, string(rendered), `src="/relative"`)
assert.Contains(t, string(rendered), `href="/relative"`)
rendered, err = app.renderMarkdown("![](/relative)", true)
require.NoError(t, err)
assert.Contains(t, string(rendered), `src="https://example.com/relative"`)
assert.Contains(t, string(rendered), `href="https://example.com/relative"`)
// Image title
rendered, err = app.renderMarkdown(`![](/test "Test-Title")`, false)
require.NoError(t, err)
assert.Contains(t, string(rendered), `title="Test-Title"`)
2021-06-14 14:29:22 +00:00
// External links
rendered, err = app.renderMarkdown("[External](https://example.com)", true)
2021-09-01 06:29:21 +00:00
require.NoError(t, err)
assert.Contains(t, string(rendered), `target="_blank"`)
2021-06-14 14:29:22 +00:00
// Link title
rendered, err = app.renderMarkdown(`[With title](https://example.com "Test-Title")`, true)
2021-09-01 06:29:21 +00:00
require.NoError(t, err)
assert.Contains(t, string(rendered), `title="Test-Title"`)
2021-06-14 14:29:22 +00:00
// Text
renderedText, err := app.renderText("**This** *is* [text](/)")
2021-09-01 06:29:21 +00:00
assert.Equal(t, "This is text", renderedText)
assert.NoError(t, err)
2021-08-04 21:26:38 +00:00
// Title
assert.Equal(t, "3. **Test**", app.renderMdTitle("3. **Test**"))
assert.Equal(t, "Tests", app.renderMdTitle("Test's"))
assert.Equal(t, "😂", app.renderMdTitle(":joy:"))
2021-08-05 06:09:34 +00:00
assert.Equal(t, "<b></b>", app.renderMdTitle("<b></b>"))
2021-06-14 14:29:22 +00:00
})
}
2021-06-14 20:41:58 +00:00
func Benchmark_markdown(b *testing.B) {
markdownExample, err := os.ReadFile("testdata/markdownexample.md")
if err != nil {
b.Errorf("Failed to read markdown example: %v", err)
}
mdExp := string(markdownExample)
app := &goBlog{
cfg: &config{
Server: &configServer{
PublicAddress: "https://example.com",
},
},
}
app.initMarkdown()
b.Run("Markdown Rendering", func(b *testing.B) {
2021-06-14 20:41:58 +00:00
for i := 0; i < b.N; i++ {
_, err := app.renderMarkdown(mdExp, true)
if err != nil {
b.Errorf("Error: %v", err)
}
}
})
b.Run("Title Rendering", func(b *testing.B) {
for i := 0; i < b.N; i++ {
app.renderMdTitle("**Test**")
}
})
b.Run("Text Rendering", func(b *testing.B) {
for i := 0; i < b.N; i++ {
app.renderText("**Test**")
}
})
2021-06-14 20:41:58 +00:00
}