package markdown_test import ( "testing" "git.urbach.dev/go/assert" "git.urbach.dev/go/markdown" ) func TestEmpty(t *testing.T) { assert.Equal(t, markdown.Render(""), "") } func TestParagraph(t *testing.T) { assert.Equal(t, markdown.Render("Text"), "
Text
") assert.Equal(t, markdown.Render("Text\n"), "Text
") assert.Equal(t, markdown.Render("Text\n\n"), "Text
") assert.Equal(t, markdown.Render("Text\n\n\n"), "Text
") assert.Equal(t, markdown.Render("Line 1\nLine 2"), "Line 1 Line 2
") assert.Equal(t, markdown.Render("Line 1\n\nLine 2"), "Line 1
Line 2
") } func TestHeader(t *testing.T) { assert.Equal(t, markdown.Render("# Header"), "italic
") assert.Equal(t, markdown.Render("_italic_"), "italic
") } func TestBold(t *testing.T) { assert.Equal(t, markdown.Render("**bold**"), "bold
") assert.Equal(t, markdown.Render("__bold__"), "bold
") } func TestStrike(t *testing.T) { assert.Equal(t, markdown.Render("~normal text~"), "~normal text~
") assert.Equal(t, markdown.Render("~~deleted text~~"), "deleted text
[text](https://example.com/
`) assert.Equal(t, markdown.Render("[text]https://example.com/)"), `[text]https://example.com/)
`) assert.Equal(t, markdown.Render("[text(https://example.com/)"), `[text(https://example.com/)
`) assert.Equal(t, markdown.Render("text](https://example.com/)"), `text](https://example.com/)
`) assert.Equal(t, markdown.Render("[text](https://example.com/_test_)"), ``) assert.Equal(t, markdown.Render("Prefix [text](https://example.com/) suffix."), `Prefix text suffix.
`) } func TestImage(t *testing.T) { assert.Equal(t, markdown.Render("!"), `!
`) assert.Equal(t, markdown.Render("!["), `![
`) assert.Equal(t, markdown.Render("![]"), `![]
`) assert.Equal(t, markdown.Render(", ` assert.Equal(t, markdown.Render("![]()"), `-
") assert.Equal(t, markdown.Render("- "), "1
") assert.Equal(t, markdown.Render("1."), "Head |
---|
Body |
1 | 2 |
---|---|
1 | 2 |
Text
")
assert.Equal(t, markdown.Render("```go\ntype A struct {\n\t\n}\n```"), "type A struct {\n\t\n}
")
assert.Equal(t, markdown.Render("`monospace`"), "monospace
`unfinished
") assert.Equal(t, markdown.Render("Inline `monospace` text."), "Inline monospace
text.
") assert.Equal(t, markdown.Render("> Line 1\n> Line 2"), "Line
") assert.Equal(t, markdown.Render("> Line 1\n\nLine 2"), "Line 1 Line 2
Line 1
Line 2
") assert.Equal(t, markdown.Render("> Line 1\n>>Line 2"), "") assert.Equal(t, markdown.Render("Line 1\n> Line 2\n> Line 3\nLine 4"), "Line 1
Line 2
Line 1
Line 2 Line 3
Line 4
") } func TestSeparator(t *testing.T) { assert.Equal(t, markdown.Render("---"), "Line 1
Line 2
") } func TestCombined(t *testing.T) { assert.Equal(t, markdown.Render("# Header\n\nLine 1."), `Line 1.
`) assert.Equal(t, markdown.Render("# Header\nLine 1.\nLine 2.\nLine 3."), `Line 1. Line 2. Line 3.
`) assert.Equal(t, markdown.Render("# Header 1\nLine 1.\n# Header 2\nLine 2."), `Line 1.
Line 2.
`) assert.Equal(t, markdown.Render("# [Header Link](https://example.com/)"), `Text.
`) assert.Equal(t, markdown.Render("- Entry\n# Header"), ``) assert.Equal(t, markdown.Render("> **bold** and *italic* text."), `
- Entry
Header
`) assert.Equal(t, markdown.Render("> __bold__ and _italic_ text."), `bold and italic text.
`) } func TestSecurity(t *testing.T) { assert.Equal(t, markdown.Render(`[text](javascript:alert("xss"))`), ``) assert.Equal(t, markdown.Render(`[text](javAscRipt:alert("xss"))`), ``) assert.Equal(t, markdown.Render(`[text]( javascript:alert("xss"))`), ``) assert.Equal(t, markdown.Render(`[text]('javAscRipt:alert("xss")')`), ``) assert.Equal(t, markdown.Render(`[text](">)`), ``) assert.Equal(t, markdown.Render(`[]()`), ``) }bold and italic text.