104 lines
2.3 KiB
Go
104 lines
2.3 KiB
Go
package mdconv_test
|
|
|
|
import (
|
|
"bytes"
|
|
"testing"
|
|
"text/template"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"tildegit.org/tjp/sliderule/gemini/gemtext"
|
|
"tildegit.org/tjp/sliderule/gemini/gemtext/mdconv"
|
|
)
|
|
|
|
var gmiDoc = `
|
|
# top-level header line
|
|
|
|
## subtitle
|
|
|
|
This is some non-blank regular text.
|
|
|
|
* an
|
|
* unordered
|
|
* list
|
|
|
|
=> gemini://google.com/ as if
|
|
=> https://google.com/
|
|
|
|
> this is a quote
|
|
> -tjp
|
|
|
|
`[1:] + "```pre-formatted code\ndoc := gemtext.Parse(req.Body)\n```ignored closing alt-text\n"
|
|
|
|
func TestConvert(t *testing.T) {
|
|
mdDoc := `
|
|
# top-level header line
|
|
|
|
## subtitle
|
|
|
|
This is some non-blank regular text.
|
|
|
|
* an
|
|
* unordered
|
|
* list
|
|
|
|
=> [as if](gemini://google.com/)
|
|
|
|
=> [https://google.com/](https://google.com/)
|
|
|
|
> this is a quote
|
|
|
|
> -tjp
|
|
|
|
` + "```\ndoc := gemtext.Parse(req.Body)\n```\n"
|
|
|
|
doc, err := gemtext.Parse(bytes.NewBufferString(gmiDoc))
|
|
require.Nil(t, err)
|
|
|
|
buf := &bytes.Buffer{}
|
|
require.Nil(t, mdconv.Convert(buf, doc, nil))
|
|
|
|
assert.Equal(t, mdDoc, buf.String())
|
|
}
|
|
|
|
func TestConvertWithOverrides(t *testing.T) {
|
|
mdDoc := `
|
|
# h1: top-level header line
|
|
text:
|
|
## h2: subtitle
|
|
text:
|
|
text: This is some non-blank regular text.
|
|
text:
|
|
* li: an
|
|
* li: unordered
|
|
* li: list
|
|
text:
|
|
=> link: [as if](gemini://google.com/)
|
|
=> link: [https://google.com/](https://google.com/)
|
|
text:
|
|
> quote: this is a quote
|
|
> quote: -tjp
|
|
text:
|
|
`[1:] + "```\npf: doc := gemtext.Parse(req.Body)\n```\n"
|
|
|
|
overrides := template.Must(template.New("overrides").Parse((`
|
|
{{define "textline"}}text: {{.}}{{end}}
|
|
{{define "linkline"}}=> link: [{{if eq .Label ""}}{{.URL}}{{else}}{{.Label}}{{end}}]({{.URL}})` + "\n" + `{{end}}
|
|
{{define "preformattedtextlines"}}` + "```\n" + `{{range . }}pf: {{.}}{{end}}` + "```\n" + `{{end}}
|
|
{{define "heading1line"}}# h1: {{.Body}}` + "\n" + `{{end}}
|
|
{{define "heading2line"}}## h2: {{.Body}}` + "\n" + `{{end}}
|
|
{{define "heading3line"}}### h3: {{.Body}}` + "\n" + `{{end}}
|
|
{{define "listitemlines"}}{{range .}}* li: {{.Body}}` + "\n" + `{{end}}{{end}}
|
|
{{define "quoteline"}}> quote: {{.Body}}` + "\n" + `{{end}}
|
|
`)[1:]))
|
|
|
|
doc, err := gemtext.Parse(bytes.NewBufferString(gmiDoc))
|
|
require.Nil(t, err)
|
|
|
|
buf := &bytes.Buffer{}
|
|
require.Nil(t, mdconv.Convert(buf, doc, overrides))
|
|
|
|
assert.Equal(t, mdDoc, buf.String())
|
|
}
|