tests to compare En, Qqq and messages.inc
authorAntoine Musso <hashar@free.fr>
Fri, 20 Apr 2012 16:08:33 +0000 (18:08 +0200)
committerAntoine Musso <hashar@free.fr>
Fri, 20 Apr 2012 16:08:33 +0000 (18:08 +0200)
Change-Id: I7ebeeea703e955c628b57548eb023fa3eb5a2f52

tests/phpunit/languages/LanguageDocumentationTest.php [new file with mode: 0644]

diff --git a/tests/phpunit/languages/LanguageDocumentationTest.php b/tests/phpunit/languages/LanguageDocumentationTest.php
new file mode 100644 (file)
index 0000000..78f2b4e
--- /dev/null
@@ -0,0 +1,96 @@
+<?php
+/**
+ * @medium
+ */
+class LanguageDocumentationTest extends MediaWikiTestCase {
+
+       protected static $keys;
+
+       static function setUpBeforeClass() {
+               self::$keys = array(
+                       'qqq' => Language::getMessageKeysFor( 'qqq' ),
+                       'en'  => Language::getMessageKeysFor( 'en' ),
+               );
+
+               global $IP, $wgMessageStructure;
+               if( !isset( $wgMessageStructure ) ) {
+                       require_once( $IP . '/maintenance/language/messages.inc' );
+               }
+
+               foreach( $wgMessageStructure as $block ) {
+                       foreach( $block as $key ) {
+                               self::$keys['messages.inc'][] = $key;
+                       }
+               }
+       }
+
+       /**
+        * Compares en against qqq, make sure all messages are documented
+        */
+       function testAllEnglishMessagesAreDocumentedInQqq() {
+               $delta = array_diff( self::$keys['en'], self::$keys['qqq'] );
+               $this->assertEmpty( $delta,
+                       'All English messages should be documented in qqq'
+               );
+       }
+       /**
+        * Compares qqq against en, make sure qqq does not document removed messages
+        */
+       function testQqqDocumentsExistingMessages() {
+               $delta = array_diff( self::$keys['qqq'], self::$keys['en'] );
+               $this->assertEmpty( $delta,
+                       'Qqq should only documents existing English messages.'
+               );
+       }
+
+       /**
+        * Compares en against messages.inc
+        */
+       function testMessageInMessagesincFile() {
+               $this->assertEquals(
+                       array()
+                       , array_diff( self::$keys['en'], self::$keys['messages.inc'] )
+                       , 'All messages should be described in messages.inc!'
+               );
+       }
+
+       /**
+        * Tests that languages have all the keys defined using En as reference
+        *
+        * This test will emit lot of failure until nice translators
+        * from translatewiki.net finish up the translations. So this test
+        * should probably only be ran before a new MediaWiki release.
+        *
+        * @depends testAllEnglishMessagesAreDocumentedInQqq
+        * @depends testQqqDocumentsExistingMessages
+        *
+        * @group Utility
+        *
+        * @dataProvider provideLanguageKeys
+        */
+       function testLanguagesAreCompletelyTranslated( $lang ) {
+               $langKeys = Language::getMessageKeysFor( $lang );
+
+               $this->assertEquals(
+                       array()
+                       , array_diff( $langKeys, self::$keys['en'] )
+                       , "{$lang} should have all the English message keys"
+               );
+       }
+
+
+       /**
+        * Provide all languages BUT english (en)
+        */
+       function provideLanguageKeys() {
+               $cases = array();
+
+               $langs = Language::getLanguageNames();
+               unset( $langs['en'] );
+
+               foreach( $langs as $code => $name ) {
+                       $cases[] = array( $code );
+               }
+               return $cases;
+       }
+}