Index: LayoutTests/fast/selectors/element-closest-general.html |
diff --git a/LayoutTests/fast/selectors/element-closest-general.html b/LayoutTests/fast/selectors/element-closest-general.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..92b8add74a232fa1f16ef22a0ae502fa11859d3f |
--- /dev/null |
+++ b/LayoutTests/fast/selectors/element-closest-general.html |
@@ -0,0 +1,105 @@ |
+<!doctype html> |
+<html> |
+<head> |
+<script src="../../resources/js-test.js"></script> |
+<script> |
+if (window.testRunner) |
+ testRunner.dumpAsText(); |
+</script> |
+</head> |
+<body> |
+ |
+ <tribe> |
+ <realm> |
+ <throne></throne> |
+ <ancestor id="doe" name="young" class="classic"> |
+ <target id="anotherTarget"></target> |
+ </ancestor> |
+ </realm> |
+ <ancestor id="john" name="old" class="classic"> |
+ <sibling id="sibling"></sibling> |
+ <target id="theTarget" webkit="fast"></target> |
+ </ancestor> |
+ </tribe> |
+ |
+ <foo> |
+ <bar> |
+ <a id="a"> |
+ <b id="b"> |
+ <c id="c"> |
+ <d id="d"> |
+ <e id="e"> |
+ <lemon id="sour"></lemon> |
+ </e> |
+ </d> |
+ </c> |
+ </b> |
+ </a> |
+ </bar> |
+ </foo> |
+</body> |
+ |
+<script> |
+description('This test makes sure the closest() API works correctly'); |
+ |
+var theTarget = document.getElementById('theTarget'); |
+var ancestor = document.getElementById('john'); |
+var sour = document.getElementById('sour'); |
+var sibling = document.getElementById('sibling'); |
+var a = document.getElementById('a'); |
+var b = document.getElementById('b'); |
+var c = document.getElementById('c'); |
+var d = document.getElementById('d'); |
+var e = document.getElementById('e'); |
+ |
+shouldBe('theTarget.closest("#theTarget")', 'theTarget'); |
+shouldBe('theTarget.closest("ancestor")', 'ancestor'); |
+shouldBe('theTarget.closest("tribe ancestor")', 'ancestor'); |
+shouldBe('theTarget.closest("tribe > ancestor")', 'ancestor'); |
+shouldBe('theTarget.closest("realm + ancestor")', 'ancestor'); |
+shouldBe('theTarget.closest("realm ~ ancestor")', 'ancestor'); |
+shouldBe('theTarget.closest("tribe, ancestor")', 'ancestor'); |
+shouldBe('theTarget.closest("ancestor, tribe")', 'ancestor'); |
+ |
+shouldBeNull('theTarget.closest("tribe realm")'); |
+shouldBeNull('theTarget.closest("tribe realm throne")'); |
+shouldBeNull('theTarget.closest("tribe realm ancestor")'); |
+shouldBeNull('theTarget.closest("realm > ancestor")'); |
+shouldBeNull('theTarget.closest("throne + ancestor")'); |
+shouldBeNull('theTarget.closest("throne ~ ancestor")'); |
+ |
+shouldBe('theTarget.closest(".classic")', 'ancestor'); |
+shouldBe('theTarget.closest("#john")', 'ancestor'); |
+shouldBeNull('theTarget.closest("doe")'); |
+shouldBe('theTarget.closest("ancestor[name=old]")', 'ancestor'); |
+shouldBeNull('theTarget.closest("ancestor[name=young]")'); |
+ |
+shouldBeNull('theTarget.closest(null)'); |
+shouldBeNull('theTarget.closest(undefined)'); |
+ |
+shouldBe('sour.closest("lemon")', 'sour'); |
+ |
+shouldBe('sour.closest("a, b, c, d, e")', 'e'); |
+shouldBe('sour.closest("a, b, c")', 'c'); |
+shouldBe('sour.closest("a, b")', 'b'); |
+shouldBe('sour.closest("e, d, c, b, a")', 'e'); |
+shouldBe('sour.closest("d, c, b, a")', 'd'); |
+shouldBe('sour.closest("c, b, a")', 'c'); |
+shouldBe('sour.closest("b, a")', 'b'); |
+shouldBe('sour.closest("a")', 'a'); |
+ |
+shouldBe('document.closest', 'undefined'); |
+shouldThrow('document.closest()'); |
+shouldThrow('theTarget.closest()'); |
+shouldThrow('theTarget.closest("")'); |
+shouldThrow('theTarget.closest(".123")'); |
+shouldThrow('theTarget.closest(" ")'); |
+shouldThrow('theTarget.closest(")")'); |
+shouldThrow('theTarget.closest("(")'); |
+shouldThrow('theTarget.closest("()")'); |
+shouldThrow('theTarget.closest("^_^")'); |
+shouldThrow('theTarget.closest("{")'); |
+shouldThrow('theTarget.closest("}")'); |
+shouldThrow('theTarget.closest("{}")'); |
+</script> |
+</html> |