UNPKG

@qooxdoo/framework

Version:

The JS Framework for Coders

192 lines (161 loc) 6.1 kB
/* ************************************************************************ qooxdoo - the new era of web development http://qooxdoo.org Copyright: 2007-2011 1&1 Internet AG, Germany, http://www.1und1.de License: MIT: https://opensource.org/licenses/MIT See the LICENSE file in the project's top-level directory for details. ************************************************************************ */ /* ************************************************************************ ************************************************************************ */ /** * * @asset(qx/test/webfonts/*) */ qx.Class.define("qx.test.bom.webfonts.Manager", { extend : qx.test.bom.webfonts.Abstract, include : [qx.dev.unit.MRequirements], members : { __fontDefinitions : { finelinerScript : { family : "FinelinerScriptRegular", source: [ qx.util.ResourceManager.getInstance().toUri("qx/test/webfonts/fineliner_script-webfont.woff"), qx.util.ResourceManager.getInstance().toUri("qx/test/webfonts/fineliner_script-webfont.ttf"), qx.util.ResourceManager.getInstance().toUri("qx/test/webfonts/fineliner_script-webfont.eot") ] }, fontawesome : { family : "FontAwesome", source: [ qx.util.ResourceManager.getInstance().toUri("qx/test/webfonts/fontawesome-webfont.woff"), qx.util.ResourceManager.getInstance().toUri("qx/test/webfonts/fontawesome-webfont.ttf"), qx.util.ResourceManager.getInstance().toUri("qx/test/webfonts/fontawesome-webfont.eot") ] }, invalid : { family : "MonkeypooBold", source: [ "404.woff", "404.ttf", "404.eot" ] } }, __findRule : function(familyName) { var reg = new RegExp("@font-face.*?" + familyName, "m"); var helper = function(cssText) { cssText = cssText.replace(/\n/g, "").replace(/\r/g, ""); if (reg.exec(cssText)) { return true; } return false; }; for (var i=0,l=document.styleSheets.length; i<l; i++) { var sheet = document.styleSheets[i]; if (sheet.cssText) { if (helper(sheet.cssText)) { return true; } } else if (sheet.cssRules) { for (var j=0,m=sheet.cssRules.length; j<m; j++) { if (helper(sheet.cssRules[j].cssText)) { return true; } } } } return false; }, setUp : function() { this.require(["webFontSupport"]); this.__nodesBefore = document.body.childNodes.length; this.__sheetsBefore = document.styleSheets.length; this.__manager = qx.bom.webfonts.Manager.getInstance(); }, tearDown : function() { this.__manager.dispose(); qx.bom.webfonts.Manager.VALIDATION_TIMEOUT = 5000; delete qx.bom.webfonts.Manager.$$instance; this.__manager = null; this.assertEquals(this.__nodesBefore, document.body.childNodes.length, "Manager did not remove all nodes!"); this.assertEquals(this.__sheetsBefore, document.styleSheets.length, "Manager did not remove stylesheet!"); }, "test: create rule for valid font" : function() { var font = new qx.bom.webfonts.WebFont(); font.set({ size: 18, family: ["monospace"], sources: [this.__fontDefinitions.finelinerScript] }); qx.event.Timer.once(function() { this.resume(function() { var foundRule = this.__findRule(this.__fontDefinitions.finelinerScript.family); this.assertTrue(foundRule, "@font-face rule not found in document styles!"); }, this); }, this, 2000); this.wait(3000); }, "test: do not create rule for invalid font" : function() { qx.bom.webfonts.Manager.VALIDATION_TIMEOUT = 100; var font = new qx.bom.webfonts.WebFont(); font.set({ family: ["monospace"], sources: [this.__fontDefinitions.invalid] }); var that = this; window.setTimeout(function() { that.resume(function() { var foundRule = this.__findRule(this.__fontDefinitions.invalid.family); this.assertFalse(foundRule, "@font-face rule for invalid font found in document styles!"); }, that); }, 2000); this.wait(3000); }, "test: load webfont whith custom comparisonString" : function() { qx.bom.webfonts.Manager.VALIDATION_TIMEOUT = 100; var font = new qx.bom.webfonts.WebFont(); font.set({ family: ["fontawesome"], comparisonString : "\uf206\uf1e3\uf118\uf2a7", sources: [this.__fontDefinitions.fontawesome] }); var that = this; window.setTimeout(function() { that.resume(function() { var foundRule = this.__findRule(this.__fontDefinitions.fontawesome.family); this.assertTrue(foundRule, "@font-face rule for custom comparisonString font not found in document styles!"); }, that); }, 2000); this.wait(3000); }, "test: load webfont with custom version" : function() { var font = new qx.bom.webfonts.WebFont(); font.set({ family: ["monospace"], version : "1.0", sources: [this.__fontDefinitions.finelinerScript] }); qx.event.Timer.once(function() { this.resume(function() { var foundRule = false; // it is browser dependent which type of font is loaded (woff, eot or ttf) so we have to // check all given types, stopping the loop if the font rule was found for(var n=0; n<this.__fontDefinitions.finelinerScript.source.length && foundRule === false; n++) { foundRule = this.__findRule(this.__fontDefinitions.finelinerScript.source[n] + "\\?1\\.0"); } this.assertTrue(foundRule, "@font-face rule for custom version not found in document styles!"); }, this); }, this, 2000); this.wait(3000); } } });