// Copyright 2024 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. //go:build go1.23 package html import ( "strings" "testing" ) func TestNode_ChildNodes(t *testing.T) { tests := []struct { in string want string }{ {"", ""}, {"", "a"}, {"a", "a"}, {"", "a b"}, {"ac", "a b c"}, {"ad", "a b d"}, {"cefi", "a f g h"}, } for _, test := range tests { doc, err := Parse(strings.NewReader(test.in)) if err != nil { t.Fatal(err) } // Drill to n := doc.FirstChild.FirstChild.NextSibling var results []string for c := range n.ChildNodes() { results = append(results, c.Data) } if got := strings.Join(results, " "); got != test.want { t.Errorf("ChildNodes = %q, want %q", got, test.want) } } } func TestNode_Descendants(t *testing.T) { tests := []struct { in string want string }{ {"", ""}, {"", "a"}, {"", "a b"}, {"b", "a b"}, {"", "a b"}, {"bd", "a b c d"}, {"be", "a b c d e"}, {"dfgj", "a b c d e f g h i j"}, } for _, test := range tests { doc, err := Parse(strings.NewReader(test.in)) if err != nil { t.Fatal(err) } // Drill to n := doc.FirstChild.FirstChild.NextSibling var results []string for c := range n.Descendants() { results = append(results, c.Data) } if got := strings.Join(results, " "); got != test.want { t.Errorf("Descendants = %q; want: %q", got, test.want) } } } func TestNode_Ancestors(t *testing.T) { for _, size := range []int{0, 1, 2, 10, 100, 10_000} { n := buildChain(size) nParents := 0 for _ = range n.Ancestors() { nParents++ } if nParents != size { t.Errorf("number of Ancestors = %d; want: %d", nParents, size) } } } func buildChain(size int) *Node { child := new(Node) for range size { parent := child child = new(Node) parent.AppendChild(child) } return child }