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 |