mirror of https://github.com/jlelse/GoBlog
116 lines
2.8 KiB
Go
116 lines
2.8 KiB
Go
package main
|
||
|
||
import (
|
||
"os"
|
||
"testing"
|
||
|
||
"github.com/stretchr/testify/assert"
|
||
"github.com/stretchr/testify/require"
|
||
)
|
||
|
||
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)
|
||
require.NoError(t, err)
|
||
|
||
assert.Contains(t, string(rendered), `href="/relative"`)
|
||
|
||
rendered, err = app.renderMarkdown("[Relative](/relative)", true)
|
||
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"`)
|
||
|
||
// External links
|
||
|
||
rendered, err = app.renderMarkdown("[External](https://example.com)", true)
|
||
require.NoError(t, err)
|
||
|
||
assert.Contains(t, string(rendered), `target="_blank"`)
|
||
|
||
// Link title
|
||
|
||
rendered, err = app.renderMarkdown(`[With title](https://example.com "Test-Title")`, true)
|
||
require.NoError(t, err)
|
||
|
||
assert.Contains(t, string(rendered), `title="Test-Title"`)
|
||
|
||
// Text
|
||
|
||
renderedText := app.renderText("**This** *is* [text](/)")
|
||
assert.Equal(t, "This is text", renderedText)
|
||
|
||
// Title
|
||
|
||
assert.Equal(t, "3. **Test**", app.renderMdTitle("3. **Test**"))
|
||
assert.Equal(t, "Test’s", app.renderMdTitle("Test's"))
|
||
assert.Equal(t, "😂", app.renderMdTitle(":joy:"))
|
||
assert.Equal(t, "<b></b>", app.renderMdTitle("<b></b>"))
|
||
|
||
// Template func
|
||
|
||
renderedText = string(app.safeRenderMarkdownAsHTML("[Relative](/relative)"))
|
||
assert.Contains(t, renderedText, `href="/relative"`)
|
||
})
|
||
}
|
||
|
||
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("Benchmark Markdown Rendering", func(b *testing.B) {
|
||
for i := 0; i < b.N; i++ {
|
||
_, err := app.renderMarkdown(mdExp, true)
|
||
if err != nil {
|
||
b.Errorf("Error: %v", err)
|
||
}
|
||
}
|
||
})
|
||
}
|