diff --git a/printer/doctype_test.go b/printer/doctype_test.go new file mode 100644 index 0000000..1a339ae --- /dev/null +++ b/printer/doctype_test.go @@ -0,0 +1,41 @@ +package printer + +import ( + "bytes" + "reflect" + "strings" + "testing" + + "golang.org/x/net/html" +) + +func documentTypeAttributes(t *testing.T, text string) []html.Attribute { + t.Helper() + doc, err := html.Parse(strings.NewReader(text)) + if err != nil { + t.Fatal(err) + } + for n := doc.FirstChild; n != nil; n = n.NextSibling { + if n.Type == html.DoctypeNode { + return n.Attr + } + } + t.Fatal("doctype missing") + return nil +} + +func TestPrettyHTMLPreservesDoctypeIdentifiers(t *testing.T) { + for _, source := range []string{ + `
Body
`, + `Body
`, + `Body
`, + } { + var output bytes.Buffer + if _, err := PrettyHTML(&output, strings.NewReader(source), false); err != nil { + t.Fatal(err) + } + if !reflect.DeepEqual(documentTypeAttributes(t, source), documentTypeAttributes(t, output.String())) { + t.Fatalf("doctype identifiers lost: %s", output.String()) + } + } +} diff --git a/printer/fragment_detection_test.go b/printer/fragment_detection_test.go new file mode 100644 index 0000000..4c8131d --- /dev/null +++ b/printer/fragment_detection_test.go @@ -0,0 +1,25 @@ +package printer + +import ( + "bytes" + "strings" + "testing" +) + +func TestPrettyHTMLIgnoresTagNamesInCommentsAndRawText(t *testing.T) { + for _, source := range []string{ + `Fragment
`, + ``, + `