diff options
Diffstat (limited to 'testing/web-platform/tests/selectors/attribute-selectors/attribute-case/semantics.html')
-rw-r--r-- | testing/web-platform/tests/selectors/attribute-selectors/attribute-case/semantics.html | 146 |
1 files changed, 146 insertions, 0 deletions
diff --git a/testing/web-platform/tests/selectors/attribute-selectors/attribute-case/semantics.html b/testing/web-platform/tests/selectors/attribute-selectors/attribute-case/semantics.html new file mode 100644 index 000000000..c455e2668 --- /dev/null +++ b/testing/web-platform/tests/selectors/attribute-selectors/attribute-case/semantics.html @@ -0,0 +1,146 @@ +<!doctype html> +<title>Selectors: semantics of case-sensitivity attribute selector</title> +<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' 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"]], +]; +var nomatch = [ + ["[missingattr] /* sanity check (no match) */", ["", "foo", "BAR"]], + ["[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"]], +]; +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]); + }); + } + match.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> |