75 lines
2.0 KiB
Go
75 lines
2.0 KiB
Go
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
|
|
}
|