Index: test/browser/elemHideEmulation.js |
=================================================================== |
--- a/test/browser/elemHideEmulation.js |
+++ b/test/browser/elemHideEmulation.js |
@@ -10,208 +10,181 @@ |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
* GNU General Public License for more details. |
* |
* You should have received a copy of the GNU General Public License |
* along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. |
*/ |
-// We are currently limited to ECMAScript 5 in this file, because it is being |
-// used in the browser tests. See https://issues.adblockplus.org/ticket/4796 |
- |
-// TODO: This should be using document.currentScript once supported by |
-// PhantomJS. |
-var myUrl = document.head.lastChild.src; |
+"use strict"; |
-exports.setUp = function(callback) |
-{ |
- // The URL object in PhantomJS 2.1.7 does not implement any properties, so |
- // we need a polyfill. |
- if (!URL || !("origin" in URL)) |
- { |
- var doc = document.implementation.createHTMLDocument(); |
- var anchor = doc.createElement("a"); |
- doc.body.appendChild(anchor); |
- URL = function(url) |
- { |
- if (!url) |
- throw "Invalid URL"; |
- anchor.href = url; |
- this.origin = anchor.origin; |
- }; |
- } |
+/* globals ElemHideEmulation */ |
- callback(); |
-}; |
+let myUrl = document.currentScript.src; |
exports.tearDown = function(callback) |
{ |
- var styleElements = document.head.getElementsByTagName("style"); |
+ let styleElements = document.head.getElementsByTagName("style"); |
while (styleElements.length) |
styleElements[0].parentNode.removeChild(styleElements[0]); |
callback(); |
}; |
+function unexpectedError(error) |
+{ |
+ console.error(error); |
+ this.ok(false, "Unexpected error: " + error); |
+} |
+ |
function expectHidden(test, element) |
{ |
test.equal(window.getComputedStyle(element).display, "none", |
"The element's display property should be set to 'none'"); |
} |
function expectVisible(test, element) |
{ |
test.notEqual(window.getComputedStyle(element).display, "none", |
"The element's display property should not be set to 'none'"); |
} |
function findUniqueId() |
{ |
- var id = "elemHideEmulationTest-" + Math.floor(Math.random() * 10000); |
+ let id = "elemHideEmulationTest-" + Math.floor(Math.random() * 10000); |
if (!document.getElementById(id)) |
return id; |
return findUniqueId(); |
} |
function insertStyleRule(rule) |
{ |
- var styleElement; |
- var styleElements = document.head.getElementsByTagName("style"); |
+ let styleElement; |
+ let styleElements = document.head.getElementsByTagName("style"); |
if (styleElements.length) |
styleElement = styleElements[0]; |
else |
{ |
styleElement = document.createElement("style"); |
document.head.appendChild(styleElement); |
} |
styleElement.sheet.insertRule(rule, styleElement.sheet.cssRules.length); |
} |
function createElementWithStyle(styleBlock) |
{ |
- var element = document.createElement("div"); |
+ let element = document.createElement("div"); |
element.id = findUniqueId(); |
document.body.appendChild(element); |
insertStyleRule("#" + element.id + " " + styleBlock); |
return element; |
} |
-function applyElemHideEmulation(selectors, callback) |
+function applyElemHideEmulation(selectors) |
{ |
if (typeof ElemHideEmulation == "undefined") |
{ |
- loadScript(myUrl + "/../../../lib/common.js", function() |
+ return loadScript(myUrl + "/../../../lib/common.js").then(() => |
{ |
- loadScript(myUrl + "/../../../chrome/content/elemHideEmulation.js", |
- function() |
- { |
- applyElemHideEmulation(selectors, callback); |
- }); |
+ return loadScript(myUrl + "/../../../chrome/content/elemHideEmulation.js"); |
+ }).then(() => |
+ { |
+ return applyElemHideEmulation(selectors); |
}); |
- return; |
} |
- var elemHideEmulation = new ElemHideEmulation( |
+ let elemHideEmulation = new ElemHideEmulation( |
window, |
- function(callback) |
+ callback => |
{ |
- var patterns = []; |
- selectors.forEach(function(selector) |
+ let patterns = []; |
+ selectors.forEach(selector => |
{ |
- patterns.push({selector: selector}); |
+ patterns.push({selector}); |
}); |
callback(patterns); |
- }, |
- function(selectors) |
+ }, newSelectors => |
{ |
- if (!selectors.length) |
+ if (!newSelectors.length) |
return; |
- var selector = selectors.join(", "); |
+ let selector = newSelectors.join(", "); |
insertStyleRule(selector + "{display: none !important;}"); |
} |
); |
elemHideEmulation.apply(); |
- callback(); |
+ return Promise.resolve(); |
} |
exports.testVerbatimPropertySelector = function(test) |
{ |
- var toHide = createElementWithStyle("{background-color: #000}"); |
+ let toHide = createElementWithStyle("{background-color: #000}"); |
applyElemHideEmulation( |
- ["[-abp-properties='background-color: rgb(0, 0, 0)']"], |
- function() |
- { |
- expectHidden(test, toHide); |
- test.done(); |
- } |
- ); |
+ ["[-abp-properties='background-color: rgb(0, 0, 0)']"] |
+ ).then(() => |
+ { |
+ expectHidden(test, toHide); |
+ }).catch(unexpectedError.bind(test)).then(() => test.done()); |
}; |
exports.testPropertySelectorWithWildcard = function(test) |
{ |
- var toHide = createElementWithStyle("{background-color: #000}"); |
+ let toHide = createElementWithStyle("{background-color: #000}"); |
applyElemHideEmulation( |
- ["[-abp-properties='*color: rgb(0, 0, 0)']"], |
- function() |
- { |
- expectHidden(test, toHide); |
- test.done(); |
- } |
- ); |
+ ["[-abp-properties='*color: rgb(0, 0, 0)']"] |
+ ).then(() => |
+ { |
+ expectHidden(test, toHide); |
+ }).catch(unexpectedError.bind(test)).then(() => test.done()); |
}; |
exports.testPropertySelectorWithRegularExpression = function(test) |
{ |
- var toHide = createElementWithStyle("{background-color: #000}"); |
+ let toHide = createElementWithStyle("{background-color: #000}"); |
applyElemHideEmulation( |
- ["[-abp-properties='/.*color: rgb\\(0, 0, 0\\)/']"], |
- function() |
- { |
- expectHidden(test, toHide); |
- test.done(); |
- } |
- ); |
+ ["[-abp-properties='/.*color: rgb\\(0, 0, 0\\)/']"] |
+ ).then(() => |
+ { |
+ expectHidden(test, toHide); |
+ }).catch(unexpectedError.bind(test)).then(() => test.done()); |
}; |
exports.testPropertySelectorWithEscapedBrace = function(test) |
{ |
- var toHide = createElementWithStyle("{background-color: #000}"); |
+ let toHide = createElementWithStyle("{background-color: #000}"); |
applyElemHideEmulation( |
- ["[-abp-properties='/background.\\x7B 0,6\\x7D : rgb\\(0, 0, 0\\)/']"], |
- function() |
- { |
- expectHidden(test, toHide); |
- test.done(); |
- } |
- ); |
+ ["[-abp-properties='/background.\\x7B 0,6\\x7D : rgb\\(0, 0, 0\\)/']"] |
+ ).then(() => |
+ { |
+ expectHidden(test, toHide); |
+ }).catch(unexpectedError.bind(test)).then(() => test.done()); |
}; |
exports.testPropertySelectorWithImproperlyEscapedBrace = function(test) |
{ |
- var toHide = createElementWithStyle("{background-color: #000}"); |
+ let toHide = createElementWithStyle("{background-color: #000}"); |
applyElemHideEmulation( |
- ["[-abp-properties='/background.\\x7B0,6\\x7D: rgb\\(0, 0, 0\\)/']"], |
- function() |
- { |
- expectVisible(test, toHide); |
- test.done(); |
- } |
- ); |
+ ["[-abp-properties='/background.\\x7B0,6\\x7D: rgb\\(0, 0, 0\\)/']"] |
+ ).then(() => |
+ { |
+ expectVisible(test, toHide); |
+ }).catch(unexpectedError.bind(test)).then(() => test.done()); |
}; |
exports.testDynamicallyChangedProperty = function(test) |
{ |
- var toHide = createElementWithStyle("{}"); |
+ let toHide = createElementWithStyle("{}"); |
applyElemHideEmulation( |
- ["[-abp-properties='background-color: rgb(0, 0, 0)']"], |
- function() |
+ ["[-abp-properties='background-color: rgb(0, 0, 0)']"] |
+ ).then(() => |
+ { |
+ expectVisible(test, toHide); |
+ insertStyleRule("#" + toHide.id + " {background-color: #000}"); |
+ return new Promise((resolve, reject) => |
{ |
- expectVisible(test, toHide); |
- insertStyleRule("#" + toHide.id + " {background-color: #000}"); |
- window.setTimeout(function() |
+ window.setTimeout(() => |
{ |
expectHidden(test, toHide); |
- test.done(); |
+ resolve(); |
}, 0); |
- } |
- ); |
+ }); |
+ }).catch(unexpectedError.bind(test)).then(() => test.done()); |
}; |