blob: aae335be3fdba61aec1f70612a241818ecb7234f [file] [log] [blame]
<!doctype html>
<html>
<head>
<script src="../../resources/js-test-pre.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></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">
<f id="f">
<g id="g">
<h id="h">
<i id="i">
<lemon id="sour"></lemon>
</i>
</h>
</g>
<f/>
<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 a = document.getElementById('a');
var b = document.getElementById('b');
var c = document.getElementById('c');
var d = document.getElementById('d');
var e = document.getElementById('e');
var f = document.getElementById('f');
var g = document.getElementById('g');
var h = document.getElementById('h');
var i = document.getElementById('i');
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]")', 'ancestor');
shouldBeNull('theTarget.closest(null)');
shouldBeNull('theTarget.closest(undefined)');
shouldBe('sour.closest("lemon")', 'sour');
shouldBe('sour.closest("a, b, c, d, e, f, g, h, i")', 'i');
shouldBe('sour.closest("a, b, c, d, e, f, g, h")', 'h');
shouldBe('sour.closest("a, b, c, d, e, f, g")', 'g');
shouldBe('sour.closest("a, b, c, d, e, f")', 'f');
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("a")', 'a');
shouldBe('sour.closest("i, h, g, f, e, d, c, b, a")', 'i');
shouldBe('sour.closest("h, g, f, e, d, c, b, a")', 'h');
shouldBe('sour.closest("g, f, e, d, c, b, a")', 'g');
shouldBe('sour.closest("f, e, d, c, b, a")', 'f');
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>
<script src="../../resources/js-test-post.js"></script>
</html>