package officekit import "testing" func TestMarkdownToParagraphsStructure(t *testing.T) { src := "# Title\n\nAn intro paragraph.\n\n## Section\n\n- First item\n- Second item\n" paras := MarkdownToParagraphs(src) want := []Paragraph{ {Text: "Title", Style: StyleHeading1}, {Text: "An intro paragraph.", Style: StyleNormal}, {Text: "Section", Style: StyleHeading2}, {Text: "First item", Style: StyleBullet}, {Text: "Second item", Style: StyleBullet}, } if len(paras) != len(want) { t.Fatalf("got %d paragraphs, want %d: %+v", len(paras), len(want), paras) } for i := range want { if paras[i].Text != want[i].Text || paras[i].Style != want[i].Style { t.Errorf("paragraph %d: got %+v, want %+v", i, paras[i], want[i]) } } } func TestMarkdownToParagraphsFlattensInlineFormatting(t *testing.T) { paras := MarkdownToParagraphs("This has **bold** and *italic* and `code` text.") if len(paras) != 1 { t.Fatalf("got %d paragraphs, want 1: %+v", len(paras), paras) } want := "This has bold and italic and code text." if paras[0].Text != want { t.Errorf("got %q, want %q", paras[0].Text, want) } } func TestMarkdownToParagraphsFeedsBuildDocx(t *testing.T) { paras := MarkdownToParagraphs("# Report\n\nBody text here.\n") data, err := BuildDocx(paras) if err != nil { t.Fatalf("BuildDocx(MarkdownToParagraphs(...)): %v", err) } text, err := ReadDocxText(data) if err != nil { t.Fatalf("ReadDocxText: %v", err) } for _, want := range []string{"Report", "Body text here."} { if !containsLine(text, want) { t.Errorf("expected read-back text to contain line %q, got:\n%s", want, text) } } } func containsLine(text, line string) bool { for _, l := range splitLines(text) { if l == line { return true } } return false } func splitLines(s string) []string { var lines []string start := 0 for i := 0; i < len(s); i++ { if s[i] == '\n' { lines = append(lines, s[start:i]) start = i + 1 } } lines = append(lines, s[start:]) return lines }