Test :matches() with a selector list ending with selector that can never match.

On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".


Testing "testcase:matches(.bar, :not(*))"
PASS document.querySelectorAll('#test-root testcase:matches(.bar, :not(*))').length is 1
PASS document.querySelectorAll('#test-root testcase:matches(.bar, :not(*))')[0].id is "testcase1"
PASS getComputedStyle(document.querySelectorAll("#test-root *")[0]).backgroundColor is "rgb(10, 100, 200)"
PASS getComputedStyle(document.querySelectorAll("#test-root *")[1]).backgroundColor is "rgb(255, 0, 0)"
PASS getComputedStyle(document.querySelectorAll("#test-root *")[2]).backgroundColor is "rgb(255, 0, 0)"

Testing "testcase:matches(.bazoo, *:not(*))"
PASS document.querySelectorAll('#test-root testcase:matches(.bazoo, *:not(*))').length is 1
PASS document.querySelectorAll('#test-root testcase:matches(.bazoo, *:not(*))')[0].id is "testcase2"
PASS getComputedStyle(document.querySelectorAll("#test-root *")[0]).backgroundColor is "rgb(255, 0, 0)"
PASS getComputedStyle(document.querySelectorAll("#test-root *")[1]).backgroundColor is "rgb(10, 100, 200)"
PASS getComputedStyle(document.querySelectorAll("#test-root *")[2]).backgroundColor is "rgb(255, 0, 0)"

Testing "testcase:matches(.baz, #foo#bar)"
PASS document.querySelectorAll('#test-root testcase:matches(.baz, #foo#bar)').length is 1
PASS document.querySelectorAll('#test-root testcase:matches(.baz, #foo#bar)')[0].id is "testcase3"
PASS getComputedStyle(document.querySelectorAll("#test-root *")[0]).backgroundColor is "rgb(255, 0, 0)"
PASS getComputedStyle(document.querySelectorAll("#test-root *")[1]).backgroundColor is "rgb(255, 0, 0)"
PASS getComputedStyle(document.querySelectorAll("#test-root *")[2]).backgroundColor is "rgb(10, 100, 200)"

Testing "testcase:matches(.bar, #foo#bar, :not(*), *:not(*), foo:not(*))"
PASS document.querySelectorAll('#test-root testcase:matches(.bar, #foo#bar, :not(*), *:not(*), foo:not(*))').length is 1
PASS document.querySelectorAll('#test-root testcase:matches(.bar, #foo#bar, :not(*), *:not(*), foo:not(*))')[0].id is "testcase1"
PASS getComputedStyle(document.querySelectorAll("#test-root *")[0]).backgroundColor is "rgb(10, 100, 200)"
PASS getComputedStyle(document.querySelectorAll("#test-root *")[1]).backgroundColor is "rgb(255, 0, 0)"
PASS getComputedStyle(document.querySelectorAll("#test-root *")[2]).backgroundColor is "rgb(255, 0, 0)"

Testing "testcase:matches(.bazoo, #foo#bar, :not(*), *:not(*), foo:not(*), #foo#bar, :not(*), *:not(*), foo:not(*))"
PASS document.querySelectorAll('#test-root testcase:matches(.bazoo, #foo#bar, :not(*), *:not(*), foo:not(*), #foo#bar, :not(*), *:not(*), foo:not(*))').length is 1
PASS document.querySelectorAll('#test-root testcase:matches(.bazoo, #foo#bar, :not(*), *:not(*), foo:not(*), #foo#bar, :not(*), *:not(*), foo:not(*))')[0].id is "testcase2"
PASS getComputedStyle(document.querySelectorAll("#test-root *")[0]).backgroundColor is "rgb(255, 0, 0)"
PASS getComputedStyle(document.querySelectorAll("#test-root *")[1]).backgroundColor is "rgb(10, 100, 200)"
PASS getComputedStyle(document.querySelectorAll("#test-root *")[2]).backgroundColor is "rgb(255, 0, 0)"

PASS successfullyParsed is true

TEST COMPLETE

