Matěj Suchánek has uploaded a new change for review. (
https://gerrit.wikimedia.org/r/364236 )
Change subject: Track usage of unit labels
......................................................................
Track usage of unit labels
Parser functions like #property: and dedicated Lua functions
did not track usage of labels, which are used for human-readable
representation of units.
Bug: T170167
Change-Id: I37b184b295c7d78e9ee17b2445f54b71271fa6f3
---
M client/includes/DataAccess/DataAccessSnakFormatterFactory.php
M client/includes/Usage/UsageTrackingSnakFormatter.php
M client/includes/WikibaseClient.php
M
client/tests/phpunit/includes/DataAccess/DataAccessSnakFormatterFactoryTest.php
M
client/tests/phpunit/includes/DataAccess/PropertyParserFunction/StatementGroupRendererFactoryTest.php
M client/tests/phpunit/includes/Usage/UsageTrackingSnakFormatterTest.php
6 files changed, 97 insertions(+), 12 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase
refs/changes/36/364236/1
diff --git a/client/includes/DataAccess/DataAccessSnakFormatterFactory.php
b/client/includes/DataAccess/DataAccessSnakFormatterFactory.php
index 309030d..971dea8 100644
--- a/client/includes/DataAccess/DataAccessSnakFormatterFactory.php
+++ b/client/includes/DataAccess/DataAccessSnakFormatterFactory.php
@@ -6,6 +6,7 @@
use ValueFormatters\FormatterOptions;
use Wikibase\Client\Usage\UsageAccumulator;
use Wikibase\Client\Usage\UsageTrackingSnakFormatter;
+use Wikibase\DataModel\Entity\EntityIdParser;
use Wikibase\DataModel\Services\Lookup\PropertyDataTypeLookup;
use Wikibase\LanguageFallbackChainFactory;
use Wikibase\Lib\Formatters\BinaryOptionDispatchingSnakFormatter;
@@ -39,14 +40,21 @@
*/
private $propertyDataTypeLookup;
+ /**
+ * @var EntityIdParser
+ */
+ private $repoItemUriParser;
+
public function __construct(
LanguageFallbackChainFactory $languageFallbackChainFactory,
OutputFormatSnakFormatterFactory $snakFormatterFactory,
- PropertyDataTypeLookup $propertyDataTypeLookup
+ PropertyDataTypeLookup $propertyDataTypeLookup,
+ EntityIdParser $repoItemUriParser
) {
$this->languageFallbackChainFactory =
$languageFallbackChainFactory;
$this->snakFormatterFactory = $snakFormatterFactory;
$this->propertyDataTypeLookup = $propertyDataTypeLookup;
+ $this->repoItemUriParser = $repoItemUriParser;
}
/**
@@ -83,7 +91,8 @@
return new UsageTrackingSnakFormatter(
$snakFormatter,
$usageAccumulator,
- $fallbackChain->getFetchLanguageCodes()
+ $fallbackChain->getFetchLanguageCodes(),
+ $this->repoItemUriParser
);
}
diff --git a/client/includes/Usage/UsageTrackingSnakFormatter.php
b/client/includes/Usage/UsageTrackingSnakFormatter.php
index 77bd4a4..88d2625 100644
--- a/client/includes/Usage/UsageTrackingSnakFormatter.php
+++ b/client/includes/Usage/UsageTrackingSnakFormatter.php
@@ -2,7 +2,10 @@
namespace Wikibase\Client\Usage;
+use DataValues\UnboundedQuantityValue;
use Wikibase\DataModel\Entity\EntityId;
+use Wikibase\DataModel\Entity\EntityIdParser;
+use Wikibase\DataModel\Entity\EntityIdParsingException;
use Wikibase\DataModel\Entity\EntityIdValue;
use Wikibase\DataModel\Snak\PropertyValueSnak;
use Wikibase\DataModel\Snak\Snak;
@@ -34,14 +37,26 @@
private $languages;
/**
+ * @var EntityIdParser
+ */
+ private $repoItemUriParser;
+
+ /**
* @param SnakFormatter $snakFormatter
* @param UsageAccumulator $usageAccumulator
* @param string[] $languages language codes to consider used for
formatting
+ * @param EntityIdParser $repoItemUriParser
*/
- public function __construct( SnakFormatter $snakFormatter,
UsageAccumulator $usageAccumulator, array $languages ) {
+ public function __construct(
+ SnakFormatter $snakFormatter,
+ UsageAccumulator $usageAccumulator,
+ array $languages,
+ EntityIdParser $repoItemUriParser
+ ) {
$this->snakFormatter = $snakFormatter;
$this->usageAccumulator = $usageAccumulator;
$this->languages = $languages;
+ $this->repoItemUriParser = $repoItemUriParser;
}
/**
@@ -57,8 +72,18 @@
if ( $value instanceof EntityIdValue ) {
$entityId = $value->getEntityId();
- $this->addLabelUsage( $value->getEntityId() );
+ $this->addLabelUsage( $entityId );
$this->usageAccumulator->addTitleUsage(
$entityId );
+ } elseif ( $value instanceof UnboundedQuantityValue ) {
+ $unit = $value->getUnit();
+ try {
+ $entityId =
$this->repoItemUriParser->parse( $unit );
+ } catch ( EntityIdParsingException $e ) {
+ $entityId = null;
+ }
+ if ( $entityId ) {
+ $this->addLabelUsage( $entityId );
+ }
}
}
diff --git a/client/includes/WikibaseClient.php
b/client/includes/WikibaseClient.php
index 3ff5487..7ee4eaa 100644
--- a/client/includes/WikibaseClient.php
+++ b/client/includes/WikibaseClient.php
@@ -1107,7 +1107,8 @@
return new DataAccessSnakFormatterFactory(
$this->getLanguageFallbackChainFactory(),
$this->getSnakFormatterFactory(),
- $this->getPropertyDataTypeLookup()
+ $this->getPropertyDataTypeLookup(),
+ $this->getRepoItemUriParser()
);
}
diff --git
a/client/tests/phpunit/includes/DataAccess/DataAccessSnakFormatterFactoryTest.php
b/client/tests/phpunit/includes/DataAccess/DataAccessSnakFormatterFactoryTest.php
index c92b9f9..62937f3 100644
---
a/client/tests/phpunit/includes/DataAccess/DataAccessSnakFormatterFactoryTest.php
+++
b/client/tests/phpunit/includes/DataAccess/DataAccessSnakFormatterFactoryTest.php
@@ -8,6 +8,7 @@
use ValueFormatters\FormatterOptions;
use Wikibase\Client\DataAccess\DataAccessSnakFormatterFactory;
use Wikibase\Client\Usage\UsageAccumulator;
+use Wikibase\DataModel\Entity\EntityIdParser;
use Wikibase\DataModel\Entity\PropertyId;
use Wikibase\DataModel\Services\Lookup\PropertyDataTypeLookup;
use Wikibase\DataModel\Snak\PropertyValueSnak;
@@ -34,7 +35,8 @@
return new DataAccessSnakFormatterFactory(
$this->getLanguageFallbackChainFactory(),
$this->getOutputFormatSnakFormatterFactory(
$expectedFormat ),
- $this->getMock( PropertyDataTypeLookup::class )
+ $this->getMock( PropertyDataTypeLookup::class ),
+ $this->getMock( EntityIdParser::class )
);
}
diff --git
a/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/StatementGroupRendererFactoryTest.php
b/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/StatementGroupRendererFactoryTest.php
index 86951fe..98b34d5 100644
---
a/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/StatementGroupRendererFactoryTest.php
+++
b/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/StatementGroupRendererFactoryTest.php
@@ -16,6 +16,7 @@
use Wikibase\Client\DataAccess\SnaksFinder;
use Wikibase\Client\Usage\ParserOutputUsageAccumulator;
use Wikibase\DataModel\Entity\EntityId;
+use Wikibase\DataModel\Entity\EntityIdParser;
use Wikibase\DataModel\Entity\EntityIdValue;
use Wikibase\DataModel\Entity\Item;
use Wikibase\DataModel\Entity\ItemId;
@@ -167,7 +168,8 @@
new DataAccessSnakFormatterFactory(
$this->getLanguageFallbackChainFactory(),
$formatterFactory,
- $this->getMock( PropertyDataTypeLookup::class )
+ $this->getMock( PropertyDataTypeLookup::class ),
+ $this->getMock( EntityIdParser::class )
),
$allowDataAccessInUserLanguage
);
@@ -193,7 +195,8 @@
new DataAccessSnakFormatterFactory(
$this->getLanguageFallbackChainFactory(),
$this->getSnakFormatterFactory(),
- $this->getMock( PropertyDataTypeLookup::class )
+ $this->getMock( PropertyDataTypeLookup::class ),
+ $this->getMock( EntityIdParser::class )
),
$allowDataAccessInUserLanguage
);
diff --git
a/client/tests/phpunit/includes/Usage/UsageTrackingSnakFormatterTest.php
b/client/tests/phpunit/includes/Usage/UsageTrackingSnakFormatterTest.php
index 587a1b4..340db5c 100644
--- a/client/tests/phpunit/includes/Usage/UsageTrackingSnakFormatterTest.php
+++ b/client/tests/phpunit/includes/Usage/UsageTrackingSnakFormatterTest.php
@@ -3,8 +3,10 @@
namespace Wikibase\Client\Tests\Usage;
use DataValues\StringValue;
+use DataValues\UnboundedQuantityValue;
use Wikibase\Client\Usage\HashUsageAccumulator;
use Wikibase\Client\Usage\UsageTrackingSnakFormatter;
+use Wikibase\DataModel\Entity\EntityIdParser;
use Wikibase\DataModel\Entity\EntityIdValue;
use Wikibase\DataModel\Entity\ItemId;
use Wikibase\DataModel\Entity\PropertyId;
@@ -47,7 +49,8 @@
$mockFormatter = $this->getMockSnakFormatter( 'formatSnak',
'test' );
$acc = new HashUsageAccumulator();
- $formatter = new UsageTrackingSnakFormatter( $mockFormatter,
$acc, [ 'ru', 'en' ] );
+ $formatter = new UsageTrackingSnakFormatter(
+ $mockFormatter, $acc, [ 'ru', 'en' ], new
EntityIdParser() );
$formatter->formatSnak( $itemSnak );
@@ -57,13 +60,53 @@
$this->assertArrayHasKey( 'Q1#T', $usages );
}
+ /**
+ * @return EntityIdParser
+ */
+ private function getRepoItemUriParser() {
+ $parser = $this->getMock( EntityIdParser::class );
+ $parser->expects( $this->once() )
+ ->method( 'parse' )
+ ->will( $this->returnCallback( function ( $id ) {
+ return $unit === '1' ? null : new ItemId( $id );
+ } ) );
+
+ return $parser;
+ }
+
+ private function formatSnakQuantityProvider() {
+ return [
+ [ '1', [] ],
+ [ 'Q1', [ 'Q1#L.ru', 'Q1#L.en' ] ],
+ ];
+ }
+
+ /**
+ * @dataProvider formatSnakQuantityProvider
+ */
+ public function testFormatSnak_quantity( $unit, array $usages ) {
+ $p1 = new PropertyId( 'P1' );
+ $itemSnak = new PropertyValueSnak(
+ $p1, UnboundedQuantityValue::newFromNumber( '1', $unit
) );
+
+ $mockFormatter = $this->getMockSnakFormatter( 'formatSnak',
'test' );
+ $acc = new HashUsageAccumulator();
+ $formatter = new UsageTrackingSnakFormatter(
+ $mockFormatter, $acc, [ 'ru', 'en' ],
$this->getRepoItemUriParser() );
+
+ $formatter->formatSnak( $itemSnak );
+
+ $this->assertEquals( $usages, $acc->getUsages() );
+ }
+
public function testFormatSnak_novalue() {
$p1 = new PropertyId( 'P1' );
$novalueSnak = new PropertyNoValueSnak( $p1 );
$mockFormatter = $this->getMockSnakFormatter( 'formatSnak',
'test' );
$acc = new HashUsageAccumulator();
- $formatter = new UsageTrackingSnakFormatter( $mockFormatter,
$acc, [ 'ru', 'en' ] );
+ $formatter = new UsageTrackingSnakFormatter(
+ $mockFormatter, $acc, [ 'ru', 'en' ], new
EntityIdParser() );
$formatter->formatSnak( $novalueSnak );
$this->assertEmpty( $acc->getUsages(), 'novalue' );
@@ -75,7 +118,8 @@
$mockFormatter = $this->getMockSnakFormatter( 'formatSnak',
'test' );
$acc = new HashUsageAccumulator();
- $formatter = new UsageTrackingSnakFormatter( $mockFormatter,
$acc, [ 'ru', 'en' ] );
+ $formatter = new UsageTrackingSnakFormatter(
+ $mockFormatter, $acc, [ 'ru', 'en' ], new
EntityIdParser() );
$formatter->formatSnak( $stringSnak );
$this->assertEmpty( $acc->getUsages(), 'string value' );
@@ -86,7 +130,8 @@
$acc = new HashUsageAccumulator();
- $formatter = new UsageTrackingSnakFormatter( $mockFormatter,
$acc, [ 'ru', 'en' ] );
+ $formatter = new UsageTrackingSnakFormatter(
+ $mockFormatter, $acc, [ 'ru', 'en' ], new
EntityIdParser() );
$this->assertEquals( 'TEST', $formatter->getFormat(),
'getFormat' );
$this->assertCount( 0, $acc->getUsages() );
--
To view, visit https://gerrit.wikimedia.org/r/364236
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I37b184b295c7d78e9ee17b2445f54b71271fa6f3
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Matěj Suchánek <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits