jenkins-bot has submitted this change and it was merged. Change subject: Track usage via Lua ......................................................................
Track usage via Lua Entity usages via the wikibase Lua modules need to be tracked in the UsageTracker service. Bug: 71288 Change-Id: Ib47e3d9348f60b50c176162ca686cb06672fdfe9 --- M client/includes/DataAccess/PropertyParserFunction/LanguageAwareRenderer.php M client/includes/scribunto/Scribunto_LuaWikibaseEntityLibrary.php M client/includes/scribunto/Scribunto_LuaWikibaseLibrary.php M client/includes/scribunto/WikibaseLuaBindings.php M client/includes/scribunto/WikibaseLuaEntityBindings.php M client/tests/phpunit/includes/scribunto/Scribunto_LuaWikibaseEntityLibraryTest.php M client/tests/phpunit/includes/scribunto/Scribunto_LuaWikibaseLibraryTest.php M client/tests/phpunit/includes/scribunto/WikibaseLuaBindingsTest.php M client/tests/phpunit/includes/scribunto/WikibaseLuaEntityBindingsTest.php 9 files changed, 193 insertions(+), 41 deletions(-) Approvals: Hoo man: Looks good to me, approved jenkins-bot: Verified diff --git a/client/includes/DataAccess/PropertyParserFunction/LanguageAwareRenderer.php b/client/includes/DataAccess/PropertyParserFunction/LanguageAwareRenderer.php index 8af6deb..2632ff9 100644 --- a/client/includes/DataAccess/PropertyParserFunction/LanguageAwareRenderer.php +++ b/client/includes/DataAccess/PropertyParserFunction/LanguageAwareRenderer.php @@ -132,6 +132,7 @@ } /** + * @todo Share code with WikibaseLuaEntityBindings::trackUsage * @param Snak[] $snaks */ private function trackUsage( array $snaks ) { @@ -153,6 +154,8 @@ } /** + * @todo Share code with WikibaseLuaEntityBindings. + * * @param EntityId $entityId * @param PropertyId $propertyId * diff --git a/client/includes/scribunto/Scribunto_LuaWikibaseEntityLibrary.php b/client/includes/scribunto/Scribunto_LuaWikibaseEntityLibrary.php index 67323e7..5d43ab4 100644 --- a/client/includes/scribunto/Scribunto_LuaWikibaseEntityLibrary.php +++ b/client/includes/scribunto/Scribunto_LuaWikibaseEntityLibrary.php @@ -2,6 +2,7 @@ use ValueFormatters\FormatterOptions; use Wikibase\Client\Scribunto\WikibaseLuaEntityBindings; +use Wikibase\Client\Usage\ParserOutputUsageAccumulator; use Wikibase\Client\WikibaseClient; use Wikibase\Lib\SnakFormatter; @@ -21,13 +22,15 @@ */ private $wbLibrary; - /** - * Constructor for wrapper class, initialize member object holding implementation - * - * @param Scribunto_LuaEngine $engine - * @since 0.5 - */ - public function __construct( $engine ) { + private function getImplementation() { + if ( !$this->wbLibrary ) { + $this->wbLibrary = $this->newImplementation(); + } + + return $this->wbLibrary; + } + + private function newImplementation() { // For the language we need $wgContLang, not parser target language or anything else. // See Scribunto_LuaLanguageLibrary::getContLangCode(). global $wgContLang; @@ -40,14 +43,13 @@ SnakFormatter::FORMAT_WIKI, $formatterOptions ); - $this->wbLibrary = new WikibaseLuaEntityBindings( + return new WikibaseLuaEntityBindings( $snakFormatter, $wikibaseClient->getStore()->getEntityLookup(), + new ParserOutputUsageAccumulator( $this->getParser()->getOutput() ), $wikibaseClient->getSettings()->getSetting( 'siteGlobalID' ), $wgContLang ); - - parent::__construct( $engine ); } /** @@ -76,7 +78,7 @@ * @return string[] */ public function getGlobalSiteId() { - return array( $this->wbLibrary->getGlobalSiteId() ); + return array( $this->getImplementation()->getGlobalSiteId() ); } /** @@ -99,7 +101,7 @@ $this->checkType( 'formatPropertyValues', 1, $propertyId, 'string' ); $this->checkType( 'formatPropertyValues', 2, $acceptableRanks, 'table' ); try { - return array( $this->wbLibrary->formatPropertyValues( $entityId, $propertyId, $acceptableRanks ) ); + return array( $this->getImplementation()->formatPropertyValues( $entityId, $propertyId, $acceptableRanks ) ); } catch ( InvalidArgumentException $e ) { throw new ScribuntoException( 'wikibase-error-invalid-entity-id' ); } diff --git a/client/includes/scribunto/Scribunto_LuaWikibaseLibrary.php b/client/includes/scribunto/Scribunto_LuaWikibaseLibrary.php index 5abe2aa..5a9fac5 100644 --- a/client/includes/scribunto/Scribunto_LuaWikibaseLibrary.php +++ b/client/includes/scribunto/Scribunto_LuaWikibaseLibrary.php @@ -1,6 +1,7 @@ <?php use Wikibase\Client\Scribunto\WikibaseLuaBindings; +use Wikibase\Client\Usage\ParserOutputUsageAccumulator; use Wikibase\Client\WikibaseClient; use Wikibase\DataModel\Entity\EntityIdParsingException; use Wikibase\Lib\Store\EntityRetrievingTermLookup; @@ -22,13 +23,15 @@ */ private $wbLibrary; - /** - * Constructor for wrapper class, initialize member object holding implementation - * - * @param Scribunto_LuaEngine $engine - * @since 0.5 - */ - public function __construct( $engine ) { + private function getImplementation() { + if ( !$this->wbLibrary ) { + $this->wbLibrary = $this->newImplementation(); + } + + return $this->wbLibrary; + } + + private function newImplementation() { // For the language we need $wgContLang, not parser target language or anything else. // See Scribunto_LuaLanguageLibrary::getContLangCode(). global $wgContLang; @@ -42,7 +45,7 @@ $wgContLang->getCode() ); - $this->wbLibrary = new WikibaseLuaBindings( + return new WikibaseLuaBindings( $wikibaseClient->getEntityIdParser(), $entityLookup, $wikibaseClient->getStore()->getSiteLinkTable(), @@ -51,11 +54,10 @@ $wikibaseClient->getSettings(), $wikibaseClient->getPropertyDataTypeLookup(), $labelLookup, + new ParserOutputUsageAccumulator( $this->getParser()->getOutput() ), Utils::getLanguageCodes(), $wikibaseClient->getSettings()->getSetting( 'siteGlobalID' ) ); - - parent::__construct( $engine ); } /** @@ -95,7 +97,7 @@ $this->checkType( 'getEntity', 1, $prefixedEntityId, 'string' ); $this->checkType( 'getEntity', 2, $legacyStyle, 'boolean' ); try { - $entityArr = $this->wbLibrary->getEntity( $prefixedEntityId, $legacyStyle ); + $entityArr = $this->getImplementation()->getEntity( $prefixedEntityId, $legacyStyle ); return array( $entityArr ); } catch ( EntityIdParsingException $e ) { @@ -117,7 +119,7 @@ */ public function getEntityId( $pageTitle = null ) { $this->checkType( 'getEntityByTitle', 1, $pageTitle, 'string' ); - return array( $this->wbLibrary->getEntityId( $pageTitle ) ); + return array( $this->getImplementation()->getEntityId( $pageTitle ) ); } /** @@ -128,7 +130,7 @@ * @return string[] */ public function getGlobalSiteId() { - return array( $this->wbLibrary->getGlobalSiteId() ); + return array( $this->getImplementation()->getGlobalSiteId() ); } /** @@ -142,7 +144,7 @@ */ public function getSetting( $setting ) { $this->checkType( 'setting', 1, $setting, 'string' ); - return array( $this->wbLibrary->getSetting( $setting ) ); + return array( $this->getImplementation()->getSetting( $setting ) ); } /** @@ -156,7 +158,7 @@ */ public function getLabel( $prefixedEntityId ) { $this->checkType( 'getLabel', 1, $prefixedEntityId, 'string' ); - return array( $this->wbLibrary->getLabel( $prefixedEntityId ) ); + return array( $this->getImplementation()->getLabel( $prefixedEntityId ) ); } /** @@ -170,6 +172,6 @@ */ public function getSiteLinkPageName( $prefixedEntityId ) { $this->checkType( 'getSiteLinkPageName', 1, $prefixedEntityId, 'string' ); - return array( $this->wbLibrary->getSiteLinkPageName( $prefixedEntityId ) ); + return array( $this->getImplementation()->getSiteLinkPageName( $prefixedEntityId ) ); } } diff --git a/client/includes/scribunto/WikibaseLuaBindings.php b/client/includes/scribunto/WikibaseLuaBindings.php index ada4285..0bf16dd 100644 --- a/client/includes/scribunto/WikibaseLuaBindings.php +++ b/client/includes/scribunto/WikibaseLuaBindings.php @@ -5,6 +5,7 @@ use InvalidArgumentException; use Language; use OutOfBoundsException; +use Wikibase\Client\Usage\UsageAccumulator; use Wikibase\DataModel\Entity\Entity; use Wikibase\DataModel\Entity\EntityIdParser; use Wikibase\DataModel\Entity\EntityIdParsingException; @@ -82,6 +83,11 @@ private $labelLookup; /** + * @var UsageAccumulator + */ + private $usageAccumulator; + + /** * @param EntityIdParser $entityIdParser * @param EntityLookup $entityLookup * @param SiteLinkLookup $siteLinkTable @@ -90,6 +96,7 @@ * @param SettingsArray $settings * @param PropertyDataTypeLookup $dataTypeLookup * @param LabelLookup $labelLookup + * @param UsageAccumulator $usageAccumulator * @param string[] $languageCodes * @param string $siteId */ @@ -102,6 +109,7 @@ SettingsArray $settings, PropertyDataTypeLookup $dataTypeLookup, LabelLookup $labelLookup, + UsageAccumulator $usageAccumulator, $languageCodes, $siteId ) { @@ -115,6 +123,7 @@ $this->labelLookup = $labelLookup; $this->languageCodes = $languageCodes; $this->siteId = $siteId; + $this->usageAccumulator = $usageAccumulator; } /** @@ -171,6 +180,7 @@ $entityArr['schemaVersion'] = 2; } + $this->usageAccumulator->addAllUsage( $entityId ); return $entityArr; } @@ -224,6 +234,7 @@ return null; } + $this->usageAccumulator->addPageUsage( $id ); return $id->getSerialization(); } @@ -270,6 +281,12 @@ return ''; } + // NOTE: This tracks a label usage in the wiki's content language. + // If the actual label is derived via language fallback, + // updates to the source language will not be seen to apply + // to this usage. We would need to trigger on changes to + // *all* languages to fix that. + $this->usageAccumulator->addLabelUsage( $entityId ); return $label; } @@ -291,6 +308,8 @@ return ''; } + $this->usageAccumulator->addPageUsage( $itemId ); return $item->getSiteLinkList()->getBySiteId( $this->siteId )->getPageName(); } + } diff --git a/client/includes/scribunto/WikibaseLuaEntityBindings.php b/client/includes/scribunto/WikibaseLuaEntityBindings.php index 381afff..cf68e20 100644 --- a/client/includes/scribunto/WikibaseLuaEntityBindings.php +++ b/client/includes/scribunto/WikibaseLuaEntityBindings.php @@ -3,11 +3,14 @@ namespace Wikibase\Client\Scribunto; use Language; +use Wikibase\Client\Usage\UsageAccumulator; use Wikibase\DataModel\Claim\Claims; use Wikibase\DataModel\Entity\Entity; use Wikibase\DataModel\Entity\EntityId; +use Wikibase\DataModel\Entity\EntityIdValue; use Wikibase\DataModel\Entity\ItemId; use Wikibase\DataModel\Entity\PropertyId; +use Wikibase\DataModel\Snak\PropertyValueSnak; use Wikibase\DataModel\Snak\Snak; use Wikibase\Lib\SnakFormatter; use Wikibase\Lib\Store\EntityLookup; @@ -34,6 +37,11 @@ private $entityLookup; /** + * @var UsageAccumulator + */ + private $usageAccumulator; + + /** * @var string */ private $siteId; @@ -50,18 +58,21 @@ /** * @param SnakFormatter $snakFormatter - * @param EntityLookup $entityLookup, - * @param string $siteId, + * @param EntityLookup $entityLookup + * @param UsageAccumulator $usageAccumulator + * @param string $siteId * @param Language $language */ public function __construct( SnakFormatter $snakFormatter, EntityLookup $entityLookup, + UsageAccumulator $usageAccumulator, $siteId, Language $language ) { $this->snakFormatter = $snakFormatter; $this->entityLookup = $entityLookup; + $this->usageAccumulator = $usageAccumulator; $this->siteId = $siteId; $this->language = $language; } @@ -125,9 +136,32 @@ } /** + * @todo Share code with LanguageAwareRenderer::trackUsage + * @param Snak[] $snaks + */ + private function trackUsage( array $snaks ) { + // Note: we track any EntityIdValue as a label usage. + // This is making assumptions about what the respective formatter actually does. + // Ideally, the formatter itself would perform the tracking, but that seems nasty to model. + + foreach ( $snaks as $snak ) { + if ( !( $snak instanceof PropertyValueSnak ) ) { + continue; + } + + $value = $snak->getDataValue(); + + if ( $value instanceof EntityIdValue ) { + $this->usageAccumulator->addLabelUsage( $value->getEntityId() ); + } + } + } + + /** * Render the main Snaks belonging to a Claim (which is identified by a PropertyId). * * @since 0.5 + * @todo Share code with LanguageAwareRenderer. * * @param string $entityId * @param string $propertyId @@ -161,6 +195,8 @@ } $snakList = $claims->getMainSnaks(); + + $this->trackUsage( $snakList ); return $this->formatSnakList( $snakList ); } diff --git a/client/tests/phpunit/includes/scribunto/Scribunto_LuaWikibaseEntityLibraryTest.php b/client/tests/phpunit/includes/scribunto/Scribunto_LuaWikibaseEntityLibraryTest.php index a87eda4..e1dfeb4 100644 --- a/client/tests/phpunit/includes/scribunto/Scribunto_LuaWikibaseEntityLibraryTest.php +++ b/client/tests/phpunit/includes/scribunto/Scribunto_LuaWikibaseEntityLibraryTest.php @@ -2,6 +2,8 @@ namespace Wikibase\Test; +use Parser; +use ParserOptions; use Scribunto; use Scribunto_LuaWikibaseEntityLibrary; use Title; @@ -69,8 +71,13 @@ } private function newScribuntoLuaWikibaseLibrary() { + $title = Title::newFromText( 'Whatever' ); + $parser = new Parser(); + $parser->startExternalParse( $title, new ParserOptions(), Parser::OT_HTML ); + $engine = Scribunto::newDefaultEngine( array( - 'title' => Title::newFromText( 'Whatever' ) + 'parser' => $parser, + 'title' => $title ) ); $engine->load(); diff --git a/client/tests/phpunit/includes/scribunto/Scribunto_LuaWikibaseLibraryTest.php b/client/tests/phpunit/includes/scribunto/Scribunto_LuaWikibaseLibraryTest.php index bba0a7f..985b973 100644 --- a/client/tests/phpunit/includes/scribunto/Scribunto_LuaWikibaseLibraryTest.php +++ b/client/tests/phpunit/includes/scribunto/Scribunto_LuaWikibaseLibraryTest.php @@ -2,6 +2,8 @@ namespace Wikibase\Test; +use Parser; +use ParserOptions; use Scribunto; use Scribunto_LuaWikibaseLibrary; use Title; @@ -80,8 +82,13 @@ } private function newScribuntoLuaWikibaseLibrary() { + $title = Title::newFromText( 'Whatever' ); + $parser = new Parser(); + $parser->startExternalParse( $title, new ParserOptions(), Parser::OT_HTML ); + $engine = Scribunto::newDefaultEngine( array( - 'title' => Title::newFromText( 'Whatever' ) + 'parser' => $parser, + 'title' => $title ) ); $engine->load(); diff --git a/client/tests/phpunit/includes/scribunto/WikibaseLuaBindingsTest.php b/client/tests/phpunit/includes/scribunto/WikibaseLuaBindingsTest.php index 0692c74..de0759b 100644 --- a/client/tests/phpunit/includes/scribunto/WikibaseLuaBindingsTest.php +++ b/client/tests/phpunit/includes/scribunto/WikibaseLuaBindingsTest.php @@ -4,7 +4,11 @@ use Language; use Wikibase\Client\Scribunto\WikibaseLuaBindings; +use Wikibase\Client\Usage\EntityUsage; +use Wikibase\Client\Usage\HashUsageAccumulator; +use Wikibase\Client\Usage\UsageAccumulator; use Wikibase\DataModel\Entity\BasicEntityIdParser; +use Wikibase\DataModel\Entity\EntityId; use Wikibase\DataModel\Entity\Item; use Wikibase\DataModel\Entity\ItemId; use Wikibase\DataModel\SiteLink; @@ -35,7 +39,10 @@ ); } - private function getWikibaseLibraryImplementation( EntityLookup $entityLookup = null ) { + private function getWikibaseLibraryImplementation( + EntityLookup $entityLookup = null, + UsageAccumulator $usageAccumulator = null + ) { $language = new Language( "en" ); $siteLinkTable = $this->getMockBuilder( 'Wikibase\Lib\Store\SiteLinkTable' ) @@ -68,9 +75,16 @@ new SettingsArray(), $propertyDataTypeLookup, $labelLookup, + $usageAccumulator ? $usageAccumulator : new HashUsageAccumulator(), array( 'de', 'en', 'es', 'ja' ), "enwiki" // siteId ); + } + + private function hasUsage( $actualUsages, EntityId $entityId, $aspect ) { + $usage = new EntityUsage( $entityId, $aspect ); + $key = $usage->getIdentityString(); + return isset( $actualUsages[$key] ); } /** @@ -79,9 +93,24 @@ public function testGetEntity( array $expected, Item $item, EntityLookup $entityLookup ) { $prefixedId = $item->getId()->getSerialization(); $wikibaseLibrary = $this->getWikibaseLibraryImplementation( $entityLookup ); + $entityArr = $wikibaseLibrary->getEntity( $prefixedId ); $actual = is_array( $entityArr ) ? array_keys( $entityArr ) : array(); $this->assertEquals( $expected, $actual ); + } + + public function testGetEntity_usage() { + $item = $this->getItem(); + $itemId = $item->getId(); + + $entityLookup = new MockRepository(); + $entityLookup->putEntity( $item ); + + $usages = new HashUsageAccumulator(); + $wikibaseLibrary = $this->getWikibaseLibraryImplementation( $entityLookup, $usages ); + + $wikibaseLibrary->getEntity( $itemId->getSerialization() ); + $this->assertTrue( $this->hasUsage( $usages->getUsages(), $item->getId(), EntityUsage::ALL_USAGE ), 'all usage' ); } public function getEntityProvider() { @@ -100,9 +129,14 @@ } public function testGetEntityId() { - $wikibaseLibrary = $this->getWikibaseLibraryImplementation(); + $usages = new HashUsageAccumulator(); + $wikibaseLibrary = $this->getWikibaseLibraryImplementation( null, $usages ); + $itemId = $wikibaseLibrary->getEntityId( 'Rome' ); $this->assertEquals( 'Q33' , $itemId ); + + $this->assertTrue( $this->hasUsage( $usages->getUsages(), new ItemId( $itemId ), EntityUsage::TITLE_USAGE ), 'title usage' ); + $this->assertFalse( $this->hasUsage( $usages->getUsages(), new ItemId( $itemId ), EntityUsage::SITELINK_USAGE ), 'sitelink usage' ); $itemId = $wikibaseLibrary->getEntityId( 'Barcelona' ); $this->assertSame( null, $itemId ); @@ -131,6 +165,18 @@ $this->assertSame( $expected, $wikibaseLibrary->getLabel( $itemId ) ); } + public function testGetLabel_usage() { + $usages = new HashUsageAccumulator(); + $wikibaseLibrary = $this->getWikibaseLibraryImplementation( null, $usages ); + + $itemId = new ItemId( 'Q7' ); + $wikibaseLibrary->getLabel( $itemId->getSerialization() ); + + $this->assertTrue( $this->hasUsage( $usages->getUsages(), $itemId, EntityUsage::LABEL_USAGE ), 'label usage' ); + $this->assertFalse( $this->hasUsage( $usages->getUsages(), $itemId, EntityUsage::TITLE_USAGE ), 'title usage' ); + $this->assertFalse( $this->hasUsage( $usages->getUsages(), $itemId, EntityUsage::ALL_USAGE ), 'all usage' ); + } + public function getSiteLinkPageNameProvider() { return array( array( 'Beer', 'Q666' ), @@ -154,6 +200,23 @@ $this->assertSame( $expected, $wikibaseLibrary->getSiteLinkPageName( $itemId ) ); } + public function testGetSiteLinkPageName_usage() { + $item = $this->getItem(); + + $entityLookup = new MockRepository(); + $entityLookup->putEntity( $item ); + + $usages = new HashUsageAccumulator(); + $wikibaseLibrary = $this->getWikibaseLibraryImplementation( $entityLookup, $usages ); + + $itemId = $item->getId(); + $wikibaseLibrary->getSiteLinkPageName( $itemId->getSerialization() ); + + $this->assertTrue( $this->hasUsage( $usages->getUsages(), $itemId, EntityUsage::TITLE_USAGE ), 'title usage' ); + $this->assertFalse( $this->hasUsage( $usages->getUsages(), $itemId, EntityUsage::LABEL_USAGE ), 'label usage' ); + $this->assertFalse( $this->hasUsage( $usages->getUsages(), $itemId, EntityUsage::ALL_USAGE ), 'all usage' ); + } + protected function getItem() { $itemId = new ItemId( 'Q666' ); diff --git a/client/tests/phpunit/includes/scribunto/WikibaseLuaEntityBindingsTest.php b/client/tests/phpunit/includes/scribunto/WikibaseLuaEntityBindingsTest.php index 4662ee6..43c5da6 100644 --- a/client/tests/phpunit/includes/scribunto/WikibaseLuaEntityBindingsTest.php +++ b/client/tests/phpunit/includes/scribunto/WikibaseLuaEntityBindingsTest.php @@ -4,10 +4,16 @@ use Language; use Wikibase\Client\Scribunto\WikibaseLuaEntityBindings; +use Wikibase\Client\Usage\EntityUsage; +use Wikibase\Client\Usage\HashUsageAccumulator; +use Wikibase\Client\Usage\UsageAccumulator; use Wikibase\DataModel\Claim\Claim; use Wikibase\DataModel\Entity\Entity; +use Wikibase\DataModel\Entity\EntityIdValue; use Wikibase\DataModel\Entity\Item; +use Wikibase\DataModel\Entity\ItemId; use Wikibase\DataModel\Entity\PropertyId; +use Wikibase\DataModel\Snak\PropertyValueSnak; use Wikibase\DataModel\Statement\Statement; use Wikibase\Lib\SnakFormatter; use Wikibase\Lib\Store\EntityLookup; @@ -34,12 +40,16 @@ ); } - private function getWikibaseLibraryImplementation( EntityLookup $entityLookup = null ) { + private function getWikibaseLibraryImplementation( + EntityLookup $entityLookup = null, + UsageAccumulator $usageAccumulator = null + ) { $language = new Language( 'en' ); return new WikibaseLuaEntityBindings( $this->newSnakFormatterMock(), $entityLookup ? $entityLookup : new MockRepository(), + $usageAccumulator ? $usageAccumulator : new HashUsageAccumulator(), 'enwiki', $language // language ); @@ -49,11 +59,8 @@ * @return Item */ private function getItem() { - $snakFactory = new SnakFactory(); - $snak = $snakFactory->newSnak( - new PropertyId( 'P123456' ), - 'somevalue' - ); + $propertyId = new PropertyId( 'P123456' ); + $snak = new PropertyValueSnak( $propertyId, new EntityIdValue( new ItemId( 'Q11' ) )); $statement = new Statement( new Claim( $snak ) ); $statement->setGuid( 'gsdfgsadg' ); @@ -94,10 +101,16 @@ $item = $this->getItem(); $entityLookup = $this->getEntityLookupMock( $item ); - $wikibaseLibrary = $this->getWikibaseLibraryImplementation( $entityLookup ); + $usageAccumulator = new HashUsageAccumulator(); + $wikibaseLibrary = $this->getWikibaseLibraryImplementation( $entityLookup, $usageAccumulator ); + $ret = $wikibaseLibrary->formatPropertyValues( 'Q1', 'P123456' ); $this->assertSame( 'Snak snak snak', $ret ); + + $expectedUsage = new EntityUsage( new ItemId( 'Q11' ), EntityUsage::LABEL_USAGE ); + $usages = $usageAccumulator->getUsages(); + $this->assertArrayHasKey( $expectedUsage->getIdentityString(), $usages ); } public function testFormatPropertyValuesNoProperty() { -- To view, visit https://gerrit.wikimedia.org/r/172248 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: Ib47e3d9348f60b50c176162ca686cb06672fdfe9 Gerrit-PatchSet: 7 Gerrit-Project: mediawiki/extensions/Wikibase Gerrit-Branch: master Gerrit-Owner: Daniel Kinzler <daniel.kinz...@wikimedia.de> Gerrit-Reviewer: Adrian Lang <adrian.l...@wikimedia.de> Gerrit-Reviewer: Aude <aude.w...@gmail.com> Gerrit-Reviewer: Daniel Kinzler <daniel.kinz...@wikimedia.de> Gerrit-Reviewer: Hoo man <h...@online.de> Gerrit-Reviewer: Jackmcbarn <jackmcb...@gmail.com> Gerrit-Reviewer: JanZerebecki <jan.wikime...@zerebecki.de> Gerrit-Reviewer: Thiemo Mättig (WMDE) <thiemo.maet...@wikimedia.de> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits