https://www.mediawiki.org/wiki/Special:Code/MediaWiki/109157

Revision: 109157
Author:   santhosh
Date:     2012-01-17 16:11:45 +0000 (Tue, 17 Jan 2012)
Log Message:
-----------
Better way to check whether @font-face rule is added to the document for the 
font.
Also helps in case font was loaded using uselang=ta and not by tests.

Modified Paths:
--------------
    trunk/extensions/WebFonts/tests/qunit/ext.webfonts.tests.js

Modified: trunk/extensions/WebFonts/tests/qunit/ext.webfonts.tests.js
===================================================================
--- trunk/extensions/WebFonts/tests/qunit/ext.webfonts.tests.js 2012-01-17 
16:07:55 UTC (rev 109156)
+++ trunk/extensions/WebFonts/tests/qunit/ext.webfonts.tests.js 2012-01-17 
16:11:45 UTC (rev 109157)
@@ -44,11 +44,10 @@
        assertFalse( $testElement.hasClass( 'webfonts-lang-attr' ), 'The 
element has no webfonts-lang-attr class since en lang has no fonts available' ) 
;
 
        ok( $testElement.attr( 'lang' , 'ta' ) , 'Set lang attribute as Tamil' 
);
-       var cssRulesLength = document.styleSheets.length;
        ok( mw.webfonts.loadFontsForLangAttr() );
        assertTrue( $testElement.hasClass( 'webfonts-lang-attr' ), 'The element 
has webfonts-lang-attr class' ) ;
        assertTrue( $.inArray( 'Lohit Tamil', mw.webfonts.fonts ) >= 0 , 'Font 
loaded' );
-       assertTrue( cssRulesLength + 1 === document.styleSheets.length, 'New 
css rule added to the document' );
+       assertTrue( isFontFaceLoaded( 'Lohit Tamil' ), 'New css rule added to 
the document for font Lohit Tamil' );
 
        ok( mw.webfonts.reset() );
        assertFalse( $testElement.hasClass( 'webfonts-lang-attr' ), 'The 
element has no webfonts-lang-attr since we reset it' ) ;
@@ -65,26 +64,36 @@
        assertTrue(  $testElement !== [], 'Test element added' ) ;
 
        $testElement.attr( 'style','font-family: RufScript, Arial, Helvetica, 
sans' );
-       var cssRulesLength = document.styleSheets.length;
        assertTrue( $.inArray( 'RufScript', mw.webfonts.fonts ) === -1 , 
'RufScript Font not loaded yet' );
        ok( mw.webfonts.loadFontsForFontFamilyStyle() );
        assertTrue( $.inArray( 'RufScript', mw.webfonts.fonts ) >= 0 , 'Font 
loaded' );
-       assertTrue( cssRulesLength +1 === document.styleSheets.length, 'New css 
rule added to the document' );
+       assertTrue( isFontFaceLoaded('RufScript'), 'New css rule added to the 
document for RufScript'  );
 
        $testElement.attr( 'style','font-family: NonExistingFont, Arial, 
Helvetica, sans' );
-       cssRulesLength = document.styleSheets.length;
        ok( mw.webfonts.loadFontsForFontFamilyStyle() );
        assertTrue( $.inArray( 'NonExistingFont', mw.webfonts.fonts ) === -1 , 
'Font not loaded since it is not existing, including fallback fonts' );
-       assertTrue( cssRulesLength === document.styleSheets.length, 'No new css 
rule added to the document' );
-
+       assertFalse( isFontFaceLoaded( 'NonExistingFont' ), 'No new css rule 
added to the document' );
+       
        $testElement.attr( 'style','font-family: NonExistingFont, 
AnjaliOldLipi, Arial, Helvetica, sans' );
-       cssRulesLength = document.styleSheets.length;
        assertTrue( $.inArray( 'AnjaliOldLipi', mw.webfonts.fonts ) === -1 , 
'Fallback font AnjaliOldLipi not loaded yet' );
        ok( mw.webfonts.loadFontsForFontFamilyStyle() );
        assertTrue( $.inArray( 'AnjaliOldLipi', mw.webfonts.fonts ) >= 0 , 
'Fallback font AnjaliOldLipi loaded' );
-       assertTrue( cssRulesLength + 1 === document.styleSheets.length, 'New 
css rule added to the document for fallbackfont' );
+       assertTrue( isFontFaceLoaded('AnjaliOldLipi') , 'New css rule added to 
the document for fallbackfont AnjaliOldLipi' );
 
        ok( $testElement.remove() );
 } );
 
-
+isFontFaceLoaded = function(fontFamilyName){
+       var lastStyleIndex = document.styleSheets.length-1;
+       // Iterate from last.
+       for( var styleIndex = lastStyleIndex; styleIndex > 0 ; styleIndex-- ){
+               var lastStyleSheet = document.styleSheets[styleIndex];
+               if ( !lastStyleSheet ) continue ;
+               if ( !lastStyleSheet.cssRules[0] ) continue ;
+               var cssText =  lastStyleSheet.cssRules[0].cssText;
+               if ( cssText.indexOf( '@font-face' ) >= 0 &&  cssText.indexOf( 
fontFamilyName ) >= 0 ){
+                       return true;
+               }
+       }
+       return false;
+}


_______________________________________________
MediaWiki-CVS mailing list
MediaWiki-CVS@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs

Reply via email to