From 93348f39d47e04c95814965a3a2d00860f260415 Mon Sep 17 00:00:00 2001 From: Antoine Musso Date: Thu, 3 Mar 2011 19:13:57 +0000 Subject: [PATCH] Fix language code validation (from r82927) A language code may contains the underscore character (be_tarask) and might as well be upper case (FR). Add tests for Language::isValidBuiltInCode() against some language codes --- languages/Language.php | 2 +- tests/phpunit/languages/LanguageTest.php | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/languages/Language.php b/languages/Language.php index 3fa1032375..8b349442a0 100644 --- a/languages/Language.php +++ b/languages/Language.php @@ -215,7 +215,7 @@ class Language { * internal customisation of MediaWiki, via Messages*.php. */ public static function isValidBuiltInCode( $code ) { - return preg_match( '/^[a-z0-9-]*$/', $code ); + return preg_match( '/^[a-z0-9-_]*$/i', $code ); } /** diff --git a/tests/phpunit/languages/LanguageTest.php b/tests/phpunit/languages/LanguageTest.php index efc2f0b7cb..130f68d15e 100644 --- a/tests/phpunit/languages/LanguageTest.php +++ b/tests/phpunit/languages/LanguageTest.php @@ -58,4 +58,27 @@ class LanguageTest extends MediaWikiTestCase { 'formatTimePeriod() rounding (>=1h)' ); } + + /** + * Test Language::isValidBuiltInCode() + * @dataProvider provideLanguageCodes + */ + function testBuiltInCodeValidation( $code, $message = '' ) { + $this->assertTrue( + (bool) Language::isValidBuiltInCode( $code ), + "validating code $code $message" + ); + } + + function provideLanguageCodes() { + return array( + array( 'fr' , 'Two letters, minor case' ), + array( 'EN' , 'Two letters, upper case' ), + array( 'tyv' , 'Three letters' ), + array( 'tokipona' , 'long language code' ), + array( 'be_tarask', 'With underscore' ), + array( 'Zh_classical', 'Begin with upper case, underscore' ), + array( 'Be_x_old', 'With extension (two underscores)' ), + ); + } } -- 2.20.1