Files
goquery/traversal_test.go
2012-09-06 14:40:15 -04:00

549 lines
14 KiB
Go

package goquery
import (
"testing"
)
func TestFind(t *testing.T) {
sel := Doc().Root.Find("div.row-fluid")
AssertLength(t, sel.Nodes, 9)
}
func TestFindRollback(t *testing.T) {
sel := Doc().Root.Find("div.row-fluid")
sel2 := sel.Find("a").End()
AssertEqual(t, sel, sel2)
}
func TestFindNotSelf(t *testing.T) {
sel := Doc().Root.Find("h1").Find("h1")
AssertLength(t, sel.Nodes, 0)
}
func TestFindInvalidSelector(t *testing.T) {
defer AssertPanic(t)
Doc().Root.Find(":+ ^")
}
func TestChainedFind(t *testing.T) {
sel := Doc().Root.Find("div.hero-unit").Find(".row-fluid")
AssertLength(t, sel.Nodes, 4)
}
func TestChildren(t *testing.T) {
sel := Doc().Root.Find(".pvk-content").Children()
AssertLength(t, sel.Nodes, 5)
}
func TestChildrenRollback(t *testing.T) {
sel := Doc().Root.Find(".pvk-content")
sel2 := sel.Children().End()
AssertEqual(t, sel, sel2)
}
func TestContents(t *testing.T) {
sel := Doc().Root.Find(".pvk-content").Contents()
AssertLength(t, sel.Nodes, 13)
}
func TestContentsRollback(t *testing.T) {
sel := Doc().Root.Find(".pvk-content")
sel2 := sel.Contents().End()
AssertEqual(t, sel, sel2)
}
func TestChildrenFiltered(t *testing.T) {
sel := Doc().Root.Find(".pvk-content").ChildrenFiltered(".hero-unit")
AssertLength(t, sel.Nodes, 1)
}
func TestChildrenFilteredRollback(t *testing.T) {
sel := Doc().Root.Find(".pvk-content")
sel2 := sel.ChildrenFiltered(".hero-unit").End()
AssertEqual(t, sel, sel2)
}
func TestContentsFiltered(t *testing.T) {
sel := Doc().Root.Find(".pvk-content").ContentsFiltered(".hero-unit")
AssertLength(t, sel.Nodes, 1)
}
func TestContentsFilteredRollback(t *testing.T) {
sel := Doc().Root.Find(".pvk-content")
sel2 := sel.ContentsFiltered(".hero-unit").End()
AssertEqual(t, sel, sel2)
}
func TestChildrenFilteredNone(t *testing.T) {
sel := Doc().Root.Find(".pvk-content").ChildrenFiltered("a.btn")
AssertLength(t, sel.Nodes, 0)
}
func TestParent(t *testing.T) {
sel := Doc().Root.Find(".container-fluid").Parent()
AssertLength(t, sel.Nodes, 3)
}
func TestParentRollback(t *testing.T) {
sel := Doc().Root.Find(".container-fluid")
sel2 := sel.Parent().End()
AssertEqual(t, sel, sel2)
}
func TestParentBody(t *testing.T) {
sel := Doc().Root.Find("body").Parent()
AssertLength(t, sel.Nodes, 1)
}
func TestParentFiltered(t *testing.T) {
sel := Doc().Root.Find(".container-fluid").ParentFiltered(".hero-unit")
AssertLength(t, sel.Nodes, 1)
AssertClass(t, sel, "hero-unit")
}
func TestParentFilteredRollback(t *testing.T) {
sel := Doc().Root.Find(".container-fluid")
sel2 := sel.ParentFiltered(".hero-unit").End()
AssertEqual(t, sel, sel2)
}
func TestParents(t *testing.T) {
sel := Doc().Root.Find(".container-fluid").Parents()
AssertLength(t, sel.Nodes, 8)
}
func TestParentsOrder(t *testing.T) {
sel := Doc().Root.Find("#cf2").Parents()
AssertLength(t, sel.Nodes, 6)
if !sel.Eq(0).HasClass("hero-unit") {
t.Errorf("Element at 0 should be hero-unit, found %+v.", sel.Get(0))
}
if !sel.Eq(1).HasClass("pvk-content") {
t.Errorf("Element at 1 should be pvk-content, found %+v.", sel.Get(1))
}
if !sel.Eq(2).Is("div.row-fluid") {
t.Errorf("Element at 2 should be row-fluid, found %+v.", sel.Get(2))
}
if !sel.Eq(3).Is("#cf1") {
t.Errorf("Element at 3 should be cf1, found %+v.", sel.Get(3))
}
if !sel.Eq(4).Is("body") {
t.Errorf("Element at 4 should be body, found %+v.", sel.Get(4))
}
if !sel.Eq(5).Is("html") {
t.Errorf("Element at 5 should be html, found %+v.", sel.Get(5))
}
}
func TestParentsRollback(t *testing.T) {
sel := Doc().Root.Find(".container-fluid")
sel2 := sel.Parents().End()
AssertEqual(t, sel, sel2)
}
func TestParentsFiltered(t *testing.T) {
sel := Doc().Root.Find(".container-fluid").ParentsFiltered("body")
AssertLength(t, sel.Nodes, 1)
}
func TestParentsFilteredRollback(t *testing.T) {
sel := Doc().Root.Find(".container-fluid")
sel2 := sel.ParentsFiltered("body").End()
AssertEqual(t, sel, sel2)
}
func TestParentsUntil(t *testing.T) {
sel := Doc().Root.Find(".container-fluid").ParentsUntil("body")
AssertLength(t, sel.Nodes, 6)
}
func TestParentsUntilRollback(t *testing.T) {
sel := Doc().Root.Find(".container-fluid")
sel2 := sel.ParentsUntil("body").End()
AssertEqual(t, sel, sel2)
}
func TestParentsUntilSelection(t *testing.T) {
sel := Doc().Root.Find(".container-fluid")
sel2 := Doc().Root.Find(".pvk-content")
sel = sel.ParentsUntilSelection(sel2)
AssertLength(t, sel.Nodes, 3)
}
func TestParentsUntilSelectionRollback(t *testing.T) {
sel := Doc().Root.Find(".container-fluid")
sel2 := Doc().Root.Find(".pvk-content")
sel2 = sel.ParentsUntilSelection(sel2).End()
AssertEqual(t, sel, sel2)
}
func TestParentsUntilNodes(t *testing.T) {
sel := Doc().Root.Find(".container-fluid")
sel2 := Doc().Root.Find(".pvk-content, .hero-unit")
sel = sel.ParentsUntilNodes(sel2.Nodes...)
AssertLength(t, sel.Nodes, 2)
}
func TestParentsUntilNodesRollback(t *testing.T) {
sel := Doc().Root.Find(".container-fluid")
sel2 := Doc().Root.Find(".pvk-content, .hero-unit")
sel2 = sel.ParentsUntilNodes(sel2.Nodes...).End()
AssertEqual(t, sel, sel2)
}
func TestParentsFilteredUntil(t *testing.T) {
sel := Doc().Root.Find(".container-fluid").ParentsFilteredUntil(".pvk-content", "body")
AssertLength(t, sel.Nodes, 2)
}
func TestParentsFilteredUntilRollback(t *testing.T) {
sel := Doc().Root.Find(".container-fluid")
sel2 := sel.ParentsFilteredUntil(".pvk-content", "body").End()
AssertEqual(t, sel, sel2)
}
func TestParentsFilteredUntilSelection(t *testing.T) {
sel := Doc().Root.Find(".container-fluid")
sel2 := Doc().Root.Find(".row-fluid")
sel = sel.ParentsFilteredUntilSelection("div", sel2)
AssertLength(t, sel.Nodes, 3)
}
func TestParentsFilteredUntilSelectionRollback(t *testing.T) {
sel := Doc().Root.Find(".container-fluid")
sel2 := Doc().Root.Find(".row-fluid")
sel2 = sel.ParentsFilteredUntilSelection("div", sel2).End()
AssertEqual(t, sel, sel2)
}
func TestParentsFilteredUntilNodes(t *testing.T) {
sel := Doc().Root.Find(".container-fluid")
sel2 := Doc().Root.Find(".row-fluid")
sel = sel.ParentsFilteredUntilNodes("body", sel2.Nodes...)
AssertLength(t, sel.Nodes, 1)
}
func TestParentsFilteredUntilNodesRollback(t *testing.T) {
sel := Doc().Root.Find(".container-fluid")
sel2 := Doc().Root.Find(".row-fluid")
sel2 = sel.ParentsFilteredUntilNodes("body", sel2.Nodes...).End()
AssertEqual(t, sel, sel2)
}
func TestSiblings(t *testing.T) {
sel := Doc().Root.Find("h1").Siblings()
AssertLength(t, sel.Nodes, 1)
}
func TestSiblingsRollback(t *testing.T) {
sel := Doc().Root.Find("h1")
sel2 := sel.Siblings().End()
AssertEqual(t, sel, sel2)
}
func TestSiblings2(t *testing.T) {
sel := Doc().Root.Find(".pvk-gutter").Siblings()
AssertLength(t, sel.Nodes, 9)
}
func TestSiblings3(t *testing.T) {
sel := Doc().Root.Find("body>.container-fluid").Siblings()
AssertLength(t, sel.Nodes, 0)
}
func TestSiblingsFiltered(t *testing.T) {
sel := Doc().Root.Find(".pvk-gutter").SiblingsFiltered(".pvk-content")
AssertLength(t, sel.Nodes, 3)
}
func TestSiblingsFilteredRollback(t *testing.T) {
sel := Doc().Root.Find(".pvk-gutter")
sel2 := sel.SiblingsFiltered(".pvk-content").End()
AssertEqual(t, sel, sel2)
}
func TestNext(t *testing.T) {
sel := Doc().Root.Find("h1").Next()
AssertLength(t, sel.Nodes, 1)
}
func TestNextRollback(t *testing.T) {
sel := Doc().Root.Find("h1")
sel2 := sel.Next().End()
AssertEqual(t, sel, sel2)
}
func TestNext2(t *testing.T) {
sel := Doc().Root.Find(".close").Next()
AssertLength(t, sel.Nodes, 1)
}
func TestNextNone(t *testing.T) {
sel := Doc().Root.Find("small").Next()
AssertLength(t, sel.Nodes, 0)
}
func TestNextFiltered(t *testing.T) {
sel := Doc().Root.Find(".container-fluid").NextFiltered("div")
AssertLength(t, sel.Nodes, 2)
}
func TestNextFilteredRollback(t *testing.T) {
sel := Doc().Root.Find(".container-fluid")
sel2 := sel.NextFiltered("div").End()
AssertEqual(t, sel, sel2)
}
func TestNextFiltered2(t *testing.T) {
sel := Doc().Root.Find(".container-fluid").NextFiltered("[ng-view]")
AssertLength(t, sel.Nodes, 1)
}
func TestPrev(t *testing.T) {
sel := Doc().Root.Find(".red").Prev()
AssertLength(t, sel.Nodes, 1)
AssertClass(t, sel, "green")
}
func TestPrevRollback(t *testing.T) {
sel := Doc().Root.Find(".red")
sel2 := sel.Prev().End()
AssertEqual(t, sel, sel2)
}
func TestPrev2(t *testing.T) {
sel := Doc().Root.Find(".row-fluid").Prev()
AssertLength(t, sel.Nodes, 5)
}
func TestPrevNone(t *testing.T) {
sel := Doc().Root.Find("h2").Prev()
AssertLength(t, sel.Nodes, 0)
}
func TestPrevFiltered(t *testing.T) {
sel := Doc().Root.Find(".row-fluid").PrevFiltered(".row-fluid")
AssertLength(t, sel.Nodes, 5)
}
func TestPrevFilteredRollback(t *testing.T) {
sel := Doc().Root.Find(".row-fluid")
sel2 := sel.PrevFiltered(".row-fluid").End()
AssertEqual(t, sel, sel2)
}
func TestNextAll(t *testing.T) {
sel := Doc().Root.Find("#cf2 div:nth-child(1)").NextAll()
AssertLength(t, sel.Nodes, 3)
}
func TestNextAllRollback(t *testing.T) {
sel := Doc().Root.Find("#cf2 div:nth-child(1)")
sel2 := sel.NextAll().End()
AssertEqual(t, sel, sel2)
}
func TestNextAll2(t *testing.T) {
sel := Doc().Root.Find("div[ng-cloak]").NextAll()
AssertLength(t, sel.Nodes, 1)
}
func TestNextAllNone(t *testing.T) {
sel := Doc().Root.Find(".footer").NextAll()
AssertLength(t, sel.Nodes, 0)
}
func TestNextAllFiltered(t *testing.T) {
sel := Doc().Root.Find("#cf2 .row-fluid").NextAllFiltered("[ng-cloak]")
AssertLength(t, sel.Nodes, 2)
}
func TestNextAllFilteredRollback(t *testing.T) {
sel := Doc().Root.Find("#cf2 .row-fluid")
sel2 := sel.NextAllFiltered("[ng-cloak]").End()
AssertEqual(t, sel, sel2)
}
func TestNextAllFiltered2(t *testing.T) {
sel := Doc().Root.Find(".close").NextAllFiltered("h4")
AssertLength(t, sel.Nodes, 1)
}
func TestPrevAll(t *testing.T) {
sel := Doc().Root.Find("[ng-view]").PrevAll()
AssertLength(t, sel.Nodes, 2)
}
func TestPrevAllOrder(t *testing.T) {
sel := Doc().Root.Find("[ng-view]").PrevAll()
AssertLength(t, sel.Nodes, 2)
if !sel.Eq(0).Is("#cf4") {
t.Errorf("Element at 0 should be cf4, found %+v.", sel.Get(0))
}
if !sel.Eq(1).Is("#cf3") {
t.Errorf("Element at 1 should be cf3, found %+v.", sel.Get(1))
}
}
func TestPrevAllRollback(t *testing.T) {
sel := Doc().Root.Find("[ng-view]")
sel2 := sel.PrevAll().End()
AssertEqual(t, sel, sel2)
}
func TestPrevAll2(t *testing.T) {
sel := Doc().Root.Find(".pvk-gutter").PrevAll()
AssertLength(t, sel.Nodes, 6)
}
func TestPrevAllFiltered(t *testing.T) {
sel := Doc().Root.Find(".pvk-gutter").PrevAllFiltered(".pvk-content")
AssertLength(t, sel.Nodes, 3)
}
func TestPrevAllFilteredRollback(t *testing.T) {
sel := Doc().Root.Find(".pvk-gutter")
sel2 := sel.PrevAllFiltered(".pvk-content").End()
AssertEqual(t, sel, sel2)
}
func TestNextUntil(t *testing.T) {
sel := Doc().Root.Find(".alert a").NextUntil("p")
AssertLength(t, sel.Nodes, 1)
if !sel.Eq(0).Is("h4") {
t.Errorf("Expected node 0 to be h4, found %+v.", sel.Get(0))
}
}
func TestNextUntil2(t *testing.T) {
sel := Doc().Root.Find("#cf2-1").NextUntil("[ng-cloak]")
AssertLength(t, sel.Nodes, 1)
if !sel.Eq(0).Is("#cf2-2") {
t.Errorf("Expected node 0 to be cf2-2, found %+v.", sel.Get(0))
}
}
func TestNextUntilOrder(t *testing.T) {
sel := Doc().Root.Find("#cf2-1").NextUntil("#cf2-4")
AssertLength(t, sel.Nodes, 2)
if !sel.Eq(0).Is("#cf2-2") {
t.Errorf("Expected node 0 to be cf2-2, found %+v.", sel.Get(0))
}
if !sel.Eq(1).Is("#cf2-3") {
t.Errorf("Expected node 1 to be cf2-3, found %+v.", sel.Get(1))
}
}
func TestNextUntilRollback(t *testing.T) {
sel := Doc().Root.Find("#cf2-1")
sel2 := sel.PrevUntil("#cf2-4").End()
AssertEqual(t, sel, sel2)
}
func TestNextUntilSelection(t *testing.T) {
sel := Doc2().Root.Find("#n2")
sel2 := Doc2().Root.Find("#n4")
sel2 = sel.NextUntilSelection(sel2)
AssertLength(t, sel2.Nodes, 1)
if !sel2.Eq(0).Is("#n3") {
t.Errorf("Expected node 0 to be n3, found %+v.", sel2.Get(0))
}
}
func TestNextUntilSelectionRollback(t *testing.T) {
sel := Doc2().Root.Find("#n2")
sel2 := Doc2().Root.Find("#n4")
sel2 = sel.NextUntilSelection(sel2).End()
AssertEqual(t, sel, sel2)
}
func TestNextUntilNodes(t *testing.T) {
sel := Doc2().Root.Find("#n2")
sel2 := Doc2().Root.Find("#n5")
sel2 = sel.NextUntilNodes(sel2.Nodes...)
AssertLength(t, sel2.Nodes, 2)
if !sel2.Eq(0).Is("#n3") {
t.Errorf("Expected node 0 to be n3, found %+v.", sel2.Get(0))
}
if !sel2.Eq(1).Is("#n4") {
t.Errorf("Expected node 1 to be n4, found %+v.", sel2.Get(1))
}
}
func TestNextUntilNodesRollback(t *testing.T) {
sel := Doc2().Root.Find("#n2")
sel2 := Doc2().Root.Find("#n5")
sel2 = sel.NextUntilNodes(sel2.Nodes...).End()
AssertEqual(t, sel, sel2)
}
func TestPrevUntil(t *testing.T) {
sel := Doc().Root.Find(".alert p").PrevUntil("a")
AssertLength(t, sel.Nodes, 1)
if !sel.Eq(0).Is("h4") {
t.Errorf("Expected node 0 to be h4, found %+v.", sel.Get(0))
}
}
func TestPrevUntil2(t *testing.T) {
sel := Doc().Root.Find("[ng-cloak]").PrevUntil(":not([ng-cloak])")
AssertLength(t, sel.Nodes, 1)
if !sel.Eq(0).Is("[ng-cloak]") {
t.Errorf("Expected node 0 to be [ng-cloak], found %+v.", sel.Get(0))
}
}
func TestPrevUntilOrder(t *testing.T) {
sel := Doc().Root.Find("#cf2-4").PrevUntil("#cf2-1")
AssertLength(t, sel.Nodes, 2)
if !sel.Eq(0).Is("#cf2-3") {
t.Errorf("Expected node 0 to be cf2-3, found %+v.", sel.Get(0))
}
if !sel.Eq(1).Is("#cf2-2") {
t.Errorf("Expected node 1 to be cf2-2, found %+v.", sel.Get(1))
}
}
func TestPrevUntilRollback(t *testing.T) {
sel := Doc().Root.Find("#cf2-4")
sel2 := sel.PrevUntil("#cf2-1").End()
AssertEqual(t, sel, sel2)
}
func TestPrevUntilSelection(t *testing.T) {
sel := Doc2().Root.Find("#n4")
sel2 := Doc2().Root.Find("#n2")
sel2 = sel.PrevUntilSelection(sel2)
AssertLength(t, sel2.Nodes, 1)
if !sel2.Eq(0).Is("#n3") {
t.Errorf("Expected node 0 to be n3, found %+v.", sel2.Get(0))
}
}
func TestPrevUntilSelectionRollback(t *testing.T) {
sel := Doc2().Root.Find("#n4")
sel2 := Doc2().Root.Find("#n2")
sel2 = sel.PrevUntilSelection(sel2).End()
AssertEqual(t, sel, sel2)
}
func TestPrevUntilNodes(t *testing.T) {
sel := Doc2().Root.Find("#n5")
sel2 := Doc2().Root.Find("#n2")
sel2 = sel.PrevUntilNodes(sel2.Nodes...)
AssertLength(t, sel2.Nodes, 2)
if !sel2.Eq(0).Is("#n4") {
t.Errorf("Expected node 0 to be n4, found %+v.", sel2.Get(0))
}
if !sel2.Eq(1).Is("#n3") {
t.Errorf("Expected node 1 to be n3, found %+v.", sel2.Get(1))
}
}
func TestPrevUntilNodesRollback(t *testing.T) {
sel := Doc2().Root.Find("#n5")
sel2 := Doc2().Root.Find("#n2")
sel2 = sel.PrevUntilNodes(sel2.Nodes...).End()
AssertEqual(t, sel, sel2)
}