Tests: Import attribute-selector case-sensitivity tests

This commit is contained in:
Sam Atkins 2025-05-15 14:51:25 +01:00
commit a56ce0f6fa
Notes: github-actions[bot] 2025-05-16 15:43:31 +00:00
10 changed files with 1548 additions and 0 deletions

View file

@ -0,0 +1,78 @@
Harness status: OK
Found 72 tests
60 Pass
12 Fail
Pass [foo="bar"] /* sanity check */ insertRule
Pass [foo="bar"] /* sanity check */ getting CSSRule#cssText
Pass [foo="bar"] /* sanity check */ getting CSSStyleRule#selectorText
Pass [foo="bar"] /* sanity check */ setting CSSStyleRule#selectorText
Pass [foo="bar"] /* sanity check */ insertRule in @media
Pass [foo="bar"] /* sanity check */ getting CSSRule#cssText in @media
Pass [foo="bar"] /* sanity check */ getting CSSStyleRule#selectorText in @media
Pass [foo="bar"] /* sanity check */ setting CSSStyleRule#selectorText in @media
Pass [foo="bar" i] insertRule
Pass [foo="bar" i] getting CSSRule#cssText
Pass [foo="bar" i] getting CSSStyleRule#selectorText
Pass [foo="bar" i] setting CSSStyleRule#selectorText
Pass [foo="bar" i] insertRule in @media
Pass [foo="bar" i] getting CSSRule#cssText in @media
Pass [foo="bar" i] getting CSSStyleRule#selectorText in @media
Pass [foo="bar" i] setting CSSStyleRule#selectorText in @media
Pass [foo="bar" /**/ i] insertRule
Pass [foo="bar" /**/ i] getting CSSRule#cssText
Pass [foo="bar" /**/ i] getting CSSStyleRule#selectorText
Pass [foo="bar" /**/ i] setting CSSStyleRule#selectorText
Pass [foo="bar" /**/ i] insertRule in @media
Pass [foo="bar" /**/ i] getting CSSRule#cssText in @media
Pass [foo="bar" /**/ i] getting CSSStyleRule#selectorText in @media
Pass [foo="bar" /**/ i] setting CSSStyleRule#selectorText in @media
Pass [foo="bar"/**/i] insertRule
Pass [foo="bar"/**/i] getting CSSRule#cssText
Pass [foo="bar"/**/i] getting CSSStyleRule#selectorText
Pass [foo="bar"/**/i] setting CSSStyleRule#selectorText
Pass [foo="bar"/**/i] insertRule in @media
Pass [foo="bar"/**/i] getting CSSRule#cssText in @media
Pass [foo="bar"/**/i] getting CSSStyleRule#selectorText in @media
Pass [foo="bar"/**/i] setting CSSStyleRule#selectorText in @media
Pass [*|foo="bar" i] insertRule
Fail [*|foo="bar" i] getting CSSRule#cssText
Fail [*|foo="bar" i] getting CSSStyleRule#selectorText
Fail [*|foo="bar" i] setting CSSStyleRule#selectorText
Pass [*|foo="bar" i] insertRule in @media
Fail [*|foo="bar" i] getting CSSRule#cssText in @media
Fail [*|foo="bar" i] getting CSSStyleRule#selectorText in @media
Fail [*|foo="bar" i] setting CSSStyleRule#selectorText in @media
Pass [foo="bar" s] insertRule
Pass [foo="bar" s] getting CSSRule#cssText
Pass [foo="bar" s] getting CSSStyleRule#selectorText
Pass [foo="bar" s] setting CSSStyleRule#selectorText
Pass [foo="bar" s] insertRule in @media
Pass [foo="bar" s] getting CSSRule#cssText in @media
Pass [foo="bar" s] getting CSSStyleRule#selectorText in @media
Pass [foo="bar" s] setting CSSStyleRule#selectorText in @media
Pass [foo="bar" /**/ s] insertRule
Pass [foo="bar" /**/ s] getting CSSRule#cssText
Pass [foo="bar" /**/ s] getting CSSStyleRule#selectorText
Pass [foo="bar" /**/ s] setting CSSStyleRule#selectorText
Pass [foo="bar" /**/ s] insertRule in @media
Pass [foo="bar" /**/ s] getting CSSRule#cssText in @media
Pass [foo="bar" /**/ s] getting CSSStyleRule#selectorText in @media
Pass [foo="bar" /**/ s] setting CSSStyleRule#selectorText in @media
Pass [foo="bar"/**/s] insertRule
Pass [foo="bar"/**/s] getting CSSRule#cssText
Pass [foo="bar"/**/s] getting CSSStyleRule#selectorText
Pass [foo="bar"/**/s] setting CSSStyleRule#selectorText
Pass [foo="bar"/**/s] insertRule in @media
Pass [foo="bar"/**/s] getting CSSRule#cssText in @media
Pass [foo="bar"/**/s] getting CSSStyleRule#selectorText in @media
Pass [foo="bar"/**/s] setting CSSStyleRule#selectorText in @media
Pass [*|foo="bar" s] insertRule
Fail [*|foo="bar" s] getting CSSRule#cssText
Fail [*|foo="bar" s] getting CSSStyleRule#selectorText
Fail [*|foo="bar" s] setting CSSStyleRule#selectorText
Pass [*|foo="bar" s] insertRule in @media
Fail [*|foo="bar" s] getting CSSRule#cssText in @media
Fail [*|foo="bar" s] getting CSSStyleRule#selectorText in @media
Fail [*|foo="bar" s] setting CSSStyleRule#selectorText in @media

View file

@ -0,0 +1,961 @@
Harness status: OK
Found 955 tests
926 Pass
29 Fail
Pass [foo='BAR'] /* sanity check (match) */ <div foo="BAR"> in standards mode
Pass [foo='BAR'] /* sanity check (match) */ <div foo="BAR"> with querySelector in standards mode
Pass [foo='bar'] /* sanity check (match) */ <div foo="bar"> in standards mode
Pass [foo='bar'] /* sanity check (match) */ <div foo="bar"> with querySelector in standards mode
Pass [align='left'] /* sanity check (match) */ <div align="left"> in standards mode
Pass [align='left'] /* sanity check (match) */ <div align="left"> with querySelector in standards mode
Pass [class~='a'] /* sanity check (match) */ <div class="X a b"> in standards mode
Pass [class~='a'] /* sanity check (match) */ <div class="X a b"> with querySelector in standards mode
Pass [class~='A'] /* sanity check (match) */ <div class="x A B"> in standards mode
Pass [class~='A'] /* sanity check (match) */ <div class="x A B"> with querySelector in standards mode
Pass [id^='a'] /* sanity check (match) */ <div id="ab"> in standards mode
Pass [id^='a'] /* sanity check (match) */ <div id="ab"> with querySelector in standards mode
Pass [id$='A'] /* sanity check (match) */ <div id="XA"> in standards mode
Pass [id$='A'] /* sanity check (match) */ <div id="XA"> with querySelector in standards mode
Pass [lang|='a'] /* sanity check (match) */ <div lang="a-b"> in standards mode
Pass [lang|='a'] /* sanity check (match) */ <div lang="a-b"> with querySelector in standards mode
Pass [lang*='A'] /* sanity check (match) */ <div lang="XAB"> in standards mode
Pass [lang*='A'] /* sanity check (match) */ <div lang="XAB"> with querySelector in standards mode
Fail @namespace x 'http://www.w3.org/XML/1998/namespace'; [x|lang='A'] /* sanity check (match) */ <div {http://www.w3.org/XML/1998/namespace}lang="A"> in standards mode
Pass [foo='bar' i] <div foo="BAR"> in standards mode
Pass [foo='bar' i] <div foo="BAR"> with querySelector in standards mode
Pass [foo='' i] <div foo=""> in standards mode
Pass [foo='' i] <div foo=""> with querySelector in standards mode
Pass [foo='ä' i] /* COMBINING in both */ <div foo="Ä"> in standards mode
Pass [foo='ä' i] /* COMBINING in both */ <div foo="Ä"> with querySelector in standards mode
Pass [foo='Ä' i] /* COMBINING in both */ <div foo="ä"> in standards mode
Pass [foo='Ä' i] /* COMBINING in both */ <div foo="ä"> with querySelector in standards mode
Fail [*|foo='bar' i] <div foo="x" {a}foo="x" {b}foo="BAR" {c}foo="x"> in standards mode
Fail [*|foo='bar' i] <div foo="x" {a}foo="x" {b}foo="BAR" {c}foo="x"> with querySelector in standards mode
Pass [*|foo='bar' i] <div foo="BAR" {a}foo="x" {b}foo="x" {c}foo="x"> in standards mode
Pass [*|foo='bar' i] <div foo="BAR" {a}foo="x" {b}foo="x" {c}foo="x"> with querySelector in standards mode
Pass [align='left' i] <div align="LEFT"> in standards mode
Pass [align='left' i] <div align="LEFT"> with querySelector in standards mode
Pass [align='LEFT' i] <div align="left"> in standards mode
Pass [align='LEFT' i] <div align="left"> with querySelector in standards mode
Pass [class~='a' i] <div class="X A B"> in standards mode
Pass [class~='a' i] <div class="X A B"> with querySelector in standards mode
Pass [class~='A' i] <div class="x a b"> in standards mode
Pass [class~='A' i] <div class="x a b"> with querySelector in standards mode
Pass [id^='a' i] <div id="AB"> in standards mode
Pass [id^='a' i] <div id="AB"> with querySelector in standards mode
Pass [id$='A' i] <div id="xa"> in standards mode
Pass [id$='A' i] <div id="xa"> with querySelector in standards mode
Pass [lang|='a' i] <div lang="A-B"> in standards mode
Pass [lang|='a' i] <div lang="A-B"> with querySelector in standards mode
Pass [lang*='A' i] <div lang="xab"> in standards mode
Pass [lang*='A' i] <div lang="xab"> with querySelector in standards mode
Pass [*|lang='a' i] <div {http://www.w3.org/XML/1998/namespace}lang="A"> in standards mode
Pass [*|lang='a' i] <div {http://www.w3.org/XML/1998/namespace}lang="A"> with querySelector in standards mode
Pass [*|lang='A' i] <div {http://www.w3.org/XML/1998/namespace}lang="a"> in standards mode
Pass [*|lang='A' i] <div {http://www.w3.org/XML/1998/namespace}lang="a"> with querySelector in standards mode
Fail @namespace x 'http://www.w3.org/XML/1998/namespace'; [x|lang='A' i] <div {http://www.w3.org/XML/1998/namespace}lang="a"> in standards mode
Pass [foo='bar' i][foo='bar' i] <div foo="BAR"> in standards mode
Pass [foo='bar' i][foo='bar' i] <div foo="BAR"> with querySelector in standards mode
Pass [foo='BAR'][foo='bar' i] <div foo="BAR"> in standards mode
Pass [foo='BAR'][foo='bar' i] <div foo="BAR"> with querySelector in standards mode
Pass [foo='bar' i][foo='BAR'] <div foo="BAR"> in standards mode
Pass [foo='bar' i][foo='BAR'] <div foo="BAR"> with querySelector in standards mode
Pass [foo='bar' s] <div foo="bar"> in standards mode
Pass [foo='bar' s] <div foo="bar"> with querySelector in standards mode
Pass [foo='' s] <div foo=""> in standards mode
Pass [foo='' s] <div foo=""> with querySelector in standards mode
Pass [foo='ä' s] /* COMBINING in both */ <div foo="ä"> in standards mode
Pass [foo='ä' s] /* COMBINING in both */ <div foo="ä"> with querySelector in standards mode
Fail [*|foo='bar' s] <div foo="x" {a}foo="x" {b}foo="bar" {c}foo="x"> in standards mode
Fail [*|foo='bar' s] <div foo="x" {a}foo="x" {b}foo="bar" {c}foo="x"> with querySelector in standards mode
Pass [*|foo='bar' s] <div foo="bar" {a}foo="x" {b}foo="x" {c}foo="x"> in standards mode
Pass [*|foo='bar' s] <div foo="bar" {a}foo="x" {b}foo="x" {c}foo="x"> with querySelector in standards mode
Pass [align='left' s] <div align="left"> in standards mode
Pass [align='left' s] <div align="left"> with querySelector in standards mode
Pass [align='LEFT' s] <div align="LEFT"> in standards mode
Pass [align='LEFT' s] <div align="LEFT"> with querySelector in standards mode
Pass [class~='a' s] <div class="x a b"> in standards mode
Pass [class~='a' s] <div class="x a b"> with querySelector in standards mode
Pass [class~='A' s] <div class="X A B"> in standards mode
Pass [class~='A' s] <div class="X A B"> with querySelector in standards mode
Pass [id^='a' s] <div id="ab"> in standards mode
Pass [id^='a' s] <div id="ab"> with querySelector in standards mode
Pass [id$='A' s] <div id="XA"> in standards mode
Pass [id$='A' s] <div id="XA"> with querySelector in standards mode
Pass [lang|='a' s] <div lang="a-b"> in standards mode
Pass [lang|='a' s] <div lang="a-b"> with querySelector in standards mode
Pass [lang*='A' s] <div lang="XAB"> in standards mode
Pass [lang*='A' s] <div lang="XAB"> with querySelector in standards mode
Pass [*|lang='a' s] <div {http://www.w3.org/XML/1998/namespace}lang="a"> in standards mode
Pass [*|lang='a' s] <div {http://www.w3.org/XML/1998/namespace}lang="a"> with querySelector in standards mode
Pass [*|lang='A' s] <div {http://www.w3.org/XML/1998/namespace}lang="A"> in standards mode
Pass [*|lang='A' s] <div {http://www.w3.org/XML/1998/namespace}lang="A"> with querySelector in standards mode
Fail @namespace x 'http://www.w3.org/XML/1998/namespace'; [x|lang='A' s] <div {http://www.w3.org/XML/1998/namespace}lang="A"> in standards mode
Pass [foo='BAR' s][foo='BAR' s] <div foo="BAR"> in standards mode
Pass [foo='BAR' s][foo='BAR' s] <div foo="BAR"> with querySelector in standards mode
Pass [align='left'] /* sanity check (match HTML) */ <div align="LEFT"> in standards mode
Pass [align='left'] /* sanity check (match HTML) */ <div align="LEFT"> with querySelector in standards mode
Pass [align='LEFT'] /* sanity check (match HTML) */ <div align="left"> in standards mode
Pass [align='LEFT'] /* sanity check (match HTML) */ <div align="left"> with querySelector in standards mode
Pass [lang|='a'] /* sanity check (match HTML) */ <div lang="A-B"> in standards mode
Pass [lang|='a'] /* sanity check (match HTML) */ <div lang="A-B"> with querySelector in standards mode
Pass [lang*='A'] /* sanity check (match HTML) */ <div lang="xab"> in standards mode
Pass [lang*='A'] /* sanity check (match HTML) */ <div lang="xab"> with querySelector in standards mode
Pass [missingattr] /* sanity check (no match) */ <div foo="BAR"> in standards mode
Pass [missingattr] /* sanity check (no match) */ <div foo="BAR"> with querySelector in standards mode
Pass [foo='bar'] /* sanity check (no match) */ <div foo="BAR"> in standards mode
Pass [foo='bar'] /* sanity check (no match) */ <div foo="BAR"> with querySelector in standards mode
Pass [class~='a'] /* sanity check (no match) */ <div class="X A B"> in standards mode
Pass [class~='a'] /* sanity check (no match) */ <div class="X A B"> with querySelector in standards mode
Pass [class~='A'] /* sanity check (no match) */ <div class="x a b"> in standards mode
Pass [class~='A'] /* sanity check (no match) */ <div class="x a b"> with querySelector in standards mode
Pass [id^='a'] /* sanity check (no match) */ <div id="AB"> in standards mode
Pass [id^='a'] /* sanity check (no match) */ <div id="AB"> with querySelector in standards mode
Pass [id$='A'] <div id="xa"> in standards mode
Pass [id$='A'] <div id="xa"> with querySelector in standards mode
Fail [*|lang='a'] /* sanity check (no match) */ <div {http://www.w3.org/XML/1998/namespace}lang="A"> in standards mode
Fail [*|lang='a'] /* sanity check (no match) */ <div {http://www.w3.org/XML/1998/namespace}lang="A"> with querySelector in standards mode
Fail [*|lang='A'] /* sanity check (no match) */ <div {http://www.w3.org/XML/1998/namespace}lang="a"> in standards mode
Fail [*|lang='A'] /* sanity check (no match) */ <div {http://www.w3.org/XML/1998/namespace}lang="a"> with querySelector in standards mode
Pass @namespace x 'http://www.w3.org/XML/1998/namespace'; [x|lang='A'] /* sanity check (no match) */ <div {http://www.w3.org/XML/1998/namespace}lang="a"> in standards mode
Pass [foo='' i] <div foo="BAR"> in standards mode
Pass [foo='' i] <div foo="BAR"> with querySelector in standards mode
Pass [foo='' i] /* \0 in selector */ <div foo=""> in standards mode
Pass [foo='' i] /* \0 in selector */ <div foo=""> with querySelector in standards mode
Pass [foo='' i] /* \0 in attribute */ <div foo=""> in standards mode
Pass [foo='' i] /* \0 in attribute */ <div foo=""> with querySelector in standards mode
Pass [foo='ä' i] <div foo="Ä"> in standards mode
Pass [foo='ä' i] <div foo="Ä"> with querySelector in standards mode
Pass [foo='Ä' i] <div foo="ä"> in standards mode
Pass [foo='Ä' i] <div foo="ä"> with querySelector in standards mode
Pass [foo='ä' i] /* COMBINING in selector */ <div foo="Ä"> in standards mode
Pass [foo='ä' i] /* COMBINING in selector */ <div foo="Ä"> with querySelector in standards mode
Pass [foo~='ä' i] /* COMBINING in selector */ <div foo="ä"> in standards mode
Pass [foo~='ä' i] /* COMBINING in selector */ <div foo="ä"> with querySelector in standards mode
Pass [foo^='Ä' i] /* COMBINING in selector */ <div foo="Ä"> in standards mode
Pass [foo^='Ä' i] /* COMBINING in selector */ <div foo="Ä"> with querySelector in standards mode
Pass [foo$='Ä' i] /* COMBINING in selector */ <div foo="ä"> in standards mode
Pass [foo$='Ä' i] /* COMBINING in selector */ <div foo="ä"> with querySelector in standards mode
Pass [foo*='ä' i] /* COMBINING in attribute */ <div foo="ä"> in standards mode
Pass [foo*='ä' i] /* COMBINING in attribute */ <div foo="ä"> with querySelector in standards mode
Pass [foo|='ä' i] /* COMBINING in attribute */ <div foo="Ä"> in standards mode
Pass [foo|='ä' i] /* COMBINING in attribute */ <div foo="Ä"> with querySelector in standards mode
Pass [foo='Ä' i] /* COMBINING in attribute */ <div foo="ä"> in standards mode
Pass [foo='Ä' i] /* COMBINING in attribute */ <div foo="ä"> with querySelector in standards mode
Pass [foo='Ä' i] /* COMBINING in attribute */ <div foo="Ä"> in standards mode
Pass [foo='Ä' i] /* COMBINING in attribute */ <div foo="Ä"> with querySelector in standards mode
Pass [foo='ä' i] /* COMBINING in selector */ <div foo="a"> in standards mode
Pass [foo='ä' i] /* COMBINING in selector */ <div foo="a"> with querySelector in standards mode
Pass [foo='ä' i] /* COMBINING in selector */ <div foo="A"> in standards mode
Pass [foo='ä' i] /* COMBINING in selector */ <div foo="A"> with querySelector in standards mode
Pass [foo='Ä' i] /* COMBINING in selector */ <div foo="a"> in standards mode
Pass [foo='Ä' i] /* COMBINING in selector */ <div foo="a"> with querySelector in standards mode
Pass [foo='Ä' i] /* COMBINING in selector */ <div foo="A"> in standards mode
Pass [foo='Ä' i] /* COMBINING in selector */ <div foo="A"> with querySelector in standards mode
Pass [foo='a' i] /* COMBINING in attribute */ <div foo="ä"> in standards mode
Pass [foo='a' i] /* COMBINING in attribute */ <div foo="ä"> with querySelector in standards mode
Pass [foo='A' i] /* COMBINING in attribute */ <div foo="ä"> in standards mode
Pass [foo='A' i] /* COMBINING in attribute */ <div foo="ä"> with querySelector in standards mode
Pass [foo='a' i] /* COMBINING in attribute */ <div foo="Ä"> in standards mode
Pass [foo='a' i] /* COMBINING in attribute */ <div foo="Ä"> with querySelector in standards mode
Pass [foo='A' i] /* COMBINING in attribute */ <div foo="Ä"> in standards mode
Pass [foo='A' i] /* COMBINING in attribute */ <div foo="Ä"> with querySelector in standards mode
Pass [foo='i' i] <div foo="İ"> in standards mode
Pass [foo='i' i] <div foo="İ"> with querySelector in standards mode
Pass [foo='i' i] <div foo="ı"> in standards mode
Pass [foo='i' i] <div foo="ı"> with querySelector in standards mode
Pass [foo='I' i] <div foo="İ"> in standards mode
Pass [foo='I' i] <div foo="İ"> with querySelector in standards mode
Pass [foo='I' i] <div foo="ı"> in standards mode
Pass [foo='I' i] <div foo="ı"> with querySelector in standards mode
Pass [foo='İ' i] <div foo="i"> in standards mode
Pass [foo='İ' i] <div foo="i"> with querySelector in standards mode
Pass [foo='ı' i] <div foo="i"> in standards mode
Pass [foo='ı' i] <div foo="i"> with querySelector in standards mode
Pass [foo='İ' i] <div foo="I"> in standards mode
Pass [foo='İ' i] <div foo="I"> with querySelector in standards mode
Pass [foo='ı' i] <div foo="I"> in standards mode
Pass [foo='ı' i] <div foo="I"> with querySelector in standards mode
Pass [foo='bar' i] <div foo="x" {a}foo="BAR"> in standards mode
Pass [foo='bar' i] <div foo="x" {a}foo="BAR"> with querySelector in standards mode
Pass [|foo='bar' i] <div foo="x" {a}foo="BAR"> in standards mode
Pass [|foo='bar' i] <div foo="x" {a}foo="BAR"> with querySelector in standards mode
Pass [foo='bar' i] <div FOO="bar"> in standards mode
Pass [foo='bar' i] <div FOO="bar"> with querySelector in standards mode
Pass [foo=' ' i] /* tab in selector */ <div foo=" "> in standards mode
Pass [foo=' ' i] /* tab in selector */ <div foo=" "> with querySelector in standards mode
Pass [foo=' ' i] /* tab in attribute */ <div foo=" "> in standards mode
Pass [foo=' ' i] /* tab in attribute */ <div foo=" "> with querySelector in standards mode
Pass @namespace x 'a'; [x|foo='' i] <div {A}foo=""> in standards mode
Pass @namespace x 'A'; [x|foo='' i] <div {a}foo=""> in standards mode
Pass [foo='bar' i][foo='bar'] <div foo="BAR"> in standards mode
Pass [foo='bar' i][foo='bar'] <div foo="BAR"> with querySelector in standards mode
Pass [foo='bar' i] <div baz="BAR"> in standards mode
Pass [foo='bar' i] <div baz="BAR"> with querySelector in standards mode
Pass [foo^='é' i] <div foo="É"> in standards mode
Pass [foo^='é' i] <div foo="É"> with querySelector in standards mode
Pass [foo$='é' i] <div foo="É"> in standards mode
Pass [foo$='é' i] <div foo="É"> with querySelector in standards mode
Pass [foo*='é' i] <div foo="É"> in standards mode
Pass [foo*='é' i] <div foo="É"> with querySelector in standards mode
Pass [foo|='é' i] <div foo="É"> in standards mode
Pass [foo|='é' i] <div foo="É"> with querySelector in standards mode
Pass [foo^='É' i] <div foo="é"> in standards mode
Pass [foo^='É' i] <div foo="é"> with querySelector in standards mode
Pass [foo$='É' i] <div foo="é"> in standards mode
Pass [foo$='É' i] <div foo="é"> with querySelector in standards mode
Pass [foo*='É' i] <div foo="é"> in standards mode
Pass [foo*='É' i] <div foo="é"> with querySelector in standards mode
Pass [foo|='É' i] <div foo="é"> in standards mode
Pass [foo|='É' i] <div foo="é"> with querySelector in standards mode
Pass [foo='' s] <div foo="BAR"> in standards mode
Pass [foo='' s] <div foo="BAR"> with querySelector in standards mode
Pass [foo='' s] /* \0 in selector */ <div foo=""> in standards mode
Pass [foo='' s] /* \0 in selector */ <div foo=""> with querySelector in standards mode
Pass [foo='' s] /* \0 in attribute */ <div foo=""> in standards mode
Pass [foo='' s] /* \0 in attribute */ <div foo=""> with querySelector in standards mode
Pass [foo='ä' s] <div foo="Ä"> in standards mode
Pass [foo='ä' s] <div foo="Ä"> with querySelector in standards mode
Pass [foo='Ä' s] <div foo="ä"> in standards mode
Pass [foo='Ä' s] <div foo="ä"> with querySelector in standards mode
Pass [foo='ä' s] /* COMBINING in selector */ <div foo="Ä"> in standards mode
Pass [foo='ä' s] /* COMBINING in selector */ <div foo="Ä"> with querySelector in standards mode
Pass [foo~='ä' s] /* COMBINING in selector */ <div foo="ä"> in standards mode
Pass [foo~='ä' s] /* COMBINING in selector */ <div foo="ä"> with querySelector in standards mode
Pass [foo^='Ä' s] /* COMBINING in selector */ <div foo="Ä"> in standards mode
Pass [foo^='Ä' s] /* COMBINING in selector */ <div foo="Ä"> with querySelector in standards mode
Pass [foo$='Ä' s] /* COMBINING in selector */ <div foo="ä"> in standards mode
Pass [foo$='Ä' s] /* COMBINING in selector */ <div foo="ä"> with querySelector in standards mode
Pass [foo*='ä' s] /* COMBINING in attribute */ <div foo="ä"> in standards mode
Pass [foo*='ä' s] /* COMBINING in attribute */ <div foo="ä"> with querySelector in standards mode
Pass [foo|='ä' s] /* COMBINING in attribute */ <div foo="Ä"> in standards mode
Pass [foo|='ä' s] /* COMBINING in attribute */ <div foo="Ä"> with querySelector in standards mode
Pass [foo='Ä' s] /* COMBINING in attribute */ <div foo="ä"> in standards mode
Pass [foo='Ä' s] /* COMBINING in attribute */ <div foo="ä"> with querySelector in standards mode
Pass [foo='Ä' s] /* COMBINING in attribute */ <div foo="Ä"> in standards mode
Pass [foo='Ä' s] /* COMBINING in attribute */ <div foo="Ä"> with querySelector in standards mode
Pass [foo='ä' s] /* COMBINING in selector */ <div foo="a"> in standards mode
Pass [foo='ä' s] /* COMBINING in selector */ <div foo="a"> with querySelector in standards mode
Pass [foo='ä' s] /* COMBINING in selector */ <div foo="A"> in standards mode
Pass [foo='ä' s] /* COMBINING in selector */ <div foo="A"> with querySelector in standards mode
Pass [foo='Ä' s] /* COMBINING in selector */ <div foo="a"> in standards mode
Pass [foo='Ä' s] /* COMBINING in selector */ <div foo="a"> with querySelector in standards mode
Pass [foo='Ä' s] /* COMBINING in selector */ <div foo="A"> in standards mode
Pass [foo='Ä' s] /* COMBINING in selector */ <div foo="A"> with querySelector in standards mode
Pass [foo='a' s] /* COMBINING in attribute */ <div foo="ä"> in standards mode
Pass [foo='a' s] /* COMBINING in attribute */ <div foo="ä"> with querySelector in standards mode
Pass [foo='A' s] /* COMBINING in attribute */ <div foo="ä"> in standards mode
Pass [foo='A' s] /* COMBINING in attribute */ <div foo="ä"> with querySelector in standards mode
Pass [foo='a' s] /* COMBINING in attribute */ <div foo="Ä"> in standards mode
Pass [foo='a' s] /* COMBINING in attribute */ <div foo="Ä"> with querySelector in standards mode
Pass [foo='A' s] /* COMBINING in attribute */ <div foo="Ä"> in standards mode
Pass [foo='A' s] /* COMBINING in attribute */ <div foo="Ä"> with querySelector in standards mode
Pass [foo='i' s] <div foo="İ"> in standards mode
Pass [foo='i' s] <div foo="İ"> with querySelector in standards mode
Pass [foo='i' s] <div foo="ı"> in standards mode
Pass [foo='i' s] <div foo="ı"> with querySelector in standards mode
Pass [foo='I' s] <div foo="İ"> in standards mode
Pass [foo='I' s] <div foo="İ"> with querySelector in standards mode
Pass [foo='I' s] <div foo="ı"> in standards mode
Pass [foo='I' s] <div foo="ı"> with querySelector in standards mode
Pass [foo='İ' s] <div foo="i"> in standards mode
Pass [foo='İ' s] <div foo="i"> with querySelector in standards mode
Pass [foo='ı' s] <div foo="i"> in standards mode
Pass [foo='ı' s] <div foo="i"> with querySelector in standards mode
Pass [foo='İ' s] <div foo="I"> in standards mode
Pass [foo='İ' s] <div foo="I"> with querySelector in standards mode
Pass [foo='ı' s] <div foo="I"> in standards mode
Pass [foo='ı' s] <div foo="I"> with querySelector in standards mode
Pass [foo='bar' s] <div foo="x" {a}foo="BAR"> in standards mode
Pass [foo='bar' s] <div foo="x" {a}foo="BAR"> with querySelector in standards mode
Pass [|foo='bar' s] <div foo="x" {a}foo="BAR"> in standards mode
Pass [|foo='bar' s] <div foo="x" {a}foo="BAR"> with querySelector in standards mode
Pass [foo='bar' s] <div FOO="bar"> in standards mode
Pass [foo='bar' s] <div FOO="bar"> with querySelector in standards mode
Pass [foo=' ' s] /* tab in selector */ <div foo=" "> in standards mode
Pass [foo=' ' s] /* tab in selector */ <div foo=" "> with querySelector in standards mode
Pass [foo=' ' s] /* tab in attribute */ <div foo=" "> in standards mode
Pass [foo=' ' s] /* tab in attribute */ <div foo=" "> with querySelector in standards mode
Pass @namespace x 'a'; [x|foo='' s] <div {A}foo=""> in standards mode
Pass @namespace x 'A'; [x|foo='' s] <div {a}foo=""> in standards mode
Pass [foo='bar' s][foo='bar'] <div foo="BAR"> in standards mode
Pass [foo='bar' s][foo='bar'] <div foo="BAR"> with querySelector in standards mode
Pass [foo='bar' s] <div baz="BAR"> in standards mode
Pass [foo='bar' s] <div baz="BAR"> with querySelector in standards mode
Pass [foo='bar' s] <div foo="BAR"> in standards mode
Pass [foo='bar' s] <div foo="BAR"> with querySelector in standards mode
Pass [foo='ä' s] /* COMBINING in both */ <div foo="Ä"> in standards mode
Pass [foo='ä' s] /* COMBINING in both */ <div foo="Ä"> with querySelector in standards mode
Pass [foo='Ä' s] /* COMBINING in both */ <div foo="ä"> in standards mode
Pass [foo='Ä' s] /* COMBINING in both */ <div foo="ä"> with querySelector in standards mode
Pass [*|foo='bar' s] <div foo="x" {a}foo="x" {b}foo="BAR" {c}foo="x"> in standards mode
Pass [*|foo='bar' s] <div foo="x" {a}foo="x" {b}foo="BAR" {c}foo="x"> with querySelector in standards mode
Pass [*|foo='bar' s] <div foo="BAR" {a}foo="x" {b}foo="x" {c}foo="x"> in standards mode
Pass [*|foo='bar' s] <div foo="BAR" {a}foo="x" {b}foo="x" {c}foo="x"> with querySelector in standards mode
Pass [align='left' s] <div align="LEFT"> in standards mode
Pass [align='left' s] <div align="LEFT"> with querySelector in standards mode
Pass [align='LEFT' s] <div align="left"> in standards mode
Pass [align='LEFT' s] <div align="left"> with querySelector in standards mode
Pass [class~='a' s] <div class="X A B"> in standards mode
Pass [class~='a' s] <div class="X A B"> with querySelector in standards mode
Pass [class~='A' s] <div class="x a b"> in standards mode
Pass [class~='A' s] <div class="x a b"> with querySelector in standards mode
Pass [id^='a' s] <div id="AB"> in standards mode
Pass [id^='a' s] <div id="AB"> with querySelector in standards mode
Pass [id$='A' s] <div id="xa"> in standards mode
Pass [id$='A' s] <div id="xa"> with querySelector in standards mode
Pass [lang|='a' s] <div lang="A-B"> in standards mode
Pass [lang|='a' s] <div lang="A-B"> with querySelector in standards mode
Pass [lang*='A' s] <div lang="xab"> in standards mode
Pass [lang*='A' s] <div lang="xab"> with querySelector in standards mode
Pass [*|lang='a' s] <div {http://www.w3.org/XML/1998/namespace}lang="A"> in standards mode
Pass [*|lang='a' s] <div {http://www.w3.org/XML/1998/namespace}lang="A"> with querySelector in standards mode
Pass [*|lang='A' s] <div {http://www.w3.org/XML/1998/namespace}lang="a"> in standards mode
Pass [*|lang='A' s] <div {http://www.w3.org/XML/1998/namespace}lang="a"> with querySelector in standards mode
Pass @namespace x 'http://www.w3.org/XML/1998/namespace'; [x|lang='A' s] <div {http://www.w3.org/XML/1998/namespace}lang="a"> in standards mode
Pass [foo='bar' s][foo='bar' s] <div foo="BAR"> in standards mode
Pass [foo='bar' s][foo='bar' s] <div foo="BAR"> with querySelector in standards mode
Pass [foo='BAR' s][foo='bar'] <div foo="BAR"> in standards mode
Pass [foo='BAR' s][foo='bar'] <div foo="BAR"> with querySelector in standards mode
Pass [foo='bar'][foo='BAR' s] <div foo="BAR"> in standards mode
Pass [foo='bar'][foo='BAR' s] <div foo="BAR"> with querySelector in standards mode
Pass [foo='BAR'][foo='bar' s] <div foo="BAR"> in standards mode
Pass [foo='BAR'][foo='bar' s] <div foo="BAR"> with querySelector in standards mode
Pass [foo='bar' s][foo='BAR'] <div foo="bar"> in standards mode
Pass [foo='bar' s][foo='BAR'] <div foo="bar"> with querySelector in standards mode
Pass [foo='BAR'] /* sanity check (match) */ <div foo="BAR"> in quirks mode
Pass [foo='BAR'] /* sanity check (match) */ <div foo="BAR"> with querySelector in quirks mode
Pass [foo='bar'] /* sanity check (match) */ <div foo="bar"> in quirks mode
Pass [foo='bar'] /* sanity check (match) */ <div foo="bar"> with querySelector in quirks mode
Pass [align='left'] /* sanity check (match) */ <div align="left"> in quirks mode
Pass [align='left'] /* sanity check (match) */ <div align="left"> with querySelector in quirks mode
Pass [class~='a'] /* sanity check (match) */ <div class="X a b"> in quirks mode
Pass [class~='a'] /* sanity check (match) */ <div class="X a b"> with querySelector in quirks mode
Pass [class~='A'] /* sanity check (match) */ <div class="x A B"> in quirks mode
Pass [class~='A'] /* sanity check (match) */ <div class="x A B"> with querySelector in quirks mode
Pass [id^='a'] /* sanity check (match) */ <div id="ab"> in quirks mode
Pass [id^='a'] /* sanity check (match) */ <div id="ab"> with querySelector in quirks mode
Pass [id$='A'] /* sanity check (match) */ <div id="XA"> in quirks mode
Pass [id$='A'] /* sanity check (match) */ <div id="XA"> with querySelector in quirks mode
Pass [lang|='a'] /* sanity check (match) */ <div lang="a-b"> in quirks mode
Pass [lang|='a'] /* sanity check (match) */ <div lang="a-b"> with querySelector in quirks mode
Pass [lang*='A'] /* sanity check (match) */ <div lang="XAB"> in quirks mode
Pass [lang*='A'] /* sanity check (match) */ <div lang="XAB"> with querySelector in quirks mode
Fail @namespace x 'http://www.w3.org/XML/1998/namespace'; [x|lang='A'] /* sanity check (match) */ <div {http://www.w3.org/XML/1998/namespace}lang="A"> in quirks mode
Pass [foo='bar' i] <div foo="BAR"> in quirks mode
Pass [foo='bar' i] <div foo="BAR"> with querySelector in quirks mode
Pass [foo='' i] <div foo=""> in quirks mode
Pass [foo='' i] <div foo=""> with querySelector in quirks mode
Pass [foo='ä' i] /* COMBINING in both */ <div foo="Ä"> in quirks mode
Pass [foo='ä' i] /* COMBINING in both */ <div foo="Ä"> with querySelector in quirks mode
Pass [foo='Ä' i] /* COMBINING in both */ <div foo="ä"> in quirks mode
Pass [foo='Ä' i] /* COMBINING in both */ <div foo="ä"> with querySelector in quirks mode
Fail [*|foo='bar' i] <div foo="x" {a}foo="x" {b}foo="BAR" {c}foo="x"> in quirks mode
Fail [*|foo='bar' i] <div foo="x" {a}foo="x" {b}foo="BAR" {c}foo="x"> with querySelector in quirks mode
Pass [*|foo='bar' i] <div foo="BAR" {a}foo="x" {b}foo="x" {c}foo="x"> in quirks mode
Pass [*|foo='bar' i] <div foo="BAR" {a}foo="x" {b}foo="x" {c}foo="x"> with querySelector in quirks mode
Pass [align='left' i] <div align="LEFT"> in quirks mode
Pass [align='left' i] <div align="LEFT"> with querySelector in quirks mode
Pass [align='LEFT' i] <div align="left"> in quirks mode
Pass [align='LEFT' i] <div align="left"> with querySelector in quirks mode
Pass [class~='a' i] <div class="X A B"> in quirks mode
Pass [class~='a' i] <div class="X A B"> with querySelector in quirks mode
Pass [class~='A' i] <div class="x a b"> in quirks mode
Pass [class~='A' i] <div class="x a b"> with querySelector in quirks mode
Pass [id^='a' i] <div id="AB"> in quirks mode
Pass [id^='a' i] <div id="AB"> with querySelector in quirks mode
Pass [id$='A' i] <div id="xa"> in quirks mode
Pass [id$='A' i] <div id="xa"> with querySelector in quirks mode
Pass [lang|='a' i] <div lang="A-B"> in quirks mode
Pass [lang|='a' i] <div lang="A-B"> with querySelector in quirks mode
Pass [lang*='A' i] <div lang="xab"> in quirks mode
Pass [lang*='A' i] <div lang="xab"> with querySelector in quirks mode
Pass [*|lang='a' i] <div {http://www.w3.org/XML/1998/namespace}lang="A"> in quirks mode
Pass [*|lang='a' i] <div {http://www.w3.org/XML/1998/namespace}lang="A"> with querySelector in quirks mode
Pass [*|lang='A' i] <div {http://www.w3.org/XML/1998/namespace}lang="a"> in quirks mode
Pass [*|lang='A' i] <div {http://www.w3.org/XML/1998/namespace}lang="a"> with querySelector in quirks mode
Fail @namespace x 'http://www.w3.org/XML/1998/namespace'; [x|lang='A' i] <div {http://www.w3.org/XML/1998/namespace}lang="a"> in quirks mode
Pass [foo='bar' i][foo='bar' i] <div foo="BAR"> in quirks mode
Pass [foo='bar' i][foo='bar' i] <div foo="BAR"> with querySelector in quirks mode
Pass [foo='BAR'][foo='bar' i] <div foo="BAR"> in quirks mode
Pass [foo='BAR'][foo='bar' i] <div foo="BAR"> with querySelector in quirks mode
Pass [foo='bar' i][foo='BAR'] <div foo="BAR"> in quirks mode
Pass [foo='bar' i][foo='BAR'] <div foo="BAR"> with querySelector in quirks mode
Pass [foo='bar' s] <div foo="bar"> in quirks mode
Pass [foo='bar' s] <div foo="bar"> with querySelector in quirks mode
Pass [foo='' s] <div foo=""> in quirks mode
Pass [foo='' s] <div foo=""> with querySelector in quirks mode
Pass [foo='ä' s] /* COMBINING in both */ <div foo="ä"> in quirks mode
Pass [foo='ä' s] /* COMBINING in both */ <div foo="ä"> with querySelector in quirks mode
Fail [*|foo='bar' s] <div foo="x" {a}foo="x" {b}foo="bar" {c}foo="x"> in quirks mode
Fail [*|foo='bar' s] <div foo="x" {a}foo="x" {b}foo="bar" {c}foo="x"> with querySelector in quirks mode
Pass [*|foo='bar' s] <div foo="bar" {a}foo="x" {b}foo="x" {c}foo="x"> in quirks mode
Pass [*|foo='bar' s] <div foo="bar" {a}foo="x" {b}foo="x" {c}foo="x"> with querySelector in quirks mode
Pass [align='left' s] <div align="left"> in quirks mode
Pass [align='left' s] <div align="left"> with querySelector in quirks mode
Pass [align='LEFT' s] <div align="LEFT"> in quirks mode
Pass [align='LEFT' s] <div align="LEFT"> with querySelector in quirks mode
Pass [class~='a' s] <div class="x a b"> in quirks mode
Pass [class~='a' s] <div class="x a b"> with querySelector in quirks mode
Pass [class~='A' s] <div class="X A B"> in quirks mode
Pass [class~='A' s] <div class="X A B"> with querySelector in quirks mode
Pass [id^='a' s] <div id="ab"> in quirks mode
Pass [id^='a' s] <div id="ab"> with querySelector in quirks mode
Pass [id$='A' s] <div id="XA"> in quirks mode
Pass [id$='A' s] <div id="XA"> with querySelector in quirks mode
Pass [lang|='a' s] <div lang="a-b"> in quirks mode
Pass [lang|='a' s] <div lang="a-b"> with querySelector in quirks mode
Pass [lang*='A' s] <div lang="XAB"> in quirks mode
Pass [lang*='A' s] <div lang="XAB"> with querySelector in quirks mode
Pass [*|lang='a' s] <div {http://www.w3.org/XML/1998/namespace}lang="a"> in quirks mode
Pass [*|lang='a' s] <div {http://www.w3.org/XML/1998/namespace}lang="a"> with querySelector in quirks mode
Pass [*|lang='A' s] <div {http://www.w3.org/XML/1998/namespace}lang="A"> in quirks mode
Pass [*|lang='A' s] <div {http://www.w3.org/XML/1998/namespace}lang="A"> with querySelector in quirks mode
Fail @namespace x 'http://www.w3.org/XML/1998/namespace'; [x|lang='A' s] <div {http://www.w3.org/XML/1998/namespace}lang="A"> in quirks mode
Pass [foo='BAR' s][foo='BAR' s] <div foo="BAR"> in quirks mode
Pass [foo='BAR' s][foo='BAR' s] <div foo="BAR"> with querySelector in quirks mode
Pass [align='left'] /* sanity check (match HTML) */ <div align="LEFT"> in quirks mode
Pass [align='left'] /* sanity check (match HTML) */ <div align="LEFT"> with querySelector in quirks mode
Pass [align='LEFT'] /* sanity check (match HTML) */ <div align="left"> in quirks mode
Pass [align='LEFT'] /* sanity check (match HTML) */ <div align="left"> with querySelector in quirks mode
Pass [lang|='a'] /* sanity check (match HTML) */ <div lang="A-B"> in quirks mode
Pass [lang|='a'] /* sanity check (match HTML) */ <div lang="A-B"> with querySelector in quirks mode
Pass [lang*='A'] /* sanity check (match HTML) */ <div lang="xab"> in quirks mode
Pass [lang*='A'] /* sanity check (match HTML) */ <div lang="xab"> with querySelector in quirks mode
Pass [missingattr] /* sanity check (no match) */ <div foo="BAR"> in quirks mode
Pass [missingattr] /* sanity check (no match) */ <div foo="BAR"> with querySelector in quirks mode
Pass [foo='bar'] /* sanity check (no match) */ <div foo="BAR"> in quirks mode
Pass [foo='bar'] /* sanity check (no match) */ <div foo="BAR"> with querySelector in quirks mode
Pass [class~='a'] /* sanity check (no match) */ <div class="X A B"> in quirks mode
Pass [class~='a'] /* sanity check (no match) */ <div class="X A B"> with querySelector in quirks mode
Pass [class~='A'] /* sanity check (no match) */ <div class="x a b"> in quirks mode
Pass [class~='A'] /* sanity check (no match) */ <div class="x a b"> with querySelector in quirks mode
Pass [id^='a'] /* sanity check (no match) */ <div id="AB"> in quirks mode
Pass [id^='a'] /* sanity check (no match) */ <div id="AB"> with querySelector in quirks mode
Pass [id$='A'] <div id="xa"> in quirks mode
Pass [id$='A'] <div id="xa"> with querySelector in quirks mode
Fail [*|lang='a'] /* sanity check (no match) */ <div {http://www.w3.org/XML/1998/namespace}lang="A"> in quirks mode
Fail [*|lang='a'] /* sanity check (no match) */ <div {http://www.w3.org/XML/1998/namespace}lang="A"> with querySelector in quirks mode
Fail [*|lang='A'] /* sanity check (no match) */ <div {http://www.w3.org/XML/1998/namespace}lang="a"> in quirks mode
Fail [*|lang='A'] /* sanity check (no match) */ <div {http://www.w3.org/XML/1998/namespace}lang="a"> with querySelector in quirks mode
Pass @namespace x 'http://www.w3.org/XML/1998/namespace'; [x|lang='A'] /* sanity check (no match) */ <div {http://www.w3.org/XML/1998/namespace}lang="a"> in quirks mode
Pass [foo='' i] <div foo="BAR"> in quirks mode
Pass [foo='' i] <div foo="BAR"> with querySelector in quirks mode
Pass [foo='' i] /* \0 in selector */ <div foo=""> in quirks mode
Pass [foo='' i] /* \0 in selector */ <div foo=""> with querySelector in quirks mode
Pass [foo='' i] /* \0 in attribute */ <div foo=""> in quirks mode
Pass [foo='' i] /* \0 in attribute */ <div foo=""> with querySelector in quirks mode
Pass [foo='ä' i] <div foo="Ä"> in quirks mode
Pass [foo='ä' i] <div foo="Ä"> with querySelector in quirks mode
Pass [foo='Ä' i] <div foo="ä"> in quirks mode
Pass [foo='Ä' i] <div foo="ä"> with querySelector in quirks mode
Pass [foo='ä' i] /* COMBINING in selector */ <div foo="Ä"> in quirks mode
Pass [foo='ä' i] /* COMBINING in selector */ <div foo="Ä"> with querySelector in quirks mode
Pass [foo~='ä' i] /* COMBINING in selector */ <div foo="ä"> in quirks mode
Pass [foo~='ä' i] /* COMBINING in selector */ <div foo="ä"> with querySelector in quirks mode
Pass [foo^='Ä' i] /* COMBINING in selector */ <div foo="Ä"> in quirks mode
Pass [foo^='Ä' i] /* COMBINING in selector */ <div foo="Ä"> with querySelector in quirks mode
Pass [foo$='Ä' i] /* COMBINING in selector */ <div foo="ä"> in quirks mode
Pass [foo$='Ä' i] /* COMBINING in selector */ <div foo="ä"> with querySelector in quirks mode
Pass [foo*='ä' i] /* COMBINING in attribute */ <div foo="ä"> in quirks mode
Pass [foo*='ä' i] /* COMBINING in attribute */ <div foo="ä"> with querySelector in quirks mode
Pass [foo|='ä' i] /* COMBINING in attribute */ <div foo="Ä"> in quirks mode
Pass [foo|='ä' i] /* COMBINING in attribute */ <div foo="Ä"> with querySelector in quirks mode
Pass [foo='Ä' i] /* COMBINING in attribute */ <div foo="ä"> in quirks mode
Pass [foo='Ä' i] /* COMBINING in attribute */ <div foo="ä"> with querySelector in quirks mode
Pass [foo='Ä' i] /* COMBINING in attribute */ <div foo="Ä"> in quirks mode
Pass [foo='Ä' i] /* COMBINING in attribute */ <div foo="Ä"> with querySelector in quirks mode
Pass [foo='ä' i] /* COMBINING in selector */ <div foo="a"> in quirks mode
Pass [foo='ä' i] /* COMBINING in selector */ <div foo="a"> with querySelector in quirks mode
Pass [foo='ä' i] /* COMBINING in selector */ <div foo="A"> in quirks mode
Pass [foo='ä' i] /* COMBINING in selector */ <div foo="A"> with querySelector in quirks mode
Pass [foo='Ä' i] /* COMBINING in selector */ <div foo="a"> in quirks mode
Pass [foo='Ä' i] /* COMBINING in selector */ <div foo="a"> with querySelector in quirks mode
Pass [foo='Ä' i] /* COMBINING in selector */ <div foo="A"> in quirks mode
Pass [foo='Ä' i] /* COMBINING in selector */ <div foo="A"> with querySelector in quirks mode
Pass [foo='a' i] /* COMBINING in attribute */ <div foo="ä"> in quirks mode
Pass [foo='a' i] /* COMBINING in attribute */ <div foo="ä"> with querySelector in quirks mode
Pass [foo='A' i] /* COMBINING in attribute */ <div foo="ä"> in quirks mode
Pass [foo='A' i] /* COMBINING in attribute */ <div foo="ä"> with querySelector in quirks mode
Pass [foo='a' i] /* COMBINING in attribute */ <div foo="Ä"> in quirks mode
Pass [foo='a' i] /* COMBINING in attribute */ <div foo="Ä"> with querySelector in quirks mode
Pass [foo='A' i] /* COMBINING in attribute */ <div foo="Ä"> in quirks mode
Pass [foo='A' i] /* COMBINING in attribute */ <div foo="Ä"> with querySelector in quirks mode
Pass [foo='i' i] <div foo="İ"> in quirks mode
Pass [foo='i' i] <div foo="İ"> with querySelector in quirks mode
Pass [foo='i' i] <div foo="ı"> in quirks mode
Pass [foo='i' i] <div foo="ı"> with querySelector in quirks mode
Pass [foo='I' i] <div foo="İ"> in quirks mode
Pass [foo='I' i] <div foo="İ"> with querySelector in quirks mode
Pass [foo='I' i] <div foo="ı"> in quirks mode
Pass [foo='I' i] <div foo="ı"> with querySelector in quirks mode
Pass [foo='İ' i] <div foo="i"> in quirks mode
Pass [foo='İ' i] <div foo="i"> with querySelector in quirks mode
Pass [foo='ı' i] <div foo="i"> in quirks mode
Pass [foo='ı' i] <div foo="i"> with querySelector in quirks mode
Pass [foo='İ' i] <div foo="I"> in quirks mode
Pass [foo='İ' i] <div foo="I"> with querySelector in quirks mode
Pass [foo='ı' i] <div foo="I"> in quirks mode
Pass [foo='ı' i] <div foo="I"> with querySelector in quirks mode
Pass [foo='bar' i] <div foo="x" {a}foo="BAR"> in quirks mode
Pass [foo='bar' i] <div foo="x" {a}foo="BAR"> with querySelector in quirks mode
Pass [|foo='bar' i] <div foo="x" {a}foo="BAR"> in quirks mode
Pass [|foo='bar' i] <div foo="x" {a}foo="BAR"> with querySelector in quirks mode
Pass [foo='bar' i] <div FOO="bar"> in quirks mode
Pass [foo='bar' i] <div FOO="bar"> with querySelector in quirks mode
Pass [foo=' ' i] /* tab in selector */ <div foo=" "> in quirks mode
Pass [foo=' ' i] /* tab in selector */ <div foo=" "> with querySelector in quirks mode
Pass [foo=' ' i] /* tab in attribute */ <div foo=" "> in quirks mode
Pass [foo=' ' i] /* tab in attribute */ <div foo=" "> with querySelector in quirks mode
Pass @namespace x 'a'; [x|foo='' i] <div {A}foo=""> in quirks mode
Pass @namespace x 'A'; [x|foo='' i] <div {a}foo=""> in quirks mode
Pass [foo='bar' i][foo='bar'] <div foo="BAR"> in quirks mode
Pass [foo='bar' i][foo='bar'] <div foo="BAR"> with querySelector in quirks mode
Pass [foo='bar' i] <div baz="BAR"> in quirks mode
Pass [foo='bar' i] <div baz="BAR"> with querySelector in quirks mode
Pass [foo^='é' i] <div foo="É"> in quirks mode
Pass [foo^='é' i] <div foo="É"> with querySelector in quirks mode
Pass [foo$='é' i] <div foo="É"> in quirks mode
Pass [foo$='é' i] <div foo="É"> with querySelector in quirks mode
Pass [foo*='é' i] <div foo="É"> in quirks mode
Pass [foo*='é' i] <div foo="É"> with querySelector in quirks mode
Pass [foo|='é' i] <div foo="É"> in quirks mode
Pass [foo|='é' i] <div foo="É"> with querySelector in quirks mode
Pass [foo^='É' i] <div foo="é"> in quirks mode
Pass [foo^='É' i] <div foo="é"> with querySelector in quirks mode
Pass [foo$='É' i] <div foo="é"> in quirks mode
Pass [foo$='É' i] <div foo="é"> with querySelector in quirks mode
Pass [foo*='É' i] <div foo="é"> in quirks mode
Pass [foo*='É' i] <div foo="é"> with querySelector in quirks mode
Pass [foo|='É' i] <div foo="é"> in quirks mode
Pass [foo|='É' i] <div foo="é"> with querySelector in quirks mode
Pass [foo='' s] <div foo="BAR"> in quirks mode
Pass [foo='' s] <div foo="BAR"> with querySelector in quirks mode
Pass [foo='' s] /* \0 in selector */ <div foo=""> in quirks mode
Pass [foo='' s] /* \0 in selector */ <div foo=""> with querySelector in quirks mode
Pass [foo='' s] /* \0 in attribute */ <div foo=""> in quirks mode
Pass [foo='' s] /* \0 in attribute */ <div foo=""> with querySelector in quirks mode
Pass [foo='ä' s] <div foo="Ä"> in quirks mode
Pass [foo='ä' s] <div foo="Ä"> with querySelector in quirks mode
Pass [foo='Ä' s] <div foo="ä"> in quirks mode
Pass [foo='Ä' s] <div foo="ä"> with querySelector in quirks mode
Pass [foo='ä' s] /* COMBINING in selector */ <div foo="Ä"> in quirks mode
Pass [foo='ä' s] /* COMBINING in selector */ <div foo="Ä"> with querySelector in quirks mode
Pass [foo~='ä' s] /* COMBINING in selector */ <div foo="ä"> in quirks mode
Pass [foo~='ä' s] /* COMBINING in selector */ <div foo="ä"> with querySelector in quirks mode
Pass [foo^='Ä' s] /* COMBINING in selector */ <div foo="Ä"> in quirks mode
Pass [foo^='Ä' s] /* COMBINING in selector */ <div foo="Ä"> with querySelector in quirks mode
Pass [foo$='Ä' s] /* COMBINING in selector */ <div foo="ä"> in quirks mode
Pass [foo$='Ä' s] /* COMBINING in selector */ <div foo="ä"> with querySelector in quirks mode
Pass [foo*='ä' s] /* COMBINING in attribute */ <div foo="ä"> in quirks mode
Pass [foo*='ä' s] /* COMBINING in attribute */ <div foo="ä"> with querySelector in quirks mode
Pass [foo|='ä' s] /* COMBINING in attribute */ <div foo="Ä"> in quirks mode
Pass [foo|='ä' s] /* COMBINING in attribute */ <div foo="Ä"> with querySelector in quirks mode
Pass [foo='Ä' s] /* COMBINING in attribute */ <div foo="ä"> in quirks mode
Pass [foo='Ä' s] /* COMBINING in attribute */ <div foo="ä"> with querySelector in quirks mode
Pass [foo='Ä' s] /* COMBINING in attribute */ <div foo="Ä"> in quirks mode
Pass [foo='Ä' s] /* COMBINING in attribute */ <div foo="Ä"> with querySelector in quirks mode
Pass [foo='ä' s] /* COMBINING in selector */ <div foo="a"> in quirks mode
Pass [foo='ä' s] /* COMBINING in selector */ <div foo="a"> with querySelector in quirks mode
Pass [foo='ä' s] /* COMBINING in selector */ <div foo="A"> in quirks mode
Pass [foo='ä' s] /* COMBINING in selector */ <div foo="A"> with querySelector in quirks mode
Pass [foo='Ä' s] /* COMBINING in selector */ <div foo="a"> in quirks mode
Pass [foo='Ä' s] /* COMBINING in selector */ <div foo="a"> with querySelector in quirks mode
Pass [foo='Ä' s] /* COMBINING in selector */ <div foo="A"> in quirks mode
Pass [foo='Ä' s] /* COMBINING in selector */ <div foo="A"> with querySelector in quirks mode
Pass [foo='a' s] /* COMBINING in attribute */ <div foo="ä"> in quirks mode
Pass [foo='a' s] /* COMBINING in attribute */ <div foo="ä"> with querySelector in quirks mode
Pass [foo='A' s] /* COMBINING in attribute */ <div foo="ä"> in quirks mode
Pass [foo='A' s] /* COMBINING in attribute */ <div foo="ä"> with querySelector in quirks mode
Pass [foo='a' s] /* COMBINING in attribute */ <div foo="Ä"> in quirks mode
Pass [foo='a' s] /* COMBINING in attribute */ <div foo="Ä"> with querySelector in quirks mode
Pass [foo='A' s] /* COMBINING in attribute */ <div foo="Ä"> in quirks mode
Pass [foo='A' s] /* COMBINING in attribute */ <div foo="Ä"> with querySelector in quirks mode
Pass [foo='i' s] <div foo="İ"> in quirks mode
Pass [foo='i' s] <div foo="İ"> with querySelector in quirks mode
Pass [foo='i' s] <div foo="ı"> in quirks mode
Pass [foo='i' s] <div foo="ı"> with querySelector in quirks mode
Pass [foo='I' s] <div foo="İ"> in quirks mode
Pass [foo='I' s] <div foo="İ"> with querySelector in quirks mode
Pass [foo='I' s] <div foo="ı"> in quirks mode
Pass [foo='I' s] <div foo="ı"> with querySelector in quirks mode
Pass [foo='İ' s] <div foo="i"> in quirks mode
Pass [foo='İ' s] <div foo="i"> with querySelector in quirks mode
Pass [foo='ı' s] <div foo="i"> in quirks mode
Pass [foo='ı' s] <div foo="i"> with querySelector in quirks mode
Pass [foo='İ' s] <div foo="I"> in quirks mode
Pass [foo='İ' s] <div foo="I"> with querySelector in quirks mode
Pass [foo='ı' s] <div foo="I"> in quirks mode
Pass [foo='ı' s] <div foo="I"> with querySelector in quirks mode
Pass [foo='bar' s] <div foo="x" {a}foo="BAR"> in quirks mode
Pass [foo='bar' s] <div foo="x" {a}foo="BAR"> with querySelector in quirks mode
Pass [|foo='bar' s] <div foo="x" {a}foo="BAR"> in quirks mode
Pass [|foo='bar' s] <div foo="x" {a}foo="BAR"> with querySelector in quirks mode
Pass [foo='bar' s] <div FOO="bar"> in quirks mode
Pass [foo='bar' s] <div FOO="bar"> with querySelector in quirks mode
Pass [foo=' ' s] /* tab in selector */ <div foo=" "> in quirks mode
Pass [foo=' ' s] /* tab in selector */ <div foo=" "> with querySelector in quirks mode
Pass [foo=' ' s] /* tab in attribute */ <div foo=" "> in quirks mode
Pass [foo=' ' s] /* tab in attribute */ <div foo=" "> with querySelector in quirks mode
Pass @namespace x 'a'; [x|foo='' s] <div {A}foo=""> in quirks mode
Pass @namespace x 'A'; [x|foo='' s] <div {a}foo=""> in quirks mode
Pass [foo='bar' s][foo='bar'] <div foo="BAR"> in quirks mode
Pass [foo='bar' s][foo='bar'] <div foo="BAR"> with querySelector in quirks mode
Pass [foo='bar' s] <div baz="BAR"> in quirks mode
Pass [foo='bar' s] <div baz="BAR"> with querySelector in quirks mode
Pass [foo='bar' s] <div foo="BAR"> in quirks mode
Pass [foo='bar' s] <div foo="BAR"> with querySelector in quirks mode
Pass [foo='ä' s] /* COMBINING in both */ <div foo="Ä"> in quirks mode
Pass [foo='ä' s] /* COMBINING in both */ <div foo="Ä"> with querySelector in quirks mode
Pass [foo='Ä' s] /* COMBINING in both */ <div foo="ä"> in quirks mode
Pass [foo='Ä' s] /* COMBINING in both */ <div foo="ä"> with querySelector in quirks mode
Pass [*|foo='bar' s] <div foo="x" {a}foo="x" {b}foo="BAR" {c}foo="x"> in quirks mode
Pass [*|foo='bar' s] <div foo="x" {a}foo="x" {b}foo="BAR" {c}foo="x"> with querySelector in quirks mode
Pass [*|foo='bar' s] <div foo="BAR" {a}foo="x" {b}foo="x" {c}foo="x"> in quirks mode
Pass [*|foo='bar' s] <div foo="BAR" {a}foo="x" {b}foo="x" {c}foo="x"> with querySelector in quirks mode
Pass [align='left' s] <div align="LEFT"> in quirks mode
Pass [align='left' s] <div align="LEFT"> with querySelector in quirks mode
Pass [align='LEFT' s] <div align="left"> in quirks mode
Pass [align='LEFT' s] <div align="left"> with querySelector in quirks mode
Pass [class~='a' s] <div class="X A B"> in quirks mode
Pass [class~='a' s] <div class="X A B"> with querySelector in quirks mode
Pass [class~='A' s] <div class="x a b"> in quirks mode
Pass [class~='A' s] <div class="x a b"> with querySelector in quirks mode
Pass [id^='a' s] <div id="AB"> in quirks mode
Pass [id^='a' s] <div id="AB"> with querySelector in quirks mode
Pass [id$='A' s] <div id="xa"> in quirks mode
Pass [id$='A' s] <div id="xa"> with querySelector in quirks mode
Pass [lang|='a' s] <div lang="A-B"> in quirks mode
Pass [lang|='a' s] <div lang="A-B"> with querySelector in quirks mode
Pass [lang*='A' s] <div lang="xab"> in quirks mode
Pass [lang*='A' s] <div lang="xab"> with querySelector in quirks mode
Pass [*|lang='a' s] <div {http://www.w3.org/XML/1998/namespace}lang="A"> in quirks mode
Pass [*|lang='a' s] <div {http://www.w3.org/XML/1998/namespace}lang="A"> with querySelector in quirks mode
Pass [*|lang='A' s] <div {http://www.w3.org/XML/1998/namespace}lang="a"> in quirks mode
Pass [*|lang='A' s] <div {http://www.w3.org/XML/1998/namespace}lang="a"> with querySelector in quirks mode
Pass @namespace x 'http://www.w3.org/XML/1998/namespace'; [x|lang='A' s] <div {http://www.w3.org/XML/1998/namespace}lang="a"> in quirks mode
Pass [foo='bar' s][foo='bar' s] <div foo="BAR"> in quirks mode
Pass [foo='bar' s][foo='bar' s] <div foo="BAR"> with querySelector in quirks mode
Pass [foo='BAR' s][foo='bar'] <div foo="BAR"> in quirks mode
Pass [foo='BAR' s][foo='bar'] <div foo="BAR"> with querySelector in quirks mode
Pass [foo='bar'][foo='BAR' s] <div foo="BAR"> in quirks mode
Pass [foo='bar'][foo='BAR' s] <div foo="BAR"> with querySelector in quirks mode
Pass [foo='BAR'][foo='bar' s] <div foo="BAR"> in quirks mode
Pass [foo='BAR'][foo='bar' s] <div foo="BAR"> with querySelector in quirks mode
Pass [foo='bar' s][foo='BAR'] <div foo="bar"> in quirks mode
Pass [foo='bar' s][foo='BAR'] <div foo="bar"> with querySelector in quirks mode
Pass [foo='BAR'] /* sanity check (match) */ <div foo="BAR"> in XML
Pass [foo='BAR'] /* sanity check (match) */ <div foo="BAR"> with querySelector in XML
Pass [foo='bar'] /* sanity check (match) */ <div foo="bar"> in XML
Pass [foo='bar'] /* sanity check (match) */ <div foo="bar"> with querySelector in XML
Pass [align='left'] /* sanity check (match) */ <div align="left"> in XML
Pass [align='left'] /* sanity check (match) */ <div align="left"> with querySelector in XML
Pass [class~='a'] /* sanity check (match) */ <div class="X a b"> in XML
Pass [class~='a'] /* sanity check (match) */ <div class="X a b"> with querySelector in XML
Pass [class~='A'] /* sanity check (match) */ <div class="x A B"> in XML
Pass [class~='A'] /* sanity check (match) */ <div class="x A B"> with querySelector in XML
Pass [id^='a'] /* sanity check (match) */ <div id="ab"> in XML
Pass [id^='a'] /* sanity check (match) */ <div id="ab"> with querySelector in XML
Pass [id$='A'] /* sanity check (match) */ <div id="XA"> in XML
Pass [id$='A'] /* sanity check (match) */ <div id="XA"> with querySelector in XML
Pass [lang|='a'] /* sanity check (match) */ <div lang="a-b"> in XML
Pass [lang|='a'] /* sanity check (match) */ <div lang="a-b"> with querySelector in XML
Pass [lang*='A'] /* sanity check (match) */ <div lang="XAB"> in XML
Pass [lang*='A'] /* sanity check (match) */ <div lang="XAB"> with querySelector in XML
Fail @namespace x 'http://www.w3.org/XML/1998/namespace'; [x|lang='A'] /* sanity check (match) */ <div {http://www.w3.org/XML/1998/namespace}lang="A"> in XML
Pass [foo='bar' i] <div foo="BAR"> in XML
Pass [foo='bar' i] <div foo="BAR"> with querySelector in XML
Pass [foo='' i] <div foo=""> in XML
Pass [foo='' i] <div foo=""> with querySelector in XML
Pass [foo='ä' i] /* COMBINING in both */ <div foo="Ä"> in XML
Pass [foo='ä' i] /* COMBINING in both */ <div foo="Ä"> with querySelector in XML
Pass [foo='Ä' i] /* COMBINING in both */ <div foo="ä"> in XML
Pass [foo='Ä' i] /* COMBINING in both */ <div foo="ä"> with querySelector in XML
Fail [*|foo='bar' i] <div foo="x" {a}foo="x" {b}foo="BAR" {c}foo="x"> in XML
Fail [*|foo='bar' i] <div foo="x" {a}foo="x" {b}foo="BAR" {c}foo="x"> with querySelector in XML
Pass [*|foo='bar' i] <div foo="BAR" {a}foo="x" {b}foo="x" {c}foo="x"> in XML
Pass [*|foo='bar' i] <div foo="BAR" {a}foo="x" {b}foo="x" {c}foo="x"> with querySelector in XML
Pass [align='left' i] <div align="LEFT"> in XML
Pass [align='left' i] <div align="LEFT"> with querySelector in XML
Pass [align='LEFT' i] <div align="left"> in XML
Pass [align='LEFT' i] <div align="left"> with querySelector in XML
Pass [class~='a' i] <div class="X A B"> in XML
Pass [class~='a' i] <div class="X A B"> with querySelector in XML
Pass [class~='A' i] <div class="x a b"> in XML
Pass [class~='A' i] <div class="x a b"> with querySelector in XML
Pass [id^='a' i] <div id="AB"> in XML
Pass [id^='a' i] <div id="AB"> with querySelector in XML
Pass [id$='A' i] <div id="xa"> in XML
Pass [id$='A' i] <div id="xa"> with querySelector in XML
Pass [lang|='a' i] <div lang="A-B"> in XML
Pass [lang|='a' i] <div lang="A-B"> with querySelector in XML
Pass [lang*='A' i] <div lang="xab"> in XML
Pass [lang*='A' i] <div lang="xab"> with querySelector in XML
Pass [*|lang='a' i] <div {http://www.w3.org/XML/1998/namespace}lang="A"> in XML
Pass [*|lang='a' i] <div {http://www.w3.org/XML/1998/namespace}lang="A"> with querySelector in XML
Pass [*|lang='A' i] <div {http://www.w3.org/XML/1998/namespace}lang="a"> in XML
Pass [*|lang='A' i] <div {http://www.w3.org/XML/1998/namespace}lang="a"> with querySelector in XML
Fail @namespace x 'http://www.w3.org/XML/1998/namespace'; [x|lang='A' i] <div {http://www.w3.org/XML/1998/namespace}lang="a"> in XML
Pass [foo='bar' i][foo='bar' i] <div foo="BAR"> in XML
Pass [foo='bar' i][foo='bar' i] <div foo="BAR"> with querySelector in XML
Pass [foo='BAR'][foo='bar' i] <div foo="BAR"> in XML
Pass [foo='BAR'][foo='bar' i] <div foo="BAR"> with querySelector in XML
Pass [foo='bar' i][foo='BAR'] <div foo="BAR"> in XML
Pass [foo='bar' i][foo='BAR'] <div foo="BAR"> with querySelector in XML
Pass [foo='bar' s] <div foo="bar"> in XML
Pass [foo='bar' s] <div foo="bar"> with querySelector in XML
Pass [foo='' s] <div foo=""> in XML
Pass [foo='' s] <div foo=""> with querySelector in XML
Pass [foo='ä' s] /* COMBINING in both */ <div foo="ä"> in XML
Pass [foo='ä' s] /* COMBINING in both */ <div foo="ä"> with querySelector in XML
Fail [*|foo='bar' s] <div foo="x" {a}foo="x" {b}foo="bar" {c}foo="x"> in XML
Fail [*|foo='bar' s] <div foo="x" {a}foo="x" {b}foo="bar" {c}foo="x"> with querySelector in XML
Pass [*|foo='bar' s] <div foo="bar" {a}foo="x" {b}foo="x" {c}foo="x"> in XML
Pass [*|foo='bar' s] <div foo="bar" {a}foo="x" {b}foo="x" {c}foo="x"> with querySelector in XML
Pass [align='left' s] <div align="left"> in XML
Pass [align='left' s] <div align="left"> with querySelector in XML
Pass [align='LEFT' s] <div align="LEFT"> in XML
Pass [align='LEFT' s] <div align="LEFT"> with querySelector in XML
Pass [class~='a' s] <div class="x a b"> in XML
Pass [class~='a' s] <div class="x a b"> with querySelector in XML
Pass [class~='A' s] <div class="X A B"> in XML
Pass [class~='A' s] <div class="X A B"> with querySelector in XML
Pass [id^='a' s] <div id="ab"> in XML
Pass [id^='a' s] <div id="ab"> with querySelector in XML
Pass [id$='A' s] <div id="XA"> in XML
Pass [id$='A' s] <div id="XA"> with querySelector in XML
Pass [lang|='a' s] <div lang="a-b"> in XML
Pass [lang|='a' s] <div lang="a-b"> with querySelector in XML
Pass [lang*='A' s] <div lang="XAB"> in XML
Pass [lang*='A' s] <div lang="XAB"> with querySelector in XML
Pass [*|lang='a' s] <div {http://www.w3.org/XML/1998/namespace}lang="a"> in XML
Pass [*|lang='a' s] <div {http://www.w3.org/XML/1998/namespace}lang="a"> with querySelector in XML
Pass [*|lang='A' s] <div {http://www.w3.org/XML/1998/namespace}lang="A"> in XML
Pass [*|lang='A' s] <div {http://www.w3.org/XML/1998/namespace}lang="A"> with querySelector in XML
Fail @namespace x 'http://www.w3.org/XML/1998/namespace'; [x|lang='A' s] <div {http://www.w3.org/XML/1998/namespace}lang="A"> in XML
Pass [foo='BAR' s][foo='BAR' s] <div foo="BAR"> in XML
Pass [foo='BAR' s][foo='BAR' s] <div foo="BAR"> with querySelector in XML
Pass [missingattr] /* sanity check (no match) */ <div foo="BAR"> in XML
Pass [missingattr] /* sanity check (no match) */ <div foo="BAR"> with querySelector in XML
Pass [foo='bar'] /* sanity check (no match) */ <div foo="BAR"> in XML
Pass [foo='bar'] /* sanity check (no match) */ <div foo="BAR"> with querySelector in XML
Pass [class~='a'] /* sanity check (no match) */ <div class="X A B"> in XML
Pass [class~='a'] /* sanity check (no match) */ <div class="X A B"> with querySelector in XML
Pass [class~='A'] /* sanity check (no match) */ <div class="x a b"> in XML
Pass [class~='A'] /* sanity check (no match) */ <div class="x a b"> with querySelector in XML
Pass [id^='a'] /* sanity check (no match) */ <div id="AB"> in XML
Pass [id^='a'] /* sanity check (no match) */ <div id="AB"> with querySelector in XML
Pass [id$='A'] <div id="xa"> in XML
Pass [id$='A'] <div id="xa"> with querySelector in XML
Pass [*|lang='a'] /* sanity check (no match) */ <div {http://www.w3.org/XML/1998/namespace}lang="A"> in XML
Pass [*|lang='a'] /* sanity check (no match) */ <div {http://www.w3.org/XML/1998/namespace}lang="A"> with querySelector in XML
Pass [*|lang='A'] /* sanity check (no match) */ <div {http://www.w3.org/XML/1998/namespace}lang="a"> in XML
Pass [*|lang='A'] /* sanity check (no match) */ <div {http://www.w3.org/XML/1998/namespace}lang="a"> with querySelector in XML
Pass @namespace x 'http://www.w3.org/XML/1998/namespace'; [x|lang='A'] /* sanity check (no match) */ <div {http://www.w3.org/XML/1998/namespace}lang="a"> in XML
Pass [foo='' i] <div foo="BAR"> in XML
Pass [foo='' i] <div foo="BAR"> with querySelector in XML
Pass [foo='' i] /* \0 in selector */ <div foo=""> in XML
Pass [foo='' i] /* \0 in selector */ <div foo=""> with querySelector in XML
Pass [foo='' i] /* \0 in attribute */ <div foo=""> in XML
Pass [foo='' i] /* \0 in attribute */ <div foo=""> with querySelector in XML
Pass [foo='ä' i] <div foo="Ä"> in XML
Pass [foo='ä' i] <div foo="Ä"> with querySelector in XML
Pass [foo='Ä' i] <div foo="ä"> in XML
Pass [foo='Ä' i] <div foo="ä"> with querySelector in XML
Pass [foo='ä' i] /* COMBINING in selector */ <div foo="Ä"> in XML
Pass [foo='ä' i] /* COMBINING in selector */ <div foo="Ä"> with querySelector in XML
Pass [foo~='ä' i] /* COMBINING in selector */ <div foo="ä"> in XML
Pass [foo~='ä' i] /* COMBINING in selector */ <div foo="ä"> with querySelector in XML
Pass [foo^='Ä' i] /* COMBINING in selector */ <div foo="Ä"> in XML
Pass [foo^='Ä' i] /* COMBINING in selector */ <div foo="Ä"> with querySelector in XML
Pass [foo$='Ä' i] /* COMBINING in selector */ <div foo="ä"> in XML
Pass [foo$='Ä' i] /* COMBINING in selector */ <div foo="ä"> with querySelector in XML
Pass [foo*='ä' i] /* COMBINING in attribute */ <div foo="ä"> in XML
Pass [foo*='ä' i] /* COMBINING in attribute */ <div foo="ä"> with querySelector in XML
Pass [foo|='ä' i] /* COMBINING in attribute */ <div foo="Ä"> in XML
Pass [foo|='ä' i] /* COMBINING in attribute */ <div foo="Ä"> with querySelector in XML
Pass [foo='Ä' i] /* COMBINING in attribute */ <div foo="ä"> in XML
Pass [foo='Ä' i] /* COMBINING in attribute */ <div foo="ä"> with querySelector in XML
Pass [foo='Ä' i] /* COMBINING in attribute */ <div foo="Ä"> in XML
Pass [foo='Ä' i] /* COMBINING in attribute */ <div foo="Ä"> with querySelector in XML
Pass [foo='ä' i] /* COMBINING in selector */ <div foo="a"> in XML
Pass [foo='ä' i] /* COMBINING in selector */ <div foo="a"> with querySelector in XML
Pass [foo='ä' i] /* COMBINING in selector */ <div foo="A"> in XML
Pass [foo='ä' i] /* COMBINING in selector */ <div foo="A"> with querySelector in XML
Pass [foo='Ä' i] /* COMBINING in selector */ <div foo="a"> in XML
Pass [foo='Ä' i] /* COMBINING in selector */ <div foo="a"> with querySelector in XML
Pass [foo='Ä' i] /* COMBINING in selector */ <div foo="A"> in XML
Pass [foo='Ä' i] /* COMBINING in selector */ <div foo="A"> with querySelector in XML
Pass [foo='a' i] /* COMBINING in attribute */ <div foo="ä"> in XML
Pass [foo='a' i] /* COMBINING in attribute */ <div foo="ä"> with querySelector in XML
Pass [foo='A' i] /* COMBINING in attribute */ <div foo="ä"> in XML
Pass [foo='A' i] /* COMBINING in attribute */ <div foo="ä"> with querySelector in XML
Pass [foo='a' i] /* COMBINING in attribute */ <div foo="Ä"> in XML
Pass [foo='a' i] /* COMBINING in attribute */ <div foo="Ä"> with querySelector in XML
Pass [foo='A' i] /* COMBINING in attribute */ <div foo="Ä"> in XML
Pass [foo='A' i] /* COMBINING in attribute */ <div foo="Ä"> with querySelector in XML
Pass [foo='i' i] <div foo="İ"> in XML
Pass [foo='i' i] <div foo="İ"> with querySelector in XML
Pass [foo='i' i] <div foo="ı"> in XML
Pass [foo='i' i] <div foo="ı"> with querySelector in XML
Pass [foo='I' i] <div foo="İ"> in XML
Pass [foo='I' i] <div foo="İ"> with querySelector in XML
Pass [foo='I' i] <div foo="ı"> in XML
Pass [foo='I' i] <div foo="ı"> with querySelector in XML
Pass [foo='İ' i] <div foo="i"> in XML
Pass [foo='İ' i] <div foo="i"> with querySelector in XML
Pass [foo='ı' i] <div foo="i"> in XML
Pass [foo='ı' i] <div foo="i"> with querySelector in XML
Pass [foo='İ' i] <div foo="I"> in XML
Pass [foo='İ' i] <div foo="I"> with querySelector in XML
Pass [foo='ı' i] <div foo="I"> in XML
Pass [foo='ı' i] <div foo="I"> with querySelector in XML
Pass [foo='bar' i] <div foo="x" {a}foo="BAR"> in XML
Pass [foo='bar' i] <div foo="x" {a}foo="BAR"> with querySelector in XML
Pass [|foo='bar' i] <div foo="x" {a}foo="BAR"> in XML
Pass [|foo='bar' i] <div foo="x" {a}foo="BAR"> with querySelector in XML
Pass [foo='bar' i] <div FOO="bar"> in XML
Pass [foo='bar' i] <div FOO="bar"> with querySelector in XML
Pass [foo=' ' i] /* tab in selector */ <div foo=" "> in XML
Pass [foo=' ' i] /* tab in selector */ <div foo=" "> with querySelector in XML
Pass [foo=' ' i] /* tab in attribute */ <div foo=" "> in XML
Pass [foo=' ' i] /* tab in attribute */ <div foo=" "> with querySelector in XML
Pass @namespace x 'a'; [x|foo='' i] <div {A}foo=""> in XML
Pass @namespace x 'A'; [x|foo='' i] <div {a}foo=""> in XML
Pass [foo='bar' i][foo='bar'] <div foo="BAR"> in XML
Pass [foo='bar' i][foo='bar'] <div foo="BAR"> with querySelector in XML
Pass [foo='bar' i] <div baz="BAR"> in XML
Pass [foo='bar' i] <div baz="BAR"> with querySelector in XML
Pass [foo^='é' i] <div foo="É"> in XML
Pass [foo^='é' i] <div foo="É"> with querySelector in XML
Pass [foo$='é' i] <div foo="É"> in XML
Pass [foo$='é' i] <div foo="É"> with querySelector in XML
Pass [foo*='é' i] <div foo="É"> in XML
Pass [foo*='é' i] <div foo="É"> with querySelector in XML
Pass [foo|='é' i] <div foo="É"> in XML
Pass [foo|='é' i] <div foo="É"> with querySelector in XML
Pass [foo^='É' i] <div foo="é"> in XML
Pass [foo^='É' i] <div foo="é"> with querySelector in XML
Pass [foo$='É' i] <div foo="é"> in XML
Pass [foo$='É' i] <div foo="é"> with querySelector in XML
Pass [foo*='É' i] <div foo="é"> in XML
Pass [foo*='É' i] <div foo="é"> with querySelector in XML
Pass [foo|='É' i] <div foo="é"> in XML
Pass [foo|='É' i] <div foo="é"> with querySelector in XML
Pass [foo='' s] <div foo="BAR"> in XML
Pass [foo='' s] <div foo="BAR"> with querySelector in XML
Pass [foo='' s] /* \0 in selector */ <div foo=""> in XML
Pass [foo='' s] /* \0 in selector */ <div foo=""> with querySelector in XML
Pass [foo='' s] /* \0 in attribute */ <div foo=""> in XML
Pass [foo='' s] /* \0 in attribute */ <div foo=""> with querySelector in XML
Pass [foo='ä' s] <div foo="Ä"> in XML
Pass [foo='ä' s] <div foo="Ä"> with querySelector in XML
Pass [foo='Ä' s] <div foo="ä"> in XML
Pass [foo='Ä' s] <div foo="ä"> with querySelector in XML
Pass [foo='ä' s] /* COMBINING in selector */ <div foo="Ä"> in XML
Pass [foo='ä' s] /* COMBINING in selector */ <div foo="Ä"> with querySelector in XML
Pass [foo~='ä' s] /* COMBINING in selector */ <div foo="ä"> in XML
Pass [foo~='ä' s] /* COMBINING in selector */ <div foo="ä"> with querySelector in XML
Pass [foo^='Ä' s] /* COMBINING in selector */ <div foo="Ä"> in XML
Pass [foo^='Ä' s] /* COMBINING in selector */ <div foo="Ä"> with querySelector in XML
Pass [foo$='Ä' s] /* COMBINING in selector */ <div foo="ä"> in XML
Pass [foo$='Ä' s] /* COMBINING in selector */ <div foo="ä"> with querySelector in XML
Pass [foo*='ä' s] /* COMBINING in attribute */ <div foo="ä"> in XML
Pass [foo*='ä' s] /* COMBINING in attribute */ <div foo="ä"> with querySelector in XML
Pass [foo|='ä' s] /* COMBINING in attribute */ <div foo="Ä"> in XML
Pass [foo|='ä' s] /* COMBINING in attribute */ <div foo="Ä"> with querySelector in XML
Pass [foo='Ä' s] /* COMBINING in attribute */ <div foo="ä"> in XML
Pass [foo='Ä' s] /* COMBINING in attribute */ <div foo="ä"> with querySelector in XML
Pass [foo='Ä' s] /* COMBINING in attribute */ <div foo="Ä"> in XML
Pass [foo='Ä' s] /* COMBINING in attribute */ <div foo="Ä"> with querySelector in XML
Pass [foo='ä' s] /* COMBINING in selector */ <div foo="a"> in XML
Pass [foo='ä' s] /* COMBINING in selector */ <div foo="a"> with querySelector in XML
Pass [foo='ä' s] /* COMBINING in selector */ <div foo="A"> in XML
Pass [foo='ä' s] /* COMBINING in selector */ <div foo="A"> with querySelector in XML
Pass [foo='Ä' s] /* COMBINING in selector */ <div foo="a"> in XML
Pass [foo='Ä' s] /* COMBINING in selector */ <div foo="a"> with querySelector in XML
Pass [foo='Ä' s] /* COMBINING in selector */ <div foo="A"> in XML
Pass [foo='Ä' s] /* COMBINING in selector */ <div foo="A"> with querySelector in XML
Pass [foo='a' s] /* COMBINING in attribute */ <div foo="ä"> in XML
Pass [foo='a' s] /* COMBINING in attribute */ <div foo="ä"> with querySelector in XML
Pass [foo='A' s] /* COMBINING in attribute */ <div foo="ä"> in XML
Pass [foo='A' s] /* COMBINING in attribute */ <div foo="ä"> with querySelector in XML
Pass [foo='a' s] /* COMBINING in attribute */ <div foo="Ä"> in XML
Pass [foo='a' s] /* COMBINING in attribute */ <div foo="Ä"> with querySelector in XML
Pass [foo='A' s] /* COMBINING in attribute */ <div foo="Ä"> in XML
Pass [foo='A' s] /* COMBINING in attribute */ <div foo="Ä"> with querySelector in XML
Pass [foo='i' s] <div foo="İ"> in XML
Pass [foo='i' s] <div foo="İ"> with querySelector in XML
Pass [foo='i' s] <div foo="ı"> in XML
Pass [foo='i' s] <div foo="ı"> with querySelector in XML
Pass [foo='I' s] <div foo="İ"> in XML
Pass [foo='I' s] <div foo="İ"> with querySelector in XML
Pass [foo='I' s] <div foo="ı"> in XML
Pass [foo='I' s] <div foo="ı"> with querySelector in XML
Pass [foo='İ' s] <div foo="i"> in XML
Pass [foo='İ' s] <div foo="i"> with querySelector in XML
Pass [foo='ı' s] <div foo="i"> in XML
Pass [foo='ı' s] <div foo="i"> with querySelector in XML
Pass [foo='İ' s] <div foo="I"> in XML
Pass [foo='İ' s] <div foo="I"> with querySelector in XML
Pass [foo='ı' s] <div foo="I"> in XML
Pass [foo='ı' s] <div foo="I"> with querySelector in XML
Pass [foo='bar' s] <div foo="x" {a}foo="BAR"> in XML
Pass [foo='bar' s] <div foo="x" {a}foo="BAR"> with querySelector in XML
Pass [|foo='bar' s] <div foo="x" {a}foo="BAR"> in XML
Pass [|foo='bar' s] <div foo="x" {a}foo="BAR"> with querySelector in XML
Pass [foo='bar' s] <div FOO="bar"> in XML
Pass [foo='bar' s] <div FOO="bar"> with querySelector in XML
Pass [foo=' ' s] /* tab in selector */ <div foo=" "> in XML
Pass [foo=' ' s] /* tab in selector */ <div foo=" "> with querySelector in XML
Pass [foo=' ' s] /* tab in attribute */ <div foo=" "> in XML
Pass [foo=' ' s] /* tab in attribute */ <div foo=" "> with querySelector in XML
Pass @namespace x 'a'; [x|foo='' s] <div {A}foo=""> in XML
Pass @namespace x 'A'; [x|foo='' s] <div {a}foo=""> in XML
Pass [foo='bar' s][foo='bar'] <div foo="BAR"> in XML
Pass [foo='bar' s][foo='bar'] <div foo="BAR"> with querySelector in XML
Pass [foo='bar' s] <div baz="BAR"> in XML
Pass [foo='bar' s] <div baz="BAR"> with querySelector in XML
Pass [foo='bar' s] <div foo="BAR"> in XML
Pass [foo='bar' s] <div foo="BAR"> with querySelector in XML
Pass [foo='ä' s] /* COMBINING in both */ <div foo="Ä"> in XML
Pass [foo='ä' s] /* COMBINING in both */ <div foo="Ä"> with querySelector in XML
Pass [foo='Ä' s] /* COMBINING in both */ <div foo="ä"> in XML
Pass [foo='Ä' s] /* COMBINING in both */ <div foo="ä"> with querySelector in XML
Pass [*|foo='bar' s] <div foo="x" {a}foo="x" {b}foo="BAR" {c}foo="x"> in XML
Pass [*|foo='bar' s] <div foo="x" {a}foo="x" {b}foo="BAR" {c}foo="x"> with querySelector in XML
Pass [*|foo='bar' s] <div foo="BAR" {a}foo="x" {b}foo="x" {c}foo="x"> in XML
Pass [*|foo='bar' s] <div foo="BAR" {a}foo="x" {b}foo="x" {c}foo="x"> with querySelector in XML
Pass [align='left' s] <div align="LEFT"> in XML
Pass [align='left' s] <div align="LEFT"> with querySelector in XML
Pass [align='LEFT' s] <div align="left"> in XML
Pass [align='LEFT' s] <div align="left"> with querySelector in XML
Pass [class~='a' s] <div class="X A B"> in XML
Pass [class~='a' s] <div class="X A B"> with querySelector in XML
Pass [class~='A' s] <div class="x a b"> in XML
Pass [class~='A' s] <div class="x a b"> with querySelector in XML
Pass [id^='a' s] <div id="AB"> in XML
Pass [id^='a' s] <div id="AB"> with querySelector in XML
Pass [id$='A' s] <div id="xa"> in XML
Pass [id$='A' s] <div id="xa"> with querySelector in XML
Pass [lang|='a' s] <div lang="A-B"> in XML
Pass [lang|='a' s] <div lang="A-B"> with querySelector in XML
Pass [lang*='A' s] <div lang="xab"> in XML
Pass [lang*='A' s] <div lang="xab"> with querySelector in XML
Pass [*|lang='a' s] <div {http://www.w3.org/XML/1998/namespace}lang="A"> in XML
Pass [*|lang='a' s] <div {http://www.w3.org/XML/1998/namespace}lang="A"> with querySelector in XML
Pass [*|lang='A' s] <div {http://www.w3.org/XML/1998/namespace}lang="a"> in XML
Pass [*|lang='A' s] <div {http://www.w3.org/XML/1998/namespace}lang="a"> with querySelector in XML
Pass @namespace x 'http://www.w3.org/XML/1998/namespace'; [x|lang='A' s] <div {http://www.w3.org/XML/1998/namespace}lang="a"> in XML
Pass [foo='bar' s][foo='bar' s] <div foo="BAR"> in XML
Pass [foo='bar' s][foo='bar' s] <div foo="BAR"> with querySelector in XML
Pass [foo='BAR' s][foo='bar'] <div foo="BAR"> in XML
Pass [foo='BAR' s][foo='bar'] <div foo="BAR"> with querySelector in XML
Pass [foo='bar'][foo='BAR' s] <div foo="BAR"> in XML
Pass [foo='bar'][foo='BAR' s] <div foo="BAR"> with querySelector in XML
Pass [foo='BAR'][foo='bar' s] <div foo="BAR"> in XML
Pass [foo='BAR'][foo='bar' s] <div foo="BAR"> with querySelector in XML
Pass [foo='bar' s][foo='BAR'] <div foo="bar"> in XML
Pass [foo='bar' s][foo='BAR'] <div foo="bar"> with querySelector in XML

View file

@ -0,0 +1,64 @@
<!doctype html>
<title>Selectors: CSSOM of case-sensitivity attribute selector</title>
<link rel="help" href="https://drafts.csswg.org/selectors/#attribute-case">
<script src="../../../../resources/testharness.js"></script>
<script src="../../../../resources/testharnessreport.js"></script>
<div id=log></div>
<script>
function new_sheet(use_media) {
var style = document.getElementsByTagName('style')[0];
if (style)
style.parentNode.removeChild(style);
style = document.createElement('style');
document.head.appendChild(style);
if (use_media) {
style.textContent = '@media all {}';
return style.sheet.cssRules[0];
}
return style.sheet;
}
var tests = [
// test input, expected serialization
['[foo="bar"] /* sanity check */', '[foo="bar"]'],
['[foo="bar" i]', '[foo="bar" i]'],
['[foo="bar" /**/ i]', '[foo="bar" i]'],
['[foo="bar"/**/i]', '[foo="bar" i]'],
['[*|foo="bar" i]', '[*|foo="bar" i]'],
['[foo="bar" s]', '[foo="bar" s]'],
['[foo="bar" /**/ s]', '[foo="bar" s]'],
['[foo="bar"/**/s]', '[foo="bar" s]'],
['[*|foo="bar" s]', '[*|foo="bar" s]'],
]
tests.forEach(function(arr) {
var input = arr[0];
var expected = arr[1];
["", " in @media"].forEach(function(use_media) {
test(function() {
var sheet = new_sheet(use_media);
sheet.insertRule(input + ' {}', 0);
assert_equals(sheet.cssRules.length, 1);
}, input + ' insertRule' + use_media);
test(function() {
var sheet = new_sheet(use_media);
sheet.insertRule(input + ' {}', 0);
assert_equals(sheet.cssRules[0].cssText.substr(0, expected.length), expected);
}, input + ' getting CSSRule#cssText' + use_media);
test(function() {
var sheet = new_sheet(use_media);
sheet.insertRule(input + ' {}', 0);
assert_equals(sheet.cssRules[0].selectorText, expected);
}, input + ' getting CSSStyleRule#selectorText' + use_media);
test(function() {
var sheet = new_sheet(use_media);
sheet.insertRule('foobar {}', 0);
sheet.cssRules[0].selectorText = input;
assert_equals(sheet.cssRules[0].selectorText, expected);
}, input + ' setting CSSStyleRule#selectorText' + use_media);
});
});
</script>

View file

@ -0,0 +1,4 @@
<style></style>
<script>
var mode = "quirks mode";
</script>

View file

@ -0,0 +1,10 @@
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<style></style>
</head>
<body>
<script>
var mode = "XML";
</script>
</body>
</html>

View file

@ -0,0 +1,5 @@
<style></style>
<div id=test foo="BAR" baz="quux"></div>
<script>
var mode = "quirks mode";
</script>

View file

@ -0,0 +1,11 @@
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<style></style>
</head>
<body>
<div id="test" foo="BAR" baz="quux"/>
<script>
var mode = "XML";
</script>
</body>
</html>

View file

@ -0,0 +1,269 @@
<!doctype html>
<meta charset=utf-8>
<title>Selectors: semantics of case-sensitivity attribute selector</title>
<link rel="help" href="https://drafts.csswg.org/selectors/#attribute-case">
<script src="../../../../resources/testharness.js"></script>
<script src="../../../../resources/testharnessreport.js"></script>
<style></style>
<div id=log></div>
<iframe id="quirks" src="resources/semantics-quirks.html"></iframe>
<iframe id="xml" src="resources/semantics-xml.xhtml"></iframe>
<script>
setup({explicit_done:true});
var match = [
// [selector, attrs...] (each attr is [ns, name, value])
["[foo='BAR'] /* sanity check (match) */", ["", "foo", "BAR"]],
["[foo='bar'] /* sanity check (match) */", ["", "foo", "bar"]],
["[align='left'] /* sanity check (match) */", ["", "align", "left"]],
["[class~='a'] /* sanity check (match) */", ["", "class", "X a b"]],
["[class~='A'] /* sanity check (match) */", ["", "class", "x A B"]],
["[id^='a'] /* sanity check (match) */", ["", "id", "ab"]],
["[id$='A'] /* sanity check (match) */", ["", "id", "XA"]],
["[lang|='a'] /* sanity check (match) */", ["", "lang", "a-b"]],
["[lang*='A'] /* sanity check (match) */", ["", "lang", "XAB"]],
["@namespace x 'http://www.w3.org/XML/1998/namespace'; [x|lang='A'] /* sanity check (match) */",
["http://www.w3.org/XML/1998/namespace", "lang", "A"]],
// Case-insensitive matching.
["[foo='bar' i]", ["", "foo", "BAR"]],
["[foo='' i]", ["", "foo", ""]],
["[foo='a\u0308' i] /* COMBINING in both */", ["", "foo", "A\u0308"]],
["[foo='A\u0308' i] /* COMBINING in both */", ["", "foo", "a\u0308"]],
["[*|foo='bar' i]", ["", "foo", "x"], ["a", "foo", "x"], ["b", "foo", "BAR"], ["c", "foo", "x"]],
["[*|foo='bar' i]", ["", "foo", "BAR"], ["a", "foo", "x"], ["b", "foo", "x"], ["c", "foo", "x"]],
["[align='left' i]", ["", "align", "LEFT"]],
["[align='LEFT' i]", ["", "align", "left"]],
["[class~='a' i]", ["", "class", "X A B"]],
["[class~='A' i]", ["", "class", "x a b"]],
["[id^='a' i]", ["", "id", "AB"]],
["[id$='A' i]", ["", "id", "xa"]],
["[lang|='a' i]", ["", "lang", "A-B"]],
["[lang*='A' i]", ["", "lang", "xab"]],
["[*|lang='a' i]", ["http://www.w3.org/XML/1998/namespace", "lang", "A"]],
["[*|lang='A' i]", ["http://www.w3.org/XML/1998/namespace", "lang", "a"]],
["@namespace x 'http://www.w3.org/XML/1998/namespace'; [x|lang='A' i]", ["http://www.w3.org/XML/1998/namespace", "lang", "a"]],
["[foo='bar' i][foo='bar' i]", ["", "foo", "BAR"]],
["[foo='BAR'][foo='bar' i]", ["", "foo", "BAR"]],
["[foo='bar' i][foo='BAR']", ["", "foo", "BAR"]],
// Case-sensitive matching.
["[foo='bar' s]", ["", "foo", "bar"]],
["[foo='' s]", ["", "foo", ""]],
["[foo='a\u0308' s] /* COMBINING in both */", ["", "foo", "a\u0308"]],
["[*|foo='bar' s]", ["", "foo", "x"], ["a", "foo", "x"], ["b", "foo", "bar"], ["c", "foo", "x"]],
["[*|foo='bar' s]", ["", "foo", "bar"], ["a", "foo", "x"], ["b", "foo", "x"], ["c", "foo", "x"]],
["[align='left' s]", ["", "align", "left"]],
["[align='LEFT' s]", ["", "align", "LEFT"]],
["[class~='a' s]", ["", "class", "x a b"]],
["[class~='A' s]", ["", "class", "X A B"]],
["[id^='a' s]", ["", "id", "ab"]],
["[id$='A' s]", ["", "id", "XA"]],
["[lang|='a' s]", ["", "lang", "a-b"]],
["[lang*='A' s]", ["", "lang", "XAB"]],
["[*|lang='a' s]", ["http://www.w3.org/XML/1998/namespace", "lang", "a"]],
["[*|lang='A' s]", ["http://www.w3.org/XML/1998/namespace", "lang", "A"]],
["@namespace x 'http://www.w3.org/XML/1998/namespace'; [x|lang='A' s]", ["http://www.w3.org/XML/1998/namespace", "lang", "A"]],
["[foo='BAR' s][foo='BAR' s]", ["", "foo", "BAR"]],
];
var matchHTMLOnly = [
["[align='left'] /* sanity check (match HTML) */", ["", "align", "LEFT"]],
["[align='LEFT'] /* sanity check (match HTML) */", ["", "align", "left"]],
["[lang|='a'] /* sanity check (match HTML) */", ["", "lang", "A-B"]],
["[lang*='A'] /* sanity check (match HTML) */", ["", "lang", "xab"]],
];
var nomatch = [
["[missingattr] /* sanity check (no match) */", ["", "foo", "BAR"]],
["[foo='bar'] /* sanity check (no match) */", ["", "foo", "BAR"]],
["[class~='a'] /* sanity check (no match) */", ["", "class", "X A B"]],
["[class~='A'] /* sanity check (no match) */", ["", "class", "x a b"]],
["[id^='a'] /* sanity check (no match) */", ["", "id", "AB"]],
["[id$='A']", ["", "id", "xa"]],
["[*|lang='a'] /* sanity check (no match) */",
["http://www.w3.org/XML/1998/namespace", "lang", "A"]],
["[*|lang='A'] /* sanity check (no match) */",
["http://www.w3.org/XML/1998/namespace", "lang", "a"]],
["@namespace x 'http://www.w3.org/XML/1998/namespace'; [x|lang='A'] /* sanity check (no match) */",
["http://www.w3.org/XML/1998/namespace", "lang", "a"]],
// Case-insensitive matching.
["[foo='' i]", ["", "foo", "BAR"]],
["[foo='\u0000' i] /* \\0 in selector */", ["", "foo", ""]],
["[foo='' i] /* \\0 in attribute */", ["", "foo", "\u0000"]],
["[foo='\u00E4' i]", ["", "foo", "\u00C4"]],
["[foo='\u00C4' i]", ["", "foo", "\u00E4"]],
["[foo='a\u0308' i] /* COMBINING in selector */", ["", "foo", "\u00C4"]],
["[foo~='a\u0308' i] /* COMBINING in selector */", ["", "foo", "\u00E4"]],
["[foo^='A\u0308' i] /* COMBINING in selector */", ["", "foo", "\u00C4"]],
["[foo$='A\u0308' i] /* COMBINING in selector */", ["", "foo", "\u00E4"]],
["[foo*='\u00E4' i] /* COMBINING in attribute */", ["", "foo", "a\u0308"]],
["[foo|='\u00E4' i] /* COMBINING in attribute */", ["", "foo", "A\u0308"]],
["[foo='\u00C4' i] /* COMBINING in attribute */", ["", "foo", "a\u0308"]],
["[foo='\u00C4' i] /* COMBINING in attribute */", ["", "foo", "A\u0308"]],
["[foo='a\u0308' i] /* COMBINING in selector */", ["", "foo", "a"]],
["[foo='a\u0308' i] /* COMBINING in selector */", ["", "foo", "A"]],
["[foo='A\u0308' i] /* COMBINING in selector */", ["", "foo", "a"]],
["[foo='A\u0308' i] /* COMBINING in selector */", ["", "foo", "A"]],
["[foo='a' i] /* COMBINING in attribute */", ["", "foo", "a\u0308"]],
["[foo='A' i] /* COMBINING in attribute */", ["", "foo", "a\u0308"]],
["[foo='a' i] /* COMBINING in attribute */", ["", "foo", "A\u0308"]],
["[foo='A' i] /* COMBINING in attribute */", ["", "foo", "A\u0308"]],
["[foo='i' i]", ["", "foo", "\u0130"]],
["[foo='i' i]", ["", "foo", "\u0131"]],
["[foo='I' i]", ["", "foo", "\u0130"]],
["[foo='I' i]", ["", "foo", "\u0131"]],
["[foo='\u0130' i]", ["", "foo", "i"]],
["[foo='\u0131' i]", ["", "foo", "i"]],
["[foo='\u0130' i]", ["", "foo", "I"]],
["[foo='\u0131' i]", ["", "foo", "I"]],
["[foo='bar' i]", ["", "foo", "x"], ["a", "foo", "BAR"]],
["[|foo='bar' i]", ["", "foo", "x"], ["a", "foo", "BAR"]],
["[foo='bar' i]", ["", "FOO", "bar"]],
["[foo='\t' i] /* tab in selector */", ["", "foo", " "]],
["[foo=' ' i] /* tab in attribute */", ["", "foo", "\t"]],
["@namespace x 'a'; [x|foo='' i]", ["A", "foo", ""]],
["@namespace x 'A'; [x|foo='' i]", ["a", "foo", ""]],
["[foo='bar' i][foo='bar']", ["", "foo", "BAR"]],
["[foo='bar' i]", ["", "baz", "BAR"]],
["[foo^='é' i]", ["", "foo", "É"]],
["[foo$='é' i]", ["", "foo", "É"]],
["[foo*='é' i]", ["", "foo", "É"]],
["[foo|='é' i]", ["", "foo", "É"]],
["[foo^='É' i]", ["", "foo", "é"]],
["[foo$='É' i]", ["", "foo", "é"]],
["[foo*='É' i]", ["", "foo", "é"]],
["[foo|='É' i]", ["", "foo", "é"]],
// Case-sensitive matching
["[foo='' s]", ["", "foo", "BAR"]],
["[foo='\u0000' s] /* \\0 in selector */", ["", "foo", ""]],
["[foo='' s] /* \\0 in attribute */", ["", "foo", "\u0000"]],
["[foo='\u00E4' s]", ["", "foo", "\u00C4"]],
["[foo='\u00C4' s]", ["", "foo", "\u00E4"]],
["[foo='a\u0308' s] /* COMBINING in selector */", ["", "foo", "\u00C4"]],
["[foo~='a\u0308' s] /* COMBINING in selector */", ["", "foo", "\u00E4"]],
["[foo^='A\u0308' s] /* COMBINING in selector */", ["", "foo", "\u00C4"]],
["[foo$='A\u0308' s] /* COMBINING in selector */", ["", "foo", "\u00E4"]],
["[foo*='\u00E4' s] /* COMBINING in attribute */", ["", "foo", "a\u0308"]],
["[foo|='\u00E4' s] /* COMBINING in attribute */", ["", "foo", "A\u0308"]],
["[foo='\u00C4' s] /* COMBINING in attribute */", ["", "foo", "a\u0308"]],
["[foo='\u00C4' s] /* COMBINING in attribute */", ["", "foo", "A\u0308"]],
["[foo='a\u0308' s] /* COMBINING in selector */", ["", "foo", "a"]],
["[foo='a\u0308' s] /* COMBINING in selector */", ["", "foo", "A"]],
["[foo='A\u0308' s] /* COMBINING in selector */", ["", "foo", "a"]],
["[foo='A\u0308' s] /* COMBINING in selector */", ["", "foo", "A"]],
["[foo='a' s] /* COMBINING in attribute */", ["", "foo", "a\u0308"]],
["[foo='A' s] /* COMBINING in attribute */", ["", "foo", "a\u0308"]],
["[foo='a' s] /* COMBINING in attribute */", ["", "foo", "A\u0308"]],
["[foo='A' s] /* COMBINING in attribute */", ["", "foo", "A\u0308"]],
["[foo='i' s]", ["", "foo", "\u0130"]],
["[foo='i' s]", ["", "foo", "\u0131"]],
["[foo='I' s]", ["", "foo", "\u0130"]],
["[foo='I' s]", ["", "foo", "\u0131"]],
["[foo='\u0130' s]", ["", "foo", "i"]],
["[foo='\u0131' s]", ["", "foo", "i"]],
["[foo='\u0130' s]", ["", "foo", "I"]],
["[foo='\u0131' s]", ["", "foo", "I"]],
["[foo='bar' s]", ["", "foo", "x"], ["a", "foo", "BAR"]],
["[|foo='bar' s]", ["", "foo", "x"], ["a", "foo", "BAR"]],
["[foo='bar' s]", ["", "FOO", "bar"]],
["[foo='\t' s] /* tab in selector */", ["", "foo", " "]],
["[foo=' ' s] /* tab in attribute */", ["", "foo", "\t"]],
["@namespace x 'a'; [x|foo='' s]", ["A", "foo", ""]],
["@namespace x 'A'; [x|foo='' s]", ["a", "foo", ""]],
["[foo='bar' s][foo='bar']", ["", "foo", "BAR"]],
["[foo='bar' s]", ["", "baz", "BAR"]],
["[foo='bar' s]", ["", "foo", "BAR"]],
["[foo='a\u0308' s] /* COMBINING in both */", ["", "foo", "A\u0308"]],
["[foo='A\u0308' s] /* COMBINING in both */", ["", "foo", "a\u0308"]],
["[*|foo='bar' s]", ["", "foo", "x"], ["a", "foo", "x"], ["b", "foo", "BAR"], ["c", "foo", "x"]],
["[*|foo='bar' s]", ["", "foo", "BAR"], ["a", "foo", "x"], ["b", "foo", "x"], ["c", "foo", "x"]],
["[align='left' s]", ["", "align", "LEFT"]],
["[align='LEFT' s]", ["", "align", "left"]],
["[class~='a' s]", ["", "class", "X A B"]],
["[class~='A' s]", ["", "class", "x a b"]],
["[id^='a' s]", ["", "id", "AB"]],
["[id$='A' s]", ["", "id", "xa"]],
["[lang|='a' s]", ["", "lang", "A-B"]],
["[lang*='A' s]", ["", "lang", "xab"]],
["[*|lang='a' s]", ["http://www.w3.org/XML/1998/namespace", "lang", "A"]],
["[*|lang='A' s]", ["http://www.w3.org/XML/1998/namespace", "lang", "a"]],
["@namespace x 'http://www.w3.org/XML/1998/namespace'; [x|lang='A' s]", ["http://www.w3.org/XML/1998/namespace", "lang", "a"]],
["[foo='bar' s][foo='bar' s]", ["", "foo", "BAR"]],
["[foo='BAR' s][foo='bar']", ["", "foo", "BAR"]],
["[foo='bar'][foo='BAR' s]", ["", "foo", "BAR"]],
["[foo='BAR'][foo='bar' s]", ["", "foo", "BAR"]],
["[foo='bar' s][foo='BAR']", ["", "foo", "bar"]],
];
var mode = "standards mode";
function format_attrs(attrs) {
var rv = [];
attrs.forEach(function(attr) {
var str = "";
var ns = attr[0];
var name = attr[1];
var value = attr[2];
if (ns)
str += "{" + ns + "}";
str += name + "=\"" + value + "\"";
rv.push(str);
});
return rv.join(" ");
}
onload = function() {
var quirks = document.getElementById('quirks').contentWindow;
var xml = document.getElementById('xml').contentWindow;
[window, quirks, xml].forEach(function(global) {
var style = global.document.getElementsByTagName('style')[0];
var elm;
function clean_slate() {
style.textContent = '';
if (elm)
elm.parentNode.removeChild(elm);
elm = global.document.createElement('div');
global.document.body.appendChild(elm);
}
function set_attrs(attrs) {
attrs.forEach(function(attr) {
elm.setAttributeNS(attr[0], attr[1], attr[2]);
});
}
var localMatch = match.slice();
if (global != xml) {
localMatch.push(...matchHTMLOnly);
}
localMatch.forEach(function(arr) {
var s = arr[0];
var attrs = arr.slice(1);
var ns_decl = s.substr(0, "@namespace".length) == "@namespace";
test(function() {
clean_slate();
set_attrs(attrs);
style.textContent = s + ' { visibility:hidden }';
assert_equals(style.sheet.cssRules.length, (ns_decl ? 2 : 1), 'rule didn\'t parse into CSSOM');
assert_equals(global.getComputedStyle(elm).visibility, 'hidden', 'selector didn\'t match');
}, s + ' <div ' + format_attrs(attrs) + '> in ' + global.mode);
if (!ns_decl) {
test(function() {
assert_equals(global.document.querySelector(s), elm, 'selector didn\'t match');
}, s + ' <div ' + format_attrs(attrs) + '> with querySelector in ' + global.mode);
}
});
nomatch.forEach(function(arr) {
var s = arr[0];
var attrs = arr.slice(1);
var ns_decl = s.substr(0, "@namespace".length) == "@namespace";
test(function() {
clean_slate();
set_attrs(attrs);
style.textContent = s + ' { visibility:hidden }';
assert_equals(style.sheet.cssRules.length, (ns_decl ? 2 : 1), 'rule didn\'t parse into CSSOM');
assert_equals(global.getComputedStyle(elm).visibility, 'visible', 'selector matched');
}, s + ' <div ' + format_attrs(attrs) + '> in ' + global.mode);
if (!ns_decl) {
test(function() {
assert_equals(global.document.querySelector(s), null, 'selector matched');
}, s + ' <div ' + format_attrs(attrs) + '> with querySelector in ' + global.mode);
}
});
});
done();
};
</script>

View file

@ -0,0 +1,146 @@
<!doctype html>
<title>Selectors: syntax of case-sensitivity attribute selector</title>
<link rel="help" href="https://drafts.csswg.org/selectors/#attribute-case">
<script src="../../../../resources/testharness.js"></script>
<script src="../../../../resources/testharnessreport.js"></script>
<style></style>
<div id=log></div>
<div id=test foo="BAR" baz="quux"></div>
<iframe id="quirks" src="resources/syntax-quirks.html"></iframe>
<iframe id="xml" src="resources/syntax-xml.xhtml"></iframe>
<script>
setup({explicit_done:true});
var valid = [
"[foo='BAR'] /* sanity check (valid) */",
"[baz='quux'] /* sanity check (valid) */",
// Case-insensitive selectors.
"[foo='bar' i]",
"[foo='bar' I]",
"[foo=bar i]",
'[foo="bar" i]',
"[foo='bar'i]",
"[foo='bar'i ]",
"[foo='bar' i ]",
"[foo='bar' /**/ i]",
"[foo='bar' i /**/ ]",
"[foo='bar'/**/i/**/]",
"[foo=bar/**/i]",
"[foo='bar'\ti\t] /* \\t */",
"[foo='bar'\ni\n] /* \\n */",
"[foo='bar'\ri\r] /* \\r */",
"[foo='bar' \\i]",
"[foo='bar' \\69]",
"[foo='bar' \\49]",
"[foo~='bar' i]",
"[foo^='bar' i]",
"[foo$='bar' i]",
"[foo*='bar' i]",
"[foo|='bar' i]",
"[|foo='bar' i]",
"[*|foo='bar' i]",
// Case-sensitive selectors.
"[baz='quux' s]",
"[baz='quux' S]",
"[baz=quux s]",
'[baz="quux" s]',
"[baz='quux's]",
"[baz='quux's ]",
"[baz='quux' s ]",
"[baz='quux' /**/ s]",
"[baz='quux' s /**/ ]",
"[baz='quux'/**/s/**/]",
"[baz=quux/**/s]",
"[baz='quux'\ts\t] /* \\t */",
"[baz='quux'\ns\n] /* \\n */",
"[baz='quux'\rs\r] /* \\r */",
"[baz='quux' \\s]",
"[baz='quux' \\73]",
"[baz='quux' \\53]",
"[baz~='quux' s]",
"[baz^='quux' s]",
"[baz$='quux' s]",
"[baz*='quux' s]",
"[baz|='quux' s]",
"[|baz='quux' s]",
"[*|baz='quux' s]",
];
var invalid = [
"[foo[ /* sanity check (invalid) */",
"[foo='bar' i i]",
"[foo i ='bar']",
"[foo= i 'bar']",
"[i foo='bar']",
"[foo='bar' i\u0000] /* \\0 */",
"[foo='bar' \u0130]",
"[foo='bar' \u0131]",
"[foo='bar' ii]",
"[foo='bar' ij]",
"[foo='bar' j]",
"[foo='bar' \\\\i]",
"[foo='bar' \\\\69]",
"[foo='bar' i()]",
"[foo='bar' i ()]",
"[foo='bar' () i]",
"[foo='bar' (i)]",
"[foo='bar' i []]",
"[foo='bar' [] i]",
"[foo='bar' [i]]",
"[foo='bar' i {}]",
"[foo='bar' {} i]",
"[foo='bar' {i}]",
"[foo='bar' 1i]",
"[foo='bar' 1]",
"[foo='bar' 'i']",
"[foo='bar' url(i)]",
"[foo='bar' ,i]",
"[foo='bar' i,]",
"[foo='bar']i",
"[foo='bar' |i]",
"[foo='bar' \\|i]",
"[foo='bar' *|i]",
"[foo='bar' \\*|i]",
"[foo='bar' *]",
"[foo='bar' \\*]",
"[foo i]",
"[foo/**/i]",
];
var mode = "standards mode";
onload = function() {
var quirks = document.getElementById('quirks').contentWindow;
var xml = document.getElementById('xml').contentWindow;
[window, quirks, xml].forEach(function(global) {
var style = global.document.getElementsByTagName('style')[0];
var elm = global.document.getElementById('test');
function clean_slate() {
style.textContent = '';
assert_equals(style.sheet.cssRules.length, 0, 'CSSOM was not empty for empty stylesheet');
assert_equals(global.getComputedStyle(elm).visibility, 'visible', 'computed style for empty stylesheet');
}
valid.forEach(function(s) {
test(function() {
clean_slate();
style.textContent = s + ' { visibility:hidden }';
assert_equals(style.sheet.cssRules.length, 1, 'valid rule didn\'t parse into CSSOM');
assert_equals(global.getComputedStyle(elm).visibility, 'hidden', 'valid selector didn\'t match');
}, s + ' in ' + global.mode);
test(function() {
assert_equals(global.document.querySelector(s), elm, 'valid selector');
}, s + ' with querySelector in ' + global.mode);
});
invalid.forEach(function(s) {
test(function() {
clean_slate();
style.textContent = s + ' { visibility:hidden }';
assert_equals(style.sheet.cssRules.length, 0, 'invalid rule parsed into CSSOM');
assert_equals(global.getComputedStyle(elm).visibility, 'visible', 'invalid selector matched');
}, s + ' in ' + global.mode);
test(function() {
assert_throws_dom("SyntaxError", global.DOMException, function() {
global.document.querySelector(s);
}, 'invalid selector');
}, s + ' with querySelector in ' + global.mode);
});
});
done();
};
</script>