Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Side by Side Diff: chrome/content/tests/elemhide.js

Issue 29356283: Issue 4500 - Fix element hiding integration tests (Closed) Base URL: https://hg.adblockplus.org/adblockplustests
Patch Set: Created Oct. 7, 2016, 8:29 a.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 (function() 1 (function()
2 { 2 {
3 let server = null; 3 let server = null;
4 let frame = null; 4 let frame = null;
5 5
6 module("Element hiding", { 6 module("Element hiding", {
7 setup: function() 7 setup: function()
8 { 8 {
9 prepareFilterComponents.call(this); 9 prepareFilterComponents.call(this);
10 preparePrefs.call(this); 10 preparePrefs.call(this);
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 [["##div#test1", "@@localhost$generichide"], ["visible", "visible"]], 111 [["##div#test1", "@@localhost$generichide"], ["visible", "visible"]],
112 [["##div#test1", "@@localhost$genericblock"], ["hidden", "visible"]], 112 [["##div#test1", "@@localhost$genericblock"], ["hidden", "visible"]],
113 [["localhost##div#test1", "@@localhost$generichide"], ["hidden", "visible"]] , 113 [["localhost##div#test1", "@@localhost$generichide"], ["hidden", "visible"]] ,
114 [["~example.com##div#test1", "@@localhost$generichide"], ["visible", "visibl e"]], 114 [["~example.com##div#test1", "@@localhost$generichide"], ["visible", "visibl e"]],
115 [["~example.com##div#test1", "@@localhost$genericblock"], ["hidden", "visibl e"]], 115 [["~example.com##div#test1", "@@localhost$genericblock"], ["hidden", "visibl e"]],
116 [["~example.com,localhost##div#test1", "@@localhost$generichide"], ["hidden" , "visible"]], 116 [["~example.com,localhost##div#test1", "@@localhost$generichide"], ["hidden" , "visible"]],
117 ]; 117 ];
118 118
119 function runTest([filters, expected], stage) 119 function runTest([filters, expected], stage)
120 { 120 {
121 let listener = function(action) 121 for (let filter_text of filters)
kzar 2016/10/07 09:42:08 Nit: We usually use camelCase for variable names i
Wladimir Palant 2016/10/07 10:41:21 Done.
122 FilterStorage.addFilter(Filter.fromText(filter_text));
Wladimir Palant 2016/10/07 08:35:50 Rietveld doesn't show it because of whitespace cha
kzar 2016/10/07 09:42:08 Sounds good to me, in fact I wonder why didn't do
Wladimir Palant 2016/10/07 10:16:05 Because element hiding was applying in an async fa
kzar 2016/10/07 10:19:54 Acknowledged.
123
124 if (stage == 2)
125 FilterStorage.addFilter(Filter.fromText("@@||localhost^$document"));
126 else if (stage == 3)
127 FilterStorage.addFilter(Filter.fromText("@@||localhost^$~document"));
128 else if (stage == 4)
129 FilterStorage.addFilter(Filter.fromText("@@||localhost^$elemhide"));
130
131 if (stage == 2 || stage == 4)
132 expected = ["visible", "visible"]; // Second and forth runs are whitelis ted, nothing should be hidden
kzar 2016/10/07 09:42:08 Nit: Mind moving the comment above the if statemen
Wladimir Palant 2016/10/07 10:16:05 Done.
133
134 frame.addEventListener("abp:frameready", function()
122 { 135 {
123 if (action != "elemhideupdate") 136 let frameScript = `
124 return; 137 // The "load" event doesn't mean that our styles are applied - these
125 FilterNotifier.removeListener(listener); 138 // are only applied after a message roundtrip to parent determining
139 // whether element hiding is enabled. Do the same roundtrip here before
140 // checking visibility to make sure timing is right.
Wladimir Palant 2016/10/07 08:35:50 This comment changed - the reason why we need to p
kzar 2016/10/07 09:42:08 Acknowledged.
141 addMessageListener("pong", function()
142 {
143 let visibility = [
144 content.document.getElementById("test1").offsetHeight > 0 ? "visible " : "hidden",
145 content.document.getElementById("test2").offsetHeight > 0 ? "visible " : "hidden"
146 ];
147 sendAsyncMessage("visibility", visibility);
148 });
149 sendAsyncMessage("ping");
150 `;
151 frame.messageManager.addMessageListener("ping", () => frame.messageManager .sendAsyncMessage("pong"));
152 frame.messageManager.addMessageListener("visibility", (message) =>
153 {
154 let visibility = message.data;
155 equal(visibility[0], expected[0], "First element visible");
156 equal(visibility[1], expected[1], "Second element visible");
126 157
127 if (stage == 2) 158 start();
128 defaultMatcher.add(Filter.fromText("@@||localhost^$document")); 159 });
129 else if (stage == 3) 160 frame.messageManager.loadFrameScript("data:text/javascript," + encodeURICo mponent(frameScript), false);
130 defaultMatcher.add(Filter.fromText("@@||localhost^$~document")); 161 }, false, true);
131 else if (stage == 4) 162 frame.setAttribute("src", "http://localhost:1234/test");
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 } 163 }
180 164
181 let stageDescriptions = { 165 let stageDescriptions = {
182 1: "running without exceptions", 166 1: "running without exceptions",
183 2: "running with whitelisted document", 167 2: "running with whitelisted document",
184 3: "running with exception not applying to documents", 168 3: "running with exception not applying to documents",
185 4: "running with element hiding exception", 169 4: "running with element hiding exception",
186 }; 170 };
187 171
188 for (let test = 0; test < tests.length; test++) 172 for (let test = 0; test < tests.length; test++)
189 { 173 {
190 let [filters, expected] = tests[test]; 174 let [filters, expected] = tests[test];
191 for (let stage = 1; stage in stageDescriptions; stage++) 175 for (let stage = 1; stage in stageDescriptions; stage++)
192 asyncTest(filters.join(", ") + " (" + stageDescriptions[stage] + ")", runT est.bind(null, tests[test], stage)); 176 asyncTest(filters.join(", ") + " (" + stageDescriptions[stage] + ")", runT est.bind(null, tests[test], stage));
193 } 177 }
194 })(); 178 })();
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld