1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
|
<?php
use MediaWiki\Language\Language;
/**
* Helping class to run tests using a clean language instance.
*
* This is intended for the MediaWiki language class tests under
* tests/phpunit/includes/languages.
*
* Before each tests, a new language object is built which you
* can retrieve in your test using the $this->getLang() method:
*
* @par Using the crafted language object:
* @code
* function testHasLanguageObject() {
* $langObject = $this->getLang();
* $this->assertInstanceOf( 'LanguageFoo',
* $langObject
* );
* }
* @endcode
*/
abstract class LanguageClassesTestCase extends MediaWikiIntegrationTestCase {
/**
* @var Language
*
* A new object is created before each tests thanks to PHPUnit
* setUp() method, it is deleted after each test too. To get
* this object you simply use the getLang method.
*
* You must have setup a language code first. See $LanguageClassCode
* @code
* function testWeAreTheChampions() {
* $this->getLang(); # language object
* }
* @endcode
*/
private $languageObject;
/**
* @return Language
*/
protected function getLang() {
return $this->languageObject;
}
/**
* Create a new language object before each test.
*/
protected function setUp(): void {
parent::setUp();
$lang = false;
if ( preg_match( '/Language(.+)Test/', static::class, $m ) ) {
# Normalize language code since classes uses underscores
$lang = strtolower( str_replace( '_', '-', $m[1] ) );
}
if ( $lang === false ||
!$this->getServiceContainer()->getLanguageNameUtils()->isSupportedLanguage( $lang )
) {
# Fallback to english language
$lang = 'en';
wfDebug(
__METHOD__ . ' could not extract a language name '
. 'out of ' . static::class . ", falling back to 'en'"
);
}
$this->languageObject = $this->getServiceContainer()->getLanguageFactory()
->getLanguage( $lang );
}
/**
* Delete the internal language object so each test starts
* out with a fresh language instance.
*/
protected function tearDown(): void {
unset( $this->languageObject );
parent::tearDown();
}
}
|