131 lines
6.5 KiB
HTML
131 lines
6.5 KiB
HTML
<!doctype html>
|
|
<html>
|
|
<head>
|
|
<script src="../../resources/js-test-pre.js"></script>
|
|
<style>
|
|
[checked=false] {
|
|
background-color: red;
|
|
}
|
|
|
|
[lang=en]>[checked=false] {
|
|
text-indent: 21px;
|
|
}
|
|
|
|
[clear=yes]>[lang=en]>[checked=false] {
|
|
font-family: uncomon;
|
|
}
|
|
|
|
[dir=webkit][disabled=no]>[type=awesome][charset=latin1]>[lang=fr][checked=false] {
|
|
opacity: 0;
|
|
}
|
|
|
|
[dir=webkit][disabled=no][clear=yes]>[type=awesome][charset=latin1][lang=en]>[lang=fr][checked=false] {
|
|
color: green;
|
|
}
|
|
|
|
[dir=webkit]>[charset=latin1]>[scrolling=fast] ul>li {
|
|
background-color: blue;
|
|
}
|
|
|
|
[dir=webkit][disabled=yes][clear=no]>[type=awesome][charset=latin1][lang=en]>[lang=fr][checked=maybe][scrolling=fast] ul>li {
|
|
font-family: hipster;
|
|
}
|
|
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<div style="display:none">
|
|
<!-- No backtracking tree -->
|
|
<div clear=Yes dir=WebKit disabled=No>
|
|
<div charset=Latin1 lang=En type=Awesome>
|
|
<div lang=Fr checked=False id=target1>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<!-- Backtracking tree -->
|
|
<div clear=No dir=WebKit disabled=Yes>
|
|
<div charset=Latin1 lang=En type=Awesome>
|
|
<div lang=Fr checked=Maybe scrolling=Fast>
|
|
|
|
<!-- First backtracking level, does not match the top level [div=webkit]-->
|
|
<div clear=No dir=WebKit2 disabled=Yes>
|
|
<div charset=Latin1 lang=En type=Awesome>
|
|
<div lang=Fr checked=Maybe scrolling=Fast>
|
|
|
|
<!-- Fails on the second level, on the charset-->
|
|
<div clear=No dir=WebKit disabled=Yes>
|
|
<div charset=None lang=En type=Awesome>
|
|
<div lang=Fr checked=Maybe scrolling=Fast>
|
|
|
|
<!-- Fails on the third level, on the scrolling attribute. -->
|
|
<div clear=No dir=WebKit disabled=Yes>
|
|
<div charset=None lang=En type=Awesome>
|
|
<div lang=Fr checked=Maybe scrolling=Slow>
|
|
|
|
<!-- Finaly, the target. Congratulation if you read this far :) -->
|
|
<ul>
|
|
<li id=target2></li>
|
|
</ul>
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<!-- End of third level failure. -->
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<!-- End of second level failure -->
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<!-- End of first level failure -->
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</body>
|
|
<script>
|
|
description('Some HTML attribute require case insensitive comparison when matching their value. Test those cases with and without backtracking.');
|
|
|
|
debug("No backtracking, simple matches per level.")
|
|
// One level.
|
|
shouldBe('document.querySelectorAll("[checked=false]").length', '1');
|
|
shouldBeEqualToString('document.querySelectorAll("[checked=false]")[0].id', 'target1');
|
|
shouldBeEqualToString('getComputedStyle(document.querySelectorAll("[checked=false]")[0]).backgroundColor', 'rgb(255, 0, 0)');
|
|
|
|
// Two level.
|
|
shouldBe('document.querySelectorAll("[lang=en]>[checked=false]").length', '1');
|
|
shouldBeEqualToString('document.querySelectorAll("[lang=en]>[checked=false]")[0].id', 'target1');
|
|
shouldBeEqualToString('getComputedStyle(document.querySelectorAll("[lang=en]>[checked=false]")[0]).textIndent', '21px');
|
|
|
|
// Three level.
|
|
shouldBe('document.querySelectorAll("[clear=yes]>[lang=en]>[checked=false]").length', '1');
|
|
shouldBeEqualToString('document.querySelectorAll("[clear=yes]>[lang=en]>[checked=false]")[0].id', 'target1');
|
|
shouldBeEqualToString('getComputedStyle(document.querySelectorAll("[clear=yes]>[lang=en]>[checked=false]")[0]).fontFamily', 'uncomon');
|
|
|
|
debug("No backtracking, multiple matches per level.");
|
|
// Three level, 2 matches per level.
|
|
shouldBe('document.querySelectorAll("[dir=webkit][disabled=no]>[type=awesome][charset=latin1]>[lang=fr][checked=false]").length', '1');
|
|
shouldBeEqualToString('document.querySelectorAll("[dir=webkit][disabled=no]>[type=awesome][charset=latin1]>[lang=fr][checked=false]")[0].id', 'target1');
|
|
shouldBeEqualToString('getComputedStyle(document.querySelectorAll("[dir=webkit][disabled=no]>[type=awesome][charset=latin1]>[lang=fr][checked=false]")[0]).opacity', '0');
|
|
|
|
// Three level, 3 matches per level.
|
|
shouldBe('document.querySelectorAll("[dir=webkit][disabled=no][clear=yes]>[type=awesome][charset=latin1][lang=en]>[lang=fr][checked=false]").length', '1');
|
|
shouldBeEqualToString('document.querySelectorAll("[dir=webkit][disabled=no][clear=yes]>[type=awesome][charset=latin1][lang=en]>[lang=fr][checked=false]")[0].id', 'target1');
|
|
shouldBeEqualToString('getComputedStyle(document.querySelectorAll("[dir=webkit][disabled=no][clear=yes]>[type=awesome][charset=latin1][lang=en]>[lang=fr][checked=false]")[0]).color', 'rgb(0, 128, 0)');
|
|
|
|
debug("Backtracking, single matches per level.");
|
|
// A single sequence of backtracking, 3 level to force one slow-path backtracking.
|
|
shouldBe('document.querySelectorAll("[dir=webkit]>[charset=latin1]>[scrolling=fast] ul>li").length', '1');
|
|
shouldBeEqualToString('document.querySelectorAll("[dir=webkit]>[charset=latin1]>[scrolling=fast] ul>li")[0].id', 'target2');
|
|
shouldBeEqualToString('getComputedStyle(document.querySelectorAll("[dir=webkit]>[charset=latin1]>[scrolling=fast] ul>li")[0]).backgroundColor', 'rgb(0, 0, 255)');
|
|
|
|
debug("Backtracking, multiple matches per level.");
|
|
// Multiple matches per level to make the attribute match loop more complex.
|
|
shouldBe('document.querySelectorAll("[dir=webkit][disabled=yes][clear=no]>[type=awesome][charset=latin1][lang=en]>[lang=fr][checked=maybe][scrolling=fast] ul>li").length', '1');
|
|
shouldBeEqualToString('document.querySelectorAll("[dir=webkit][disabled=yes][clear=no]>[type=awesome][charset=latin1][lang=en]>[lang=fr][checked=maybe][scrolling=fast] ul>li")[0].id', 'target2');
|
|
shouldBeEqualToString('getComputedStyle(document.querySelectorAll("[dir=webkit][disabled=yes][clear=no]>[type=awesome][charset=latin1][lang=en]>[lang=fr][checked=maybe][scrolling=fast] ul>li")[0]).fontFamily', 'hipster');
|
|
</script>
|
|
<script src="../../resources/js-test-post.js"></script>
|
|
</html>
|