Merge "Remove LanguageConverter dependencies on Title and use LinkTarget"

This commit is contained in:
jenkins-bot 2020-02-12 22:44:12 +00:00 committed by Gerrit Code Review
commit 0f357294ca
8 changed files with 104 additions and 46 deletions

View file

@ -21,6 +21,7 @@
* @ingroup Cache
*/
use MediaWiki\Languages\LanguageFactory;
use MediaWiki\Linker\LinkTarget;
use MediaWiki\Logger\LoggerFactory;
use MediaWiki\MediaWikiServices;
use Psr\Log\LoggerAwareInterface;
@ -1376,20 +1377,20 @@ class MessageCache implements LoggerAwareInterface {
/**
* Purge message caches when a MediaWiki: page is created, updated, or deleted
*
* @param Title $title Message page title
* @param LinkTarget $linkTarget Message page title
* @param Content|null $content New content for edit/create, null on deletion
* @since 1.29
*/
public function updateMessageOverride( Title $title, Content $content = null ) {
public function updateMessageOverride( LinkTarget $linkTarget, Content $content = null ) {
$msgText = $this->getMessageTextFromContent( $content );
if ( $msgText === null ) {
$msgText = false; // treat as not existing
}
$this->replace( $title->getDBkey(), $msgText );
$this->replace( $linkTarget->getDBkey(), $msgText );
if ( $this->contLangConverter->hasVariants() ) {
$this->contLangConverter->updateConversionTable( $title );
$this->contLangConverter->updateConversionTable( $linkTarget );
}
}

View file

@ -17,6 +17,7 @@
*
* @file
*/
use MediaWiki\Linker\LinkTarget;
/**
* The shared interface for all language converters.
@ -115,13 +116,13 @@ interface ILanguageConverter {
public function autoConvertToAllVariants( $text );
/**
* Auto convert a Title object to a readable string in the
* Auto convert a LinkTarget object to a readable string in the
* preferred variant.
*
* @param Title $title A object of Title
* @param LinkTarget $linkTarget
* @return string Converted title text
*/
public function convertTitle( $title );
public function convertTitle( LinkTarget $linkTarget );
/**
* Get the namespace display name in the preferred variant.
@ -219,9 +220,9 @@ interface ILanguageConverter {
* Refresh the cache of conversion tables when
* MediaWiki:Conversiontable* is updated.
*
* @param Title $title The Title of the page being updated
* @param LinkTarget $linkTarget The LinkTarget of the page being updated
*/
public function updateConversionTable( Title $title );
public function updateConversionTable( LinkTarget $linkTarget );
/**
* Check if this is a language with variants

View file

@ -26,6 +26,7 @@ use CLDRPluralRuleParser\Evaluator;
use MediaWiki\Languages\LanguageConverterFactory;
use MediaWiki\Languages\LanguageFallback;
use MediaWiki\Languages\LanguageNameUtils;
use MediaWiki\Linker\LinkTarget;
use MediaWiki\MediaWikiServices;
use Wikimedia\Assert\Assert;
@ -4240,10 +4241,10 @@ class Language {
*
* @deprecated since 1.35 use LanguageConverter::updateConversionTable instead
*
* @param Title $title The Title of the page being updated
* @param LinkTarget $linkTarget The LinkTarget of the page being updated
*/
public function updateConversionTable( Title $title ) {
$this->getConverter()->updateConversionTable( $title );
public function updateConversionTable( LinkTarget $linkTarget ) {
$this->getConverter()->updateConversionTable( $linkTarget );
}
/**

View file

@ -21,6 +21,7 @@
* @author shinjiman <shinjiman@gmail.com>
* @author PhiLiP <philip.npc@gmail.com>
*/
use MediaWiki\Linker\LinkTarget;
use MediaWiki\Logger\LoggerFactory;
use MediaWiki\MediaWikiServices;
use MediaWiki\Revision\RevisionRecord;
@ -613,21 +614,22 @@ abstract class LanguageConverter implements ILanguageConverter {
}
/**
* Auto convert a Title object to a readable string in the
* Auto convert a LinkTarget object to a readable string in the
* preferred variant.
*
* @param Title $title A object of Title
* @param LinkTarget $linkTarget
* @return string Converted title text
*/
public function convertTitle( $title ) {
public function convertTitle( LinkTarget $linkTarget ) {
$variant = $this->getPreferredVariant();
$index = $title->getNamespace();
$index = $linkTarget->getNamespace();
if ( $index !== NS_MAIN ) {
$text = $this->convertNamespace( $index, $variant ) . ':';
} else {
$text = '';
}
$text .= $this->translate( $title->getText(), $variant );
$text .= $this->translate( $linkTarget->getText(), $variant );
return $text;
}
@ -671,7 +673,9 @@ abstract class LanguageConverter implements ILanguageConverter {
if ( $nsVariantText === false ) {
// No message exists, retrieve it from the target variant's namespace names.
$mLangObj = $this->mLangObj->factory( $variant ); // TODO: create from services
$mLangObj = MediaWikiServices::getInstance()
->getLanguageFactory()
->getLanguage( $variant );
$nsVariantText = $mLangObj->getFormattedNsText( $index );
}
@ -1176,12 +1180,11 @@ abstract class LanguageConverter implements ILanguageConverter {
* Refresh the cache of conversion tables when
* MediaWiki:Conversiontable* is updated.
*
* @param Title $titleobj The Title of the page being updated
* @param LinkTarget $linkTarget The LinkTarget of the page being updated
*/
public function updateConversionTable( Title $titleobj ) {
if ( $titleobj->getNamespace() == NS_MEDIAWIKI ) {
$title = $titleobj->getDBkey();
$t = explode( '/', $title, 3 );
public function updateConversionTable( LinkTarget $linkTarget ) {
if ( $linkTarget->getNamespace() == NS_MEDIAWIKI ) {
$t = explode( '/', $linkTarget->getDBkey(), 3 );
$c = count( $t );
if ( $c > 1 && $t[0] == 'Conversiontable' ) {
if ( $this->validateVariant( $t[1] ) ) {

View file

@ -17,6 +17,8 @@
*
* @file
*/
use MediaWiki\Linker\LinkTarget;
use MediaWiki\MediaWikiServices;
/**
* A trivial language converter.
@ -32,13 +34,20 @@
* @ingroup Language
*/
class TrivialLanguageConverter implements ILanguageConverter {
/**
* @var Language
*/
protected $language;
/**
* @var TitleFormatter
*/
private $titleFormatter;
public function __construct( $langobj ) {
$this->language = $langobj;
$this->titleFormatter = MediaWikiServices::getInstance()->getTitleFormatter();
}
public function autoConvert( $text, $variant = false ) {
@ -58,11 +67,11 @@ class TrivialLanguageConverter implements ILanguageConverter {
}
/**
* @param Title $t
* @param LinkTarget $linkTarget
* @return mixed
*/
public function convertTitle( $t ) {
return $t->getPrefixedText();
public function convertTitle( LinkTarget $linkTarget ) {
return $this->titleFormatter->getPrefixedText( $linkTarget );
}
public function convertNamespace( $index, $variant = null ) {
@ -127,7 +136,7 @@ class TrivialLanguageConverter implements ILanguageConverter {
return $text;
}
public function updateConversionTable( Title $title ) {
public function updateConversionTable( LinkTarget $linkTarget ) {
}
/**

View file

@ -180,6 +180,7 @@ $wgAutoloadClasses += [
'MediaWiki\Tests\Revision\RevisionStoreRecordTest' => "$testDir/phpunit/includes/Revision/RevisionStoreRecordTest.php",
# tests/phpunit/languages
'DummyConverter' => "$testDir/phpunit/mocks/languages/DummyConverter.php",
'LanguageClassesTestCase' => "$testDir/phpunit/languages/LanguageClassesTestCase.php",
'LanguageConverterTestTrait' => "$testDir/phpunit/languages/LanguageConverterTestTrait.php",

View file

@ -1,17 +1,20 @@
<?php
use MediaWiki\Linker\LinkTarget;
/**
* @group Language
*/
class LanguageConverterTest extends MediaWikiLangTestCase {
/** @var Language */
protected $lang;
/** @var TestConverter */
/** @var DummyConverter */
protected $lc;
protected function setUp() : void {
parent::setUp();
$this->setContentLang( 'tg' );
$this->setMwGlobals( [
@ -27,7 +30,7 @@ class LanguageConverterTest extends MediaWikiLangTestCase {
} ) );
$this->lang->expects( $this->never() )
->method( $this->anythingBut( 'factory', 'getNsText', 'ucfirst' ) );
$this->lc = new TestConverter(
$this->lc = new DummyConverter(
$this->lang, 'tg',
# Adding 'sgs' as a variant to ensure we handle deprecated codes
# adding 'simple' as a variant to ensure we handle non BCP 47 codes
@ -320,24 +323,41 @@ class LanguageConverterTest extends MediaWikiLangTestCase {
"в converted to v despite being in attribue"
);
}
}
/**
* Test converter (from Tajiki to latin orthography)
*/
class TestConverter extends LanguageConverter {
private $table = [
'б' => 'b',
'в' => 'v',
'г' => 'g',
];
/**
* @dataProvider provideTitlesToConvert
* @covers LanguageConverter::convertTitle
*
* @param LinkTarget $linkTarget LinkTarget to convert
* @param string $expected
*/
public function testConvertTitle( LinkTarget $linkTarget, string $expected ) : void {
$actual = $this->lc->convertTitle( $linkTarget );
$this->assertSame( $expected, $actual );
}
public function loadDefaultTables() {
$this->mTables = [
'sgs' => new ReplacementArray(),
'simple' => new ReplacementArray(),
'tg-latn' => new ReplacementArray( $this->table ),
'tg' => new ReplacementArray()
public function provideTitlesToConvert() : array {
return [
'Title FromText default' => [
Title::newFromText( 'Dummy_title' ),
'Dummy title',
],
'Title FromText with NS' => [
Title::newFromText( 'Dummy_title', NS_FILE ),
'Акс:Dummy title',
],
'Title MainPage default' => [
Title::newMainPage(),
'Main Page',
],
'Title MainPage with MessageLocalizer' => [
Title::newMainPage( new MockMessageLocalizer() ),
'Main Page',
],
'TitleValue' => [
new TitleValue( NS_FILE, 'Dummy page' ),
'Акс:Dummy page',
],
];
}
}

View file

@ -0,0 +1,22 @@
<?php
/**
* Test converter (from Tajiki to latin orthography)
*/
class DummyConverter extends LanguageConverter {
private $table = [
'б' => 'b',
'в' => 'v',
'г' => 'g',
];
public function loadDefaultTables() {
$this->mTables = [
'sgs' => new ReplacementArray(),
'simple' => new ReplacementArray(),
'tg-latn' => new ReplacementArray( $this->table ),
'tg' => new ReplacementArray()
];
}
}