func TestMarkupReconciliation(t *testing.T) { div := elems.Div( elems.Span(elems.Text("30")), elems.Text("20"), ) divCl := elems.Div( elems.Span(elems.Text("30")), elems.Text("20"), elems.Text("400"), ) //lets remove the span with its text child and the parents text child trees.ElementsWithTag(trees.ElementsWithTag(divCl, "span")[0], "text")[0].Remove() trees.ElementsWithTag(divCl, "text")[0].Remove() divCl.CleanRemoved() printer := trees.NewElementWriter(trees.SimpleAttrWriter, trees.SimpleStyleWriter, trees.SimpleTextWriter) printer.AllowRemoved() nrender := printer.Print(div) crender := printer.Print(divCl) if !strings.Contains(nrender, ">20") && !strings.Contains(nrender, ">30") { tests.FatalFailed(t, "Inaccurate rendering occured, has no '>20' or '>30' set", nrender) } if strings.Contains(crender, ">20") && strings.Contains(crender, ">30") { tests.FatalFailed(t, "Inaccurate rendering occured, has '>20' or '>30' and set", crender) } //reconcile with the original div divCl.Reconcile(div) rcrender := printer.Print(divCl) if strings.Contains(rcrender, ">20") && strings.Contains(rcrender, ">30") && !strings.Contains(rcrender, ">400") { tests.FatalFailed(t, "Inaccurate rendering occured, has '>20' or '>30' and set", rcrender) } tests.LogPassed(t, "Successfully reconciled dom markup!") }
func (i item) Render(m ...string) trees.Markup { return elems.Span(elems.Text(fmt.Sprintf("+ %s", i))) }