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) } }) } }