PASS: :defined:not(.foo) descendant begins matching initial
PASS: :defined:not(.foo) descendant begins matching after definition
PASS: :defined:not(#foo) descendant begins matching initial
PASS: :defined:not(#foo) descendant begins matching after definition
PASS: :defined:not([data-foo]) descendant begins matching initial
PASS: :defined:not([data-foo]) descendant begins matching after definition
PASS: :defined:not(.foo):not([data-foo]) descendant begins matching initial
PASS: :defined:not(.foo):not([data-foo]) descendant begins matching after definition
PASS: :defined:is(:not(.foo)) descendant begins matching initial
PASS: :defined:is(:not(.foo)) descendant begins matching after definition
PASS: :defined:where(:not([data-foo])) descendant begins matching initial
PASS: :defined:where(:not([data-foo])) descendant begins matching after definition
PASS: :defined:not(.foo) child combinator begins matching initial
PASS: :defined:not(.foo) child combinator begins matching after definition
PASS: :defined:not(.foo) with non-matching id begins matching initial
PASS: :defined:not(.foo) with non-matching id begins matching after definition
PASS: :defined:not(.foo) with unrelated attribute begins matching initial
PASS: :defined:not(.foo) with unrelated attribute begins matching after definition
PASS: :defined:not(.foo, [data-foo]) descendant begins matching initial
PASS: :defined:not(.foo, [data-foo]) descendant begins matching after definition
PASS: :has(+ :not(.foo)) starts matching after adjacent same-parent move initial
PASS: :has(+ :not(.foo)) starts matching after adjacent same-parent move after mutation
PASS: :has(+ :not(.foo)) stops matching after adjacent same-parent move initial
PASS: :has(+ :not(.foo)) stops matching after adjacent same-parent move after mutation
PASS: :has(~ :not(.foo)) starts matching after same-parent move from before anchor initial
PASS: :has(~ :not(.foo)) starts matching after same-parent move from before anchor after mutation
PASS: :has(~ :not(.foo)) stops matching after same-parent move before anchor initial
PASS: :has(~ :not(.foo)) stops matching after same-parent move before anchor after mutation
PASS: :has(+ :not([data-foo])) starts matching after adjacent same-parent move initial
PASS: :has(+ :not([data-foo])) starts matching after adjacent same-parent move after mutation
PASS: :has(+ :not(#foo)) starts matching after adjacent same-parent move initial
PASS: :has(+ :not(#foo)) starts matching after adjacent same-parent move after mutation
PASS: :has(+ :not(.foo) .inside) starts matching after adjacent subtree move initial
PASS: :has(+ :not(.foo) .inside) starts matching after adjacent subtree move after mutation
PASS: :has(+ :not(.foo):not([data-foo])) starts matching after adjacent same-parent move initial
PASS: :has(+ :not(.foo):not([data-foo])) starts matching after adjacent same-parent move after mutation
PASS: :has(+ :is(:not(.foo))) starts matching after adjacent same-parent move initial
PASS: :has(+ :is(:not(.foo))) starts matching after adjacent same-parent move after mutation
PASS: :has(+ :where(:not([data-foo]))) starts matching after adjacent same-parent move initial
PASS: :has(+ :where(:not([data-foo]))) starts matching after adjacent same-parent move after mutation
PASS: :has(+ :not(span)) starts matching after adjacent same-parent move initial
PASS: :has(+ :not(span)) starts matching after adjacent same-parent move after mutation
PASS: :has(+ :not(.foo, #foo)) starts matching after adjacent same-parent move initial
PASS: :has(+ :not(.foo, #foo)) starts matching after adjacent same-parent move after mutation
PASS: :has(~ :not([data-foo])) starts matching after same-parent move from before anchor initial
PASS: :has(~ :not([data-foo])) starts matching after same-parent move from before anchor after mutation
PASS: :has(~ :not(#foo)) stops matching after same-parent move before anchor initial
PASS: :has(~ :not(#foo)) stops matching after same-parent move before anchor after mutation
TOTAL FAILURES: 0
