| <!doctype html> |
| <title>Selectors: syntax of case-sensitivity attribute selector</title> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <style></style> |
| <div id=log></div> |
| <div id=test foo="BAR"></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) */", |
| "[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' i]", |
| "[foo^='bar' i]", |
| "[foo$='bar' i]", |
| "[|foo='bar' i]", |
| "[*|foo='bar' i]", |
| ]; |
| var invalid = [ |
| "[foo[ /* sanity check (invalid) */", |
| "[foo='bar' i i]", |
| "[foo='bar' 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() { |
| // Should be TypeError but this is not widely implemented yet |
| // and this isn't intended to be a querySelector API conformance test. |
| assert_throws(null, function() { |
| global.document.querySelector(s); |
| }, 'invalid selector'); |
| }, s + ' with querySelector in ' + global.mode); |
| }); |
| }); |
| done(); |
| }; |
| </script> |