blob: 92b8add74a232fa1f16ef22a0ae502fa11859d3f [file] [log] [blame]
<!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>