Status: PASS | Duration: 52ms | Subtests: 18/18 | Open test on wpt.live | wpt.fyi
Data from commit:
a50cb89 wpt: run reference-named files which are themselves tests (#836) (2026-09-03)
| Subtest | Status | Message |
|---|---|---|
| :not(:is(#a)) matches expected elements | PASS | |
| :not(:where(#b)) matches expected elements | PASS | |
| :not(:where(:root #c)) matches expected elements | PASS | |
| :not(:is(#a, #b)) matches expected elements | PASS | |
| :not(:is(#b div)) matches expected elements | PASS | |
| :not(:is(#a div, div + div)) matches expected elements | PASS | |
| :not(:is(span)) matches expected elements | PASS | |
| :not(:is(div)) matches expected elements | PASS | |
| :not(:is(*|div)) matches expected elements | PASS | |
| :not(:is(*|*)) matches expected elements | PASS | |
| :not(:is(*)) matches expected elements | PASS | |
| :not(:is(svg|div)) matches expected elements | PASS | |
| :not(:is(:not(div))) matches expected elements | PASS | |
| :not(:is(span, b, i)) matches expected elements | PASS | |
| :not(:is(span, b, i, div)) matches expected elements | PASS | |
| :not(:is(#b ~ div div, * + #c)) matches expected elements | PASS | |
| :not(:is(div > :not(#e))) matches expected elements | PASS | |
| :not(:is(div > :not(:where(#e, #f)))) matches expected elements | PASS |
/css/selectors/is-where-not.html
<!DOCTYPE html> <title>:is() inside :not()</title> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <link rel="help" href="https://drafts.csswg.org/selectors-4/#matches"> <link rel="help" href="https://drafts.csswg.org/selectors/#negation"> <main id=main> <div id=a><div id=d></div></div> <div id=b><div id=e></div></div> <div id=c><div id=f></div></div> </main> <script> function formatElements(elements) { return elements.map(e => e.id).sort().join(); } // Test that |selector| returns the given elements in #main. function test_selector(selector, expected) { test(function() { let actual = Array.from(main.querySelectorAll(selector)); assert_equals(formatElements(actual), formatElements(expected)); }, `${selector} matches expected elements`); } test_selector(':not(:is(#a))', [b, c, d, e, f]); test_selector(':not(:where(#b))', [a, c, d, e, f]); test_selector(':not(:where(:root #c))', [a, b, d, e, f]); test_selector(':not(:is(#a, #b))', [c, d, e, f]); test_selector(':not(:is(#b div))', [a, b, c, d, f]); test_selector(':not(:is(#a div, div + div))', [a, e, f]); test_selector(':not(:is(span))', [a, b, c, d, e, f]); test_selector(':not(:is(div))', []); test_selector(':not(:is(*|div))', []); test_selector(':not(:is(*|*))', []); test_selector(':not(:is(*))', []); test_selector(':not(:is(svg|div))', [a, b, c, d, e, f]); test_selector(':not(:is(:not(div)))', [a, b, c, d, e, f]); test_selector(':not(:is(span, b, i))', [a, b, c, d, e, f]); test_selector(':not(:is(span, b, i, div))', []); test_selector(':not(:is(#b ~ div div, * + #c))', [a, b, d, e]); test_selector(':not(:is(div > :not(#e)))', [a, b, c, e]); test_selector(':not(:is(div > :not(:where(#e, #f))))', [a, b, c, e, f]); </script>