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