91 lines
2 KiB
Go
91 lines
2 KiB
Go
package parser
|
|
|
|
import (
|
|
"testing"
|
|
)
|
|
|
|
func TestSplitFrontmatter(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
input string
|
|
wantFM string
|
|
wantBody string
|
|
}{
|
|
{
|
|
name: "no frontmatter",
|
|
input: "# Just markdown\n",
|
|
wantFM: "",
|
|
wantBody: "# Just markdown\n",
|
|
},
|
|
{
|
|
name: "with frontmatter",
|
|
input: "---\ntitle: Hello\n---\n# Body\n",
|
|
wantFM: "title: Hello",
|
|
wantBody: "# Body\n",
|
|
},
|
|
{
|
|
name: "frontmatter with no trailing body",
|
|
input: "---\ntitle: Hello\n---\n",
|
|
wantFM: "title: Hello",
|
|
wantBody: "",
|
|
},
|
|
{
|
|
name: "unterminated frontmatter treated as body",
|
|
input: "---\ntitle: Hello\n# Body\n",
|
|
wantFM: "",
|
|
wantBody: "---\ntitle: Hello\n# Body\n",
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
fm, body := splitFrontmatter([]byte(tt.input))
|
|
if string(fm) != tt.wantFM {
|
|
t.Errorf("frontmatter = %q, want %q", fm, tt.wantFM)
|
|
}
|
|
if string(body) != tt.wantBody {
|
|
t.Errorf("body = %q, want %q", body, tt.wantBody)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestParseFrontmatter(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
input string
|
|
want frontmatter
|
|
wantErr bool
|
|
}{
|
|
{
|
|
name: "all fields",
|
|
input: "---\ntitle: Intro\nclass: center\nnotes: speaker notes\nskip: true\nincremental: true\n---\nbody\n",
|
|
want: frontmatter{Title: "Intro", Class: "center", Notes: "speaker notes", Skip: true, Incremental: true},
|
|
},
|
|
{
|
|
name: "no frontmatter defaults to zero values",
|
|
input: "just body\n",
|
|
want: frontmatter{},
|
|
},
|
|
{
|
|
name: "invalid yaml",
|
|
input: "---\ntitle: [unterminated\n---\nbody\n",
|
|
wantErr: true,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
got, _, err := parseFrontmatter([]byte(tt.input))
|
|
if (err != nil) != tt.wantErr {
|
|
t.Fatalf("err = %v, wantErr %v", err, tt.wantErr)
|
|
}
|
|
if err != nil {
|
|
return
|
|
}
|
|
if got != tt.want {
|
|
t.Errorf("frontmatter = %+v, want %+v", got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|