Daniel Kinzler has uploaded a new change for review. https://gerrit.wikimedia.org/r/88014
Change subject: Introducing EntityIdLinkFormatter ...................................................................... Introducing EntityIdLinkFormatter Change-Id: If9368d42acdd4771f601898fe8ebaaad70042bdf --- M lib/WikibaseLib.classes.php M lib/includes/formatters/EntityIdLabelFormatter.php A lib/includes/formatters/EntityIdLinkFormatter.php A lib/includes/formatters/EntityIdTitleFormatter.php A lib/tests/phpunit/formatters/EntityIdLinkFormatterTest.php A lib/tests/phpunit/formatters/EntityIdTitleFormatterTest.php 6 files changed, 294 insertions(+), 5 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase refs/changes/14/88014/1 diff --git a/lib/WikibaseLib.classes.php b/lib/WikibaseLib.classes.php index ca402ab..71345c5 100644 --- a/lib/WikibaseLib.classes.php +++ b/lib/WikibaseLib.classes.php @@ -95,6 +95,8 @@ 'Wikibase\Lib\DispatchingValueFormatter' => 'includes/formatters/DispatchingValueFormatter.php', 'Wikibase\Lib\EntityIdFormatter' => 'includes/formatters/EntityIdFormatter.php', 'Wikibase\Lib\EntityIdLabelFormatter' => 'includes/formatters/EntityIdLabelFormatter.php', + 'Wikibase\Lib\EntityIdTitleFormatter' => 'includes/formatters/EntityIdTitleFormatter.php', + 'Wikibase\Lib\EntityIdLinkFormatter' => 'includes/formatters/EntityIdLinkFormatter.php', 'Wikibase\Lib\MwTimeIsoFormatter' => 'includes/formatters/MwTimeIsoFormatter.php', 'Wikibase\Lib\EscapingValueFormatter' => 'includes/formatters/EscapingValueFormatter.php', 'Wikibase\Lib\FormattingException' => 'includes/formatters/FormattingException.php', diff --git a/lib/includes/formatters/EntityIdLabelFormatter.php b/lib/includes/formatters/EntityIdLabelFormatter.php index 56960cf..50830a4 100644 --- a/lib/includes/formatters/EntityIdLabelFormatter.php +++ b/lib/includes/formatters/EntityIdLabelFormatter.php @@ -14,18 +14,14 @@ /** * @since 0.4 * - * @file - * @ingroup WikibaseLib - * * @licence GNU GPL v2+ * @author Jeroen De Dauw < jeroended...@gmail.com > * @author Katie Filbert < aude.w...@gmail.com > * @author Daniel Kinzler * - * @todo: once this is no longer used directly, rename it to EntityIdValueFormatter * @todo: add support for language fallback chains */ -class EntityIdLabelFormatter extends ValueFormatterBase { +class EntityIdLabelFormatter extends EntityIdFormatter { /** * Whether we should try to find the label of the entity diff --git a/lib/includes/formatters/EntityIdLinkFormatter.php b/lib/includes/formatters/EntityIdLinkFormatter.php new file mode 100644 index 0000000..c6cdfc2 --- /dev/null +++ b/lib/includes/formatters/EntityIdLinkFormatter.php @@ -0,0 +1,53 @@ +<?php + +namespace Wikibase\Lib; +use InvalidArgumentException; +use RuntimeException; +use ValueFormatters\FormatterOptions; +use Wikibase\DataModel\Entity\EntityIdValue; +use Wikibase\EntityId; +use Wikibase\EntityTitleLookup; + +/** + * Formats entity IDs by generating a wiki link to the corresponding page title. + * + * @since 0.4 + * + * @licence GNU GPL v2+ + * @author Daniel Kinzler + */ +class EntityIdLinkFormatter extends EntityIdTitleFormatter { + + /** + * @since 0.4 + * + * @param FormatterOptions $options + * @param EntityTitleLookup $titleLookup + * + * @internal param \Wikibase\EntityLookup $entityLookup + * + */ + public function __construct( FormatterOptions $options, EntityTitleLookup $titleLookup ) { + parent::__construct( $options, $titleLookup ); + } + + /** + * Format an EntityId data value + * + * @since 0.4 + * + * @param EntityId|EntityIdValue $value The value to format + * + * @return string + * + * @throws RuntimeException + * @throws InvalidArgumentException + */ + public function format( $value ) { + $title = parent::format( $value ); + + return "[[$title]]"; + } + +} + diff --git a/lib/includes/formatters/EntityIdTitleFormatter.php b/lib/includes/formatters/EntityIdTitleFormatter.php new file mode 100644 index 0000000..e0dce57 --- /dev/null +++ b/lib/includes/formatters/EntityIdTitleFormatter.php @@ -0,0 +1,68 @@ +<?php + +namespace Wikibase\Lib; + +use InvalidArgumentException; +use RuntimeException; +use ValueFormatters\FormatterOptions; +use Wikibase\DataModel\Entity\EntityId; +use Wikibase\DataModel\Entity\EntityIdValue; +use Wikibase\EntityTitleLookup; + +/** + * Formats entity IDs by generating the corresponding page title. + * + * @since 0.4 + * + * @licence GNU GPL v2+ + * @author Daniel Kinzler + */ +class EntityIdTitleFormatter extends EntityIdFormatter { + + /** + * @var EntityTitleLookup + */ + protected $titleLookup; + + /** + * @since 0.4 + * + * @param FormatterOptions $options + * @param EntityTitleLookup $titleLookup + * + * @internal param \Wikibase\EntityLookup $entityLookup + * + */ + public function __construct( FormatterOptions $options, EntityTitleLookup $titleLookup ) { + parent::__construct( $options ); + + $this->titleLookup = $titleLookup; + } + + /** + * Format an EntityId data value + * + * @since 0.4 + * + * @param EntityId|EntityIdValue $value The value to format + * + * @return string + * + * @throws RuntimeException + * @throws InvalidArgumentException + */ + public function format( $value ) { + if ( $value instanceof EntityIdValue ) { + $value = $value->getEntityId(); + } + + if ( !( $value instanceof EntityId ) ) { + throw new InvalidArgumentException( 'Data value type mismatch. Expected an EntityId or EntityIdValue.' ); + } + + $title = $this->titleLookup->getTitleForId( $value ); + return $title->getFullText(); + } + +} + diff --git a/lib/tests/phpunit/formatters/EntityIdLinkFormatterTest.php b/lib/tests/phpunit/formatters/EntityIdLinkFormatterTest.php new file mode 100644 index 0000000..487f4ec --- /dev/null +++ b/lib/tests/phpunit/formatters/EntityIdLinkFormatterTest.php @@ -0,0 +1,85 @@ +<?php + +namespace Wikibase\Test; + +use Language; +use LogicException; +use Title; +use ValueFormatters\FormatterOptions; +use Wikibase\DataModel\Entity\EntityId; +use Wikibase\DataModel\Entity\EntityIdValue; +use Wikibase\DataModel\Entity\ItemId; +use Wikibase\DataModel\Entity\PropertyId; +use Wikibase\Lib\EntityIdLinkFormatter; +use Wikibase\Item; +use Wikibase\LanguageFallbackChainFactory; +use Wikibase\Property; + +/** + * @covers Wikibase\Lib\EntityIdLinkFormatter + * + * @since 0.4 + * + * @group ValueFormatters + * @group DataValueExtensions + * @group WikibaseLib + * @group EntityIdFormatterTest + * + * @licence GNU GPL v2+ + * @author Daniel Kinzler + */ +class EntityIdLinkFormatterTest extends \PHPUnit_Framework_TestCase { + + public function provideFormat() { + return array( + 'ItemId' => array( + new ItemId( 'Q23' ), + '[[ITEM-TEST--Q23]]' + ), + 'PropertyId' => array( + new PropertyId( 'P23' ), + '[[PROPERTY-TEST--P23]]' + ), + 'EntityId' => array( + new EntityId( Item::ENTITY_TYPE, 23 ), + '[[ITEM-TEST--Q23]]' + ), + 'EntityIdValue' => array( + new EntityIdValue( new ItemId( "Q23" ) ), + '[[ITEM-TEST--Q23]]' + ), + ); + } + + /** + * @dataProvider provideFormat + */ + public function testFormat( $id, $expected ) { + $formatter = $this->newEntityIdLinkFormatter(); + + $actual = $formatter->format( $id ); + $this->assertEquals( $expected, $actual ); + } + + public function getTitleForId( EntityId $id ) { + if ( $id->getEntityType() === Item::ENTITY_TYPE ) { + $name = 'ITEM-TEST--' . $id->getPrefixedId(); + } elseif ( $id->getEntityType() === Property::ENTITY_TYPE ) { + $name = 'PROPERTY-TEST--' . $id->getPrefixedId(); + } else { + throw new LogicException( "oops!" ); + } + + return Title::makeTitle( NS_MAIN, $name ); + } + + protected function newEntityIdLinkFormatter() { + $options = new FormatterOptions(); + $titleLookup = $this->getMock( 'Wikibase\EntityTitleLookup' ); + $titleLookup->expects( $this->any() )->method( 'getTitleForId' ) + ->will( $this->returnCallback( array( $this, 'getTitleForId' ) ) ); + + $formatter = new EntityIdLinkFormatter( $options, $titleLookup ); + return $formatter; + } +} diff --git a/lib/tests/phpunit/formatters/EntityIdTitleFormatterTest.php b/lib/tests/phpunit/formatters/EntityIdTitleFormatterTest.php new file mode 100644 index 0000000..d67eaf4 --- /dev/null +++ b/lib/tests/phpunit/formatters/EntityIdTitleFormatterTest.php @@ -0,0 +1,85 @@ +<?php + +namespace Wikibase\Test; + +use Language; +use LogicException; +use Title; +use ValueFormatters\FormatterOptions; +use Wikibase\DataModel\Entity\EntityId; +use Wikibase\DataModel\Entity\EntityIdValue; +use Wikibase\DataModel\Entity\ItemId; +use Wikibase\DataModel\Entity\PropertyId; +use Wikibase\Lib\EntityIdTitleFormatter; +use Wikibase\Item; +use Wikibase\LanguageFallbackChainFactory; +use Wikibase\Property; + +/** + * @covers Wikibase\Lib\EntityIdTitleFormatter + * + * @since 0.4 + * + * @group ValueFormatters + * @group DataValueExtensions + * @group WikibaseLib + * @group EntityIdFormatterTest + * + * @licence GNU GPL v2+ + * @author Daniel Kinzler + */ +class EntityIdTitleFormatterTest extends \PHPUnit_Framework_TestCase { + + public function provideFormat() { + return array( + 'ItemId' => array( + new ItemId( 'Q23' ), + 'ITEM-TEST--Q23' + ), + 'PropertyId' => array( + new PropertyId( 'P23' ), + 'PROPERTY-TEST--P23' + ), + 'EntityId' => array( + new EntityId( Item::ENTITY_TYPE, 23 ), + 'ITEM-TEST--Q23' + ), + 'EntityIdValue' => array( + new EntityIdValue( new ItemId( "Q23" ) ), + 'ITEM-TEST--Q23' + ), + ); + } + + /** + * @dataProvider provideFormat + */ + public function testFormat( $id, $expected ) { + $formatter = $this->newEntityIdTitleFormatter(); + + $actual = $formatter->format( $id ); + $this->assertEquals( $expected, $actual ); + } + + public function getTitleForId( EntityId $id ) { + if ( $id->getEntityType() === Item::ENTITY_TYPE ) { + $name = 'ITEM-TEST--' . $id->getPrefixedId(); + } elseif ( $id->getEntityType() === Property::ENTITY_TYPE ) { + $name = 'PROPERTY-TEST--' . $id->getPrefixedId(); + } else { + throw new LogicException( "oops!" ); + } + + return Title::makeTitle( NS_MAIN, $name ); + } + + protected function newEntityIdTitleFormatter() { + $options = new FormatterOptions(); + $titleLookup = $this->getMock( 'Wikibase\EntityTitleLookup' ); + $titleLookup->expects( $this->any() )->method( 'getTitleForId' ) + ->will( $this->returnCallback( array( $this, 'getTitleForId' ) ) ); + + $formatter = new EntityIdTitleFormatter( $options, $titleLookup ); + return $formatter; + } +} -- To view, visit https://gerrit.wikimedia.org/r/88014 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: If9368d42acdd4771f601898fe8ebaaad70042bdf Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/extensions/Wikibase Gerrit-Branch: master Gerrit-Owner: Daniel Kinzler <daniel.kinz...@wikimedia.de> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits