traversal_test.go 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697
  1. package goquery
  2. import (
  3. "strings"
  4. "testing"
  5. )
  6. func TestFind(t *testing.T) {
  7. sel := Doc().Find("div.row-fluid")
  8. assertLength(t, sel.Nodes, 9)
  9. }
  10. func TestFindRollback(t *testing.T) {
  11. sel := Doc().Find("div.row-fluid")
  12. sel2 := sel.Find("a").End()
  13. assertEqual(t, sel, sel2)
  14. }
  15. func TestFindNotSelf(t *testing.T) {
  16. sel := Doc().Find("h1").Find("h1")
  17. assertLength(t, sel.Nodes, 0)
  18. }
  19. func TestFindInvalidSelector(t *testing.T) {
  20. defer assertPanic(t)
  21. Doc().Find(":+ ^")
  22. }
  23. func TestChainedFind(t *testing.T) {
  24. sel := Doc().Find("div.hero-unit").Find(".row-fluid")
  25. assertLength(t, sel.Nodes, 4)
  26. }
  27. func TestChildren(t *testing.T) {
  28. sel := Doc().Find(".pvk-content").Children()
  29. assertLength(t, sel.Nodes, 5)
  30. }
  31. func TestChildrenRollback(t *testing.T) {
  32. sel := Doc().Find(".pvk-content")
  33. sel2 := sel.Children().End()
  34. assertEqual(t, sel, sel2)
  35. }
  36. func TestContents(t *testing.T) {
  37. sel := Doc().Find(".pvk-content").Contents()
  38. assertLength(t, sel.Nodes, 13)
  39. }
  40. func TestContentsRollback(t *testing.T) {
  41. sel := Doc().Find(".pvk-content")
  42. sel2 := sel.Contents().End()
  43. assertEqual(t, sel, sel2)
  44. }
  45. func TestChildrenFiltered(t *testing.T) {
  46. sel := Doc().Find(".pvk-content").ChildrenFiltered(".hero-unit")
  47. assertLength(t, sel.Nodes, 1)
  48. }
  49. func TestChildrenFilteredRollback(t *testing.T) {
  50. sel := Doc().Find(".pvk-content")
  51. sel2 := sel.ChildrenFiltered(".hero-unit").End()
  52. assertEqual(t, sel, sel2)
  53. }
  54. func TestContentsFiltered(t *testing.T) {
  55. sel := Doc().Find(".pvk-content").ContentsFiltered(".hero-unit")
  56. assertLength(t, sel.Nodes, 1)
  57. }
  58. func TestContentsFilteredRollback(t *testing.T) {
  59. sel := Doc().Find(".pvk-content")
  60. sel2 := sel.ContentsFiltered(".hero-unit").End()
  61. assertEqual(t, sel, sel2)
  62. }
  63. func TestChildrenFilteredNone(t *testing.T) {
  64. sel := Doc().Find(".pvk-content").ChildrenFiltered("a.btn")
  65. assertLength(t, sel.Nodes, 0)
  66. }
  67. func TestParent(t *testing.T) {
  68. sel := Doc().Find(".container-fluid").Parent()
  69. assertLength(t, sel.Nodes, 3)
  70. }
  71. func TestParentRollback(t *testing.T) {
  72. sel := Doc().Find(".container-fluid")
  73. sel2 := sel.Parent().End()
  74. assertEqual(t, sel, sel2)
  75. }
  76. func TestParentBody(t *testing.T) {
  77. sel := Doc().Find("body").Parent()
  78. assertLength(t, sel.Nodes, 1)
  79. }
  80. func TestParentFiltered(t *testing.T) {
  81. sel := Doc().Find(".container-fluid").ParentFiltered(".hero-unit")
  82. assertLength(t, sel.Nodes, 1)
  83. assertClass(t, sel, "hero-unit")
  84. }
  85. func TestParentFilteredRollback(t *testing.T) {
  86. sel := Doc().Find(".container-fluid")
  87. sel2 := sel.ParentFiltered(".hero-unit").End()
  88. assertEqual(t, sel, sel2)
  89. }
  90. func TestParents(t *testing.T) {
  91. sel := Doc().Find(".container-fluid").Parents()
  92. assertLength(t, sel.Nodes, 8)
  93. }
  94. func TestParentsOrder(t *testing.T) {
  95. sel := Doc().Find("#cf2").Parents()
  96. assertLength(t, sel.Nodes, 6)
  97. assertSelectionIs(t, sel, ".hero-unit", ".pvk-content", "div.row-fluid", "#cf1", "body", "html")
  98. }
  99. func TestParentsRollback(t *testing.T) {
  100. sel := Doc().Find(".container-fluid")
  101. sel2 := sel.Parents().End()
  102. assertEqual(t, sel, sel2)
  103. }
  104. func TestParentsFiltered(t *testing.T) {
  105. sel := Doc().Find(".container-fluid").ParentsFiltered("body")
  106. assertLength(t, sel.Nodes, 1)
  107. }
  108. func TestParentsFilteredRollback(t *testing.T) {
  109. sel := Doc().Find(".container-fluid")
  110. sel2 := sel.ParentsFiltered("body").End()
  111. assertEqual(t, sel, sel2)
  112. }
  113. func TestParentsUntil(t *testing.T) {
  114. sel := Doc().Find(".container-fluid").ParentsUntil("body")
  115. assertLength(t, sel.Nodes, 6)
  116. }
  117. func TestParentsUntilRollback(t *testing.T) {
  118. sel := Doc().Find(".container-fluid")
  119. sel2 := sel.ParentsUntil("body").End()
  120. assertEqual(t, sel, sel2)
  121. }
  122. func TestParentsUntilSelection(t *testing.T) {
  123. sel := Doc().Find(".container-fluid")
  124. sel2 := Doc().Find(".pvk-content")
  125. sel = sel.ParentsUntilSelection(sel2)
  126. assertLength(t, sel.Nodes, 3)
  127. }
  128. func TestParentsUntilSelectionRollback(t *testing.T) {
  129. sel := Doc().Find(".container-fluid")
  130. sel2 := Doc().Find(".pvk-content")
  131. sel2 = sel.ParentsUntilSelection(sel2).End()
  132. assertEqual(t, sel, sel2)
  133. }
  134. func TestParentsUntilNodes(t *testing.T) {
  135. sel := Doc().Find(".container-fluid")
  136. sel2 := Doc().Find(".pvk-content, .hero-unit")
  137. sel = sel.ParentsUntilNodes(sel2.Nodes...)
  138. assertLength(t, sel.Nodes, 2)
  139. }
  140. func TestParentsUntilNodesRollback(t *testing.T) {
  141. sel := Doc().Find(".container-fluid")
  142. sel2 := Doc().Find(".pvk-content, .hero-unit")
  143. sel2 = sel.ParentsUntilNodes(sel2.Nodes...).End()
  144. assertEqual(t, sel, sel2)
  145. }
  146. func TestParentsFilteredUntil(t *testing.T) {
  147. sel := Doc().Find(".container-fluid").ParentsFilteredUntil(".pvk-content", "body")
  148. assertLength(t, sel.Nodes, 2)
  149. }
  150. func TestParentsFilteredUntilRollback(t *testing.T) {
  151. sel := Doc().Find(".container-fluid")
  152. sel2 := sel.ParentsFilteredUntil(".pvk-content", "body").End()
  153. assertEqual(t, sel, sel2)
  154. }
  155. func TestParentsFilteredUntilSelection(t *testing.T) {
  156. sel := Doc().Find(".container-fluid")
  157. sel2 := Doc().Find(".row-fluid")
  158. sel = sel.ParentsFilteredUntilSelection("div", sel2)
  159. assertLength(t, sel.Nodes, 3)
  160. }
  161. func TestParentsFilteredUntilSelectionRollback(t *testing.T) {
  162. sel := Doc().Find(".container-fluid")
  163. sel2 := Doc().Find(".row-fluid")
  164. sel2 = sel.ParentsFilteredUntilSelection("div", sel2).End()
  165. assertEqual(t, sel, sel2)
  166. }
  167. func TestParentsFilteredUntilNodes(t *testing.T) {
  168. sel := Doc().Find(".container-fluid")
  169. sel2 := Doc().Find(".row-fluid")
  170. sel = sel.ParentsFilteredUntilNodes("body", sel2.Nodes...)
  171. assertLength(t, sel.Nodes, 1)
  172. }
  173. func TestParentsFilteredUntilNodesRollback(t *testing.T) {
  174. sel := Doc().Find(".container-fluid")
  175. sel2 := Doc().Find(".row-fluid")
  176. sel2 = sel.ParentsFilteredUntilNodes("body", sel2.Nodes...).End()
  177. assertEqual(t, sel, sel2)
  178. }
  179. func TestSiblings(t *testing.T) {
  180. sel := Doc().Find("h1").Siblings()
  181. assertLength(t, sel.Nodes, 1)
  182. }
  183. func TestSiblingsRollback(t *testing.T) {
  184. sel := Doc().Find("h1")
  185. sel2 := sel.Siblings().End()
  186. assertEqual(t, sel, sel2)
  187. }
  188. func TestSiblings2(t *testing.T) {
  189. sel := Doc().Find(".pvk-gutter").Siblings()
  190. assertLength(t, sel.Nodes, 9)
  191. }
  192. func TestSiblings3(t *testing.T) {
  193. sel := Doc().Find("body>.container-fluid").Siblings()
  194. assertLength(t, sel.Nodes, 0)
  195. }
  196. func TestSiblingsFiltered(t *testing.T) {
  197. sel := Doc().Find(".pvk-gutter").SiblingsFiltered(".pvk-content")
  198. assertLength(t, sel.Nodes, 3)
  199. }
  200. func TestSiblingsFilteredRollback(t *testing.T) {
  201. sel := Doc().Find(".pvk-gutter")
  202. sel2 := sel.SiblingsFiltered(".pvk-content").End()
  203. assertEqual(t, sel, sel2)
  204. }
  205. func TestNext(t *testing.T) {
  206. sel := Doc().Find("h1").Next()
  207. assertLength(t, sel.Nodes, 1)
  208. }
  209. func TestNextRollback(t *testing.T) {
  210. sel := Doc().Find("h1")
  211. sel2 := sel.Next().End()
  212. assertEqual(t, sel, sel2)
  213. }
  214. func TestNext2(t *testing.T) {
  215. sel := Doc().Find(".close").Next()
  216. assertLength(t, sel.Nodes, 1)
  217. }
  218. func TestNextNone(t *testing.T) {
  219. sel := Doc().Find("small").Next()
  220. assertLength(t, sel.Nodes, 0)
  221. }
  222. func TestNextFiltered(t *testing.T) {
  223. sel := Doc().Find(".container-fluid").NextFiltered("div")
  224. assertLength(t, sel.Nodes, 2)
  225. }
  226. func TestNextFilteredRollback(t *testing.T) {
  227. sel := Doc().Find(".container-fluid")
  228. sel2 := sel.NextFiltered("div").End()
  229. assertEqual(t, sel, sel2)
  230. }
  231. func TestNextFiltered2(t *testing.T) {
  232. sel := Doc().Find(".container-fluid").NextFiltered("[ng-view]")
  233. assertLength(t, sel.Nodes, 1)
  234. }
  235. func TestPrev(t *testing.T) {
  236. sel := Doc().Find(".red").Prev()
  237. assertLength(t, sel.Nodes, 1)
  238. assertClass(t, sel, "green")
  239. }
  240. func TestPrevRollback(t *testing.T) {
  241. sel := Doc().Find(".red")
  242. sel2 := sel.Prev().End()
  243. assertEqual(t, sel, sel2)
  244. }
  245. func TestPrev2(t *testing.T) {
  246. sel := Doc().Find(".row-fluid").Prev()
  247. assertLength(t, sel.Nodes, 5)
  248. }
  249. func TestPrevNone(t *testing.T) {
  250. sel := Doc().Find("h2").Prev()
  251. assertLength(t, sel.Nodes, 0)
  252. }
  253. func TestPrevFiltered(t *testing.T) {
  254. sel := Doc().Find(".row-fluid").PrevFiltered(".row-fluid")
  255. assertLength(t, sel.Nodes, 5)
  256. }
  257. func TestPrevFilteredRollback(t *testing.T) {
  258. sel := Doc().Find(".row-fluid")
  259. sel2 := sel.PrevFiltered(".row-fluid").End()
  260. assertEqual(t, sel, sel2)
  261. }
  262. func TestNextAll(t *testing.T) {
  263. sel := Doc().Find("#cf2 div:nth-child(1)").NextAll()
  264. assertLength(t, sel.Nodes, 3)
  265. }
  266. func TestNextAllRollback(t *testing.T) {
  267. sel := Doc().Find("#cf2 div:nth-child(1)")
  268. sel2 := sel.NextAll().End()
  269. assertEqual(t, sel, sel2)
  270. }
  271. func TestNextAll2(t *testing.T) {
  272. sel := Doc().Find("div[ng-cloak]").NextAll()
  273. assertLength(t, sel.Nodes, 1)
  274. }
  275. func TestNextAllNone(t *testing.T) {
  276. sel := Doc().Find(".footer").NextAll()
  277. assertLength(t, sel.Nodes, 0)
  278. }
  279. func TestNextAllFiltered(t *testing.T) {
  280. sel := Doc().Find("#cf2 .row-fluid").NextAllFiltered("[ng-cloak]")
  281. assertLength(t, sel.Nodes, 2)
  282. }
  283. func TestNextAllFilteredRollback(t *testing.T) {
  284. sel := Doc().Find("#cf2 .row-fluid")
  285. sel2 := sel.NextAllFiltered("[ng-cloak]").End()
  286. assertEqual(t, sel, sel2)
  287. }
  288. func TestNextAllFiltered2(t *testing.T) {
  289. sel := Doc().Find(".close").NextAllFiltered("h4")
  290. assertLength(t, sel.Nodes, 1)
  291. }
  292. func TestPrevAll(t *testing.T) {
  293. sel := Doc().Find("[ng-view]").PrevAll()
  294. assertLength(t, sel.Nodes, 2)
  295. }
  296. func TestPrevAllOrder(t *testing.T) {
  297. sel := Doc().Find("[ng-view]").PrevAll()
  298. assertLength(t, sel.Nodes, 2)
  299. assertSelectionIs(t, sel, "#cf4", "#cf3")
  300. }
  301. func TestPrevAllRollback(t *testing.T) {
  302. sel := Doc().Find("[ng-view]")
  303. sel2 := sel.PrevAll().End()
  304. assertEqual(t, sel, sel2)
  305. }
  306. func TestPrevAll2(t *testing.T) {
  307. sel := Doc().Find(".pvk-gutter").PrevAll()
  308. assertLength(t, sel.Nodes, 6)
  309. }
  310. func TestPrevAllFiltered(t *testing.T) {
  311. sel := Doc().Find(".pvk-gutter").PrevAllFiltered(".pvk-content")
  312. assertLength(t, sel.Nodes, 3)
  313. }
  314. func TestPrevAllFilteredRollback(t *testing.T) {
  315. sel := Doc().Find(".pvk-gutter")
  316. sel2 := sel.PrevAllFiltered(".pvk-content").End()
  317. assertEqual(t, sel, sel2)
  318. }
  319. func TestNextUntil(t *testing.T) {
  320. sel := Doc().Find(".alert a").NextUntil("p")
  321. assertLength(t, sel.Nodes, 1)
  322. assertSelectionIs(t, sel, "h4")
  323. }
  324. func TestNextUntil2(t *testing.T) {
  325. sel := Doc().Find("#cf2-1").NextUntil("[ng-cloak]")
  326. assertLength(t, sel.Nodes, 1)
  327. assertSelectionIs(t, sel, "#cf2-2")
  328. }
  329. func TestNextUntilOrder(t *testing.T) {
  330. sel := Doc().Find("#cf2-1").NextUntil("#cf2-4")
  331. assertLength(t, sel.Nodes, 2)
  332. assertSelectionIs(t, sel, "#cf2-2", "#cf2-3")
  333. }
  334. func TestNextUntilRollback(t *testing.T) {
  335. sel := Doc().Find("#cf2-1")
  336. sel2 := sel.PrevUntil("#cf2-4").End()
  337. assertEqual(t, sel, sel2)
  338. }
  339. func TestNextUntilSelection(t *testing.T) {
  340. sel := Doc2().Find("#n2")
  341. sel2 := Doc2().Find("#n4")
  342. sel2 = sel.NextUntilSelection(sel2)
  343. assertLength(t, sel2.Nodes, 1)
  344. assertSelectionIs(t, sel2, "#n3")
  345. }
  346. func TestNextUntilSelectionRollback(t *testing.T) {
  347. sel := Doc2().Find("#n2")
  348. sel2 := Doc2().Find("#n4")
  349. sel2 = sel.NextUntilSelection(sel2).End()
  350. assertEqual(t, sel, sel2)
  351. }
  352. func TestNextUntilNodes(t *testing.T) {
  353. sel := Doc2().Find("#n2")
  354. sel2 := Doc2().Find("#n5")
  355. sel2 = sel.NextUntilNodes(sel2.Nodes...)
  356. assertLength(t, sel2.Nodes, 2)
  357. assertSelectionIs(t, sel2, "#n3", "#n4")
  358. }
  359. func TestNextUntilNodesRollback(t *testing.T) {
  360. sel := Doc2().Find("#n2")
  361. sel2 := Doc2().Find("#n5")
  362. sel2 = sel.NextUntilNodes(sel2.Nodes...).End()
  363. assertEqual(t, sel, sel2)
  364. }
  365. func TestPrevUntil(t *testing.T) {
  366. sel := Doc().Find(".alert p").PrevUntil("a")
  367. assertLength(t, sel.Nodes, 1)
  368. assertSelectionIs(t, sel, "h4")
  369. }
  370. func TestPrevUntil2(t *testing.T) {
  371. sel := Doc().Find("[ng-cloak]").PrevUntil(":not([ng-cloak])")
  372. assertLength(t, sel.Nodes, 1)
  373. assertSelectionIs(t, sel, "[ng-cloak]")
  374. }
  375. func TestPrevUntilOrder(t *testing.T) {
  376. sel := Doc().Find("#cf2-4").PrevUntil("#cf2-1")
  377. assertLength(t, sel.Nodes, 2)
  378. assertSelectionIs(t, sel, "#cf2-3", "#cf2-2")
  379. }
  380. func TestPrevUntilRollback(t *testing.T) {
  381. sel := Doc().Find("#cf2-4")
  382. sel2 := sel.PrevUntil("#cf2-1").End()
  383. assertEqual(t, sel, sel2)
  384. }
  385. func TestPrevUntilSelection(t *testing.T) {
  386. sel := Doc2().Find("#n4")
  387. sel2 := Doc2().Find("#n2")
  388. sel2 = sel.PrevUntilSelection(sel2)
  389. assertLength(t, sel2.Nodes, 1)
  390. assertSelectionIs(t, sel2, "#n3")
  391. }
  392. func TestPrevUntilSelectionRollback(t *testing.T) {
  393. sel := Doc2().Find("#n4")
  394. sel2 := Doc2().Find("#n2")
  395. sel2 = sel.PrevUntilSelection(sel2).End()
  396. assertEqual(t, sel, sel2)
  397. }
  398. func TestPrevUntilNodes(t *testing.T) {
  399. sel := Doc2().Find("#n5")
  400. sel2 := Doc2().Find("#n2")
  401. sel2 = sel.PrevUntilNodes(sel2.Nodes...)
  402. assertLength(t, sel2.Nodes, 2)
  403. assertSelectionIs(t, sel2, "#n4", "#n3")
  404. }
  405. func TestPrevUntilNodesRollback(t *testing.T) {
  406. sel := Doc2().Find("#n5")
  407. sel2 := Doc2().Find("#n2")
  408. sel2 = sel.PrevUntilNodes(sel2.Nodes...).End()
  409. assertEqual(t, sel, sel2)
  410. }
  411. func TestNextFilteredUntil(t *testing.T) {
  412. sel := Doc2().Find(".two").NextFilteredUntil(".even", ".six")
  413. assertLength(t, sel.Nodes, 4)
  414. assertSelectionIs(t, sel, "#n3", "#n5", "#nf3", "#nf5")
  415. }
  416. func TestNextFilteredUntilRollback(t *testing.T) {
  417. sel := Doc2().Find(".two")
  418. sel2 := sel.NextFilteredUntil(".even", ".six").End()
  419. assertEqual(t, sel, sel2)
  420. }
  421. func TestNextFilteredUntilSelection(t *testing.T) {
  422. sel := Doc2().Find(".even")
  423. sel2 := Doc2().Find(".five")
  424. sel = sel.NextFilteredUntilSelection(".even", sel2)
  425. assertLength(t, sel.Nodes, 2)
  426. assertSelectionIs(t, sel, "#n3", "#nf3")
  427. }
  428. func TestNextFilteredUntilSelectionRollback(t *testing.T) {
  429. sel := Doc2().Find(".even")
  430. sel2 := Doc2().Find(".five")
  431. sel3 := sel.NextFilteredUntilSelection(".even", sel2).End()
  432. assertEqual(t, sel, sel3)
  433. }
  434. func TestNextFilteredUntilNodes(t *testing.T) {
  435. sel := Doc2().Find(".even")
  436. sel2 := Doc2().Find(".four")
  437. sel = sel.NextFilteredUntilNodes(".odd", sel2.Nodes...)
  438. assertLength(t, sel.Nodes, 4)
  439. assertSelectionIs(t, sel, "#n2", "#n6", "#nf2", "#nf6")
  440. }
  441. func TestNextFilteredUntilNodesRollback(t *testing.T) {
  442. sel := Doc2().Find(".even")
  443. sel2 := Doc2().Find(".four")
  444. sel3 := sel.NextFilteredUntilNodes(".odd", sel2.Nodes...).End()
  445. assertEqual(t, sel, sel3)
  446. }
  447. func TestPrevFilteredUntil(t *testing.T) {
  448. sel := Doc2().Find(".five").PrevFilteredUntil(".odd", ".one")
  449. assertLength(t, sel.Nodes, 4)
  450. assertSelectionIs(t, sel, "#n4", "#n2", "#nf4", "#nf2")
  451. }
  452. func TestPrevFilteredUntilRollback(t *testing.T) {
  453. sel := Doc2().Find(".four")
  454. sel2 := sel.PrevFilteredUntil(".odd", ".one").End()
  455. assertEqual(t, sel, sel2)
  456. }
  457. func TestPrevFilteredUntilSelection(t *testing.T) {
  458. sel := Doc2().Find(".odd")
  459. sel2 := Doc2().Find(".two")
  460. sel = sel.PrevFilteredUntilSelection(".odd", sel2)
  461. assertLength(t, sel.Nodes, 2)
  462. assertSelectionIs(t, sel, "#n4", "#nf4")
  463. }
  464. func TestPrevFilteredUntilSelectionRollback(t *testing.T) {
  465. sel := Doc2().Find(".even")
  466. sel2 := Doc2().Find(".five")
  467. sel3 := sel.PrevFilteredUntilSelection(".even", sel2).End()
  468. assertEqual(t, sel, sel3)
  469. }
  470. func TestPrevFilteredUntilNodes(t *testing.T) {
  471. sel := Doc2().Find(".even")
  472. sel2 := Doc2().Find(".four")
  473. sel = sel.PrevFilteredUntilNodes(".odd", sel2.Nodes...)
  474. assertLength(t, sel.Nodes, 2)
  475. assertSelectionIs(t, sel, "#n2", "#nf2")
  476. }
  477. func TestPrevFilteredUntilNodesRollback(t *testing.T) {
  478. sel := Doc2().Find(".even")
  479. sel2 := Doc2().Find(".four")
  480. sel3 := sel.PrevFilteredUntilNodes(".odd", sel2.Nodes...).End()
  481. assertEqual(t, sel, sel3)
  482. }
  483. func TestClosestItself(t *testing.T) {
  484. sel := Doc2().Find(".three")
  485. sel2 := sel.Closest(".row")
  486. assertLength(t, sel2.Nodes, sel.Length())
  487. assertSelectionIs(t, sel2, "#n3", "#nf3")
  488. }
  489. func TestClosestNoDupes(t *testing.T) {
  490. sel := Doc().Find(".span12")
  491. sel2 := sel.Closest(".pvk-content")
  492. assertLength(t, sel2.Nodes, 1)
  493. assertClass(t, sel2, "pvk-content")
  494. }
  495. func TestClosestNone(t *testing.T) {
  496. sel := Doc().Find("h4")
  497. sel2 := sel.Closest("a")
  498. assertLength(t, sel2.Nodes, 0)
  499. }
  500. func TestClosestMany(t *testing.T) {
  501. sel := Doc().Find(".container-fluid")
  502. sel2 := sel.Closest(".pvk-content")
  503. assertLength(t, sel2.Nodes, 2)
  504. assertSelectionIs(t, sel2, "#pc1", "#pc2")
  505. }
  506. func TestClosestRollback(t *testing.T) {
  507. sel := Doc().Find(".container-fluid")
  508. sel2 := sel.Closest(".pvk-content").End()
  509. assertEqual(t, sel, sel2)
  510. }
  511. func TestClosestSelectionItself(t *testing.T) {
  512. sel := Doc2().Find(".three")
  513. sel2 := sel.ClosestSelection(Doc2().Find(".row"))
  514. assertLength(t, sel2.Nodes, sel.Length())
  515. }
  516. func TestClosestSelectionNoDupes(t *testing.T) {
  517. sel := Doc().Find(".span12")
  518. sel2 := sel.ClosestSelection(Doc().Find(".pvk-content"))
  519. assertLength(t, sel2.Nodes, 1)
  520. assertClass(t, sel2, "pvk-content")
  521. }
  522. func TestClosestSelectionNone(t *testing.T) {
  523. sel := Doc().Find("h4")
  524. sel2 := sel.ClosestSelection(Doc().Find("a"))
  525. assertLength(t, sel2.Nodes, 0)
  526. }
  527. func TestClosestSelectionMany(t *testing.T) {
  528. sel := Doc().Find(".container-fluid")
  529. sel2 := sel.ClosestSelection(Doc().Find(".pvk-content"))
  530. assertLength(t, sel2.Nodes, 2)
  531. assertSelectionIs(t, sel2, "#pc1", "#pc2")
  532. }
  533. func TestClosestSelectionRollback(t *testing.T) {
  534. sel := Doc().Find(".container-fluid")
  535. sel2 := sel.ClosestSelection(Doc().Find(".pvk-content")).End()
  536. assertEqual(t, sel, sel2)
  537. }
  538. func TestClosestNodesItself(t *testing.T) {
  539. sel := Doc2().Find(".three")
  540. sel2 := sel.ClosestNodes(Doc2().Find(".row").Nodes...)
  541. assertLength(t, sel2.Nodes, sel.Length())
  542. }
  543. func TestClosestNodesNoDupes(t *testing.T) {
  544. sel := Doc().Find(".span12")
  545. sel2 := sel.ClosestNodes(Doc().Find(".pvk-content").Nodes...)
  546. assertLength(t, sel2.Nodes, 1)
  547. assertClass(t, sel2, "pvk-content")
  548. }
  549. func TestClosestNodesNone(t *testing.T) {
  550. sel := Doc().Find("h4")
  551. sel2 := sel.ClosestNodes(Doc().Find("a").Nodes...)
  552. assertLength(t, sel2.Nodes, 0)
  553. }
  554. func TestClosestNodesMany(t *testing.T) {
  555. sel := Doc().Find(".container-fluid")
  556. sel2 := sel.ClosestNodes(Doc().Find(".pvk-content").Nodes...)
  557. assertLength(t, sel2.Nodes, 2)
  558. assertSelectionIs(t, sel2, "#pc1", "#pc2")
  559. }
  560. func TestClosestNodesRollback(t *testing.T) {
  561. sel := Doc().Find(".container-fluid")
  562. sel2 := sel.ClosestNodes(Doc().Find(".pvk-content").Nodes...).End()
  563. assertEqual(t, sel, sel2)
  564. }
  565. func TestIssue26(t *testing.T) {
  566. img1 := `<img src="assets/images/gallery/thumb-1.jpg" alt="150x150" />`
  567. img2 := `<img alt="150x150" src="assets/images/gallery/thumb-1.jpg" />`
  568. cases := []struct {
  569. s string
  570. l int
  571. }{
  572. {s: img1 + img2, l: 2},
  573. {s: img1, l: 1},
  574. {s: img2, l: 1},
  575. }
  576. for _, c := range cases {
  577. doc, err := NewDocumentFromReader(strings.NewReader(c.s))
  578. if err != nil {
  579. t.Fatal(err)
  580. }
  581. sel := doc.Find("img[src]")
  582. assertLength(t, sel.Nodes, c.l)
  583. }
  584. }