Auto merge of #18790 - upsuper:scope, r=emilio

Support :scope pseudo-class

This fixes [bug 1406817](https://bugzilla.mozilla.org/show_bug.cgi?id=1406817).

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/18790)
<!-- Reviewable:end -->
This commit is contained in:
bors-servo 2017-10-09 23:04:15 -05:00 committed by GitHub
commit bbb2a3cde9
10 changed files with 80 additions and 18 deletions

View file

@ -0,0 +1,23 @@
<!DOCTYPE html>
<html lang="en">
<meta charset="UTF-8">
<title>Selectors Level 4: :scope without scoping</title>
<link rel="author" title="Xidorn Quan" href="mailto:me@upsuper.org">
<link rel="author" title="Mozilla" href="https://www.mozilla.org">
<link rel="help" href="https://drafts.csswg.org/selectors-4/#scope-pseudo">
<link rel="match" href="../reference/ref-filled-green-100px-square.xht">
<style>
div {
width: 100px;
height: 100px;
background: red;
}
:scope > body > div {
background: green;
}
</style>
<body>
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
<div></div>
</body>
</html>

View file

@ -56,11 +56,10 @@
do_test(":first-child" , "test12", "test3");
do_test(":invalid" , "test11", "test2");
do_scope_test(":scope" , "test4");
do_scope_test("select > :scope" , "test4");
do_scope_test("div > :scope" , "test4");
do_scope_test(":has(> :scope)" , "test4");
do_test(":scope" , "test4", "test4");
do_test("select > :scope" , "test4", "test4");
do_test("div > :scope" , "test4", "");
do_test(":has(> :scope)" , "test4", "test3");
function do_test(aSelector, aElementId, aTargetId) {
test(function() {
var el = document.getElementById(aElementId).closest(aSelector);
@ -71,13 +70,4 @@ function do_test(aSelector, aElementId, aTargetId) {
}
}, "Element.closest with context node '" + aElementId + "' and selector '" + aSelector + "'");
}
function do_scope_test(aSelector, aElementId) {
test(function() {
var el = document.getElementById(aElementId);
assert_throws("SYNTAX_ERR", function() {
el.closest(aSelector);
});
}, "Element.closest with context node '" + aElementId + "' and selector '" + aSelector + "' should throw");
}
</script>