| OLD | NEW | 
|---|
| 1 (function() | 1 (function() | 
| 2 { | 2 { | 
| 3   var filterClasses = require("filterClasses"); | 3   var filterClasses = require("filterClasses"); | 
| 4   var Filter = filterClasses.Filter; | 4   var Filter = filterClasses.Filter; | 
| 5   var ElemHideFilter = filterClasses.ElemHideFilter; | 5   var ElemHideFilter = filterClasses.ElemHideFilter; | 
| 6 | 6 | 
| 7   module( | 7   var filterComposer = require("filterComposer"); | 
| 8     "CSS escaping", | 8   var escapeCSS = filterComposer.escapeCSS; | 
| 9     { | 9   var quoteCSS = filterComposer.quoteCSS; | 
| 10       setup: function() |  | 
| 11       { |  | 
| 12         var frame = document.createElement("iframe"); |  | 
| 13         frame.srcdoc = '<script src="../include.postload.js"></script>'; |  | 
| 14 | 10 | 
| 15         stop(); | 11   module("CSS escaping"); | 
| 16         frame.addEventListener("load", function() |  | 
| 17         { |  | 
| 18           start(); |  | 
| 19 |  | 
| 20           this.escapeCSS = frame.contentWindow.escapeCSS; |  | 
| 21           this.quote = frame.contentWindow.quote; |  | 
| 22 |  | 
| 23           document.body.removeChild(frame); |  | 
| 24         }.bind(this)); |  | 
| 25 |  | 
| 26         document.body.appendChild(frame); |  | 
| 27       } |  | 
| 28     } |  | 
| 29   ); |  | 
| 30 | 12 | 
| 31   test("CSS escaping", function() | 13   test("CSS escaping", function() | 
| 32   { | 14   { | 
| 33     var escapeCSS = this.escapeCSS; |  | 
| 34     var quote = this.quote; |  | 
| 35 |  | 
| 36     function testSelector(opts) | 15     function testSelector(opts) | 
| 37     { | 16     { | 
| 38       var mustMatch = opts.mustMatch !== false; | 17       var mustMatch = opts.mustMatch !== false; | 
| 39       var doc = document.implementation.createHTMLDocument(); | 18       var doc = document.implementation.createHTMLDocument(); | 
| 40 | 19 | 
| 41       var style = doc.createElement("style"); | 20       var style = doc.createElement("style"); | 
| 42       doc.documentElement.appendChild(style); | 21       doc.documentElement.appendChild(style); | 
| 43       style.sheet.insertRule(opts.selector + " {}", 0); | 22       style.sheet.insertRule(opts.selector + " {}", 0); | 
| 44 | 23 | 
| 45       var element; | 24       var element; | 
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 96         selector: "." + escapeCSS(s), | 75         selector: "." + escapeCSS(s), | 
| 97         attributes: {class: s}, | 76         attributes: {class: s}, | 
| 98 | 77 | 
| 99         // Whitespace characters split the class name, hence the selector | 78         // Whitespace characters split the class name, hence the selector | 
| 100         // won't match. But we still have to make sure that no exception | 79         // won't match. But we still have to make sure that no exception | 
| 101         // is thrown when calling .querySelector() and .insertRule() | 80         // is thrown when calling .querySelector() and .insertRule() | 
| 102         mustMatch: !/\s/.test(s) | 81         mustMatch: !/\s/.test(s) | 
| 103       }); | 82       }); | 
| 104 | 83 | 
| 105       testSelector({ | 84       testSelector({ | 
| 106         selector: "[foo=" + quote(s) + "]", | 85         selector: "[foo=" + quoteCSS(s) + "]", | 
| 107         attributes: {foo: s} | 86         attributes: {foo: s} | 
| 108       }); | 87       }); | 
| 109     } | 88     } | 
| 110 | 89 | 
| 111     for (var i = 0; i < 0x80; i++) | 90     for (var i = 0; i < 0x80; i++) | 
| 112     { | 91     { | 
| 113       var chr = String.fromCharCode(i); | 92       var chr = String.fromCharCode(i); | 
| 114 | 93 | 
| 115       // Make sure that all ASCII characters are correctly escaped. | 94       // Make sure that all ASCII characters are correctly escaped. | 
| 116       testEscape(chr); | 95       testEscape(chr); | 
| 117 | 96 | 
| 118       // Some characters are only escaped when in the first positon, | 97       // Some characters are only escaped when in the first positon, | 
| 119       // so we still have to make sure that everything is correctly escaped | 98       // so we still have to make sure that everything is correctly escaped | 
| 120       // in subsequent positions. | 99       // in subsequent positions. | 
| 121       testEscape("x" + chr); | 100       testEscape("x" + chr); | 
| 122 | 101 | 
| 123       // Leading dashes must be escaped, when followed by certain characters. | 102       // Leading dashes must be escaped, when followed by certain characters. | 
| 124       testEscape("-" + chr); | 103       testEscape("-" + chr); | 
| 125     } | 104     } | 
| 126 | 105 | 
| 127     // Test some non-ASCII characters. However, those shouldn't require escaping
     . | 106     // Test some non-ASCII characters. However, those shouldn't require escaping
     . | 
| 128     testEscape("\uD83D\uDE3B\u2665\u00E4"); | 107     testEscape("\uD83D\uDE3B\u2665\u00E4"); | 
| 129   }); | 108   }); | 
| 130 })(); | 109 })(); | 
| OLD | NEW | 
|---|