WMDE-leszek has uploaded a new change for review. (
https://gerrit.wikimedia.org/r/350827 )
Change subject: DO NOT MERGE Demo only
......................................................................
DO NOT MERGE Demo only
This shows a possible way to test Wikibase RDF-related services
as changed in I5fc25575348ed09562c4c1541765f0ea35b4f812, without
overriding MediaWiki services and falling into service instance
caching trap.
Change-Id: I1950d14fb3d105aebf727b0c3798610a2383b813
---
M repo/includes/WikibaseRepo.php
M repo/tests/phpunit/includes/Dumpers/RdfDumpGeneratorTest.php
M repo/tests/phpunit/includes/Rdf/RdfBuilderTest.php
3 files changed, 100 insertions(+), 22 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase
refs/changes/27/350827/1
diff --git a/repo/includes/WikibaseRepo.php b/repo/includes/WikibaseRepo.php
index f7a44da..f742288 100644
--- a/repo/includes/WikibaseRepo.php
+++ b/repo/includes/WikibaseRepo.php
@@ -22,7 +22,6 @@
use MediaWiki\Site\MediaWikiPageNameNormalizer;
use MWException;
use RequestContext;
-use RuntimeException;
use Serializers\DispatchingSerializer;
use Serializers\Serializer;
use SiteLookup;
@@ -374,19 +373,6 @@
}
return $instance;
- }
-
- /**
- * Get a new instance for use in unit tests.
- *
- * @return self
- */
- public static function getTestInstance() {
- if ( !defined( 'MW_PHPUNIT_TEST' ) ) {
- throw new RuntimeException( 'getTestInstance() can only
be used in unit tests' );
- }
-
- return self::newInstance();
}
/**
diff --git a/repo/tests/phpunit/includes/Dumpers/RdfDumpGeneratorTest.php
b/repo/tests/phpunit/includes/Dumpers/RdfDumpGeneratorTest.php
index a22bdc7..3fe5851 100644
--- a/repo/tests/phpunit/includes/Dumpers/RdfDumpGeneratorTest.php
+++ b/repo/tests/phpunit/includes/Dumpers/RdfDumpGeneratorTest.php
@@ -19,11 +19,17 @@
use Wikibase\Lib\Store\EntityRevisionLookup;
use Wikibase\Lib\Store\EntityTitleLookup;
use Wikibase\Lib\Store\RevisionedUnresolvedRedirectException;
+use Wikibase\Rdf\EntityRdfBuilderFactory;
+use Wikibase\Rdf\NullEntityRdfBuilder;
+use Wikibase\Rdf\PropertyRdfBuilder;
+use Wikibase\Rdf\RdfProducer;
use Wikibase\Rdf\RdfVocabulary;
+use Wikibase\Rdf\SiteLinksRdfBuilder;
use Wikibase\Repo\Tests\Rdf\NTriplesRdfTestHelper;
use Wikibase\Repo\WikibaseRepo;
use Wikibase\Repo\Tests\Rdf\RdfBuilderTest;
use Wikibase\Repo\Tests\Rdf\RdfBuilderTestData;
+use Wikimedia\Purtle\RdfWriter;
/**
* @covers Wikibase\Dumpers\RdfDumpGenerator
@@ -103,6 +109,48 @@
}
/**
+ * Returns the mapping of entity types used in tests to callbacks
instantiating EntityRdfBuilder
+ * instances, that are configured to use services configured for test
purposes (e.g. SiteLookup).
+ *
+ * @see EntityTypeDefinitions::getRdfBuilderFactoryCallbacks
+ *
+ * TODO: move to RdfBuilderTestData?
+ *
+ * @param SiteLookup $siteLookup
+ *
+ * @return callable[]
+ */
+ private function getRdfBuilderFactoryCallbacks( SiteLookup $siteLookup
) {
+ return [
+ 'item' => function(
+ $flavorFlags,
+ RdfVocabulary $vocabulary,
+ RdfWriter $writer,
+ $mentionedEntityTracker,
+ $dedupe
+ ) use ( $siteLookup ) {
+ if ( ( $flavorFlags &
RdfProducer::PRODUCE_SITELINKS ) !== 0 ) {
+ $sites = $siteLookup->getSites();
+ $builder = new SiteLinksRdfBuilder(
$vocabulary, $writer, $sites );
+ $builder->setDedupeBag( $dedupe );
+ return $builder;
+ }
+ return new NullEntityRdfBuilder();
+ },
+ 'property' => function(
+ $flavorFlags,
+ RdfVocabulary $vocabulary,
+ RdfWriter $writer
+ ) {
+ return new PropertyRdfBuilder(
+ $vocabulary,
+ $writer
+ );
+ }
+ ];
+ }
+
+ /**
* @param string $flavor
* @param EntityDocument[] $entities
* @param EntityId[] $redirects
@@ -147,13 +195,12 @@
) );
$siteLookup = $this->getSiteLookup();
- $this->setService( 'SiteLookup', $siteLookup );
- $wikibaseRepo = WikibaseRepo::getTestInstance();
+ $wikibaseRepo = WikibaseRepo::getDefaultInstance();
// Note: we test against the actual RDF bindings here, so we
get actual RDF.
$rdfBuilderFactory =
$wikibaseRepo->getValueSnakRdfBuilderFactory();
- $entityRdfBuilderFactory =
$wikibaseRepo->getEntityRdfBuilderFactory();
+ $entityRdfBuilderFactory = new EntityRdfBuilderFactory(
$this->getRdfBuilderFactoryCallbacks( $siteLookup ) );
return RdfDumpGenerator::createDumpGenerator(
'ntriples',
diff --git a/repo/tests/phpunit/includes/Rdf/RdfBuilderTest.php
b/repo/tests/phpunit/includes/Rdf/RdfBuilderTest.php
index 3410a41..926e164 100644
--- a/repo/tests/phpunit/includes/Rdf/RdfBuilderTest.php
+++ b/repo/tests/phpunit/includes/Rdf/RdfBuilderTest.php
@@ -3,18 +3,24 @@
namespace Wikibase\Repo\Tests\Rdf;
use PageProps;
+use SiteLookup;
use Title;
use Wikibase\DataModel\Entity\EntityDocument;
use Wikibase\DataModel\Entity\EntityId;
use Wikibase\DataModel\Entity\ItemId;
use Wikibase\Lib\Store\EntityTitleLookup;
use Wikibase\Rdf\DedupeBag;
+use Wikibase\Rdf\EntityRdfBuilderFactory;
use Wikibase\Rdf\HashDedupeBag;
+use Wikibase\Rdf\NullEntityRdfBuilder;
+use Wikibase\Rdf\PropertyRdfBuilder;
use Wikibase\Rdf\RdfBuilder;
use Wikibase\Rdf\RdfProducer;
use Wikibase\Rdf\RdfVocabulary;
+use Wikibase\Rdf\SiteLinksRdfBuilder;
use Wikibase\Repo\WikibaseRepo;
use Wikimedia\Purtle\NTriplesRdfWriter;
+use Wikimedia\Purtle\RdfWriter;
/**
* @covers Wikibase\Rdf\RdfBuilder
@@ -70,6 +76,48 @@
}
/**
+ * Returns the mapping of entity types used in tests to callbacks
instantiating EntityRdfBuilder
+ * instances, that are configured to use services configured for test
purposes (e.g. SiteLookup).
+ *
+ * @see EntityTypeDefinitions::getRdfBuilderFactoryCallbacks
+ *
+ * TODO: move to RdfBuilderTestData?
+ *
+ * @param SiteLookup $siteLookup
+ *
+ * @return callable[]
+ */
+ private function getRdfBuilderFactoryCallbacks( SiteLookup $siteLookup
) {
+ return [
+ 'item' => function(
+ $flavorFlags,
+ RdfVocabulary $vocabulary,
+ RdfWriter $writer,
+ $mentionedEntityTracker,
+ $dedupe
+ ) use ( $siteLookup ) {
+ if ( ( $flavorFlags &
RdfProducer::PRODUCE_SITELINKS ) !== 0 ) {
+ $sites = $siteLookup->getSites();
+ $builder = new SiteLinksRdfBuilder(
$vocabulary, $writer, $sites );
+ $builder->setDedupeBag( $dedupe );
+ return $builder;
+ }
+ return new NullEntityRdfBuilder();
+ },
+ 'property' => function(
+ $flavorFlags,
+ RdfVocabulary $vocabulary,
+ RdfWriter $writer
+ ) {
+ return new PropertyRdfBuilder(
+ $vocabulary,
+ $writer
+ );
+ }
+ ];
+ }
+
+ /**
* @param int $produce One of the RdfProducer::PRODUCE_...
constants.
* @param DedupeBag $dedup
* @param RdfVocabulary $vocabulary
@@ -82,13 +130,10 @@
}
$siteLookup = $this->getTestData()->getSiteLookup();
- $this->setService( 'SiteLookup', $siteLookup );
// Note: using the actual factory here makes this an
integration test!
- $repo = WikibaseRepo::getTestInstance();
-
- $valueBuilderFactory = $repo->getValueSnakRdfBuilderFactory();
- $entityRdfBuilderFactory = $repo->getEntityRdfBuilderFactory();
+ $valueBuilderFactory =
WikibaseRepo::getDefaultInstance()->getValueSnakRdfBuilderFactory();
+ $entityRdfBuilderFactory = new EntityRdfBuilderFactory(
$this->getRdfBuilderFactoryCallbacks( $siteLookup ) );
$emitter = new NTriplesRdfWriter();
$builder = new RdfBuilder(
$siteLookup->getSites(),
--
To view, visit https://gerrit.wikimedia.org/r/350827
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I1950d14fb3d105aebf727b0c3798610a2383b813
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: WMDE-leszek <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits