| Left: | ||
| Right: |
| OLD | NEW |
|---|---|
| (Empty) | |
| 1 (function() | |
|
Wladimir Palant
2016/10/04 13:53:18
This test wasn't migrated, elemhide.js in adblockp
kzar
2016/10/04 14:20:43
Shit you're right, sorry. Resurrected this now.
| |
| 2 { | |
| 3 let server = null; | |
| 4 let frame = null; | |
| 5 | |
| 6 module("Element hiding", { | |
| 7 setup: function() | |
| 8 { | |
| 9 prepareFilterComponents.call(this); | |
| 10 preparePrefs.call(this); | |
| 11 | |
| 12 server = new nsHttpServer(); | |
| 13 server.start(1234); | |
| 14 | |
| 15 server.registerPathHandler("/test", function(metadata, response) | |
| 16 { | |
| 17 let body = | |
| 18 '<body onload="document.dispatchEvent(new CustomEvent(\'abp:frameready \', {bubbles: true}));">' + | |
| 19 '<div id="test1" class="testClass">foo</div>' + | |
| 20 '<p id="test2" class="testClass">bar</p>' + | |
| 21 '</body>'; | |
| 22 response.setStatusLine("1.1", "200", "OK"); | |
| 23 response.setHeader("Content-Type", "text/html; charset=utf-8"); | |
| 24 response.bodyOutputStream.write(body, body.length); | |
| 25 }); | |
| 26 | |
| 27 frame = document.createElementNS("http://www.mozilla.org/keymaster/gatekee per/there.is.only.xul", "browser"); | |
| 28 frame.setAttribute("type", "content"); | |
| 29 frame.setAttribute("disablehistory", "true"); | |
| 30 frame.style.visibility = "collapse"; | |
| 31 document.body.appendChild(frame); | |
| 32 }, | |
| 33 teardown: function() | |
| 34 { | |
| 35 restoreFilterComponents.call(this); | |
| 36 restorePrefs.call(this); | |
| 37 | |
| 38 stop(); | |
| 39 server.stop(function() | |
| 40 { | |
| 41 frame.parentElement.removeChild(frame); | |
| 42 | |
| 43 server = null; | |
| 44 frame = null; | |
| 45 start(); | |
| 46 }); | |
| 47 } | |
| 48 }); | |
| 49 | |
| 50 let tests = [ | |
| 51 [[], ["visible", "visible"]], | |
| 52 [["#div(test1)"], ["hidden", "visible"]], | |
| 53 [["localhost#div(test1)"], ["hidden", "visible"]], | |
| 54 [["localhost#div(test1)", "foo,foo2#p(test2)"], ["hidden", "visible"]], | |
| 55 [["localhost,foo#div(test1)", "foo,localhost#p(test2)"], ["hidden", "hidden" ]], | |
| 56 [["localhost#div(test1)", "localhost#p(test2)"], ["hidden", "hidden"]], | |
| 57 [["foo#div(test1)", "foo#p(test2)"], ["visible", "visible"]], | |
| 58 | |
| 59 [["localhost#div(testClass)"], ["hidden", "visible"]], | |
| 60 [["localhost#p(testClass)"], ["visible", "hidden"]], | |
| 61 [["localhost#*(testClass)"], ["hidden", "hidden"]], | |
| 62 [["localhost#div(testClass)", "localhost#p(test2)"], ["hidden", "hidden"]], | |
| 63 [["localhost#p(testClass)", "localhost#p(test2)"], ["visible", "hidden"]], | |
| 64 [["localhost#p(testClass)(test2)"], ["visible", "visible"]], // this filte r is invalid, must be ignored | |
| 65 | |
| 66 [["localhost#*(id^=test)"], ["hidden", "hidden"]], | |
| 67 [["localhost#p(id^=test)"], ["visible", "hidden"]], | |
| 68 [["localhost#*(id$=2)"], ["visible", "hidden"]], | |
| 69 [["localhost#p(id$=2)"], ["visible", "hidden"]], | |
| 70 [["localhost#div(id$=2)"], ["visible", "visible"]], | |
| 71 | |
| 72 [["localhost#*(test1)(id^=test)"], ["hidden", "visible"]], | |
| 73 [["localhost#*(testClass)(id^=test)"], ["hidden", "hidden"]], | |
| 74 [["localhost#p(testClass)(id^=test)"], ["visible", "hidden"]], | |
| 75 [["localhost#*(test1)(id$=2)"], ["visible", "visible"]], | |
| 76 [["localhost#*(testClass)(id$=2)"], ["visible", "hidden"]], | |
| 77 [["localhost#p(testClass)(id$=2)"], ["visible", "hidden"]], | |
| 78 | |
| 79 [["localhost#*(test1)(id^=test)(id$=2)"], ["visible", "visible"]], | |
| 80 [["localhost#*(test1)(id^=test)(id$=1)"], ["hidden", "visible"]], | |
| 81 [["localhost#p(test1)(id^=test)(id$=1)"], ["visible", "visible"]], | |
| 82 [["localhost#div(test1)(id^=test)(id$=1)"], ["hidden", "visible"]], | |
| 83 [["localhost#*(id^=test)(id$=2)"], ["visible", "hidden"]], | |
| 84 [["localhost#*(id^=test)(id$=1)"], ["hidden", "visible"]], | |
| 85 [["localhost#p(id^=test)(id$=1)"], ["visible", "visible"]], | |
| 86 [["localhost#div(id^=test)(id$=1)"], ["hidden", "visible"]], | |
| 87 | |
| 88 [["localhost##div#test1"], ["hidden", "visible"]], | |
| 89 [["localhost##p.testClass"], ["visible", "hidden"]], | |
| 90 [["localhost##div#test1, p.testClass"], ["hidden", "hidden"]], | |
| 91 [["localhost##div#test1", "localhost##p.testClass"], ["hidden", "hidden"]], | |
| 92 [["localhost##.testClass"], ["hidden", "hidden"]], | |
| 93 | |
| 94 [["~localhost##div#test1"], ["visible", "visible"]], | |
| 95 [["foo,~localhost##div#test1"], ["visible", "visible"]], | |
| 96 [["localhost,~foo##div#test1"], ["hidden", "visible"]], | |
| 97 | |
| 98 [["###test1", "localhost#@##test1"], ["visible", "visible"]], | |
| 99 [["localhost###test1", "localhost#@##test1"], ["visible", "visible"]], | |
| 100 [["localhost,~foo###test1", "localhost#@##test1"], ["visible", "visible"]], | |
| 101 [["###test1", "foo#@##test1"], ["hidden", "visible"]], | |
| 102 [["###test1", "~foo#@##test1"], ["visible", "visible"]], | |
| 103 [["###test1", "~localhost#@##test1"], ["hidden", "visible"]], | |
| 104 [["###test1", "#@##test1"], ["visible", "visible"]], | |
| 105 [["localhost###test1", "#@##test1"], ["visible", "visible"]], | |
| 106 | |
| 107 [["localhost.###test1"], ["visible", "visible"]], | |
| 108 [["localhost.,localhost###test1"], ["hidden", "visible"]], | |
| 109 [["localhost.,foo.###test1"], ["visible", "visible"]], | |
| 110 | |
| 111 [["##div#test1", "@@localhost$generichide"], ["visible", "visible"]], | |
| 112 [["##div#test1", "@@localhost$genericblock"], ["hidden", "visible"]], | |
| 113 [["localhost##div#test1", "@@localhost$generichide"], ["hidden", "visible"]] , | |
| 114 [["~example.com##div#test1", "@@localhost$generichide"], ["visible", "visibl e"]], | |
| 115 [["~example.com##div#test1", "@@localhost$genericblock"], ["hidden", "visibl e"]], | |
| 116 [["~example.com,localhost##div#test1", "@@localhost$generichide"], ["hidden" , "visible"]], | |
| 117 ]; | |
| 118 | |
| 119 function runTest([filters, expected], stage) | |
| 120 { | |
| 121 let listener = function(action) | |
| 122 { | |
| 123 if (action != "elemhideupdate") | |
| 124 return; | |
| 125 FilterNotifier.removeListener(listener); | |
| 126 | |
| 127 if (stage == 2) | |
| 128 defaultMatcher.add(Filter.fromText("@@||localhost^$document")); | |
| 129 else if (stage == 3) | |
| 130 defaultMatcher.add(Filter.fromText("@@||localhost^$~document")); | |
| 131 else if (stage == 4) | |
| 132 defaultMatcher.add(Filter.fromText("@@||localhost^$elemhide")); | |
| 133 | |
| 134 if (stage == 2 || stage == 4) | |
| 135 expected = ["visible", "visible"]; // Second and forth runs are whitel isted, nothing should be hidden | |
| 136 | |
| 137 frame.addEventListener("abp:frameready", function() | |
| 138 { | |
| 139 let frameScript = ` | |
| 140 // The "load" event doesn't mean XBL bindings are done, these will | |
| 141 // take longer to load (async messaging). Only check visibility after | |
| 142 // sending a message to parent and receiving response. | |
| 143 addMessageListener("pong", function() | |
| 144 { | |
| 145 let visibility = [ | |
| 146 content.document.getElementById("test1").offsetHeight > 0 ? "visib le" : "hidden", | |
| 147 content.document.getElementById("test2").offsetHeight > 0 ? "visib le" : "hidden" | |
| 148 ]; | |
| 149 sendAsyncMessage("visibility", visibility); | |
| 150 }); | |
| 151 sendAsyncMessage("ping"); | |
| 152 `; | |
| 153 frame.messageManager.addMessageListener("ping", () => frame.messageManag er.sendAsyncMessage("pong")); | |
| 154 frame.messageManager.addMessageListener("visibility", (message) => | |
| 155 { | |
| 156 let visibility = message.data; | |
| 157 equal(visibility[0], expected[0], "First element visible"); | |
| 158 equal(visibility[1], expected[1], "Second element visible"); | |
| 159 | |
| 160 start(); | |
| 161 }); | |
| 162 frame.messageManager.loadFrameScript("data:text/javascript," + encodeURI Component(frameScript), false); | |
| 163 }, false, true); | |
| 164 frame.setAttribute("src", "http://localhost:1234/test"); | |
| 165 }; | |
| 166 FilterNotifier.addListener(listener); | |
| 167 | |
| 168 for (let filter_text of filters) | |
| 169 { | |
| 170 let filter = Filter.fromText(filter_text); | |
| 171 if (filter instanceof WhitelistFilter) | |
| 172 defaultMatcher.add(filter); | |
| 173 else | |
| 174 ElemHide.add(filter); | |
| 175 } | |
| 176 | |
| 177 ElemHide.isDirty = true; | |
| 178 ElemHide.apply(); | |
| 179 } | |
| 180 | |
| 181 let stageDescriptions = { | |
| 182 1: "running without exceptions", | |
| 183 2: "running with whitelisted document", | |
| 184 3: "running with exception not applying to documents", | |
| 185 4: "running with element hiding exception", | |
| 186 }; | |
| 187 | |
| 188 for (let test = 0; test < tests.length; test++) | |
| 189 { | |
| 190 let [filters, expected] = tests[test]; | |
| 191 for (let stage = 1; stage in stageDescriptions; stage++) | |
| 192 asyncTest(filters.join(", ") + " (" + stageDescriptions[stage] + ")", runT est.bind(null, tests[test], stage)); | |
| 193 } | |
| 194 })(); | |
| OLD | NEW |