| <!doctype html> |
| <html> |
| <head> |
| <script src="../../resources/js-test-pre.js"></script> |
| <style id="style-target"></style> |
| </head> |
| <body> |
| <script> |
| description('Verify the never generates a valid selector for an invalid functional pseudo class.'); |
| |
| function invalidRules(functonalPseudoClassName) { |
| return [':' + functonalPseudoClassName + '\\', |
| ':' + functonalPseudoClassName + '\\\\', |
| ':' + functonalPseudoClassName + '\\\\\\', |
| ':' + functonalPseudoClassName + '\\\\\\\\', |
| ':' + functonalPseudoClassName + '\\(', |
| ':' + functonalPseudoClassName + '\\\\(', |
| ':' + functonalPseudoClassName + '\\\\\\(', |
| ':' + functonalPseudoClassName + '\\\\\\\\(', |
| ':' + functonalPseudoClassName + '\\ .foo', |
| ':' + functonalPseudoClassName + '\\\\ .foo', |
| ':' + functonalPseudoClassName + '\\\\\\ .foo', |
| ':' + functonalPseudoClassName + '\\\\\\\\ .foo', |
| ':' + functonalPseudoClassName + '\\\\( .foo', |
| ':' + functonalPseudoClassName + '\\\\\\( .foo', |
| ':' + functonalPseudoClassName + '\\\\\\\\( .foo', |
| ':' + functonalPseudoClassName + '\\()', |
| ':' + functonalPseudoClassName + '\\\\()', |
| ':' + functonalPseudoClassName + '\\\\\\()', |
| ':' + functonalPseudoClassName + '\\\\\\\\()', |
| ':' + functonalPseudoClassName + '\\ .foo)', |
| ':' + functonalPseudoClassName + '\\\\ .foo)', |
| ':' + functonalPseudoClassName + '\\\\\\ .foo)', |
| ':' + functonalPseudoClassName + '\\\\\\\\ .foo)', |
| ':' + functonalPseudoClassName + '\\\\( .foo)', |
| ':' + functonalPseudoClassName + '\\\\\\( .foo)', |
| ':' + functonalPseudoClassName + '\\\\\\\\( .foo)']; |
| } |
| |
| function testQuerySelector(functonalPseudoClassName) { |
| for (var testCase of invalidRules(functonalPseudoClassName)) |
| shouldThrow('document.querySelectorAll("' + testCase + '").length'); |
| } |
| |
| function testStyling(functonalPseudoClassName) { |
| var styleElement = document.getElementById("style-target"); |
| |
| for (var testCase of invalidRules(functonalPseudoClassName)) { |
| styleElement.textContent = testCase + " { background-color: red; }"; |
| shouldBe("document.styleSheets[1].cssRules.length", "0"); |
| } |
| styleElement.textContent = ""; |
| } |
| |
| function test(functonalPseudoClassName) { |
| testQuerySelector(functonalPseudoClassName); |
| testStyling(functonalPseudoClassName); |
| } |
| |
| var functionalPseudoClasses = [ |
| "-webkit-any", |
| "dir", |
| "lang", |
| "not", |
| "nth-child", |
| "nth-last-child", |
| "nth-last-of-type", |
| "nth-of-type", |
| "matches", |
| "role", |
| ]; |
| |
| for (var functionalPseudoClass of functionalPseudoClasses) |
| test(functionalPseudoClass); |
| </script> |
| <script src="../../resources/js-test-post.js"></script> |
| </body> |
| </html> |