Add tests to a few Language class methods
Yes, the tests indicate that ucwordbreaks() is bugged, but this should be addressed separately. Change-Id: Ibc4a9dd2659bd723ce88c27be1c20b56a997709e
This commit is contained in:
parent
b9c675ca15
commit
e6e2e80dfa
2 changed files with 174 additions and 0 deletions
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
use MediaWiki\Languages\LanguageFallback;
|
||||
use MediaWiki\Languages\LanguageNameUtils;
|
||||
use MediaWiki\MediaWikiServices;
|
||||
use Wikimedia\TestingAccessWrapper;
|
||||
|
||||
class LanguageIntegrationTest extends LanguageClassesTestCase {
|
||||
|
|
@ -1958,4 +1959,133 @@ class LanguageIntegrationTest extends LanguageClassesTestCase {
|
|||
// CLDR in English
|
||||
$this->assertTrue( Language::isKnownLanguageTag( 'pal' ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers Language::getNamespaces
|
||||
* @covers Language::fixVariableInNamespace
|
||||
* @dataProvider provideGetNamespaces
|
||||
*/
|
||||
public function testGetNamespaces( string $langCode, array $config, array $expected ) {
|
||||
$langClass = Language::class . ucfirst( $langCode );
|
||||
if ( !class_exists( $langClass ) ) {
|
||||
$langClass = Language::class;
|
||||
}
|
||||
/** @var Language $lang */
|
||||
$lang = new $langClass(
|
||||
$langCode,
|
||||
MediaWikiServices::getInstance()->getLocalisationCache(),
|
||||
$this->createNoOpMock( LanguageNameUtils::class ),
|
||||
$this->createNoOpMock( LanguageFallback::class ),
|
||||
$this->createNoOpMock( MapCacheLRU::class )
|
||||
);
|
||||
$config += [
|
||||
'wgMetaNamespace' => 'Project',
|
||||
'wgMetaNamespaceTalk' => false,
|
||||
'wgExtraNamespaces' => [],
|
||||
];
|
||||
$this->setMwGlobals( $config );
|
||||
$namespaces = $lang->getNamespaces();
|
||||
$this->assertEquals( $expected, $namespaces );
|
||||
}
|
||||
|
||||
public function provideGetNamespaces() {
|
||||
$enNamespaces = [
|
||||
NS_MEDIA => 'Media',
|
||||
NS_SPECIAL => 'Special',
|
||||
NS_MAIN => '',
|
||||
NS_TALK => 'Talk',
|
||||
NS_USER => 'User',
|
||||
NS_USER_TALK => 'User_talk',
|
||||
NS_FILE => 'File',
|
||||
NS_FILE_TALK => 'File_talk',
|
||||
NS_MEDIAWIKI => 'MediaWiki',
|
||||
NS_MEDIAWIKI_TALK => 'MediaWiki_talk',
|
||||
NS_TEMPLATE => 'Template',
|
||||
NS_TEMPLATE_TALK => 'Template_talk',
|
||||
NS_HELP => 'Help',
|
||||
NS_HELP_TALK => 'Help_talk',
|
||||
NS_CATEGORY => 'Category',
|
||||
NS_CATEGORY_TALK => 'Category_talk',
|
||||
];
|
||||
$ukNamespaces = [
|
||||
NS_MEDIA => 'Медіа',
|
||||
NS_SPECIAL => 'Спеціальна',
|
||||
NS_TALK => 'Обговорення',
|
||||
NS_USER => 'Користувач',
|
||||
NS_USER_TALK => 'Обговорення_користувача',
|
||||
NS_FILE => 'Файл',
|
||||
NS_FILE_TALK => 'Обговорення_файлу',
|
||||
NS_MEDIAWIKI => 'MediaWiki',
|
||||
NS_MEDIAWIKI_TALK => 'Обговорення_MediaWiki',
|
||||
NS_TEMPLATE => 'Шаблон',
|
||||
NS_TEMPLATE_TALK => 'Обговорення_шаблону',
|
||||
NS_HELP => 'Довідка',
|
||||
NS_HELP_TALK => 'Обговорення_довідки',
|
||||
NS_CATEGORY => 'Категорія',
|
||||
NS_CATEGORY_TALK => 'Обговорення_категорії',
|
||||
];
|
||||
return [
|
||||
'Default configuration' => [
|
||||
'en',
|
||||
[],
|
||||
$enNamespaces + [
|
||||
NS_PROJECT => 'Project',
|
||||
NS_PROJECT_TALK => 'Project_talk',
|
||||
],
|
||||
],
|
||||
'Custom project NS + extra' => [
|
||||
'en',
|
||||
[
|
||||
'wgMetaNamespace' => 'Wikipedia',
|
||||
'wgExtraNamespaces' => [
|
||||
100 => 'Borderlands',
|
||||
101 => 'Borderlands_talk',
|
||||
],
|
||||
],
|
||||
$enNamespaces + [
|
||||
NS_PROJECT => 'Wikipedia',
|
||||
NS_PROJECT_TALK => 'Wikipedia_talk',
|
||||
100 => 'Borderlands',
|
||||
101 => 'Borderlands_talk',
|
||||
],
|
||||
],
|
||||
'Custom project NS and talk + extra' => [
|
||||
'en',
|
||||
[
|
||||
'wgMetaNamespace' => 'Wikipedia',
|
||||
'wgMetaNamespaceTalk' => 'Wikipedia_drama',
|
||||
'wgExtraNamespaces' => [
|
||||
100 => 'Borderlands',
|
||||
101 => 'Borderlands_talk',
|
||||
],
|
||||
],
|
||||
$enNamespaces + [
|
||||
NS_PROJECT => 'Wikipedia',
|
||||
NS_PROJECT_TALK => 'Wikipedia_drama',
|
||||
100 => 'Borderlands',
|
||||
101 => 'Borderlands_talk',
|
||||
],
|
||||
],
|
||||
'Ukrainian default' => [
|
||||
'uk',
|
||||
[],
|
||||
$ukNamespaces + [
|
||||
NS_MAIN => '',
|
||||
NS_PROJECT => 'Project',
|
||||
NS_PROJECT_TALK => 'Обговорення_Project',
|
||||
],
|
||||
],
|
||||
'Ukrainian custom NS' => [
|
||||
'uk',
|
||||
[
|
||||
'wgMetaNamespace' => 'Вікіпедія',
|
||||
],
|
||||
$ukNamespaces + [
|
||||
NS_MAIN => '',
|
||||
NS_PROJECT => 'Вікіпедія',
|
||||
NS_PROJECT_TALK => 'Обговорення_Вікіпедії',
|
||||
],
|
||||
],
|
||||
];
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -47,4 +47,48 @@ class LanguageTest extends MediaWikiUnitTestCase {
|
|||
$this->assertSame( [], $lang->getGrammarTransformations() );
|
||||
$this->assertSame( [], $lang->getGrammarTransformations() );
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers ::ucwords
|
||||
* @dataProvider provideUcwords
|
||||
*/
|
||||
public function testUcwords( string $input, string $expected ) {
|
||||
$lang = $this->getObj();
|
||||
$this->assertSame( $expected, $lang->ucwords( $input ) );
|
||||
}
|
||||
|
||||
public function provideUcwords() {
|
||||
return [
|
||||
'Empty string' => [ '', '' ],
|
||||
'Non-alpha only' => [ '3212-353', '3212-353' ],
|
||||
'Non-alpha only, multiple words' => [ '@%#, #@$%!', '@%#, #@$%!' ],
|
||||
'Single ASCII word' => [ 'teSt', 'Test' ],
|
||||
'ASCII words' => [ 'TeSt 123 test foo-bar', 'Test 123 Test Foo-bar' ],
|
||||
'Single multibyte word' => [ 'теСт', 'Тест' ],
|
||||
'Multibyte words' => [ 'ТесТ 123, тест 测试 test раз-два', 'Тест 123, Тест 测试 Test Раз-два' ],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers ::ucwordbreaks
|
||||
* @dataProvider provideUcwordbreaks
|
||||
*/
|
||||
public function testUcwordbreaks( string $input, string $expected ) {
|
||||
$lang = $this->getObj();
|
||||
$this->assertSame( $expected, $lang->ucwordbreaks( $input ) );
|
||||
}
|
||||
|
||||
public function provideUcwordbreaks() {
|
||||
return [
|
||||
'Empty string' => [ '', '' ],
|
||||
'Non-alpha only' => [ '3212-353', '3212-353' ],
|
||||
'Non-alpha only, multiple words' => [ '@%#, #@$%!', '@%#, #@$%!' ],
|
||||
'Single ASCII word' => [ 'teSt', 'TeSt' ],
|
||||
'Single ASCII word, prefixed' => [ '-teSt', '-TeSt' ],
|
||||
'ASCII words' => [ 'TeSt 123 test foo-bar', 'TeSt 123 Test Foo-Bar' ],
|
||||
'Single multibyte word' => [ 'теСт', 'Тест' ],
|
||||
'Single multibyte word, prefixed' => [ '-теСт', '-Тест' ],
|
||||
'Multibyte words' => [ 'ТесТ 123, тест 测试 test раз-два', 'Тест 123, Тест 测试 Test Раз-Два' ],
|
||||
];
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue