Aude has uploaded a new change for review.
https://gerrit.wikimedia.org/r/121123
Change subject: Pass Message object as param in MessageException
......................................................................
Pass Message object as param in MessageException
Use Message object directly instead of key and params.
Change depends on If8f9697 in core, which enables testing
code that involves message more easily.
Change-Id: I30b3150dd6d2c303fd279793ce5d285c9b89c47b
---
M lib/includes/MessageException.php
A lib/tests/phpunit/MessageExceptionTest.php
M repo/includes/specials/SpecialMergeItems.php
M repo/includes/specials/SpecialModifyEntity.php
M repo/includes/specials/SpecialWikibaseRepoPage.php
5 files changed, 87 insertions(+), 30 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase
refs/changes/23/121123/1
diff --git a/lib/includes/MessageException.php
b/lib/includes/MessageException.php
index 9bc322f..f83b211 100644
--- a/lib/includes/MessageException.php
+++ b/lib/includes/MessageException.php
@@ -11,40 +11,39 @@
class MessageException extends Exception {
/**
- * @var string
+ * @var Message
*/
- protected $key;
+ protected $mwMessage;
/**
- * var array
+ * @param Message $mwMessage
+ * @param string $exceptionMsg (optional, default '')
+ * @param Exception $previous (optional, default null)
*/
- protected $params;
+ public function __construct( Message $mwMessage, $exceptionMsg = '',
Exception $previous = null ) {
+ $exceptionMsg = $this->getMessageOrDefault( $mwMessage,
$exceptionMsg );
- /**
- * @param string $key
- * @param array $params
- * @param string $message
- * @param Exception $previous
- */
- public function __construct( $key, array $params, $message, Exception
$previous = null ) {
- parent::__construct( $message, 0, $previous );
+ parent::__construct( $exceptionMsg, 0, $previous );
- $this->key = $key;
- $this->params = $params;
+ $this->mwMessage = $mwMessage;
+ }
+
+ public function getMwMessage() {
+ return $this->mwMessage;
}
/**
+ * @param Message $mwMessage
+ * @param string $exceptionMsg
+ *
* @return string
*/
- public function getKey() {
- return $this->key;
- }
+ private function getMessageOrDefault( $mwMessage, $exceptionMsg ) {
+ if ( $exceptionMsg === '' ) {
+ $exceptionMsg = $mwMessage->inLanguage( 'en' )->parse();
+ }
- /**
- * @return array
- */
- public function getParams() {
- return $this->params;
+ return $exceptionMsg;
}
}
diff --git a/lib/tests/phpunit/MessageExceptionTest.php
b/lib/tests/phpunit/MessageExceptionTest.php
new file mode 100644
index 0000000..d5463c4
--- /dev/null
+++ b/lib/tests/phpunit/MessageExceptionTest.php
@@ -0,0 +1,51 @@
+<?php
+
+/**
+ * @covers MessageException
+ *
+ * @group Wikibase
+ * @group WikibaseLib
+ *
+ * @todo move to MediaWiki core
+ *
+ * @licence GNU GPL v2+
+ * @author Katie Filbert < [email protected] >
+ */
+class MessageExceptionTest extends \PHPUnit_Framework_TestCase {
+
+ /**
+ * @dataProvider getMwMessageProvider
+ */
+ public function testGetMwMessage( $expected, $message, $exceptionMsg ) {
+ $exception = new MessageException( $message, $exceptionMsg );
+
+ $this->assertInstanceOf( 'MessageException', $exception );
+ $this->assertEquals( $expected, $exception->getMessage() );
+ }
+
+ public function getMwMessageProvider() {
+ $message = $this->getMockBuilder( 'Message' )
+ ->setConstructorArgs( array( 'foo', array( 'bar' ),
Language::factory( 'de' ) ) )
+ ->setMethods( array( 'fetchMessage' ) )
+ ->getMock();
+
+ $message->expects( $this->any() )
+ ->method( 'fetchMessage' )
+ ->will( $this->returnCallback( function() use (
$message ) {
+ $cache = array(
+ 'de' => 'Katzen',
+ 'en' => 'Cat',
+ 'es' => 'Gato'
+ );
+
+ $langCode = $message->getLanguageCode();
+ return $cache[$langCode];
+ } ) );
+
+ return array(
+ array( 'Unexpected error', $message, 'Unexpected error'
),
+ array( 'Cat', $message, '' )
+ );
+ }
+
+}
diff --git a/repo/includes/specials/SpecialMergeItems.php
b/repo/includes/specials/SpecialMergeItems.php
index a08013b..eaa1633 100644
--- a/repo/includes/specials/SpecialMergeItems.php
+++ b/repo/includes/specials/SpecialMergeItems.php
@@ -77,7 +77,7 @@
try {
$this->prepareArguments();
} catch ( UserInputException $ex ) {
- $error = $this->msg( $ex->getKey(), $ex->getParams()
)->parse();
+ $error = $ex->getMwMessage()->parse();
$this->showErrorHTML( $error );
}
diff --git a/repo/includes/specials/SpecialModifyEntity.php
b/repo/includes/specials/SpecialModifyEntity.php
index ee989f8..43dc072 100644
--- a/repo/includes/specials/SpecialModifyEntity.php
+++ b/repo/includes/specials/SpecialModifyEntity.php
@@ -80,7 +80,7 @@
try {
$this->prepareArguments( $subPage );
} catch ( UserInputException $ex ) {
- $error = $this->msg( $ex->getKey(), $ex->getParams()
)->parse();
+ $error = $ex->getMwMessage()->parse();
$this->showErrorHTML( $error );
}
diff --git a/repo/includes/specials/SpecialWikibaseRepoPage.php
b/repo/includes/specials/SpecialWikibaseRepoPage.php
index 8da79f9..735cc80 100644
--- a/repo/includes/specials/SpecialWikibaseRepoPage.php
+++ b/repo/includes/specials/SpecialWikibaseRepoPage.php
@@ -2,6 +2,7 @@
namespace Wikibase\Repo\Specials;
+use Message;
use MWException;
use RuntimeException;
use Status;
@@ -88,8 +89,10 @@
$id = $idParser->parse( $rawId );
} catch ( RuntimeException $ex ) {
throw new UserInputException(
- 'wikibase-wikibaserepopage-invalid-id',
- array( $rawId ),
+ new Message(
+ 'wikibase-wikibaserepopage-invalid-id',
+ array( $rawId )
+ ),
'Entity id is not valid'
);
}
@@ -111,8 +114,10 @@
$id = $this->parseEntityId( $rawId );
if ( !( $id instanceof ItemId ) ) {
throw new UserInputException(
- 'wikibase-wikibaserepopage-not-itemid',
- array( $rawId ),
+ new Message(
+ 'wikibase-wikibaserepopage-not-itemid',
+ array( $rawId )
+ ),
'Entity id does not belong to an item'
);
}
@@ -135,8 +140,10 @@
if ( $entity === null ) {
throw new UserInputException(
- 'wikibase-wikibaserepopage-invalid-id',
- array( $id->getSerialization() ),
+ new Message(
+ 'wikibase-wikibaserepopage-invalid-id',
+ array( $id->getSerialization() )
+ ),
'Entity id is unknown'
);
}
--
To view, visit https://gerrit.wikimedia.org/r/121123
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I30b3150dd6d2c303fd279793ce5d285c9b89c47b
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Aude <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits