internal static partial class Program { static Task TestParserExtractsBoldDateAsync() { var content = """ --- type: journal --- **Date:** 2026-02-22 ## Summary hello """; var entry = JournalParser.ParseJournalContent(content, "2026-02-01"); Assert(entry.Date == "2026-02-22", "Parser should read date from **Date:** marker."); return Task.CompletedTask; } static Task TestParserExtractsPlainDateAsync() { var content = """ Date: 2026-02-23 ## Summary hello """; var entry = JournalParser.ParseJournalContent(content, "2026-02-01"); Assert(entry.Date == "2026-02-23", "Parser should read date from Date: marker."); return Task.CompletedTask; } static Task TestParserFallsBackToFileStemAsync() { var content = """ ## Summary no explicit date """; var entry = JournalParser.ParseJournalContent(content, "2026-02-24"); Assert(entry.Date == "2026-02-24", "Parser should fall back to file stem when no date marker is present."); return Task.CompletedTask; } static Task TestParserCapturesSectionsAsync() { var content = """ Date: 2026-02-25 ## Summary line one line two ### Events / Triggers - Work trigger line ## reflection notes anchor line """; var entry = JournalParser.ParseJournalContent(content, "2026-02-01"); Assert(entry.Sections.ContainsKey("Summary"), "Parser should capture Summary section."); Assert(entry.Sections.ContainsKey("Events / Triggers"), "Parser should capture Events / Triggers section."); Assert(entry.Sections.ContainsKey("Reflection"), "Parser should match canonical section title by substring."); Assert(entry.GetSection("Summary").Contains("line one"), "Summary section content mismatch."); Assert(entry.GetSection("Events / Triggers").Contains("trigger line"), "Events / Triggers section content mismatch."); Assert(entry.GetSection("Reflection").Contains("anchor line"), "Reflection section content mismatch."); return Task.CompletedTask; } static Task TestParserIgnoresNonCanonicalHeadersAsync() { var content = """ ## Summary keep this ## Totally Custom Header should not be captured ### Events / Triggers keep this too """; var entry = JournalParser.ParseJournalContent(content, "2026-02-01"); Assert(entry.GetSection("Summary").Contains("keep this"), "Summary section should be captured."); Assert(!entry.GetSection("Summary").Contains("should not be captured"), "Non-canonical section content should not bleed into previous section."); Assert(entry.GetSection("Events / Triggers").Contains("keep this too"), "Canonical section after custom header should be captured."); return Task.CompletedTask; } static Task TestParserCapturesCheckboxStatesAsync() { var content = """ ## Summary - [x] took medication - [ ] drank water * [X] wrote reflection ## Events / Triggers - [ ] talked to manager """; var entry = JournalParser.ParseJournalContent(content, "2026-02-01"); Assert(entry.GetCheckboxState("Summary", "took medication") is true, "Expected checked state for '- [x]' checkbox."); Assert(entry.GetCheckboxState("Summary", "drank water") is false, "Expected unchecked state for '- [ ]' checkbox."); Assert(entry.GetCheckboxState("Summary", "wrote reflection") is true, "Expected checked state for '* [X]' checkbox."); Assert(entry.GetCheckboxState("Events / Triggers", "talked to manager") is false, "Expected unchecked state in Events / Triggers section."); Assert(entry.GetCheckboxState("Summary", "missing item") is null, "Missing checkbox text should return null."); return Task.CompletedTask; } static Task TestParserCapturesMultilineFragmentsAsync() { var content = """ Date: 2026-02-26 ## Summary text !TRIGGER @2026-02-26T10:15:00Z #stress #body first line second line !NOTE #daily short note """; var entry = JournalParser.ParseJournalContent(content, "2026-02-01"); Assert(entry.Fragments.Count == 2, "Expected two parsed fragments."); Assert(entry.Fragments[0].Type == "!TRIGGER", "First fragment type mismatch."); Assert(entry.Fragments[0].Description == "first line\nsecond line", "First fragment multiline description mismatch."); Assert(entry.Fragments[0].Tags.Count == 2, "First fragment tag count mismatch."); Assert(entry.Fragments[0].Tags[0] == "stress" && entry.Fragments[0].Tags[1] == "body", "First fragment tags mismatch."); Assert(entry.Fragments[1].Type == "!NOTE", "Second fragment type mismatch."); Assert(entry.Fragments[1].Description == "short note", "Second fragment description mismatch."); Assert(entry.Fragments[1].Tags.Count == 1 && entry.Fragments[1].Tags[0] == "daily", "Second fragment tags mismatch."); return Task.CompletedTask; } static Task TestParserFragmentBoundaryBehaviorAsync() { var content = """ !TRIGGER #a line one !NOTE this starts another fragment header line two """; var fragments = JournalParser.ParseFragments(content); Assert(fragments.Count == 1, "Expected one parsed fragment because second boundary line is not a valid fragment header."); Assert(fragments[0].Description == "line one", "First fragment boundary capture mismatch."); return Task.CompletedTask; } }