/
opt
/
go
/
pkg
/
mod
/
golang.org
/
x
/
net@v0.33.0
/
html
/
up file
home
// 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", "a"}, {"<a></a><!--b-->", "a b"}, {"a<b></b>c", "a b c"}, {"a<b><!--c--></b>d", "a b d"}, {"<a><b>c<!--d-->e</b></a>f<!--g--><h>i</h>", "a f g h"}, } for _, test := range tests { doc, err := Parse(strings.NewReader(test.in)) if err != nil { t.Fatal(err) } // Drill to <html><head></head><body> 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>", "a"}, {"<a><b></b></a>", "a b"}, {"<a>b</a>", "a b"}, {"<a><!--b--></a>", "a b"}, {"<a>b<c></c>d</a>", "a b c d"}, {"<a>b<c><!--d--></c>e</a>", "a b c d e"}, {"<a><b><c>d<!--e-->f</c></b>g<!--h--><i>j</i></a>", "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 <html><head></head><body> 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 }