wiki.techinc.nl/tests/phpunit/unit/includes/language/LanguageTest.php
Tim Starling 5e30a927bc tests: Make some PHPUnit data providers static
Just methods where adding "static" to the declaration was enough, I
didn't do anything with providers that used $this.

Initially by search and replace. There were many mistakes which I
found mostly by running the PHPStorm inspection which searches for
$this usage in a static method. Later I used the PHPStorm "make static"
action which avoids the more obvious mistakes.

Bug: T332865
Change-Id: I47ed6692945607dfa5c139d42edbd934fa4f3a36
2023-03-24 02:53:57 +00:00

153 lines
4.5 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
use MediaWiki\Languages\LanguageConverterFactory;
use MediaWiki\Languages\LanguageFallback;
use MediaWiki\Languages\LanguageNameUtils;
/**
* @coversDefaultClass Language
*/
class LanguageTest extends MediaWikiUnitTestCase {
/**
* @param array $options Valid keys:
* 'code'
* 'grammarTransformCache'
* @return Language
*/
private function getObj( array $options = [] ) {
return new Language(
$options['code'] ?? 'en',
$this->createNoOpMock( NamespaceInfo::class ),
$this->createNoOpMock( LocalisationCache::class ),
$this->createNoOpMock( LanguageNameUtils::class ),
$this->createNoOpMock( LanguageFallback::class ),
$this->createNoOpMock( LanguageConverterFactory::class ),
$this->createHookContainer(),
new HashConfig( [] )
);
}
/**
* @covers ::getCode
* @dataProvider provideCodes
*/
public function testGetCode( $code, $bcp47code ) {
$lang = $this->getObj( [ 'code' => $code ] );
$this->assertSame( $code, $lang->getCode() );
}
/**
* @covers ::getHtmlCode
* @dataProvider provideCodes
*/
public function testGetHtmlCode( $code, $bcp47code ) {
$lang = $this->getObj( [ 'code' => $code ] );
$this->assertSame( $bcp47code, $lang->getHtmlCode() );
}
/**
* @covers ::toBcp47Code
* @dataProvider provideCodes
*/
public function testToBcp47Code( $code, $bcp47code ) {
$lang = $this->getObj( [ 'code' => $code ] );
$this->assertSame( $bcp47code, $lang->toBcp47Code() );
}
public static function provideCodes() {
return LanguageCodeTest::provideLanguageCodes();
}
/**
* @covers ::getGrammarTransformations
* @todo Test the exception case
*/
public function testGetGrammarTransformations() {
global $IP;
// XXX Inject a value here instead of reading the filesystem (T231159)
$expected = FormatJson::decode(
file_get_contents( "$IP/languages/data/grammarTransformations/he.json" ), true );
$lang = $this->getObj( [ 'code' => 'he' ] );
$this->assertSame( $expected, $lang->getGrammarTransformations() );
$this->assertSame( $expected, $lang->getGrammarTransformations() );
}
/**
* @covers ::getGrammarTransformations
*/
public function testGetGrammarTransformations_empty() {
$lang = $this->getObj();
$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 static 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 static 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 Раз-Два' ],
];
}
/**
* @covers ::firstChar
* @dataProvider provideFirstChar
*/
public function testFirstChar( string $input, string $expected ) {
$lang = $this->getObj();
$this->assertSame( $expected, $lang->firstChar( $input ) );
}
public static function provideFirstChar() {
return [
'Empty string' => [ '', '' ],
'Single Latin' => [ 'T', 'T' ],
'Latin' => [ 'TEST', 'T' ],
'Digit' => [ '123', '1' ],
'Russian' => [ 'Ёпт', 'Ё' ],
'Emoji' => [ '😂💀☢️', '😂' ],
// Korean is special-cased to remove single letters from syllables
'Korean' => [ '위키백과', 'ㅇ' ],
];
}
}