WikidataBuilder has uploaded a new change for review.
https://gerrit.wikimedia.org/r/306644
Change subject: New Wikidata Build - 2016-08-25T10:00:01+0000
......................................................................
New Wikidata Build - 2016-08-25T10:00:01+0000
Change-Id: I9d6a7867b721e88f46892af746b82036c9486c8c
---
M composer.lock
A extensions/ArticlePlaceholder/includes/AboutTopicRenderer.php
M extensions/ArticlePlaceholder/includes/specials/SpecialAboutTopic.php
A
extensions/ArticlePlaceholder/tests/phpunit/includes/AboutTopicRendererTest.php
M
extensions/ArticlePlaceholder/tests/phpunit/includes/specials/SpecialAboutTopicTest.php
M
extensions/Wikibase/client/includes/DataAccess/Scribunto/Scribunto_LuaWikibaseEntityLibrary.php
M
extensions/Wikibase/client/includes/DataAccess/Scribunto/Scribunto_LuaWikibaseLibrary.php
R
extensions/Wikibase/client/includes/DataAccess/Scribunto/WikibaseLanguageDependentLuaBindings.php
A
extensions/Wikibase/client/includes/DataAccess/Scribunto/WikibaseLanguageIndependentLuaBindings.php
M
extensions/Wikibase/client/tests/phpunit/includes/DataAccess/Scribunto/Scribunto_LuaWikibaseEntityLibraryTest.php
M
extensions/Wikibase/client/tests/phpunit/includes/DataAccess/Scribunto/Scribunto_LuaWikibaseLibraryTest.php
A
extensions/Wikibase/client/tests/phpunit/includes/DataAccess/Scribunto/WikibaseLanguageDependentLuaBindingsTest.php
A
extensions/Wikibase/client/tests/phpunit/includes/DataAccess/Scribunto/WikibaseLanguageIndependentLuaBindingsTest.php
D
extensions/Wikibase/client/tests/phpunit/includes/DataAccess/Scribunto/WikibaseLuaBindingsTest.php
M extensions/Wikibase/lib/i18n/nl.json
M extensions/Wikibase/lib/i18n/ru.json
M extensions/Wikibase/repo/i18n/nl.json
M extensions/Wikibase/repo/includes/Api/EditEntity.php
M extensions/Wikibase/repo/includes/Store/Sql/SqlIdGenerator.php
M extensions/Wikibase/repo/tests/phpunit/includes/Api/EditEntityTest.php
M extensions/Wikibase/view/resources/jquery/wikibase/snakview/snakview.js
M
extensions/Wikibase/view/resources/jquery/wikibase/snakview/snakview.variations.Value.js
M vendor/composer/autoload_classmap.php
M vendor/composer/installed.json
24 files changed, 1,048 insertions(+), 659 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikidata
refs/changes/44/306644/1
diff --git a/composer.lock b/composer.lock
index 858729b..744425a 100644
--- a/composer.lock
+++ b/composer.lock
@@ -782,12 +782,12 @@
"source": {
"type": "git",
"url":
"https://github.com/wikimedia/mediawiki-extensions-ArticlePlaceholder.git",
- "reference": "2fa8987bbf2daace8bae00cf1f4f0d02a9d0b47e"
+ "reference": "747b41328a4650aca8f7a3c3e29ee4d72668ee93"
},
"dist": {
"type": "zip",
- "url":
"https://api.github.com/repos/wikimedia/mediawiki-extensions-ArticlePlaceholder/zipball/2fa8987bbf2daace8bae00cf1f4f0d02a9d0b47e",
- "reference": "2fa8987bbf2daace8bae00cf1f4f0d02a9d0b47e",
+ "url":
"https://api.github.com/repos/wikimedia/mediawiki-extensions-ArticlePlaceholder/zipball/747b41328a4650aca8f7a3c3e29ee4d72668ee93",
+ "reference": "747b41328a4650aca8f7a3c3e29ee4d72668ee93",
"shasum": ""
},
"require-dev": {
@@ -812,7 +812,7 @@
],
"description": "Provides a special page with Wikibase information
about a certain topic, with invitation to create an article for the topic",
"homepage":
"https://www.mediawiki.org/wiki/Extension:ArticlePlaceholder",
- "time": "2016-08-24 08:30:24"
+ "time": "2016-08-25 01:06:03"
},
{
"name": "propertysuggester/property-suggester",
@@ -1568,12 +1568,12 @@
"source": {
"type": "git",
"url":
"https://github.com/wikimedia/mediawiki-extensions-Wikibase.git",
- "reference": "7c19c5037aee83d9eda90da0bdff9a00d21aa521"
+ "reference": "aa4f666667f49ca7b40b7cf88bab92fa5236018d"
},
"dist": {
"type": "zip",
- "url":
"https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/7c19c5037aee83d9eda90da0bdff9a00d21aa521",
- "reference": "7c19c5037aee83d9eda90da0bdff9a00d21aa521",
+ "url":
"https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/aa4f666667f49ca7b40b7cf88bab92fa5236018d",
+ "reference": "aa4f666667f49ca7b40b7cf88bab92fa5236018d",
"shasum": ""
},
"require": {
@@ -1645,7 +1645,7 @@
"wikibaserepo",
"wikidata"
],
- "time": "2016-08-24 09:29:21"
+ "time": "2016-08-24 21:34:05"
},
{
"name": "wikibase/wikimedia-badges",
diff --git a/extensions/ArticlePlaceholder/includes/AboutTopicRenderer.php
b/extensions/ArticlePlaceholder/includes/AboutTopicRenderer.php
new file mode 100644
index 0000000..b3dd674
--- /dev/null
+++ b/extensions/ArticlePlaceholder/includes/AboutTopicRenderer.php
@@ -0,0 +1,167 @@
+<?php
+
+namespace ArticlePlaceholder;
+
+use OOUI;
+use SpecialPage;
+use Title;
+use Wikibase\Client\Store\TitleFactory;
+use Wikibase\DataModel\Entity\ItemId;
+use Wikibase\Lib\Store\LanguageFallbackLabelDescriptionLookupFactory;
+use Wikibase\Lib\Store\SiteLinkLookup;
+use OutputPage;
+use SiteLookup;
+use Language;
+use User;
+
+/**
+ * The AboutTopic SpecialPage for the ArticlePlaceholder extension
+ *
+ * @ingroup Extensions
+ * @author Lucie-Aimée Kaffee
+ * @license GNU General Public Licence 2.0 or later
+ */
+class AboutTopicRenderer {
+
+ /**
+ * @var LanguageFallbackLabelDescriptionLookupFactory
+ */
+ private $termLookupFactory;
+
+ /**
+ * @var SiteLinkLookup
+ */
+ private $siteLinkLookup;
+
+ /**
+ * @var SiteLookup
+ */
+ private $siteLookup;
+
+ /**
+ * @var string
+ */
+ private $langLinkSiteGroup;
+
+ /**
+ * @var TitleFactory
+ */
+ private $titleFactory;
+
+ /**
+ * @param LanguageFallbackLabelDescriptionLookupFactory
$termLookupFactory
+ * @param SiteLinkLookup $siteLinkLookup
+ * @param SiteLookup $siteLookup
+ * @param string $langLinkSiteGroup
+ * @param TitleFactory $titleFactory
+ */
+ public function __construct(
+ LanguageFallbackLabelDescriptionLookupFactory
$termLookupFactory,
+ SiteLinkLookup $siteLinkLookup,
+ SiteLookup $siteLookup,
+ $langLinkSiteGroup,
+ TitleFactory $titleFactory
+ ) {
+ $this->termLookupFactory = $termLookupFactory;
+ $this->siteLinkLookup = $siteLinkLookup;
+ $this->siteLookup = $siteLookup;
+ $this->langLinkSiteGroup = $langLinkSiteGroup;
+ $this->titleFactory = $titleFactory;
+ }
+
+ /**
+ * Show content of the ArticlePlaceholder
+ * @param ItemId $entityId
+ * @param Language $language
+ * @param User $user
+ * @param OutputPage $output
+ */
+ public function showPlaceholder(
+ ItemId $entityId,
+ Language $language,
+ User $user,
+ OutputPage $output
+ ) {
+ $output->addWikiText( '{{aboutTopic|' .
$entityId->getSerialization() . '}}' );
+ $label = $this->getLabel( $entityId, $language );
+ $labelTitle = null;
+ if ( $label ) {
+ $this->showTitle( $label, $output );
+ $labelTitle = $this->titleFactory->newFromText( $label
);
+ }
+ if ( $labelTitle && $labelTitle->quickUserCan( 'createpage',
$user ) ) {
+ $this->showCreateArticle( $labelTitle, $output );
+ }
+ $this->showLanguageLinks( $entityId, $output );
+ }
+
+ /**
+ * Adds a button to create an article
+ * @param Title $labelTitle
+ * @param OutputPage $output
+ */
+ private function showCreateArticle( Title $labelTitle, OutputPage
$output ) {
+ $output->enableOOUI();
+ $output->addModuleStyles(
'ext.articleplaceholder.defaultDisplay' );
+ $output->addModules( 'ext.articleplaceholder.createArticle' );
+ $output->addJsConfigVars( 'apLabel',
$labelTitle->getPrefixedText() );
+
+ $button = new OOUI\ButtonWidget( [
+ 'id' => 'new-empty-article-button',
+ 'infusable' => true,
+ 'label' => wfMessage(
'articleplaceholder-abouttopic-create-article-button' )->text(),
+ 'href' => SpecialPage::getTitleFor( 'CreateTopicPage',
$labelTitle->getPrefixedText() )
+ ->getLocalURL( [ 'ref' => 'button' ] ),
+ 'target' => 'blank'
+ ] );
+
+ $output->addHTML( $button );
+ }
+
+ /**
+ * @param ItemId $entityId
+ * @param Language $language
+ * @return string|null null if the item doesn't have a label
+ */
+ private function getLabel( ItemId $entityId, Language $language ) {
+ $label = $this->termLookupFactory->newLabelDescriptionLookup(
$language )
+ ->getLabel( $entityId );
+
+ if ( $label !== null ) {
+ return $label->getText();
+ }
+
+ return null;
+ }
+
+ /**
+ * Show label as page title
+ * @param string $label
+ * @param OutputPage $output
+ */
+ private function showTitle( $label, OutputPage $output ) {
+ $output->setPageTitle( htmlspecialchars( $label ) );
+ }
+
+ /**
+ * Set language links
+ * @param ItemId $entityId
+ * @param OutputPage $output
+ */
+ private function showLanguageLinks( ItemId $entityId, OutputPage
$output ) {
+ $siteLinks = $this->siteLinkLookup->getSiteLinksForItem(
$entityId );
+ $languageLinks = [];
+
+ foreach ( $siteLinks as $siteLink ) {
+ $site = $this->siteLookup->getSite(
$siteLink->getSiteId() );
+ $languageCode = $site->getLanguageCode();
+ $group = $site->getGroup();
+ if ( $languageCode !== null && $group ===
$this->langLinkSiteGroup ) {
+ $languageLinks[$languageCode] = $languageCode .
':' . $siteLink->getPageName();
+ }
+ }
+
+ $output->setLanguageLinks( $languageLinks );
+ }
+
+}
diff --git
a/extensions/ArticlePlaceholder/includes/specials/SpecialAboutTopic.php
b/extensions/ArticlePlaceholder/includes/specials/SpecialAboutTopic.php
index f13a34e..bea94fc 100644
--- a/extensions/ArticlePlaceholder/includes/specials/SpecialAboutTopic.php
+++ b/extensions/ArticlePlaceholder/includes/specials/SpecialAboutTopic.php
@@ -3,17 +3,14 @@
namespace ArticlePlaceholder\Specials;
use HTMLForm;
-use OOUI;
-use SiteStore;
use SpecialPage;
-use Title;
+use ArticlePlaceholder\AboutTopicRenderer;
use Wikibase\Client\Store\TitleFactory;
use Wikibase\Client\WikibaseClient;
use Wikibase\DataModel\Entity\EntityIdParser;
use Wikibase\DataModel\Entity\EntityIdParsingException;
use Wikibase\DataModel\Entity\ItemId;
use Wikibase\DataModel\Services\Lookup\EntityLookup;
-use Wikibase\Lib\Store\LanguageFallbackLabelDescriptionLookupFactory;
use Wikibase\Lib\Store\SiteLinkLookup;
/**
@@ -28,16 +25,25 @@
public static function newFromGlobalState() {
$wikibaseClient = WikibaseClient::getDefaultInstance();
return new self(
+ new AboutTopicRenderer(
+
$wikibaseClient->getLanguageFallbackLabelDescriptionLookupFactory(),
+
$wikibaseClient->getStore()->getSiteLinkLookup(),
+ $wikibaseClient->getSiteStore(),
+ $wikibaseClient->getLangLinkSiteGroup(),
+ new TitleFactory()
+ ),
$wikibaseClient->getEntityIdParser(),
-
$wikibaseClient->getLanguageFallbackLabelDescriptionLookupFactory(),
$wikibaseClient->getStore()->getSiteLinkLookup(),
- $wikibaseClient->getSiteStore(),
new TitleFactory(),
$wikibaseClient->getSettings()->getSetting(
'siteGlobalID' ),
- $wikibaseClient->getStore()->getEntityLookup(),
- $wikibaseClient->getLangLinkSiteGroup()
+ $wikibaseClient->getStore()->getEntityLookup()
);
}
+
+ /**
+ * @var AboutTopicRenderer
+ */
+ private $aboutTopicRenderer;
/**
* @var EntityIdParser
@@ -45,19 +51,9 @@
private $idParser;
/**
- * @var LanguageFallbackLabelDescriptionLookupFactory
- */
- private $termLookupFactory;
-
- /**
* @var SiteLinkLookup
*/
private $siteLinkLookup;
-
- /**
- * @var SiteStore
- */
- private $siteStore;
/**
* @var TitleFactory
@@ -75,40 +71,29 @@
private $entityLookup;
/**
- * @var string
- */
- private $langLinkSiteGroup;
-
- /**
+ * @param AboutTopicRenderer $aboutTopicRenderer
* @param EntityIdParser $idParser
- * @param LanguageFallbackLabelDescriptionLookupFactory
$termLookupFactory
* @param SiteLinkLookup $siteLinkLookup
- * @param SiteStore $siteStore
* @param TitleFactory $titleFactory
* @param string $siteGlobalID
* @param EntityLookup $entityLookup
- * @param string $langLinkSiteGroup
*/
public function __construct(
+ AboutTopicRenderer $aboutTopicRenderer,
EntityIdParser $idParser,
- LanguageFallbackLabelDescriptionLookupFactory
$termLookupFactory,
SiteLinkLookup $siteLinkLookup,
- SiteStore $siteStore,
TitleFactory $titleFactory,
$siteGlobalID,
- EntityLookup $entityLookup,
- $langLinkSiteGroup
+ EntityLookup $entityLookup
) {
parent::__construct( 'AboutTopic' );
+ $this->aboutTopicRenderer = $aboutTopicRenderer;
$this->idParser = $idParser;
- $this->termLookupFactory = $termLookupFactory;
$this->siteLinkLookup = $siteLinkLookup;
- $this->siteStore = $siteStore;
$this->titleFactory = $titleFactory;
$this->siteGlobalID = $siteGlobalID;
$this->entityLookup = $entityLookup;
- $this->langLinkSiteGroup = $langLinkSiteGroup;
}
/**
@@ -137,12 +122,17 @@
return;
}
- $articleOnWiki = $this->getArticleOnWiki( $itemId );
+ $articleOnWiki = $this->getArticleUrl( $itemId );
if ( $articleOnWiki !== null ) {
$this->getOutput()->redirect( $articleOnWiki );
} else {
- $this->showPlaceholder( $itemId );
+ $this->aboutTopicRenderer->showPlaceholder(
+ $itemId,
+ $this->getLanguage(),
+ $this->getUser(),
+ $this->getOutput()
+ );
}
}
@@ -219,91 +209,11 @@
}
/**
- * Show placeholder and include template to call lua module
* @param ItemId $entityId
+ *
+ * @return string|null
*/
- private function showPlaceholder( ItemId $entityId ) {
- $this->getOutput()->addWikiText( '{{aboutTopic|' .
$entityId->getSerialization() . '}}' );
- $label = $this->getLabel( $entityId );
- $this->showTitle( $label );
- $labelTitle = Title::newFromText( $label );
- if ( $labelTitle && $labelTitle->quickUserCan( 'createpage',
$this->getUser() ) ) {
- $this->showCreateArticle( $labelTitle );
- }
- $this->showLanguageLinks( $entityId );
- }
-
- private function showCreateArticle( Title $labelTitle ) {
- $output = $this->getOutput();
-
- $output->enableOOUI();
- $output->addModuleStyles(
'ext.articleplaceholder.defaultDisplay' );
- $output->addModules( 'ext.articleplaceholder.createArticle' );
- $output->addJsConfigVars( 'apLabel',
$labelTitle->getPrefixedText() );
-
- $button = new OOUI\ButtonWidget( [
- 'id' => 'new-empty-article-button',
- 'infusable' => true,
- 'label' => $this->msg(
'articleplaceholder-abouttopic-create-article-button' )->text(),
- 'href' => SpecialPage::getTitleFor( 'CreateTopicPage',
$labelTitle->getPrefixedText() )
- ->getLocalURL( [ 'ref' => 'button' ] ),
- 'target' => 'blank'
- ] );
-
- $output->addHTML( $button );
- }
-
- /**
- * @param ItemId $entityId
- * @return string|null label
- */
- private function getLabel( ItemId $entityId ) {
- $label = $this->termLookupFactory->newLabelDescriptionLookup(
$this->getLanguage() )
- ->getLabel( $entityId );
-
- if ( $label !== null ) {
- return $label->getText();
- }
-
- return null;
- }
-
- /**
- * Show label as page title
- * @param string|null $label
- */
- private function showTitle( $label ) {
- if ( $label !== null ) {
- $this->getOutput()->setPageTitle( htmlspecialchars(
$label ) );
- }
- }
-
- /**
- * Set language links
- * @param ItemId $entityId
- * @todo set links to other projects in sidebar, too!
- */
- private function showLanguageLinks( ItemId $entityId ) {
- $siteLinks = $this->siteLinkLookup->getSiteLinksForItem(
$entityId );
- $languageLinks = [];
-
- foreach ( $siteLinks as $siteLink ) {
- $site = $this->siteStore->getSite(
$siteLink->getSiteId() );
- $languageCode = $site->getLanguageCode();
- $group = $site->getGroup();
- if ( $languageCode !== null && $group ===
$this->langLinkSiteGroup ) {
- $languageLinks[$languageCode] = $languageCode .
':' . $siteLink->getPageName();
- }
- }
-
- $this->getOutput()->setLanguageLinks( $languageLinks );
- }
-
- /**
- * @param ItemId $entityId
- * @return Title
- */
- private function getArticleOnWiki( ItemId $entityId ) {
+ private function getArticleUrl( ItemId $entityId ) {
$sitelinkTitles = $this->siteLinkLookup->getLinks(
[ $entityId->getNumericId() ],
[ $this->siteGlobalID ]
diff --git
a/extensions/ArticlePlaceholder/tests/phpunit/includes/AboutTopicRendererTest.php
b/extensions/ArticlePlaceholder/tests/phpunit/includes/AboutTopicRendererTest.php
new file mode 100644
index 0000000..34f6d26
--- /dev/null
+++
b/extensions/ArticlePlaceholder/tests/phpunit/includes/AboutTopicRendererTest.php
@@ -0,0 +1,163 @@
+<?php
+
+namespace ArticlePlaceholder\Tests;
+
+use ArticlePlaceholder\AboutTopicRenderer;
+use DerivativeContext;
+use MediaWikiTestCase;
+use RequestContext;
+use Site;
+use SiteLookup;
+use SpecialPage;
+use Language;
+use User;
+use OutputPage;
+use Wikibase\Client\Store\TitleFactory;
+use Wikibase\DataModel\Entity\ItemId;
+use Wikibase\DataModel\SiteLink;
+use Wikibase\DataModel\Services\Lookup\LabelDescriptionLookup;
+use Wikibase\DataModel\Term\Term;
+use Wikibase\Lib\Store\SiteLinkLookup;
+use Wikibase\Lib\Store\LanguageFallbackLabelDescriptionLookupFactory;
+
+/**
+ * @covers ArticlePlaceholder\AboutTopicRenderer
+ *
+ * @group ArticlePlaceholder
+ *
+ * @licence GNU GPL v2+
+ * @author Lucie-Aimée Kaffee
+ */
+class AboutTopicRendererTest extends MediaWikiTestCase {
+
+ /**
+ * @param ItemId $itemId
+ *
+ * @return OutputPage
+ */
+ private function getInstanceOutput( ItemId $itemId ) {
+ $context = new DerivativeContext( RequestContext::getMain() );
+ $title = SpecialPage::getTitleFor( 'AboutTopic' );
+ $context->getOutput()->setTitle( $title );
+
+ $instance = new AboutTopicRenderer(
+ $this->getTermLookupFactory(),
+ $this->getSiteLinkLookup(),
+ $this->getSiteLookup(),
+ 'wikipedia',
+ new TitleFactory()
+ );
+
+ $instance->showPlaceholder(
+ $itemId,
+ Language::factory( 'eo' ),
+ $this->getMock( User::class ),
+ $context->getOutput()
+ );
+
+ return $context->getOutput();
+ }
+
+ /**
+ * Test that the title is set correctly
+ */
+ public function testTitle() {
+ $output = $this->getInstanceOutput( new ItemId( 'Q123' ) );
+ $title = $output->getPageTitle();
+ $this->assertEquals( 'Label of Q123', $title );
+ }
+
+ /**
+ * Test that Language links are set correctly
+ */
+ public function testLanguageLinks() {
+ $output = $this->getInstanceOutput( new ItemId( 'Q123' ) );
+ $langLinks = $output->getLanguageLinks();
+ $this->assertArrayEquals( [ 'eo:Unicorn' ], $langLinks );
+ $this->assertEquals( 1, count( $langLinks ) );
+ }
+
+ /**
+ * @return LanguageFallbackLabelDescriptionLookupFactory
+ */
+ private function getTermLookupFactory() {
+ $labelDescriptionLookupFactory = $this->getMockBuilder(
+
LanguageFallbackLabelDescriptionLookupFactory::class
+ )
+ ->disableOriginalConstructor()
+ ->getMock();
+ $labelDescriptionLookupFactory->expects( $this->once() )
+ ->method( 'newLabelDescriptionLookup' )
+ ->with( Language::factory( 'eo' ) )
+ ->will( $this->returnValue( $this->getLabelLookup() ) );
+
+ return $labelDescriptionLookupFactory;
+ }
+
+ /**
+ * @return LabelDescriptionLookup
+ */
+ private function getLabelLookup() {
+ $labelLookup = $this->getMock( LabelDescriptionLookup::class );
+ $labelLookup->expects( $this->any() )
+ ->method( 'getLabel' )
+ ->will( $this->returnCallback( function( ItemId $id ) {
+ return new Term( 'eo', 'Label of ' .
$id->getSerialization() );
+ } ) );
+
+ return $labelLookup;
+ }
+
+ /**
+ * @return SiteLinkLookup
+ */
+ private function getSiteLinkLookup() {
+ $siteLinkLookup = $this->getMockBuilder( SiteLinkLookup::class )
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $siteLinkLookup->expects( $this->any() )
+ ->method( 'getSiteLinksForItem' )
+ ->with( ItemId::newFromNumber( '123' ) )
+ ->will(
+ $this->returnValue( [
+ new SiteLink( 'eowiki', 'Unicorn' ),
+ new SiteLink( 'qwertz', 'Unicorn' ),
+ new SiteLink( 'eowikivoyage',
'TravelUnicorn' )
+ ] )
+ );
+
+ return $siteLinkLookup;
+ }
+
+ private function getSiteLookup() {
+ $siteLookup = $this->getMockBuilder( SiteLookup::class )
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $siteLookup->expects( $this->any() )
+ ->method( 'getSite' )
+ ->will( $this->returnCallback( function( $siteId ) {
+ $site = new Site();
+ $site->setGlobalId( $siteId );
+
+ switch ( $siteId ) {
+ case 'eowiki':
+ $site->setGroup( 'wikipedia' );
+ $site->setLanguageCode( 'eo' );
+ return $site;
+ case 'qwertz':
+ $site->setGroup( 'qwertz' );
+ $site->setLanguageCode( 'qw' );
+ return $site;
+ case 'eowikivoyage':
+ $site->setGroup( 'wikivoyage' );
+ $site->setLanguageCode( 'eo' );
+ return $site;
+ }
+ } ) );
+
+ return $siteLookup;
+ }
+
+}
diff --git
a/extensions/ArticlePlaceholder/tests/phpunit/includes/specials/SpecialAboutTopicTest.php
b/extensions/ArticlePlaceholder/tests/phpunit/includes/specials/SpecialAboutTopicTest.php
index f098b97..1880d17 100644
---
a/extensions/ArticlePlaceholder/tests/phpunit/includes/specials/SpecialAboutTopicTest.php
+++
b/extensions/ArticlePlaceholder/tests/phpunit/includes/specials/SpecialAboutTopicTest.php
@@ -2,22 +2,30 @@
namespace ArticlePlaceholder\Tests\Specials;
+use ArticlePlaceholder\AboutTopicRenderer;
use ArticlePlaceholder\Specials\SpecialAboutTopic;
use DerivativeContext;
use Language;
use MediaWikiTestCase;
use RequestContext;
use SpecialPage;
+use Title;
use Wikibase\Client\WikibaseClient;
use Wikibase\Client\Store\TitleFactory;
+use Wikibase\DataModel\Entity\EntityIdParser;
+use Wikibase\DataModel\Entity\Item;
+use Wikibase\DataModel\Entity\ItemId;
+use Wikibase\Lib\Store\SiteLinkLookup;
+use Wikibase\Lib\Tests\MockRepository;
/**
- * @covers ArticlePlaceholder\SpecialAboutTopic
+ * @covers ArticlePlaceholder\Specials\SpecialAboutTopic
*
* @group ArticlePlaceholder
*
* @licence GNU GPL v2+
* @author Thiemo Mättig
+ * @author Lucie-Aimée Kaffee
*/
class SpecialAboutTopicTest extends MediaWikiTestCase {
@@ -43,8 +51,8 @@
$settings->setSetting( 'siteGroup', $siteGroup );
}
- public function testExecute() {
- $output = $this->getInstanceOutput();
+ public function testHTML() {
+ $output = $this->getInstanceOutput( '' );
$this->assertSame( '(articleplaceholder-abouttopic)',
$output->getPageTitle() );
$html = $output->getHTML();
@@ -55,32 +63,71 @@
$this->assertContains(
'(articleplaceholder-abouttopic-submit)', $html );
}
+ public function testRedirect() {
+ $redirect = $this->getInstanceOutput( 'Q1234' )->getRedirect();
+
+ $this->assertSame( Title::newFromText( 'Beer' )->getLinkURL(),
$redirect );
+ }
+
/**
+ * @param string $itemIdSerialization
+ *
* @return OutputPage
*/
- private function getInstanceOutput() {
- $termLookupFactory = $this->getMockBuilder(
-
'Wikibase\Lib\Store\LanguageFallbackLabelDescriptionLookupFactory' )
- ->disableOriginalConstructor()
- ->getMock();
-
+ private function getInstanceOutput( $itemIdSerialization ) {
$context = new DerivativeContext( RequestContext::getMain() );
$title = SpecialPage::getTitleFor( 'AboutTopic' );
$context->setTitle( $title );
$instance = new SpecialAboutTopic(
- $this->getMock(
'Wikibase\DataModel\Entity\EntityIdParser' ),
- $termLookupFactory,
- $this->getMock( 'Wikibase\Lib\Store\SiteLinkLookup' ),
- $this->getMock( 'SiteStore' ),
+ $this->getMockBuilder( AboutTopicRenderer::class
)->disableOriginalConstructor()->getMock(),
+ $this->getEntityIdParser(),
+ $this->getSiteLinkLookup(),
new TitleFactory(),
- '',
- $this->getMock(
'Wikibase\DataModel\Services\Lookup\EntityLookup' ),
- 'wikipedia'
+ 'enwiki',
+ $this->getEntityLookup()
);
$instance->setContext( $context );
- $instance->execute( '' );
+ $instance->execute( $itemIdSerialization );
return $instance->getOutput();
}
+ private function getSiteLinkLookup() {
+ $siteLikLookup = $this->getMockBuilder( SiteLinkLookup::class )
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $siteLikLookup->expects( $this->any() )
+ ->method( 'getLinks' )
+ ->with( [ 1234 ], [ 'enwiki' ] )
+ ->will( $this->returnValue( [ [ 'enwiki', 'Beer', 1234
] ] ) );
+
+ return $siteLikLookup;
+ }
+
+ private function getEntityIdParser() {
+ $siteLikLookup = $this->getMockBuilder( EntityIdParser::class )
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $siteLikLookup->expects( $this->any() )
+ ->method( 'parse' )
+ ->with( 'Q1234' )
+ ->will( $this->returnValue( new ItemId( 'Q1234' ) ) );
+
+ return $siteLikLookup;
+ }
+
+ private function getEntityLookup() {
+ $item = new Item( new ItemId( 'Q1234' ) );
+ $item->setLabel( 'en', 'Beer' );
+ $item->setDescription( 'en', 'yummy beverage' );
+ $item->getSiteLinkList()->addNewSiteLink( 'enwiki', 'Beer' );
+
+ $entityLookup = new MockRepository();
+ $entityLookup->putEntity( $item );
+
+ return $entityLookup;
+ }
+
}
diff --git
a/extensions/Wikibase/client/includes/DataAccess/Scribunto/Scribunto_LuaWikibaseEntityLibrary.php
b/extensions/Wikibase/client/includes/DataAccess/Scribunto/Scribunto_LuaWikibaseEntityLibrary.php
index 1f49cd3..80379da 100644
---
a/extensions/Wikibase/client/includes/DataAccess/Scribunto/Scribunto_LuaWikibaseEntityLibrary.php
+++
b/extensions/Wikibase/client/includes/DataAccess/Scribunto/Scribunto_LuaWikibaseEntityLibrary.php
@@ -89,10 +89,10 @@
* language, otherwise it will be the content language.
* In a perfect world, this would equal Parser::getTargetLanguage.
*
- * This doesn't split the ParserCache by language yet, please see
- * self::splitParserCacheIfMultilingual for that.
- *
* This can probably be removed after T114640 has been implemented.
+ *
+ * Please note, that this splits the parser cache by user language, if
+ * allowDataAccessInUserLanguage is true.
*
* @return Language
*/
@@ -100,23 +100,10 @@
global $wgContLang;
if ( $this->allowDataAccessInUserLanguage() ) {
- // Can't use ParserOptions::getUserLang as that already
splits the ParserCache
- $userLang =
$this->getParserOptions()->getUser()->getOption( 'language' );
-
- return Language::factory( $userLang );
+ return $this->getParserOptions()->getUserLangObj();
}
return $wgContLang;
- }
-
- /**
- * Splits the page's ParserCache in case we're on a multilingual wiki
- */
- private function splitParserCacheIfMultilingual() {
- if ( $this->allowDataAccessInUserLanguage() ) {
- // ParserOptions::getUserLang splits the ParserCache
- $this->getParserOptions()->getUserLang();
- }
}
/**
@@ -188,8 +175,6 @@
$this->checkType( 'formatPropertyValues', 1,
$propertyLabelOrId, 'string' );
$this->checkTypeOptional( 'formatPropertyValues', 2,
$acceptableRanks, 'table', null );
try {
- $this->splitParserCacheIfMultilingual();
-
return array(
$this->getImplementation()->formatPropertyValues(
$entityId,
diff --git
a/extensions/Wikibase/client/includes/DataAccess/Scribunto/Scribunto_LuaWikibaseLibrary.php
b/extensions/Wikibase/client/includes/DataAccess/Scribunto/Scribunto_LuaWikibaseLibrary.php
index 45c027f..c8eb800 100644
---
a/extensions/Wikibase/client/includes/DataAccess/Scribunto/Scribunto_LuaWikibaseLibrary.php
+++
b/extensions/Wikibase/client/includes/DataAccess/Scribunto/Scribunto_LuaWikibaseLibrary.php
@@ -38,9 +38,14 @@
class Scribunto_LuaWikibaseLibrary extends Scribunto_LuaLibraryBase {
/**
- * @var WikibaseLuaBindings|null
+ * @var WikibaseLanguageIndependentLuaBindings|null
*/
- private $luaBindings = null;
+ private $languageIndependentLuaBindings = null;
+
+ /**
+ * @var WikibaseLanguageDependentLuaBindings|null
+ */
+ private $languageDependentLuaBindings = null;
/**
* @var EntityAccessor|null
@@ -83,14 +88,25 @@
private $repoLinker = null;
/**
- * @return WikibaseLuaBindings
+ * @return WikibaseLanguageIndependentLuaBindings
*/
- private function getLuaBindings() {
- if ( $this->luaBindings === null ) {
- $this->luaBindings = $this->newLuaBindings();
+ private function getLanguageIndependentLuaBindings() {
+ if ( $this->languageIndependentLuaBindings === null ) {
+ $this->languageIndependentLuaBindings =
$this->newLanguageIndependentLuaBindings();
}
- return $this->luaBindings;
+ return $this->languageIndependentLuaBindings;
+ }
+
+ /**
+ * @return WikibaseLanguageDependentLuaBindings
+ */
+ private function getLanguageDependentLuaBindings() {
+ if ( $this->languageDependentLuaBindings === null ) {
+ $this->languageDependentLuaBindings =
$this->newLanguageDependentLuaBindings();
+ }
+
+ return $this->languageDependentLuaBindings;
}
/**
@@ -160,10 +176,10 @@
* language, otherwise it will be the content language.
* In a perfect world, this would equal Parser::getTargetLanguage.
*
- * This doesn't split the ParserCache by language yet, please see
- * self::splitParserCacheIfMultilingual for that.
- *
* This can probably be removed after T114640 has been implemented.
+ *
+ * Please note, that this splits the parser cache by user language, if
+ * allowDataAccessInUserLanguage is true.
*
* @return Language
*/
@@ -171,23 +187,10 @@
global $wgContLang;
if ( $this->allowDataAccessInUserLanguage() ) {
- // Can't use ParserOptions::getUserLang as that already
splits the ParserCache
- $userLang =
$this->getParserOptions()->getUser()->getOption( 'language' );
-
- return Language::factory( $userLang );
+ return $this->getParserOptions()->getUserLangObj();
}
return $wgContLang;
- }
-
- /**
- * Splits the page's ParserCache in case we're on a multilingual wiki
- */
- private function splitParserCacheIfMultilingual() {
- if ( $this->allowDataAccessInUserLanguage() ) {
- // ParserOptions::getUserLang splits the ParserCache
- $this->getParserOptions()->getUserLang();
- }
}
/**
@@ -203,7 +206,7 @@
$wikibaseClient = WikibaseClient::getDefaultInstance();
return new EntityAccessor(
- $wikibaseClient->getEntityIdParser(),
+ $this->getEntityIdParser(),
$wikibaseClient->getRestrictedEntityLookup(),
$this->getUsageAccumulator(),
$wikibaseClient->getEntitySerializer(
@@ -243,7 +246,7 @@
);
}
- private function newLuaBindings() {
+ private function newLanguageDependentLuaBindings() {
$wikibaseClient = WikibaseClient::getDefaultInstance();
$usageAccumulator = $this->getUsageAccumulator();
@@ -255,15 +258,33 @@
$this->getLanguageFallbackChain()
);
- return new WikibaseLuaBindings(
- $wikibaseClient->getEntityIdParser(),
- $wikibaseClient->getStore()->getEntityLookup(),
+ return new WikibaseLanguageDependentLuaBindings(
+ $this->getEntityIdParser(),
+ $labelDescriptionLookup,
+ $usageAccumulator
+ );
+ }
+
+ private function newLanguageIndependentLuaBindings() {
+ $wikibaseClient = WikibaseClient::getDefaultInstance();
+
+ return new WikibaseLanguageIndependentLuaBindings(
$wikibaseClient->getStore()->getSiteLinkLookup(),
$wikibaseClient->getSettings(),
- $labelDescriptionLookup,
- $usageAccumulator,
+ $this->getUsageAccumulator(),
$wikibaseClient->getSettings()->getSetting(
'siteGlobalID' )
);
+ }
+
+ /**
+ * @return EntityIdParser
+ */
+ private function getEntityIdParser() {
+ if ( !$this->entityIdParser ) {
+ $wikibaseClient = WikibaseClient::getDefaultInstance();
+ $this->entityIdParser =
$wikibaseClient->getEntityIdParser();
+ }
+ return $this->entityIdParser;
}
/**
@@ -311,7 +332,6 @@
*/
public function getEntity( $prefixedEntityId ) {
$this->checkType( 'getEntity', 1, $prefixedEntityId, 'string' );
- $this->splitParserCacheIfMultilingual();
try {
$entityArr = $this->getEntityAccessor()->getEntity(
$prefixedEntityId );
@@ -336,7 +356,7 @@
*/
public function getEntityId( $pageTitle = null ) {
$this->checkType( 'getEntityByTitle', 1, $pageTitle, 'string' );
- return array( $this->getLuaBindings()->getEntityId( $pageTitle
) );
+ return array(
$this->getLanguageIndependentLuaBindings()->getEntityId( $pageTitle ) );
}
/**
@@ -350,7 +370,7 @@
*/
public function getSetting( $setting ) {
$this->checkType( 'setting', 1, $setting, 'string' );
- return array( $this->getLuaBindings()->getSetting( $setting ) );
+ return array(
$this->getLanguageIndependentLuaBindings()->getSetting( $setting ) );
}
/**
@@ -391,17 +411,6 @@
}
/**
- * @return EntityIdParser
- */
- private function getEntityIdParser() {
- if ( !$this->entityIdParser ) {
- $wikibaseClient = WikibaseClient::getDefaultInstance();
- $this->entityIdParser =
$wikibaseClient->getEntityIdParser();
- }
- return $this->entityIdParser;
- }
-
- /**
* Wrapper for getLabel in Scribunto_LuaWikibaseLibraryImplementation
*
* @since 0.5
@@ -412,9 +421,8 @@
*/
public function getLabel( $prefixedEntityId ) {
$this->checkType( 'getLabel', 1, $prefixedEntityId, 'string' );
- $this->splitParserCacheIfMultilingual();
- return $this->getLuaBindings()->getLabel( $prefixedEntityId );
+ return $this->getLanguageDependentLuaBindings()->getLabel(
$prefixedEntityId );
}
/**
@@ -428,9 +436,8 @@
*/
public function getDescription( $prefixedEntityId ) {
$this->checkType( 'getDescription', 1, $prefixedEntityId,
'string' );
- $this->splitParserCacheIfMultilingual();
- return $this->getLuaBindings()->getDescription(
$prefixedEntityId );
+ return
$this->getLanguageDependentLuaBindings()->getDescription( $prefixedEntityId );
}
/**
@@ -444,7 +451,7 @@
*/
public function getSiteLinkPageName( $prefixedEntityId ) {
$this->checkType( 'getSiteLinkPageName', 1, $prefixedEntityId,
'string' );
- return array( $this->getLuaBindings()->getSiteLinkPageName(
$prefixedEntityId ) );
+ return array(
$this->getLanguageIndependentLuaBindings()->getSiteLinkPageName(
$prefixedEntityId ) );
}
/**
@@ -459,7 +466,6 @@
*/
public function renderSnak( $snakSerialization ) {
$this->checkType( 'renderSnak', 1, $snakSerialization, 'table'
);
- $this->splitParserCacheIfMultilingual();
try {
$ret = array(
$this->getSnakSerializationRenderer()->renderSnak( $snakSerialization ) );
@@ -481,7 +487,6 @@
*/
public function renderSnaks( $snaksSerialization ) {
$this->checkType( 'renderSnaks', 1, $snaksSerialization,
'table' );
- $this->splitParserCacheIfMultilingual();
try {
$ret = array(
$this->getSnakSerializationRenderer()->renderSnaks( $snaksSerialization ) );
diff --git
a/extensions/Wikibase/client/includes/DataAccess/Scribunto/WikibaseLuaBindings.php
b/extensions/Wikibase/client/includes/DataAccess/Scribunto/WikibaseLanguageDependentLuaBindings.php
similarity index 60%
rename from
extensions/Wikibase/client/includes/DataAccess/Scribunto/WikibaseLuaBindings.php
rename to
extensions/Wikibase/client/includes/DataAccess/Scribunto/WikibaseLanguageDependentLuaBindings.php
index 495476e..48000c3 100644
---
a/extensions/Wikibase/client/includes/DataAccess/Scribunto/WikibaseLuaBindings.php
+++
b/extensions/Wikibase/client/includes/DataAccess/Scribunto/WikibaseLanguageDependentLuaBindings.php
@@ -2,22 +2,16 @@
namespace Wikibase\Client\DataAccess\Scribunto;
-use InvalidArgumentException;
use Wikibase\Client\Usage\UsageAccumulator;
-use Wikibase\DataModel\Entity\ItemId;
use Wikibase\DataModel\Entity\EntityIdParser;
use Wikibase\DataModel\Entity\EntityIdParsingException;
-use Wikibase\DataModel\Services\Lookup\EntityLookup;
use Wikibase\DataModel\Services\Lookup\LabelDescriptionLookup;
use Wikibase\DataModel\Services\Lookup\LabelDescriptionLookupException;
-use Wikibase\DataModel\SiteLink;
-use Wikibase\Lib\Store\SiteLinkLookup;
use Wikibase\Lib\Store\StorageException;
-use Wikibase\SettingsArray;
/**
* Actual implementations of various functions to access Wikibase functionality
- * through Scribunto.
+ * through Scribunto. Functions in here can dependend on the target language.
*
* @since 0.5
*
@@ -25,27 +19,12 @@
* @author Jens Ohlig < [email protected] >
* @author Marius Hoch < [email protected] >
*/
-class WikibaseLuaBindings {
+class WikibaseLanguageDependentLuaBindings {
/**
* @var EntityIdParser
*/
private $entityIdParser;
-
- /**
- * @var EntityLookup
- */
- private $entityLookup;
-
- /**
- * @var SiteLinkLookup
- */
- private $siteLinkLookup;
-
- /**
- * @var SettingsArray
- */
- private $settings;
/**
* @var LabelDescriptionLookup
@@ -58,67 +37,21 @@
private $usageAccumulator;
/**
- * @var string
- */
- private $siteId;
-
- /**
* @param EntityIdParser $entityIdParser
- * @param EntityLookup $entityLookup
- * @param SiteLinkLookup $siteLinkLookup
- * @param SettingsArray $settings
* @param LabelDescriptionLookup $labelDescriptionLookup
* @param UsageAccumulator $usageAccumulator for tracking title usage
via getEntityId.
- * @param string $siteId
*
* @note: label usage is not tracked in $usageAccumulator. This should
be done inside
* the $labelDescriptionLookup or an underlying TermsLookup.
*/
public function __construct(
EntityIdParser $entityIdParser,
- EntityLookup $entityLookup,
- SiteLinkLookup $siteLinkLookup,
- SettingsArray $settings,
LabelDescriptionLookup $labelDescriptionLookup,
- UsageAccumulator $usageAccumulator,
- $siteId
+ UsageAccumulator $usageAccumulator
) {
$this->entityIdParser = $entityIdParser;
- $this->entityLookup = $entityLookup;
- $this->siteLinkLookup = $siteLinkLookup;
- $this->settings = $settings;
$this->labelDescriptionLookup = $labelDescriptionLookup;
$this->usageAccumulator = $usageAccumulator;
- $this->siteId = $siteId;
- }
-
- /**
- * Get entity id from page title.
- *
- * @since 0.5
- *
- * @param string $pageTitle
- *
- * @return string|null
- */
- public function getEntityId( $pageTitle ) {
- $id = $this->siteLinkLookup->getItemIdForLink( $this->siteId,
$pageTitle );
-
- if ( !$id ) {
- return null;
- }
-
- $this->usageAccumulator->addTitleUsage( $id );
- return $id->getSerialization();
- }
-
- /**
- * @param string $setting
- *
- * @return mixed
- */
- public function getSetting( $setting ) {
- return $this->settings->getSetting( $setting );
}
/**
@@ -183,35 +116,6 @@
// Also notes about language fallbacks from getLabel apply
$this->usageAccumulator->addOtherUsage( $entityId );
return [ $term->getText(), $term->getLanguageCode() ];
- }
-
- /**
- * @param string $prefixedEntityId
- *
- * @since 0.5
- * @return string|null Null if no site link found.
- */
- public function getSiteLinkPageName( $prefixedEntityId ) {
- try {
- $itemId = new ItemId( $prefixedEntityId );
- } catch ( InvalidArgumentException $e ) {
- return null;
- }
-
- // @fixme the SiteLinks do not contain badges! but all we want
here is page name.
- $siteLinkRows = $this->siteLinkLookup->getLinks(
- [ $itemId->getNumericId() ],
- [ $this->siteId ]
- );
-
- foreach ( $siteLinkRows as $siteLinkRow ) {
- $siteLink = new SiteLink( $siteLinkRow[0],
$siteLinkRow[1] );
-
- $this->usageAccumulator->addTitleUsage( $itemId );
- return $siteLink->getPageName();
- }
-
- return null;
}
}
diff --git
a/extensions/Wikibase/client/includes/DataAccess/Scribunto/WikibaseLanguageIndependentLuaBindings.php
b/extensions/Wikibase/client/includes/DataAccess/Scribunto/WikibaseLanguageIndependentLuaBindings.php
new file mode 100644
index 0000000..0e91213
--- /dev/null
+++
b/extensions/Wikibase/client/includes/DataAccess/Scribunto/WikibaseLanguageIndependentLuaBindings.php
@@ -0,0 +1,122 @@
+<?php
+
+namespace Wikibase\Client\DataAccess\Scribunto;
+
+use InvalidArgumentException;
+use Wikibase\Client\Usage\UsageAccumulator;
+use Wikibase\DataModel\Entity\ItemId;
+use Wikibase\DataModel\SiteLink;
+use Wikibase\Lib\Store\SiteLinkLookup;
+use Wikibase\SettingsArray;
+
+/**
+ * Actual implementations of various functions to access Wikibase functionality
+ * through Scribunto.
+ * All functions in here are independent from the target language, meaning that
+ * this class can be instantiated without knowing the target language.
+ *
+ * @since 0.5
+ *
+ * @license GPL-2.0+
+ * @author Jens Ohlig < [email protected] >
+ * @author Marius Hoch < [email protected] >
+ */
+class WikibaseLanguageIndependentLuaBindings {
+
+ /**
+ * @var SiteLinkLookup
+ */
+ private $siteLinkLookup;
+
+ /**
+ * @var SettingsArray
+ */
+ private $settings;
+
+ /**
+ * @var UsageAccumulator
+ */
+ private $usageAccumulator;
+
+ /**
+ * @var string
+ */
+ private $siteId;
+
+ /**
+ * @param SiteLinkLookup $siteLinkLookup
+ * @param SettingsArray $settings
+ * @param UsageAccumulator $usageAccumulator for tracking title usage
via getEntityId.
+ * @param string $siteId
+ */
+ public function __construct(
+ SiteLinkLookup $siteLinkLookup,
+ SettingsArray $settings,
+ UsageAccumulator $usageAccumulator,
+ $siteId
+ ) {
+ $this->siteLinkLookup = $siteLinkLookup;
+ $this->settings = $settings;
+ $this->usageAccumulator = $usageAccumulator;
+ $this->siteId = $siteId;
+ }
+
+ /**
+ * Get entity id from page title.
+ *
+ * @since 0.5
+ *
+ * @param string $pageTitle
+ *
+ * @return string|null
+ */
+ public function getEntityId( $pageTitle ) {
+ $id = $this->siteLinkLookup->getItemIdForLink( $this->siteId,
$pageTitle );
+
+ if ( !$id ) {
+ return null;
+ }
+
+ $this->usageAccumulator->addTitleUsage( $id );
+ return $id->getSerialization();
+ }
+
+ /**
+ * @param string $setting
+ *
+ * @return mixed
+ */
+ public function getSetting( $setting ) {
+ return $this->settings->getSetting( $setting );
+ }
+
+ /**
+ * @param string $prefixedEntityId
+ *
+ * @since 0.5
+ * @return string|null Null if no site link found.
+ */
+ public function getSiteLinkPageName( $prefixedEntityId ) {
+ try {
+ $itemId = new ItemId( $prefixedEntityId );
+ } catch ( InvalidArgumentException $e ) {
+ return null;
+ }
+
+ // @fixme the SiteLinks do not contain badges! but all we want
here is page name.
+ $siteLinkRows = $this->siteLinkLookup->getLinks(
+ [ $itemId->getNumericId() ],
+ [ $this->siteId ]
+ );
+
+ foreach ( $siteLinkRows as $siteLinkRow ) {
+ $siteLink = new SiteLink( $siteLinkRow[0],
$siteLinkRow[1] );
+
+ $this->usageAccumulator->addTitleUsage( $itemId );
+ return $siteLink->getPageName();
+ }
+
+ return null;
+ }
+
+}
diff --git
a/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/Scribunto/Scribunto_LuaWikibaseEntityLibraryTest.php
b/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/Scribunto/Scribunto_LuaWikibaseEntityLibraryTest.php
index bba09cb..1ebd7da 100644
---
a/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/Scribunto/Scribunto_LuaWikibaseEntityLibraryTest.php
+++
b/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/Scribunto/Scribunto_LuaWikibaseEntityLibraryTest.php
@@ -2,6 +2,7 @@
namespace Wikibase\Client\Tests\DataAccess\Scribunto;
+use Language;
use LuaSandboxFunction;
use Scribunto_LuaEngine;
use Scribunto_LuaStandaloneInterpreterFunction;
@@ -79,20 +80,14 @@
);
}
- /**
- * @dataProvider allowDataAccessInUserLanguageProvider
- */
- public function testGetGlobalSiteId( $allowDataAccessInUserLanguage ) {
- $cacheSplit = false;
- $this->setAllowDataAccessInUserLanguage(
$allowDataAccessInUserLanguage );
- $luaWikibaseLibrary = $this->newScribuntoLuaWikibaseLibrary(
$cacheSplit );
+ public function testGetGlobalSiteId() {
+ $luaWikibaseLibrary = $this->newScribuntoLuaWikibaseLibrary();
$expected = array(
WikibaseClient::getDefaultInstance()->getSettings()->getSetting( 'siteGlobalID'
)
);
$this->assertSame( $expected,
$luaWikibaseLibrary->getGlobalSiteId() );
- $this->assertFalse( $cacheSplit );
}
/**
@@ -128,7 +123,8 @@
$cacheSplit = false;
$this->setAllowDataAccessInUserLanguage(
$allowDataAccessInUserLanguage );
- $luaWikibaseLibrary = $this->newScribuntoLuaWikibaseLibrary(
$cacheSplit );
+ $lang = Language::factory( 'es' );
+ $luaWikibaseLibrary = $this->newScribuntoLuaWikibaseLibrary(
$cacheSplit, $lang );
$this->assertSame(
array( 'Q885588' ),
@@ -139,11 +135,7 @@
$this->assertArrayHasKey( 'Q885588#T', $usages );
if ( $allowDataAccessInUserLanguage ) {
- global $wgUser;
-
- $userLang = $wgUser->getOption( 'language' );
-
- $this->assertArrayHasKey( 'Q885588#L.' . $userLang,
$usages );
+ $this->assertArrayHasKey( 'Q885588#L.' .
$lang->getCode(), $usages );
} else {
$this->assertArrayHasKey( 'Q885588#L.de', $usages );
}
@@ -151,12 +143,22 @@
$this->assertSame( $allowDataAccessInUserLanguage, $cacheSplit
);
}
- private function newScribuntoLuaWikibaseLibrary( &$cacheSplit = false )
{
+ /**
+ * @param bool &$cacheSplit Will become true when the ParserCache has
been split
+ * @param Language|null $userLang The user's language
+ *
+ * @return Scribunto_LuaWikibaseLibrary
+ */
+ private function newScribuntoLuaWikibaseLibrary( &$cacheSplit = false,
Language $userLang = null ) {
/* @var $engine Scribunto_LuaEngine */
$engine = $this->getEngine();
$engine->load();
- $engine->getParser()->getOptions()->registerWatcher(
+ $parserOptions = $engine->getParser()->getOptions();
+ if ( $userLang ) {
+ $parserOptions->setUserLang( $userLang );
+ }
+ $parserOptions->registerWatcher(
function( $optionName ) use ( &$cacheSplit ) {
$this->assertSame( 'userlang', $optionName );
$cacheSplit = true;
diff --git
a/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/Scribunto/Scribunto_LuaWikibaseLibraryTest.php
b/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/Scribunto/Scribunto_LuaWikibaseLibraryTest.php
index 9324d5b..6d031c9 100644
---
a/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/Scribunto/Scribunto_LuaWikibaseLibraryTest.php
+++
b/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/Scribunto/Scribunto_LuaWikibaseLibraryTest.php
@@ -7,7 +7,6 @@
use Scribunto_LuaEngine;
use Scribunto_LuaStandaloneInterpreterFunction;
use ScribuntoException;
-use User;
use Wikibase\DataModel\Entity\ItemId;
use Wikibase\Client\DataAccess\Scribunto\Scribunto_LuaWikibaseLibrary;
use Wikibase\Client\RepoLinker;
@@ -177,9 +176,14 @@
}
public function testGetEntityId() {
- $luaWikibaseLibrary = $this->newScribuntoLuaWikibaseLibrary();
+ // Cache is not split, even if "allowDataAccessInUserLanguage"
is true.
+ $this->setAllowDataAccessInUserLanguage( true );
+ $cacheSplit = false;
+ $luaWikibaseLibrary = $this->newScribuntoLuaWikibaseLibrary(
$cacheSplit );
+
$entityId = $luaWikibaseLibrary->getEntityId( 'CanHazKitten123'
);
$this->assertEquals( array( null ), $entityId );
+ $this->assertFalse( $cacheSplit );
}
public function getEntityUrlProvider() {
@@ -193,11 +197,13 @@
* @dataProvider getEntityUrlProvider
*/
public function testGetEntityUrl( $expected, $entityIdSerialization ) {
- $luaWikibaseLibrary = $this->newScribuntoLuaWikibaseLibrary();
+ $cacheSplit = false;
+ $luaWikibaseLibrary = $this->newScribuntoLuaWikibaseLibrary(
$cacheSplit );
$luaWikibaseLibrary->setRepoLinker( $this->getRepoLinker() );
$result = $luaWikibaseLibrary->getEntityUrl(
$entityIdSerialization );
$this->assertSame( $expected, $result );
+ $this->assertFalse( $cacheSplit );
}
private function getRepoLinker() {
@@ -217,18 +223,15 @@
* @dataProvider allowDataAccessInUserLanguageProvider
*/
public function testGetLabel( $allowDataAccessInUserLanguage ) {
- $user = new User();
- $user->setOption( 'language', 'de' );
-
- $this->setMwGlobals( array(
- 'wgContLang' => Language::factory( 'en' ),
- 'wgUser' => $user
- ) );
+ $this->setMwGlobals( 'wgContLang', Language::factory( 'en' ) );
$this->setAllowDataAccessInUserLanguage(
$allowDataAccessInUserLanguage );
$cacheSplit = false;
- $luaWikibaseLibrary = $this->newScribuntoLuaWikibaseLibrary(
$cacheSplit );
+ $luaWikibaseLibrary = $this->newScribuntoLuaWikibaseLibrary(
+ $cacheSplit,
+ Language::factory( 'de' )
+ );
$label = $luaWikibaseLibrary->getLabel( 'Q32487' );
if ( $allowDataAccessInUserLanguage ) {
@@ -252,8 +255,9 @@
public function testRenderSnak( $allowDataAccessInUserLanguage ) {
$this->setAllowDataAccessInUserLanguage(
$allowDataAccessInUserLanguage );
$cacheSplit = false;
+ $lang = Language::factory( 'es' );
- $luaWikibaseLibrary = $this->newScribuntoLuaWikibaseLibrary(
$cacheSplit );
+ $luaWikibaseLibrary = $this->newScribuntoLuaWikibaseLibrary(
$cacheSplit, $lang );
$entityArr = $luaWikibaseLibrary->getEntity( 'Q32488' );
$snak = $entityArr[0]['claims']['P456'][1]['mainsnak'];
@@ -267,11 +271,7 @@
$usage =
$luaWikibaseLibrary->getUsageAccumulator()->getUsages();
if ( $allowDataAccessInUserLanguage ) {
- global $wgUser;
-
- $userLang = $wgUser->getOption( 'language' );
-
- $this->assertArrayHasKey( 'Q885588#L.' . $userLang,
$usage );
+ $this->assertArrayHasKey( 'Q885588#L.' .
$lang->getCode(), $usage );
} else {
$this->assertArrayHasKey( 'Q885588#L.de', $usage );
}
@@ -321,12 +321,14 @@
}
public function testResolvePropertyId() {
- $luaWikibaseLibrary = $this->newScribuntoLuaWikibaseLibrary();
+ $cacheSplit = false;
+ $luaWikibaseLibrary = $this->newScribuntoLuaWikibaseLibrary(
$cacheSplit );
$this->assertSame(
array( 'P342' ),
$luaWikibaseLibrary->resolvePropertyId(
'LuaTestStringProperty' )
);
+ $this->assertFalse( $cacheSplit );
}
public function testResolvePropertyId_propertyIdGiven() {
@@ -424,15 +426,20 @@
/**
* @param bool &$cacheSplit Will become true when the ParserCache has
been split
+ * @param Language|null $userLang The user's language
*
* @return Scribunto_LuaWikibaseLibrary
*/
- private function newScribuntoLuaWikibaseLibrary( &$cacheSplit = false )
{
+ private function newScribuntoLuaWikibaseLibrary( &$cacheSplit = false,
Language $userLang = null ) {
/* @var $engine Scribunto_LuaEngine */
$engine = $this->getEngine();
$engine->load();
- $engine->getParser()->getOptions()->registerWatcher(
+ $parserOptions = $engine->getParser()->getOptions();
+ if ( $userLang ) {
+ $parserOptions->setUserLang( $userLang );
+ }
+ $parserOptions->registerWatcher(
function( $optionName ) use ( &$cacheSplit ) {
$this->assertSame( 'userlang', $optionName );
$cacheSplit = true;
diff --git
a/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/Scribunto/WikibaseLanguageDependentLuaBindingsTest.php
b/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/Scribunto/WikibaseLanguageDependentLuaBindingsTest.php
new file mode 100644
index 0000000..e835d53
--- /dev/null
+++
b/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/Scribunto/WikibaseLanguageDependentLuaBindingsTest.php
@@ -0,0 +1,134 @@
+<?php
+
+namespace Wikibase\Client\Tests\DataAccess\Scribunto;
+
+use PHPUnit_Framework_TestCase;
+use Wikibase\Client\DataAccess\Scribunto\WikibaseLanguageDependentLuaBindings;
+use Wikibase\Client\Usage\EntityUsage;
+use Wikibase\Client\Usage\HashUsageAccumulator;
+use Wikibase\Client\Usage\UsageAccumulator;
+use Wikibase\DataModel\Entity\EntityId;
+use Wikibase\DataModel\Entity\ItemId;
+use Wikibase\DataModel\Entity\BasicEntityIdParser;
+use Wikibase\DataModel\Services\Lookup\LabelDescriptionLookup;
+use Wikibase\DataModel\Term\Term;
+
+/**
+ * @covers
Wikibase\Client\DataAccess\Scribunto\WikibaseLanguageDependentLuaBindings
+ *
+ * @group Wikibase
+ * @group WikibaseClient
+ * @group WikibaseScribunto
+ *
+ * @license GPL-2.0+
+ * @author Jens Ohlig < [email protected] >
+ * @author Katie Filbert < [email protected] >
+ * @author Marius Hoch < [email protected] >
+ */
+class WikibaseLanguageDependentLuaBindingsTest extends
PHPUnit_Framework_TestCase {
+
+ public function testConstructor() {
+ $wikibaseLuaBindings =
$this->getWikibaseLanguageDependentLuaBindings();
+
+ $this->assertInstanceOf(
WikibaseLanguageDependentLuaBindings::class, $wikibaseLuaBindings );
+ }
+
+ /**
+ * @param UsageAccumulator|null $usageAccumulator
+ * @return WikibaseLuaBindings
+ */
+ private function getWikibaseLanguageDependentLuaBindings(
+ UsageAccumulator $usageAccumulator = null
+ ) {
+ $labelDescriptionLookup = $this->getMock(
LabelDescriptionLookup::class );
+ $labelDescriptionLookup->expects( $this->any() )
+ ->method( 'getLabel' )
+ ->will( $this->returnValue( new Term( 'lang-code',
'LabelString' ) ) );
+
+ $labelDescriptionLookup->expects( $this->any() )
+ ->method( 'getDescription' )
+ ->will( $this->returnValue( new Term( 'lang-code',
'DescriptionString' ) ) );
+
+ return new WikibaseLanguageDependentLuaBindings(
+ new BasicEntityIdParser(),
+ $labelDescriptionLookup,
+ $usageAccumulator ?: new HashUsageAccumulator()
+ );
+ }
+
+ private function hasUsage( $actualUsages, EntityId $entityId, $aspect )
{
+ $usage = new EntityUsage( $entityId, $aspect );
+ $key = $usage->getIdentityString();
+ return isset( $actualUsages[$key] );
+ }
+
+ public function getLabelProvider() {
+ return array(
+ array( array( 'LabelString', 'lang-code' ), 'Q123' ),
+ array( array( null, null ), 'DoesntExist' )
+ );
+ }
+
+ /**
+ * @dataProvider getLabelProvider
+ *
+ * @param string $expected
+ * @param string $itemId
+ */
+ public function testGetLabel( $expected, $itemId ) {
+ $wikibaseLuaBindings =
$this->getWikibaseLanguageDependentLuaBindings();
+
+ $this->assertSame( $expected, $wikibaseLuaBindings->getLabel(
$itemId ) );
+ }
+
+ public function testGetLabel_usage() {
+ $usages = new HashUsageAccumulator();
+
+ $wikibaseLuaBindings =
$this->getWikibaseLanguageDependentLuaBindings(
+ $usages
+ );
+
+ $itemId = new ItemId( 'Q7' );
+ $wikibaseLuaBindings->getLabel( $itemId->getSerialization() );
+
+ //NOTE: label usage is not tracked directly, this is done via
the LabelDescriptionLookup
+ $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 getDescriptionProvider() {
+ return array(
+ array( array( 'DescriptionString', 'lang-code' ),
'Q123' ),
+ array( array( null, null ), 'DoesntExist' )
+ );
+ }
+
+ /**
+ * @dataProvider getDescriptionProvider
+ *
+ * @param string $expected
+ * @param string $itemId
+ */
+ public function testGetDescription( $expected, $itemId ) {
+ $wikibaseLuaBindings =
$this->getWikibaseLanguageDependentLuaBindings();
+
+ $this->assertSame( $expected,
$wikibaseLuaBindings->getDescription( $itemId ) );
+ }
+
+ public function testGetDescription_usage() {
+ $usages = new HashUsageAccumulator();
+
+ $wikibaseLuaBindings =
$this->getWikibaseLanguageDependentLuaBindings(
+ $usages
+ );
+
+ $itemId = new ItemId( 'Q7' );
+ $wikibaseLuaBindings->getDescription(
$itemId->getSerialization() );
+
+ $this->assertTrue( $this->hasUsage( $usages->getUsages(),
$itemId, EntityUsage::OTHER_USAGE ), 'other usage' );
+ $this->assertFalse( $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' );
+ }
+
+}
diff --git
a/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/Scribunto/WikibaseLanguageIndependentLuaBindingsTest.php
b/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/Scribunto/WikibaseLanguageIndependentLuaBindingsTest.php
new file mode 100644
index 0000000..61a7d72
--- /dev/null
+++
b/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/Scribunto/WikibaseLanguageIndependentLuaBindingsTest.php
@@ -0,0 +1,165 @@
+<?php
+
+namespace Wikibase\Client\Tests\DataAccess\Scribunto;
+
+use PHPUnit_Framework_TestCase;
+use
Wikibase\Client\DataAccess\Scribunto\WikibaseLanguageIndependentLuaBindings;
+use Wikibase\Client\Usage\EntityUsage;
+use Wikibase\Client\Usage\HashUsageAccumulator;
+use Wikibase\Client\Usage\UsageAccumulator;
+use Wikibase\DataModel\Entity\EntityId;
+use Wikibase\DataModel\Entity\Item;
+use Wikibase\DataModel\Entity\ItemId;
+use Wikibase\Lib\Store\HashSiteLinkStore;
+use Wikibase\Lib\Store\SiteLinkLookup;
+use Wikibase\SettingsArray;
+
+/**
+ * @covers
Wikibase\Client\DataAccess\Scribunto\WikibaseLanguageIndependentLuaBindings
+ *
+ * @group Wikibase
+ * @group WikibaseClient
+ * @group WikibaseScribunto
+ *
+ * @license GPL-2.0+
+ * @author Jens Ohlig < [email protected] >
+ * @author Katie Filbert < [email protected] >
+ * @author Marius Hoch < [email protected] >
+ */
+class WikibaseLanguageIndependentLuaBindingsTest extends
PHPUnit_Framework_TestCase {
+
+ public function testConstructor() {
+ $wikibaseLuaBindings =
$this->getWikibaseLanguageIndependentLuaBindings(
+ $this->getMock( SiteLinkLookup::class )
+ );
+
+ $this->assertInstanceOf(
WikibaseLanguageIndependentLuaBindings::class, $wikibaseLuaBindings );
+ }
+
+ /**
+ * @param SiteLinkLookup $siteLinkLookup
+ * @param UsageAccumulator|null $usageAccumulator
+ *
+ * @return WikibaseLuaBindings
+ */
+ private function getWikibaseLanguageIndependentLuaBindings(
+ SiteLinkLookup $siteLinkLookup,
+ UsageAccumulator $usageAccumulator = null
+ ) {
+ return new WikibaseLanguageIndependentLuaBindings(
+ $siteLinkLookup,
+ new SettingsArray(),
+ $usageAccumulator ?: new HashUsageAccumulator(),
+ "enwiki" // siteId
+ );
+ }
+
+ private function hasUsage( $actualUsages, EntityId $entityId, $aspect )
{
+ $usage = new EntityUsage( $entityId, $aspect );
+ $key = $usage->getIdentityString();
+ return isset( $actualUsages[$key] );
+ }
+
+ public function testGetSettings() {
+ $settings = new SettingsArray();
+ $settings->setSetting( 'a-setting', 'a-value' );
+
+ $bindings = new WikibaseLanguageIndependentLuaBindings(
+ $this->getMock( SiteLinkLookup::class ),
+ $settings,
+ new HashUsageAccumulator(),
+ "enwiki" // siteId
+ );
+
+ $this->assertSame(
+ 'a-value',
+ $bindings->getSetting( 'a-setting' )
+ );
+ }
+
+ public function testGetEntityId() {
+ $item = new Item( new ItemId( 'Q33' ) );
+ $item->getSiteLinkList()->addNewSiteLink( 'enwiki', 'Rome' );
+
+ $usages = new HashUsageAccumulator();
+
+ $siteLinkStore = new HashSiteLinkStore();
+ $siteLinkStore->saveLinksOfItem( $item );
+
+ $wikibaseLuaBindings =
$this->getWikibaseLanguageIndependentLuaBindings(
+ $siteLinkStore,
+ $usages
+ );
+
+ $id = $wikibaseLuaBindings->getEntityId( 'Rome' );
+ $this->assertSame( 'Q33', $id );
+
+ $itemId = new ItemId( $id );
+ $this->assertTrue(
+ $this->hasUsage( $usages->getUsages(), $itemId,
EntityUsage::TITLE_USAGE ),
+ 'title usage'
+ );
+ $this->assertFalse(
+ $this->hasUsage( $usages->getUsages(), $itemId,
EntityUsage::SITELINK_USAGE ),
+ 'sitelink usage'
+ );
+
+ $id = $wikibaseLuaBindings->getEntityId( 'Barcelona' );
+ $this->assertNull( $id );
+ }
+
+ public function getSiteLinkPageNameProvider() {
+ return array(
+ array( 'Beer', 'Q666' ),
+ array( null, 'DoesntExist' )
+ );
+ }
+
+ /**
+ * @dataProvider getSiteLinkPageNameProvider
+ *
+ * @param string $expected
+ * @param string $itemId
+ */
+ public function testGetSiteLinkPageName( $expected, $itemId ) {
+ $item = $this->getItem();
+
+ $siteLinkStore = new HashSiteLinkStore();
+ $siteLinkStore->saveLinksOfItem( $item );
+
+ $wikibaseLuaBindings =
$this->getWikibaseLanguageIndependentLuaBindings( $siteLinkStore );
+ $this->assertSame( $expected,
$wikibaseLuaBindings->getSiteLinkPageName( $itemId ) );
+ }
+
+ public function testGetSiteLinkPageName_usage() {
+ $item = $this->getItem();
+
+ $siteLinkStore = new HashSiteLinkStore();
+ $siteLinkStore->saveLinksOfItem( $item );
+
+ $usages = new HashUsageAccumulator();
+
+ $wikibaseLuaBindings =
$this->getWikibaseLanguageIndependentLuaBindings(
+ $siteLinkStore,
+ $usages
+ );
+
+ $itemId = $item->getId();
+ $wikibaseLuaBindings->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' );
+ }
+
+ private function getItem() {
+ $item = new Item( new ItemId( 'Q666' ) );
+ $item->setLabel( 'en', 'Beer' );
+ $item->setDescription( 'en', 'yummy beverage' );
+ $item->getSiteLinkList()->addNewSiteLink( 'enwiki', 'Beer' );
+ $item->getSiteLinkList()->addNewSiteLink( 'dewiki', 'Bier' );
+
+ return $item;
+ }
+
+}
diff --git
a/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/Scribunto/WikibaseLuaBindingsTest.php
b/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/Scribunto/WikibaseLuaBindingsTest.php
deleted file mode 100644
index a24b636..0000000
---
a/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/Scribunto/WikibaseLuaBindingsTest.php
+++ /dev/null
@@ -1,256 +0,0 @@
-<?php
-
-namespace Wikibase\Client\Tests\DataAccess\Scribunto;
-
-use Wikibase\Client\DataAccess\Scribunto\WikibaseLuaBindings;
-use Wikibase\Client\Usage\EntityUsage;
-use Wikibase\Client\Usage\HashUsageAccumulator;
-use Wikibase\Client\Usage\UsageAccumulator;
-use Wikibase\DataModel\Entity\EntityId;
-use Wikibase\DataModel\Entity\Item;
-use Wikibase\DataModel\Entity\ItemId;
-use Wikibase\DataModel\Entity\BasicEntityIdParser;
-use Wikibase\DataModel\Services\Lookup\EntityLookup;
-use Wikibase\DataModel\Services\Lookup\LabelDescriptionLookup;
-use Wikibase\DataModel\Term\Term;
-use Wikibase\Lib\Store\HashSiteLinkStore;
-use Wikibase\Lib\Store\SiteLinkLookup;
-use Wikibase\SettingsArray;
-use Wikibase\Lib\Tests\MockRepository;
-
-/**
- * @covers Wikibase\Client\DataAccess\Scribunto\WikibaseLuaBindings
- *
- * @group Wikibase
- * @group WikibaseClient
- * @group WikibaseScribunto
- *
- * @license GPL-2.0+
- * @author Jens Ohlig < [email protected] >
- * @author Katie Filbert < [email protected] >
- * @author Marius Hoch < [email protected] >
- */
-class WikibaseLuaBindingsTest extends \PHPUnit_Framework_TestCase {
-
- public function testConstructor() {
- $wikibaseLuaBindings = $this->getWikibaseLuaBindings(
- new MockRepository(),
- new HashSiteLinkStore()
- );
-
- $this->assertInstanceOf( WikibaseLuaBindings::class,
$wikibaseLuaBindings );
- }
-
- /**
- * @param EntityLookup $entityLookup
- * @param SiteLinkLookup $siteLinkLookup
- * @param UsageAccumulator|null $usageAccumulator
- * @return WikibaseLuaBindings
- */
- private function getWikibaseLuaBindings(
- EntityLookup $entityLookup,
- SiteLinkLookup $siteLinkLookup,
- UsageAccumulator $usageAccumulator = null
- ) {
- $labelDescriptionLookup = $this->getMock(
LabelDescriptionLookup::class );
- $labelDescriptionLookup->expects( $this->any() )
- ->method( 'getLabel' )
- ->will( $this->returnValue( new Term( 'lang-code',
'LabelString' ) ) );
-
- $labelDescriptionLookup->expects( $this->any() )
- ->method( 'getDescription' )
- ->will( $this->returnValue( new Term( 'lang-code',
'DescriptionString' ) ) );
-
- return new WikibaseLuaBindings(
- new BasicEntityIdParser(),
- $entityLookup,
- $siteLinkLookup,
- new SettingsArray(),
- $labelDescriptionLookup,
- $usageAccumulator ?: new HashUsageAccumulator(),
- "enwiki" // siteId
- );
- }
-
- private function hasUsage( $actualUsages, EntityId $entityId, $aspect )
{
- $usage = new EntityUsage( $entityId, $aspect );
- $key = $usage->getIdentityString();
- return isset( $actualUsages[$key] );
- }
-
- public function testGetEntityId() {
- $item = new Item( new ItemId( 'Q33' ) );
- $item->getSiteLinkList()->addNewSiteLink( 'enwiki', 'Rome' );
-
- $usages = new HashUsageAccumulator();
-
- $entityLookup = new MockRepository();
- $entityLookup->putEntity( $item );
-
- $siteLinkStore = new HashSiteLinkStore();
- $siteLinkStore->saveLinksOfItem( $item );
-
- $wikibaseLuaBindings = $this->getWikibaseLuaBindings(
- $entityLookup,
- $siteLinkStore,
- $usages
- );
-
- $id = $wikibaseLuaBindings->getEntityId( 'Rome' );
- $this->assertSame( 'Q33', $id );
-
- $itemId = new ItemId( $id );
- $this->assertTrue(
- $this->hasUsage( $usages->getUsages(), $itemId,
EntityUsage::TITLE_USAGE ),
- 'title usage'
- );
- $this->assertFalse(
- $this->hasUsage( $usages->getUsages(), $itemId,
EntityUsage::SITELINK_USAGE ),
- 'sitelink usage'
- );
-
- $id = $wikibaseLuaBindings->getEntityId( 'Barcelona' );
- $this->assertNull( $id );
- }
-
- public function getLabelProvider() {
- return array(
- array( array( 'LabelString', 'lang-code' ), 'Q123' ),
- array( array( null, null ), 'DoesntExist' )
- );
- }
-
- /**
- * @dataProvider getLabelProvider
- *
- * @param string $expected
- * @param string $itemId
- */
- public function testGetLabel( $expected, $itemId ) {
- $wikibaseLuaBindings = $this->getWikibaseLuaBindings(
- new MockRepository(),
- new HashSiteLinkStore()
- );
-
- $this->assertSame( $expected, $wikibaseLuaBindings->getLabel(
$itemId ) );
- }
-
- public function testGetLabel_usage() {
- $usages = new HashUsageAccumulator();
-
- $wikibaseLuaBindings = $this->getWikibaseLuaBindings(
- new MockRepository(),
- new HashSiteLinkStore(),
- $usages
- );
-
- $itemId = new ItemId( 'Q7' );
- $wikibaseLuaBindings->getLabel( $itemId->getSerialization() );
-
- //NOTE: label usage is not tracked directly, this is done via
the LabelDescriptionLookup
- $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 getDescriptionProvider() {
- return array(
- array( array( 'DescriptionString', 'lang-code' ),
'Q123' ),
- array( array( null, null ), 'DoesntExist' )
- );
- }
-
- /**
- * @dataProvider getDescriptionProvider
- *
- * @param string $expected
- * @param string $itemId
- */
- public function testGetDescription( $expected, $itemId ) {
- $wikibaseLuaBindings = $this->getWikibaseLuaBindings(
- new MockRepository(),
- new HashSiteLinkStore()
- );
-
- $this->assertSame( $expected,
$wikibaseLuaBindings->getDescription( $itemId ) );
- }
-
- public function testGetDescription_usage() {
- $usages = new HashUsageAccumulator();
-
- $wikibaseLuaBindings = $this->getWikibaseLuaBindings(
- new MockRepository(),
- new HashSiteLinkStore(),
- $usages
- );
-
- $itemId = new ItemId( 'Q7' );
- $wikibaseLuaBindings->getDescription(
$itemId->getSerialization() );
-
- $this->assertTrue( $this->hasUsage( $usages->getUsages(),
$itemId, EntityUsage::OTHER_USAGE ), 'other usage' );
- $this->assertFalse( $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' ),
- array( null, 'DoesntExist' )
- );
- }
-
- /**
- * @dataProvider getSiteLinkPageNameProvider
- *
- * @param string $expected
- * @param string $itemId
- */
- public function testGetSiteLinkPageName( $expected, $itemId ) {
- $item = $this->getItem();
-
- $entityLookup = new MockRepository();
- $entityLookup->putEntity( $item );
-
- $siteLinkStore = new HashSiteLinkStore();
- $siteLinkStore->saveLinksOfItem( $item );
-
- $wikibaseLuaBindings = $this->getWikibaseLuaBindings(
$entityLookup, $siteLinkStore );
- $this->assertSame( $expected,
$wikibaseLuaBindings->getSiteLinkPageName( $itemId ) );
- }
-
- public function testGetSiteLinkPageName_usage() {
- $item = $this->getItem();
-
- $entityLookup = new MockRepository();
- $entityLookup->putEntity( $item );
-
- $siteLinkStore = new HashSiteLinkStore();
- $siteLinkStore->saveLinksOfItem( $item );
-
- $usages = new HashUsageAccumulator();
-
- $wikibaseLuaBindings = $this->getWikibaseLuaBindings(
- $entityLookup,
- $siteLinkStore,
- $usages
- );
-
- $itemId = $item->getId();
- $wikibaseLuaBindings->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() {
- $item = new Item( new ItemId( 'Q666' ) );
- $item->setLabel( 'en', 'Beer' );
- $item->setDescription( 'en', 'yummy beverage' );
- $item->getSiteLinkList()->addNewSiteLink( 'enwiki', 'Beer' );
- $item->getSiteLinkList()->addNewSiteLink( 'dewiki', 'Bier' );
-
- return $item;
- }
-
-}
diff --git a/extensions/Wikibase/lib/i18n/nl.json
b/extensions/Wikibase/lib/i18n/nl.json
index 1ea20f8..1b24581 100644
--- a/extensions/Wikibase/lib/i18n/nl.json
+++ b/extensions/Wikibase/lib/i18n/nl.json
@@ -96,15 +96,15 @@
"wikibase-entity-summary-wbeditentity-create": "Nieuwe entiteit
aangemaakt",
"wikibase-entity-summary-wbeditentity-update": "Een entiteit gewijzigd",
"wikibase-entity-summary-wbeditentity-override": "Een entiteit geleegd",
- "wikibase-entity-summary-wbsetreference": "Referentie instellen",
- "wikibase-entity-summary-wbsetreference-add": "Referentie toegevoegd
aan claim",
- "wikibase-entity-summary-wbsetreference-set": "Referentie van claim
gewijzigd",
+ "wikibase-entity-summary-wbsetreference": "Bron ingesteld",
+ "wikibase-entity-summary-wbsetreference-add": "Bron toegevoegd aan
verklaring",
+ "wikibase-entity-summary-wbsetreference-set": "Bron van verklaring
gewijzigd",
"wikibase-entity-summary-wbsetlabel-add": "Label toegevoegd voor [$2]",
- "wikibase-entity-summary-wbsetlabel-set": "Label [$2] gewijzigd.",
- "wikibase-entity-summary-wbsetlabel-remove": "Label [$2] verwijderd",
+ "wikibase-entity-summary-wbsetlabel-set": "[$2]-label gewijzigd.",
+ "wikibase-entity-summary-wbsetlabel-remove": "[$2]-label verwijderd",
"wikibase-entity-summary-wbsetdescription-add": "Beschrijving
toegevoegd voor [$2]",
- "wikibase-entity-summary-wbsetdescription-set": "Beschrijving [$2]
gewijzigd",
- "wikibase-entity-summary-wbsetdescription-remove": "Beschrijving [$2]
verwijderd",
+ "wikibase-entity-summary-wbsetdescription-set": "[$2]-beschrijving
gewijzigd",
+ "wikibase-entity-summary-wbsetdescription-remove": "[$2]-beschrijving
verwijderd",
"wikibase-entity-summary-wbsetaliases-set": "{{PLURAL:$1|Alias|$1
aliassen}} voor [$2] ingesteld",
"wikibase-entity-summary-wbsetaliases-add-remove":
"{{PLURAL:$1|Alias|$1 aliassen}} voor [$2] toegevoegd en verwijderd",
"wikibase-entity-summary-wbsetaliases-add": "{{PLURAL:$1|Alias|$1
aliassen}} voor [$2] toegevoegd",
@@ -118,38 +118,38 @@
"wikibase-entity-summary-wbsetsitelink-remove": "Koppeling verwijderd
voor [$2]",
"wikibase-entity-summary-wblinktitles-create": "Nieuwe entiteit
aangemaakt om pagina's met elkaar te koppelen",
"wikibase-entity-summary-wblinktitles-connect": "Taalkoppeling
toegevoegd om pagina's met elkaar te koppelen",
- "wikibase-entity-summary-wbcreateclaim-value": "Claim{{PLURAL:$1||s}}
aangemaakt",
- "wikibase-entity-summary-wbcreateclaim-novalue": "Claim{{PLURAL:$1||s}}
aangemaakt",
- "wikibase-entity-summary-wbcreateclaim-somevalue":
"Claim{{PLURAL:$1||s}} aangemaakt",
- "wikibase-entity-summary-wbcreateclaim": "Claim{{PLURAL:$1||s}}
aangemaakt",
- "wikibase-entity-summary-wbsetclaimvalue": "Claimwaarde{{PLURAL:$1||n}}
ingesteld",
- "wikibase-entity-summary-wbremoveclaims": "{{PLURAL:$1|Claim|Claims}}
verwijderd",
+ "wikibase-entity-summary-wbcreateclaim-value":
"Verklaring{{PLURAL:$1||en}} aangemaakt",
+ "wikibase-entity-summary-wbcreateclaim-novalue":
"Verklaring{{PLURAL:$1||en}} aangemaakt",
+ "wikibase-entity-summary-wbcreateclaim-somevalue":
"Verklaring{{PLURAL:$1||en}} aangemaakt",
+ "wikibase-entity-summary-wbcreateclaim": "Verklaring{{PLURAL:$1||en}}
aangemaakt",
+ "wikibase-entity-summary-wbsetclaimvalue":
"Verklaringwaarde{{PLURAL:$1||n}} ingesteld",
+ "wikibase-entity-summary-wbremoveclaims": "Verklaring{{PLURAL:$1||en}}
verwijderd",
"wikibase-entity-summary-special-create-item": "Item voor [$2] met
waarde{{PLURAL:$1||n}} aangemaakt",
- "wikibase-entity-summary-wbcreateclaim-create": "Claim aangemaakt",
- "wikibase-entity-summary-wbremoveclaims-remove":
"{{PLURAL:$1|Claim|Claims}} verwijderd",
- "wikibase-entity-summary-wbsetclaim-update":
"{{PLURAL:$3|Claim|Claims}} gewijzigd",
- "wikibase-entity-summary-wbsetclaim-create": "Claim{{PLURAL:$3||s}}
aangemaakt",
- "wikibase-entity-summary-wbsetclaim-update-qualifiers":
"{{PLURAL:$4|één qualifier|$4 qualifiers}} van {{PLURAL:$3|één claim|$3
claims}} gewijzigd",
- "wikibase-entity-summary-wbsetclaim-update-references":
"{{PLURAL:$4|Eén referentie|$4 referenties}} van {{PLURAL:$3|één claim|$3
claims}} gewijzigd",
- "wikibase-entity-summary-wbsetclaim-update-rank": "Volgorde van
{{PLURAL:$3|één claim|$3 claims}} gewijzigd",
+ "wikibase-entity-summary-wbcreateclaim-create": "Verklaring aangemaakt",
+ "wikibase-entity-summary-wbremoveclaims-remove":
"Verklaring{{PLURAL:$1||en}} verwijderd",
+ "wikibase-entity-summary-wbsetclaim-update":
"Verklaring{{PLURAL:$3||en}} gewijzigd",
+ "wikibase-entity-summary-wbsetclaim-create":
"Verklaring{{PLURAL:$3||en}} aangemaakt",
+ "wikibase-entity-summary-wbsetclaim-update-qualifiers":
"{{PLURAL:$4|Eén kwalificatie|$4 kwalificaties}} van {{PLURAL:$3|één
verklaring|$3 verklaringen}} gewijzigd",
+ "wikibase-entity-summary-wbsetclaim-update-references":
"{{PLURAL:$4|Eén bron|$4 bronnen}} van {{PLURAL:$3|één verklaring|$3
verklaringen}} gewijzigd",
+ "wikibase-entity-summary-wbsetclaim-update-rank": "Volgorde van
{{PLURAL:$3|één verklaring|$3 verklaringen}} gewijzigd",
"wikibase-entity-summary-clientsitelink-update": "Pagina hernoemd van
[$3] naar [$4]",
"wikibase-entity-summary-clientsitelink-remove": "Pagina op [$3]
verwijderd",
- "wikibase-entity-summary-wbsetqualifier-add":
"{{PLURAL:$1|Qualifier|Qualifiers}} toegevoegd",
- "wikibase-entity-summary-wbsetqualifier-update":
"{{PLURAL:$1|Qualifier|Qualifiers}} gewijzigd",
- "wikibase-entity-summary-wbremovequalifiers-remove":
"{{PLURAL:$1|Qualifier|Qualifiers}} verwijderd",
- "wikibase-entity-summary-wbremovereferences-remove":
"{{PLURAL:$3|Referentie|Referenties}} van claim verwijderd",
- "wikibase-entity-summary-wbmergeitems-from": "Samengevoegd uit \"$3\"",
- "wikibase-entity-summary-wbmergeitems-to": "Item samengevoegd naar
\"$3\"",
+ "wikibase-entity-summary-wbsetqualifier-add":
"Kwalificatie{{PLURAL:$1||s}} toegevoegd",
+ "wikibase-entity-summary-wbsetqualifier-update":
"Kwalificatie{{PLURAL:$1||s}} gewijzigd",
+ "wikibase-entity-summary-wbremovequalifiers-remove":
"Kwalificatie{{PLURAL:$1||s}} verwijderd",
+ "wikibase-entity-summary-wbremovereferences-remove":
"Bron{{PLURAL:$3||nen}} van verklaring verwijderd",
+ "wikibase-entity-summary-wbmergeitems-from": "Samengevoegd uit $3",
+ "wikibase-entity-summary-wbmergeitems-to": "Item samengevoegd naar $3",
"wikibase-item-summary-wbcreate-new": "Nieuw item aangemaakt",
"wikibase-item-summary-wbeditentity": "Nieuw item aangemaakt",
"wikibase-item-summary-wbeditentity-create": "Nieuw item gemaakt",
"wikibase-item-summary-wbeditentity-update": "Een item bijgewerkt",
- "wikibase-item-summary-wbeditentity-override": "Item overschreven",
+ "wikibase-item-summary-wbeditentity-override": "Item geleegd",
"wikibase-item-summary-wblinktitles-create": "Item aangemaakt om
pagina's te koppelen",
"wikibase-item-summary-wblinktitles-connect": "Taalkoppeling naar
gekoppelde pagina's toegevoegd",
"wikibase-property-summary-wbcreate-new": "Nieuwe eigenschap
aangemaakt",
"wikibase-property-summary-wbeditentity-create": "Nieuwe eigenschap
aangemaakt",
"wikibase-property-summary-wbeditentity-update": "Een eigenschap
bijgewerkt",
- "wikibase-property-summary-wbeditentity-override": "Eigenschap
verwijderd",
+ "wikibase-property-summary-wbeditentity-override": "Eigenschap geleegd",
"wikibase-property-summary-special-create-property": "Eigenschap voor
[$2] met waarde{{PLURAL:$1||n}} aangemaakt"
}
diff --git a/extensions/Wikibase/lib/i18n/ru.json
b/extensions/Wikibase/lib/i18n/ru.json
index 10a07f5..04dde07 100644
--- a/extensions/Wikibase/lib/i18n/ru.json
+++ b/extensions/Wikibase/lib/i18n/ru.json
@@ -19,7 +19,7 @@
"wikibase-deletedentity-query": "Удалённый запрос",
"wikibase-error-unexpected": "Ошибка: $1.",
"wikibase-error-save-generic": "Не удалось сохранить из-за возникшей
ошибки.",
- "wikibase-error-remove-generic": "Произошла ошибка при попытке
выполнить удаление. Ваши изменения не могут быть завершены.",
+ "wikibase-error-remove-generic": "Не удалось удалить из-за возникшей
ошибки.",
"wikibase-error-save-connection": "При попытке выполнить сохранение
произошла ошибка подключения. Ваши изменения не могут быть завершены.
Пожалуйста, проверьте своё подключение к интернету.",
"wikibase-error-remove-connection": "При попытке выполнить удаление
произошла ошибка подключения. Ваши изменения не могут быть завершены.
Пожалуйста, проверьте своё подключение к интернету.",
"wikibase-error-save-timeout": "Мы испытываем технические проблемы.
Ваше сохранение не может быть завершено.",
diff --git a/extensions/Wikibase/repo/i18n/nl.json
b/extensions/Wikibase/repo/i18n/nl.json
index 1a6db92..77557b9 100644
--- a/extensions/Wikibase/repo/i18n/nl.json
+++ b/extensions/Wikibase/repo/i18n/nl.json
@@ -157,6 +157,8 @@
"wikibase-newproperty-fieldset": "Nieuwe eigenschap aanmaken",
"wikibase-newproperty-datatype": "Gegevenstype:",
"wikibase-newproperty-invalid-datatype": "Er is een ongeldig
gegevenstype opgegeven.",
+ "wikibase-description-helppage": "Help:Beschrijving",
+ "wikibase-label-helppage": "Help:Label",
"special-newitem": "Nieuw item aanmaken",
"wikibase-newitem-summary": "Zorg ervoor dat u
[[Special:Search|controleert of het item al bestaat]]!<br />U moet een
[[{{int:Wikibase-label-helppage}}|label]] en een
[[{{int:Wikibase-description-helppage}}|beschrijving]] opgeven voor alle nieuwe
items.",
"wikibase-newitem-fieldset": "Nieuw item aanmaken",
@@ -164,6 +166,7 @@
"wikibase-newitem-page": "Naam van de eerste gekoppelde pagina",
"wikibase-newitem-no-external-page": "De opgegeven pagina kon niet
worden gevonden op de overeenkomende site.",
"wikibase-newitem-not-recognized-siteid": "Het opgegeven site-ID is
niet herkend.",
+ "wikibase-newitem-not-recognized-language": "De opgegeven taalcode kon
niet worden herkend.",
"wikibase-newentity-language": "Taal:",
"wikibase-newentity-label": "Label:",
"wikibase-newentity-description": "Beschrijving:",
@@ -211,7 +214,7 @@
"wikibase-mergeitems-fromid": "Het itemnummer waarvan samen te voegen",
"wikibase-mergeitems-toid": "Het itemnummer waarnaar samen te voegen",
"wikibase-mergeitems-submit": "Items samenvoegen",
- "wikibase-mergeitems-success": "$1 is succesvol samengevoegd naar $3 en
is doorverwezen.",
+ "wikibase-mergeitems-success": "$1 is samengevoegd naar $3 en is
doorverwezen.",
"wikibase-itemmerge-missing-parameter": "Onvolledige invoer.",
"wikibase-itemmerge-not-item": "De opgegeven entiteit is geen Item.",
"wikibase-itemmerge-failed-save": "Fout bij het opslaan van het item.",
diff --git a/extensions/Wikibase/repo/includes/Api/EditEntity.php
b/extensions/Wikibase/repo/includes/Api/EditEntity.php
index 4e3e6a4..c88e63c 100644
--- a/extensions/Wikibase/repo/includes/Api/EditEntity.php
+++ b/extensions/Wikibase/repo/includes/Api/EditEntity.php
@@ -3,8 +3,8 @@
namespace Wikibase\Repo\Api;
use ApiMain;
-use DataValues\IllegalValueException;
use Deserializers\Deserializer;
+use Exception;
use InvalidArgumentException;
use MWException;
use SiteList;
@@ -537,13 +537,11 @@
$statement =
$this->statementDeserializer->deserialize( $statementArray );
if ( !( $statement instanceof Statement
) ) {
- throw new
IllegalValueException( 'Statement serialization did not contained a Statement.'
);
+ throw new Exception( 'Statement
serialization did not contained a Statement.' );
}
$opsToReturn[] =
$this->statementChangeOpFactory->newSetStatementOp( $statement );
- } catch ( IllegalValueException $ex ) {
- $this->errorReporter->dieException(
$ex, 'invalid-claim' );
- } catch ( MWException $ex ) {
+ } catch ( Exception $ex ) {
$this->errorReporter->dieException(
$ex, 'invalid-claim' );
}
}
diff --git a/extensions/Wikibase/repo/includes/Store/Sql/SqlIdGenerator.php
b/extensions/Wikibase/repo/includes/Store/Sql/SqlIdGenerator.php
index b05f363..c86cad1 100644
--- a/extensions/Wikibase/repo/includes/Store/Sql/SqlIdGenerator.php
+++ b/extensions/Wikibase/repo/includes/Store/Sql/SqlIdGenerator.php
@@ -62,11 +62,7 @@
* @return int
*/
private function generateNewId( DatabaseBase $database, $type, $retry =
true ) {
- $trx = $database->trxLevel();
-
- if ( $trx == 0 ) {
- $database->begin( __METHOD__ );
- }
+ $database->startAtomic( __METHOD__ );
$currentId = $database->selectRow(
'wb_id_counters',
@@ -103,9 +99,7 @@
}
}
- if ( $trx == 0 ) {
- $database->commit( __METHOD__ );
- }
+ $database->endAtomic( __METHOD__ );
if ( !$success ) {
throw new MWException( 'Could not generate a reliably
unique ID.' );
diff --git
a/extensions/Wikibase/repo/tests/phpunit/includes/Api/EditEntityTest.php
b/extensions/Wikibase/repo/tests/phpunit/includes/Api/EditEntityTest.php
index d87e5f2..9b66492 100644
--- a/extensions/Wikibase/repo/tests/phpunit/includes/Api/EditEntityTest.php
+++ b/extensions/Wikibase/repo/tests/phpunit/includes/Api/EditEntityTest.php
@@ -5,6 +5,7 @@
use UsageException;
use Wikibase\DataModel\Entity\Item;
use Wikibase\DataModel\Entity\Property;
+use Wikibase\DataModel\Services\Statement\StatementGuidParsingException;
use Wikibase\Lib\Store\StorageException;
use Wikibase\Repo\WikibaseRepo;
@@ -674,6 +675,34 @@
'message' => 'Cannot remove a claim
with no GUID'
) )
),
+ 'invalid entity ID in data value' => array(
+ 'p' => array(
+ 'id' => '%Berlin%',
+ 'data' => '{ "claims": [ {
+ "mainsnak": { "snaktype":
"novalue", "property": "P0" },
+ "type": "statement"
+ } ] }'
+ ),
+ 'e' => array( 'exception' => array(
+ 'type' => UsageException::class,
+ 'code' => 'invalid-claim',
+ 'message' => '\'P0\' is not a valid
entity ID'
+ ) )
+ ),
+ 'invalid statement GUID' => array(
+ 'p' => array(
+ 'id' => '%Berlin%',
+ 'data' => '{ "claims": [ {
+ "id": "Q0$GUID",
+ "mainsnak": { "snaktype":
"novalue", "property": "%P56%" },
+ "type": "statement"
+ } ] }'
+ ),
+ 'e' => array( 'exception' => array(
+ // FIXME: Does this also need fixing?
+ 'type' =>
StatementGuidParsingException::class
+ ) )
+ ),
'removing valid claim with no guid fails' => array(
'p' => array(
'site' => 'enwiki',
diff --git
a/extensions/Wikibase/view/resources/jquery/wikibase/snakview/snakview.js
b/extensions/Wikibase/view/resources/jquery/wikibase/snakview/snakview.js
index fe05d51..3d50010 100644
--- a/extensions/Wikibase/view/resources/jquery/wikibase/snakview/snakview.js
+++ b/extensions/Wikibase/view/resources/jquery/wikibase/snakview/snakview.js
@@ -245,6 +245,13 @@
}
} )
.on( 'entityselectorselected', function( event, entityId ) {
+ if ( self._variation ) {
+ // A new property has been selected:
+ // Remove the existing variation as it's
impossible to change
+ // the property id in the variation and its
dependencies.
+ self._variation.destroy();
+ self._variation = null;
+ }
self._selectProperty();
} );
},
diff --git
a/extensions/Wikibase/view/resources/jquery/wikibase/snakview/snakview.variations.Value.js
b/extensions/Wikibase/view/resources/jquery/wikibase/snakview/snakview.variations.Value.js
index 3bfb1cf..b113f98 100644
---
a/extensions/Wikibase/view/resources/jquery/wikibase/snakview/snakview.variations.Value.js
+++
b/extensions/Wikibase/view/resources/jquery/wikibase/snakview/snakview.variations.Value.js
@@ -400,7 +400,7 @@
}
},
- /*
+ /**
* @inheritdoc
*/
isFocusable: function() {
diff --git a/vendor/composer/autoload_classmap.php
b/vendor/composer/autoload_classmap.php
index 3d8d914..d474f2a 100644
--- a/vendor/composer/autoload_classmap.php
+++ b/vendor/composer/autoload_classmap.php
@@ -6,6 +6,7 @@
$baseDir = dirname($vendorDir);
return array(
+ 'ArticlePlaceholder\\AboutTopicRenderer' => $baseDir .
'/extensions/ArticlePlaceholder/includes/AboutTopicRenderer.php',
'ArticlePlaceholder\\BaseTemplateToolboxHookHandler' => $baseDir .
'/extensions/ArticlePlaceholder/includes/BaseTemplateToolboxHookHandler.php',
'ArticlePlaceholder\\Hooks' => $baseDir .
'/extensions/ArticlePlaceholder/includes/Hooks.php',
'ArticlePlaceholder\\ItemNotabilityFilter' => $baseDir .
'/extensions/ArticlePlaceholder/includes/ItemNotabilityFilter.php',
@@ -407,7 +408,8 @@
'Wikibase\\Client\\DataAccess\\Scribunto\\Scribunto_LuaWikibaseEntityLibrary'
=> $baseDir .
'/extensions/Wikibase/client/includes/DataAccess/Scribunto/Scribunto_LuaWikibaseEntityLibrary.php',
'Wikibase\\Client\\DataAccess\\Scribunto\\Scribunto_LuaWikibaseLibrary' =>
$baseDir .
'/extensions/Wikibase/client/includes/DataAccess/Scribunto/Scribunto_LuaWikibaseLibrary.php',
'Wikibase\\Client\\DataAccess\\Scribunto\\SnakSerializationRenderer' =>
$baseDir .
'/extensions/Wikibase/client/includes/DataAccess/Scribunto/SnakSerializationRenderer.php',
- 'Wikibase\\Client\\DataAccess\\Scribunto\\WikibaseLuaBindings' => $baseDir
.
'/extensions/Wikibase/client/includes/DataAccess/Scribunto/WikibaseLuaBindings.php',
+
'Wikibase\\Client\\DataAccess\\Scribunto\\WikibaseLanguageDependentLuaBindings'
=> $baseDir .
'/extensions/Wikibase/client/includes/DataAccess/Scribunto/WikibaseLanguageDependentLuaBindings.php',
+
'Wikibase\\Client\\DataAccess\\Scribunto\\WikibaseLanguageIndependentLuaBindings'
=> $baseDir .
'/extensions/Wikibase/client/includes/DataAccess/Scribunto/WikibaseLanguageIndependentLuaBindings.php',
'Wikibase\\Client\\DataAccess\\Scribunto\\WikibaseLuaEntityBindings' =>
$baseDir .
'/extensions/Wikibase/client/includes/DataAccess/Scribunto/WikibaseLuaEntityBindings.php',
'Wikibase\\Client\\DataAccess\\SnaksFinder' => $baseDir .
'/extensions/Wikibase/client/includes/DataAccess/SnaksFinder.php',
'Wikibase\\Client\\DataAccess\\StatementTransclusionInteractor' =>
$baseDir .
'/extensions/Wikibase/client/includes/DataAccess/StatementTransclusionInteractor.php',
@@ -476,7 +478,8 @@
'Wikibase\\Client\\Tests\\DataAccess\\Scribunto\\Scribunto_LuaWikibaseLibraryTest'
=> $baseDir .
'/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/Scribunto/Scribunto_LuaWikibaseLibraryTest.php',
'Wikibase\\Client\\Tests\\DataAccess\\Scribunto\\Scribunto_LuaWikibaseLibraryTestCase'
=> $baseDir .
'/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/Scribunto/Scribunto_LuaWikibaseLibraryTestCase.php',
'Wikibase\\Client\\Tests\\DataAccess\\Scribunto\\SnakSerializationRendererTest'
=> $baseDir .
'/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/Scribunto/SnakSerializationRendererTest.php',
- 'Wikibase\\Client\\Tests\\DataAccess\\Scribunto\\WikibaseLuaBindingsTest'
=> $baseDir .
'/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/Scribunto/WikibaseLuaBindingsTest.php',
+
'Wikibase\\Client\\Tests\\DataAccess\\Scribunto\\WikibaseLanguageDependentLuaBindingsTest'
=> $baseDir .
'/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/Scribunto/WikibaseLanguageDependentLuaBindingsTest.php',
+
'Wikibase\\Client\\Tests\\DataAccess\\Scribunto\\WikibaseLanguageIndependentLuaBindingsTest'
=> $baseDir .
'/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/Scribunto/WikibaseLanguageIndependentLuaBindingsTest.php',
'Wikibase\\Client\\Tests\\DataAccess\\Scribunto\\WikibaseLuaEntityBindingsTest'
=> $baseDir .
'/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/Scribunto/WikibaseLuaEntityBindingsTest.php',
'Wikibase\\Client\\Tests\\DataAccess\\SnaksFinderTest' => $baseDir .
'/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/SnaksFinderTest.php',
'Wikibase\\Client\\Tests\\DataAccess\\WikibaseDataAccessTestItemSetUpHelper' =>
$baseDir .
'/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/WikibaseDataAccessTestItemSetUpHelper.php',
diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
index 79efbca..347ca53 100644
--- a/vendor/composer/installed.json
+++ b/vendor/composer/installed.json
@@ -110,19 +110,19 @@
"source": {
"type": "git",
"url":
"https://github.com/wikimedia/mediawiki-extensions-ArticlePlaceholder.git",
- "reference": "2fa8987bbf2daace8bae00cf1f4f0d02a9d0b47e"
+ "reference": "747b41328a4650aca8f7a3c3e29ee4d72668ee93"
},
"dist": {
"type": "zip",
- "url":
"https://api.github.com/repos/wikimedia/mediawiki-extensions-ArticlePlaceholder/zipball/2fa8987bbf2daace8bae00cf1f4f0d02a9d0b47e",
- "reference": "2fa8987bbf2daace8bae00cf1f4f0d02a9d0b47e",
+ "url":
"https://api.github.com/repos/wikimedia/mediawiki-extensions-ArticlePlaceholder/zipball/747b41328a4650aca8f7a3c3e29ee4d72668ee93",
+ "reference": "747b41328a4650aca8f7a3c3e29ee4d72668ee93",
"shasum": ""
},
"require-dev": {
"jakub-onderka/php-parallel-lint": "0.9.2",
"mediawiki/mediawiki-codesniffer": "0.7.2"
},
- "time": "2016-08-24 08:30:24",
+ "time": "2016-08-25 01:06:03",
"type": "mediawiki-extension",
"installation-source": "dist",
"autoload": {
@@ -1397,12 +1397,12 @@
"source": {
"type": "git",
"url":
"https://github.com/wikimedia/mediawiki-extensions-Wikibase.git",
- "reference": "7c19c5037aee83d9eda90da0bdff9a00d21aa521"
+ "reference": "aa4f666667f49ca7b40b7cf88bab92fa5236018d"
},
"dist": {
"type": "zip",
- "url":
"https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/7c19c5037aee83d9eda90da0bdff9a00d21aa521",
- "reference": "7c19c5037aee83d9eda90da0bdff9a00d21aa521",
+ "url":
"https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/aa4f666667f49ca7b40b7cf88bab92fa5236018d",
+ "reference": "aa4f666667f49ca7b40b7cf88bab92fa5236018d",
"shasum": ""
},
"require": {
@@ -1435,7 +1435,7 @@
"jakub-onderka/php-parallel-lint": "0.9.2",
"mediawiki/mediawiki-codesniffer": "0.4.0|0.5.0"
},
- "time": "2016-08-24 09:29:21",
+ "time": "2016-08-24 21:34:05",
"type": "mediawiki-extension",
"installation-source": "dist",
"autoload": {
--
To view, visit https://gerrit.wikimedia.org/r/306644
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I9d6a7867b721e88f46892af746b82036c9486c8c
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikidata
Gerrit-Branch: master
Gerrit-Owner: WikidataBuilder <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits