123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208 |
- <?php
- class LanguageConverterTest extends MediaWikiLangTestCase {
- /** @var LanguageToTest */
- protected $lang = null;
- /** @var TestConverter */
- protected $lc = null;
- protected function setUp() {
- parent::setUp();
- $this->setContentLang( 'tg' );
- $this->setMwGlobals( [
- 'wgDefaultLanguageVariant' => false,
- 'wgRequest' => new FauxRequest( [] ),
- 'wgUser' => new User,
- ] );
- $this->lang = new LanguageToTest();
- $this->lc = new TestConverter(
- $this->lang, 'tg',
- [ 'tg', 'tg-latn' ]
- );
- }
- protected function tearDown() {
- unset( $this->lc );
- unset( $this->lang );
- parent::tearDown();
- }
- /**
- * @covers LanguageConverter::getPreferredVariant
- */
- public function testGetPreferredVariantDefaults() {
- $this->assertEquals( 'tg', $this->lc->getPreferredVariant() );
- }
- /**
- * @covers LanguageConverter::getPreferredVariant
- * @covers LanguageConverter::getHeaderVariant
- */
- public function testGetPreferredVariantHeaders() {
- global $wgRequest;
- $wgRequest->setHeader( 'Accept-Language', 'tg-latn' );
- $this->assertEquals( 'tg-latn', $this->lc->getPreferredVariant() );
- }
- /**
- * @covers LanguageConverter::getPreferredVariant
- * @covers LanguageConverter::getHeaderVariant
- */
- public function testGetPreferredVariantHeaderWeight() {
- global $wgRequest;
- $wgRequest->setHeader( 'Accept-Language', 'tg;q=1' );
- $this->assertEquals( 'tg', $this->lc->getPreferredVariant() );
- }
- /**
- * @covers LanguageConverter::getPreferredVariant
- * @covers LanguageConverter::getHeaderVariant
- */
- public function testGetPreferredVariantHeaderWeight2() {
- global $wgRequest;
- $wgRequest->setHeader( 'Accept-Language', 'tg-latn;q=1' );
- $this->assertEquals( 'tg-latn', $this->lc->getPreferredVariant() );
- }
- /**
- * @covers LanguageConverter::getPreferredVariant
- * @covers LanguageConverter::getHeaderVariant
- */
- public function testGetPreferredVariantHeaderMulti() {
- global $wgRequest;
- $wgRequest->setHeader( 'Accept-Language', 'en, tg-latn;q=1' );
- $this->assertEquals( 'tg-latn', $this->lc->getPreferredVariant() );
- }
- /**
- * @covers LanguageConverter::getPreferredVariant
- */
- public function testGetPreferredVariantUserOption() {
- global $wgUser;
- $wgUser = new User;
- $wgUser->load(); // from 'defaults'
- $wgUser->mId = 1;
- $wgUser->mDataLoaded = true;
- $wgUser->mOptionsLoaded = true;
- $wgUser->setOption( 'variant', 'tg-latn' );
- $this->assertEquals( 'tg-latn', $this->lc->getPreferredVariant() );
- }
- /**
- * @covers LanguageConverter::getPreferredVariant
- * @covers LanguageConverter::getUserVariant
- */
- public function testGetPreferredVariantUserOptionForForeignLanguage() {
- global $wgUser;
- $this->setContentLang( 'en' );
- $wgUser = new User;
- $wgUser->load(); // from 'defaults'
- $wgUser->mId = 1;
- $wgUser->mDataLoaded = true;
- $wgUser->mOptionsLoaded = true;
- $wgUser->setOption( 'variant-tg', 'tg-latn' );
- $this->assertEquals( 'tg-latn', $this->lc->getPreferredVariant() );
- }
- /**
- * @covers LanguageConverter::getPreferredVariant
- * @covers LanguageConverter::getUserVariant
- * @covers LanguageConverter::getURLVariant
- */
- public function testGetPreferredVariantHeaderUserVsUrl() {
- global $wgRequest, $wgUser;
- $this->setContentLang( 'tg-latn' );
- $wgRequest->setVal( 'variant', 'tg' );
- $wgUser = User::newFromId( "admin" );
- $wgUser->setId( 1 );
- $wgUser->mFrom = 'defaults';
- $wgUser->mOptionsLoaded = true;
- // The user's data is ignored because the variant is set in the URL.
- $wgUser->setOption( 'variant', 'tg-latn' );
- $this->assertEquals( 'tg', $this->lc->getPreferredVariant() );
- }
- /**
- * @covers LanguageConverter::getPreferredVariant
- */
- public function testGetPreferredVariantDefaultLanguageVariant() {
- global $wgDefaultLanguageVariant;
- $wgDefaultLanguageVariant = 'tg-latn';
- $this->assertEquals( 'tg-latn', $this->lc->getPreferredVariant() );
- }
- /**
- * @covers LanguageConverter::getPreferredVariant
- * @covers LanguageConverter::getURLVariant
- */
- public function testGetPreferredVariantDefaultLanguageVsUrlVariant() {
- global $wgDefaultLanguageVariant, $wgRequest;
- $this->setContentLang( 'tg-latn' );
- $wgDefaultLanguageVariant = 'tg';
- $wgRequest->setVal( 'variant', null );
- $this->assertEquals( 'tg', $this->lc->getPreferredVariant() );
- }
- /**
- * Test exhausting pcre.backtrack_limit
- *
- * @covers LanguageConverter::autoConvert
- */
- public function testAutoConvertT124404() {
- $testString = '';
- for ( $i = 0; $i < 1000; $i++ ) {
- $testString .= 'xxx xxx xxx';
- }
- $testString .= "\n<big id='в'></big>";
- $old = ini_set( 'pcre.backtrack_limit', 200 );
- $result = $this->lc->autoConvert( $testString, 'tg-latn' );
- ini_set( 'pcre.backtrack_limit', $old );
- // The в in the id attribute should not get converted to a v
- $this->assertFalse(
- strpos( $result, 'v' ),
- "в converted to v despite being in attribue"
- );
- }
- }
- /**
- * Test converter (from Tajiki to latin orthography)
- */
- class TestConverter extends LanguageConverter {
- private $table = [
- 'б' => 'b',
- 'в' => 'v',
- 'г' => 'g',
- ];
- function loadDefaultTables() {
- $this->mTables = [
- 'tg-latn' => new ReplacementArray( $this->table ),
- 'tg' => new ReplacementArray()
- ];
- }
- }
- class LanguageToTest extends Language {
- function __construct() {
- parent::__construct();
- $variants = [ 'tg', 'tg-latn' ];
- $this->mConverter = new TestConverter( $this, 'tg', $variants );
- }
- }
|