55 lines
1.6 KiB
Go
55 lines
1.6 KiB
Go
package discovery
|
|||
|
|
|
||
|
|
import "testing"
|
||
|
|
|
||
|
|
func TestParseFrontmatter(t *testing.T) {
|
||
|
|
cases := []struct {
|
||
|
|
name string
|
||
|
|
in string
|
||
|
|
want Frontmatter
|
||
|
|
warnLen int
|
||
|
|
}{
|
||
|
|
{
|
||
|
|
name: "complete block",
|
||
|
|
in: "---\nname: Test Skill\ndescription: does things\ntags: a, b\nrequires: c,d\n---\nbody\n",
|
||
|
|
want: Frontmatter{Name: "Test Skill", Description: "does things", Tags: []string{"a", "b"}, Requires: []string{"c", "d"}},
|
||
|
|
},
|
||
|
|
{
|
||
|
|
name: "no frontmatter",
|
||
|
|
in: "# Just a file\nbody\n",
|
||
|
|
want: Frontmatter{},
|
||
|
|
},
|
||
|
|
{
|
||
|
|
name: "unclosed block",
|
||
|
|
in: "---\nname: Broken\ndescription: never closed\n",
|
||
|
|
want: Frontmatter{Name: "Broken", Description: "never closed"},
|
||
|
|
warnLen: 1,
|
||
|
|
},
|
||
|
|
{
|
||
|
|
name: "line missing colon",
|
||
|
|
in: "---\nname: X\nbroken line without colon\n---\n",
|
||
|
|
want: Frontmatter{Name: "X"},
|
||
|
|
warnLen: 1,
|
||
|
|
},
|
||
|
|
{
|
||
|
|
name: "crlf line endings",
|
||
|
|
in: "---\r\nname: Win\r\ndescription: windows author\r\n---\r\n",
|
||
|
|
want: Frontmatter{Name: "Win", Description: "windows author"},
|
||
|
|
},
|
||
|
|
}
|
||
|
|
for _, tc := range cases {
|
||
|
|
t.Run(tc.name, func(t *testing.T) {
|
||
|
|
fm, warnings := ParseFrontmatter([]byte(tc.in))
|
||
|
|
if fm.Name != tc.want.Name || fm.Description != tc.want.Description {
|
||
|
|
t.Errorf("got %+v, want %+v", fm, tc.want)
|
||
|
|
}
|
||
|
|
if len(fm.Tags) != len(tc.want.Tags) || len(fm.Requires) != len(tc.want.Requires) {
|
||
|
|
t.Errorf("tags/requires mismatch: got %+v want %+v", fm, tc.want)
|
||
|
|
}
|
||
|
|
if len(warnings) != tc.warnLen {
|
||
|
|
t.Errorf("warnings = %v (len %d), want len %d", warnings, len(warnings), tc.warnLen)
|
||
|
|
}
|
||
|
|
})
|
||
|
|
}
|
||
|
|
}
|