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 <leszek.mani...@wikimedia.de>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to