package docx import ( "encoding/xml" "strings" "testing" ) const xml2merge = ` 某某某大学 20 1 6 -20 1 7 学年第 1 学期期 考试 A ` const ( allmergedtext = `某某某大学2016-2017学年第1学期期末考试A卷` propmergedtext = `某某某大学201|6|-201|7|学年第|1|学期期|末|考试||A||卷|` namedpropmergdtext = `某某某大学2016-2017学年第|1|学期期|末|考试|A|卷|` ) func TestMergeText(t *testing.T) { p := Paragraph{} err := xml.Unmarshal(StringToBytes(xml2merge), &p) if err != nil { t.Fatal(err) } np := p.MergeText(MergeAllRuns) if len(np.Children) != 1 { t.Fatal("expected only one run but has", len(np.Children)) } if len(np.Children[0].(*Run).Children) != 1 { t.Fatal("expected only one run.child but has", len(np.Children[0].(*Run).Children)) } if np.Children[0].(*Run).Children[0].(*Text).Text != allmergedtext { t.Fatal("expected merged text [", allmergedtext, "] but has [", np.Children[0].(*Run).Children[0].(*Text).Text, "]") } np = p.MergeText(MergeSamePropRuns) if len(np.Children) != 13 { t.Fatal("expected 13 runs but has", len(np.Children)) } sb := strings.Builder{} for _, r := range np.Children { if len(r.(*Run).Children) > 1 { t.Fatal("expected 0/1 run.child but has", len(r.(*Run).Children)) } if len(r.(*Run).Children) == 1 { sb.WriteString(r.(*Run).Children[0].(*Text).Text) } sb.WriteString("|") } if sb.String() != propmergedtext { t.Fatal("expected merged text [", propmergedtext, "] but has [", sb.String(), "]") } np = p.MergeText(MergeSamePropRunsOf("Bold", "Size", "Underline")) if len(np.Children) != 7 { t.Fatal("expected 7 runs but has", len(np.Children)) } sb.Reset() for _, r := range np.Children { if len(r.(*Run).Children) > 1 { t.Fatal("expected 0/1 run.child but has", len(r.(*Run).Children)) } if len(r.(*Run).Children) == 1 { sb.WriteString(r.(*Run).Children[0].(*Text).Text) } sb.WriteString("|") } if sb.String() != namedpropmergdtext { t.Fatal("expected merged text [", namedpropmergdtext, "] but has [", sb.String(), "]") } }