package goquery import ( "strings" "testing" "golang.org/x/net/html" ) func TestClassOperationsNonElementNodes(t *testing.T) { for _, operation := range []struct { name string apply func(*Selection) *Selection }{ {"AddClass", func(s *Selection) *Selection { return s.AddClass("marked") }}, {"ToggleClass", func(s *Selection) *Selection { return s.ToggleClass("marked") }}, } { for _, selection := range []struct { name string selectNodes func(*Document) *Selection containsElement bool }{ {"document", func(d *Document) *Selection { return d.Selection }, false}, {"doctype", func(d *Document) *Selection { return d.Contents().FilterFunction(func(_ int, s *Selection) bool { return s.Get(0).Type == html.DoctypeNode }) }, false}, {"text", func(d *Document) *Selection { return d.Find("div").Contents().Eq(0) }, false}, {"comment", func(d *Document) *Selection { return d.Find("div").Contents().Eq(1) }, false}, {"mixed content", func(d *Document) *Selection { return d.Find("div").Contents() }, true}, {"element", func(d *Document) *Selection { return d.Find("b") }, true}, {"empty", func(d *Document) *Selection { return d.Find("missing") }, false}, } { t.Run(operation.name+"/"+selection.name, func(t *testing.T) { defer func() { if value := recover(); value != nil { t.Fatalf("class operation panicked: %v", value) } }() doc, err := NewDocumentFromReader(strings.NewReader(`