From c95bc7fe900bc15444798e8340d9c9d75eb19a91 Mon Sep 17 00:00:00 2001 From: daniel Date: Fri, 11 Apr 2014 12:19:25 +0200 Subject: [PATCH] Changing a message's lang must reset cached text. Without this patch, it's not possible to get text in different languages from the same Message object. Change-Id: I0bb915b0d9205e78ac4599ced5efacacf2cf0240 --- includes/Message.php | 4 ++-- tests/phpunit/includes/MessageTest.php | 25 +++++++++++++++++++------ 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/includes/Message.php b/includes/Message.php index d0ce4828b9..f46c872c79 100644 --- a/includes/Message.php +++ b/includes/Message.php @@ -545,6 +545,7 @@ class Message { . "passed a String or Language object; $type given" ); } + $this->message = null; $this->interface = false; return $this; } @@ -565,8 +566,7 @@ class Message { } global $wgContLang; - $this->interface = false; - $this->language = $wgContLang; + $this->inLanguage( $wgContLang ); return $this; } diff --git a/tests/phpunit/includes/MessageTest.php b/tests/phpunit/includes/MessageTest.php index 44ca3d22e7..25b0805df6 100644 --- a/tests/phpunit/includes/MessageTest.php +++ b/tests/phpunit/includes/MessageTest.php @@ -120,8 +120,11 @@ class MessageTest extends MediaWikiLangTestCase { public function testInLanguage() { $this->assertEquals( 'Main Page', wfMessage( 'mainpage' )->inLanguage( 'en' )->text() ); $this->assertEquals( 'Заглавная страница', wfMessage( 'mainpage' )->inLanguage( 'ru' )->text() ); - $this->assertEquals( 'Main Page', wfMessage( 'mainpage' )->inLanguage( Language::factory( 'en' ) )->text() ); - $this->assertEquals( 'Заглавная страница', wfMessage( 'mainpage' )->inLanguage( Language::factory( 'ru' ) )->text() ); + + // NOTE: make sure internal caching of the message text is reset appropriately + $msg = wfMessage( 'mainpage' ); + $this->assertEquals( 'Main Page', $msg->inLanguage( Language::factory( 'en' ) )->text() ); + $this->assertEquals( 'Заглавная страница', $msg->inLanguage( Language::factory( 'ru' ) )->text() ); } /** @@ -245,22 +248,32 @@ class MessageTest extends MediaWikiLangTestCase { /** * @covers Message::inContentLanguage */ - public function testInContentLanguageDisabled() { + public function testInContentLanguage() { $this->setMwGlobals( 'wgLang', Language::factory( 'fr' ) ); - $this->assertEquals( 'Main Page', wfMessage( 'mainpage' )->inContentLanguage()->plain(), 'ForceUIMsg disabled' ); + // NOTE: make sure internal caching of the message text is reset appropriately + $msg = wfMessage( 'mainpage' ); + $this->assertEquals( 'Hauptseite', $msg->inLanguage( 'de' )->plain(), "inLanguage( 'de' )" ); + $this->assertEquals( 'Main Page', $msg->inContentLanguage()->plain(), "inContentLanguage()" ); + $this->assertEquals( 'Accueil', $msg->inLanguage( 'fr' )->plain(), "inLanguage( 'fr' )" ); } /** * @covers Message::inContentLanguage */ - public function testInContentLanguageEnabled() { + public function testInContentLanguageOverride() { $this->setMwGlobals( array( 'wgLang' => Language::factory( 'fr' ), 'wgForceUIMsgAsContentMsg' => array( 'mainpage' ), ) ); - $this->assertEquals( 'Accueil', wfMessage( 'mainpage' )->inContentLanguage()->plain(), 'ForceUIMsg enabled' ); + // NOTE: make sure internal caching of the message text is reset appropriately. + // NOTE: wgForceUIMsgAsContentMsg forces the messages *current* language to be used. + $msg = wfMessage( 'mainpage' ); + $this->assertEquals( 'Accueil', $msg->inContentLanguage()->plain(), 'inContentLanguage() with ForceUIMsg override enabled' ); + $this->assertEquals( 'Main Page', $msg->inLanguage( 'en' )->plain(), "inLanguage( 'en' )" ); + $this->assertEquals( 'Main Page', $msg->inContentLanguage()->plain(), 'inContentLanguage() with ForceUIMsg override enabled' ); + $this->assertEquals( 'Hauptseite', $msg->inLanguage( 'de' )->plain(), "inLanguage( 'de' )" ); } /** -- 2.20.1