X-Git-Url: http://git.cyclocoop.org/?a=blobdiff_plain;f=tests%2Fphpunit%2Flanguages%2FLanguageTest.php;h=68dfd37bbce5f762e3e48de11287ff4ca236b762;hb=e3537bdc00244cefdaa34710be0fb0d920336ed8;hp=c443f20e0b84194008f289be2b98b24636b633d8;hpb=4bfbf2c225d7f45aff167613f35d7d9153abe252;p=lhc%2Fweb%2Fwiklou.git diff --git a/tests/phpunit/languages/LanguageTest.php b/tests/phpunit/languages/LanguageTest.php index c443f20e0b..68dfd37bbc 100644 --- a/tests/phpunit/languages/LanguageTest.php +++ b/tests/phpunit/languages/LanguageTest.php @@ -3,6 +3,24 @@ use Wikimedia\TestingAccessWrapper; class LanguageTest extends LanguageClassesTestCase { + use LanguageNameUtilsTestTrait; + + /** @var array Copy of $wgHooks from before we unset LanguageGetTranslatedLanguageNames */ + private $origHooks; + + public function setUp() { + global $wgHooks; + + parent::setUp(); + + // Don't allow installed hooks to run, except if a test restores them via origHooks (needed + // for testIsKnownLanguageTag_cldr) + $this->origHooks = $wgHooks; + $newHooks = $wgHooks; + unset( $newHooks['LanguageGetTranslatedLanguageNames'] ); + $this->setMwGlobals( 'wgHooks', $newHooks ); + } + /** * @covers Language::convertDoubleWidth * @covers Language::normalizeForSearch @@ -510,84 +528,6 @@ class LanguageTest extends LanguageClassesTestCase { ); } - /** - * Test Language::isValidBuiltInCode() - * @dataProvider provideLanguageCodes - * @covers Language::isValidBuiltInCode - */ - public function testBuiltInCodeValidation( $code, $expected, $message = '' ) { - $this->assertEquals( $expected, - (bool)Language::isValidBuiltInCode( $code ), - "validating code $code $message" - ); - } - - public static function provideLanguageCodes() { - return [ - [ 'fr', true, 'Two letters, minor case' ], - [ 'EN', false, 'Two letters, upper case' ], - [ 'tyv', true, 'Three letters' ], - [ 'be-tarask', true, 'With dash' ], - [ 'be-x-old', true, 'With extension (two dashes)' ], - [ 'be_tarask', false, 'Reject underscores' ], - ]; - } - - /** - * Test Language::isKnownLanguageTag() - * @dataProvider provideKnownLanguageTags - * @covers Language::isKnownLanguageTag - */ - public function testKnownLanguageTag( $code, $message = '' ) { - $this->assertTrue( - (bool)Language::isKnownLanguageTag( $code ), - "validating code $code - $message" - ); - } - - public static function provideKnownLanguageTags() { - return [ - [ 'fr', 'simple code' ], - [ 'bat-smg', 'an MW legacy tag' ], - [ 'sgs', 'an internal standard MW name, for which a legacy tag is used externally' ], - ]; - } - - /** - * @covers Language::isKnownLanguageTag - */ - public function testKnownCldrLanguageTag() { - if ( !class_exists( 'LanguageNames' ) ) { - $this->markTestSkipped( 'The LanguageNames class is not available. ' - . 'The CLDR extension is probably not installed.' ); - } - - $this->assertTrue( - (bool)Language::isKnownLanguageTag( 'pal' ), - 'validating code "pal" an ancient language, which probably will ' - . 'not appear in Names.php, but appears in CLDR in English' - ); - } - - /** - * Negative tests for Language::isKnownLanguageTag() - * @dataProvider provideUnKnownLanguageTags - * @covers Language::isKnownLanguageTag - */ - public function testUnknownLanguageTag( $code, $message = '' ) { - $this->assertFalse( - (bool)Language::isKnownLanguageTag( $code ), - "checking that code $code is invalid - $message" - ); - } - - public static function provideUnknownLanguageTags() { - return [ - [ 'mw', 'non-existent two-letter code' ], - [ 'foo"getGrammarTransformations(); $this->assertNotNull( $languageClass->grammarTransformations ); - // Populate $languageNameCache - Language::fetchLanguageNames(); - $this->assertNotNull( $languageClass->languageNameCache ); - Language::clearCaches(); $this->assertCount( 0, Language::$mLangObjCache ); $this->assertCount( 0, $languageClass->fallbackLanguageCache ); $this->assertNull( $languageClass->grammarTransformations ); - $this->assertNull( $languageClass->languageNameCache ); - } - - /** - * @dataProvider provideIsSupportedLanguage - * @covers Language::isSupportedLanguage - */ - public function testIsSupportedLanguage( $code, $expected, $comment ) { - $this->assertEquals( $expected, Language::isSupportedLanguage( $code ), $comment ); - } - - public static function provideIsSupportedLanguage() { - return [ - [ 'en', true, 'is supported language' ], - [ 'fi', true, 'is supported language' ], - [ 'bunny', false, 'is not supported language' ], - [ 'FI', false, 'is not supported language, input should be in lower case' ], - ]; } /** @@ -1956,4 +1874,82 @@ class LanguageTest extends LanguageClassesTestCase { [ 'èl', 'Ll' , 'Non-ASCII is overridden', [ 'è' => 'L' ] ], ]; } + + // The following methods are for LanguageNameUtilsTestTrait + + private function isSupportedLanguage( $code ) { + return Language::isSupportedLanguage( $code ); + } + + private function isValidCode( $code ) { + return Language::isValidCode( $code ); + } + + private function isValidBuiltInCode( $code ) { + return Language::isValidBuiltInCode( $code ); + } + + private function isKnownLanguageTag( $code ) { + return Language::isKnownLanguageTag( $code ); + } + + /** + * Call getLanguageName() and getLanguageNames() using the Language static methods. + * + * @param array $options To set globals for testing Language + * @param string $expected + * @param string $code + * @param mixed ...$otherArgs Optionally, pass $inLanguage and/or $include. + */ + private function assertGetLanguageNames( array $options, $expected, $code, ...$otherArgs ) { + if ( $options ) { + foreach ( $options as $key => $val ) { + $this->setMwGlobals( "wg$key", $val ); + } + $this->resetServices(); + } + $this->assertSame( $expected, + Language::fetchLanguageNames( ...$otherArgs )[strtolower( $code )] ?? '' ); + $this->assertSame( $expected, Language::fetchLanguageName( $code, ...$otherArgs ) ); + } + + private function getLanguageNames( ...$args ) { + return Language::fetchLanguageNames( ...$args ); + } + + private function getLanguageName( ...$args ) { + return Language::fetchLanguageName( ...$args ); + } + + private static function getFileName( ...$args ) { + return Language::getFileName( ...$args ); + } + + private static function getMessagesFileName( $code ) { + return Language::getMessagesFileName( $code ); + } + + private static function getJsonMessagesFileName( $code ) { + return Language::getJsonMessagesFileName( $code ); + } + + /** + * @todo This really belongs in the cldr extension's tests. + * + * @covers MediaWiki\Languages\LanguageNameUtils::isKnownLanguageTag + * @covers Language::isKnownLanguageTag + */ + public function testIsKnownLanguageTag_cldr() { + if ( !class_exists( 'LanguageNames' ) ) { + $this->markTestSkipped( 'The LanguageNames class is not available. ' + . 'The CLDR extension is probably not installed.' ); + } + + // We need to restore the extension's hook that we removed. + $this->setMwGlobals( 'wgHooks', $this->origHooks ); + + // "pal" is an ancient language, which probably will not appear in Names.php, but appears in + // CLDR in English + $this->assertTrue( Language::isKnownLanguageTag( 'pal' ) ); + } }