Tobias Gritschacher has submitted this change and it was merged. Change subject: Rewrote SiteLink test to not depends on the database ......................................................................
Rewrote SiteLink test to not depends on the database Also decreases complexity, increased readability and maintainability And got rid of deprecated method usage Change-Id: Ifbd141dcc41640fd9348558efdc8d82a5423be82 --- M DataModel/DataModel/SiteLink.php M DataModel/tests/phpunit/SiteLinkTest.php 2 files changed, 98 insertions(+), 107 deletions(-) Approvals: Tobias Gritschacher: Looks good to me, approved jenkins-bot: Verified diff --git a/DataModel/DataModel/SiteLink.php b/DataModel/DataModel/SiteLink.php index 155f329..2c2e53c 100644 --- a/DataModel/DataModel/SiteLink.php +++ b/DataModel/DataModel/SiteLink.php @@ -53,7 +53,11 @@ * @return \Wikibase\SiteLink the new SiteLink * @throws \MWException if the $siteID isn't known. */ - public static function newFromText( $globalSiteId, $page, $normalize = false ) { + public static function newFromText( $globalSiteId, $page, $normalize = null ) { + if ( $normalize !== null ) { + throw new \Exception( 'Support for $normalize parameter has been dropped' ); + } + wfProfileIn( __METHOD__ ); $site = Sites::singleton()->getSite( $globalSiteId ); diff --git a/DataModel/tests/phpunit/SiteLinkTest.php b/DataModel/tests/phpunit/SiteLinkTest.php index 1516fea..47a430e 100644 --- a/DataModel/tests/phpunit/SiteLinkTest.php +++ b/DataModel/tests/phpunit/SiteLinkTest.php @@ -2,10 +2,26 @@ namespace Wikibase\Test; +use Site; use Wikibase\SiteLink; /** - * Tests for the Wikibase\SiteLink class. + * @covers Wikibase\SiteLink + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * http://www.gnu.org/copyleft/gpl.html * * @file * @since 0.1 @@ -16,138 +32,109 @@ * @group Wikibase * @group WikibaseDataModel * @group SiteLink - * @group Database * * @licence GNU GPL v2+ - * @author Daniel Kinzler <daniel.kinz...@wikimedia.de> * @author Jeroen De Dauw < jeroended...@gmail.com > */ class SiteLinkTest extends \MediaWikiTestCase { - public function setUp() { - parent::setUp(); + /** + * @dataProvider constructorProvider + */ + public function testConstructor( Site $site, $pageName ) { + $link = new SiteLink( $site, $pageName ); - static $hasSites = false; + $this->assertEquals( $site, $link->getSite() ); + $this->assertEquals( $pageName, $link->getPage() ); + } - if ( !$hasSites ) { - \TestSites::insertIntoDb(); - $hasSites = true; + public function constructorProvider() { + $argLists = array(); + + foreach ( $this->getSites() as $site ) { + foreach ( array( 'Nyan', 'Nyan!', 'Main_Page' ) as $pageName ) { + $argLists[] = array( $site, $pageName ); + } } + + return $argLists; + } + + protected function getSites() { + $sites = array(); + + $enWiki = new \MediaWikiSite(); + $enWiki->setGlobalId( 'enwiki' ); + + $sites[] = $enWiki; + + + $nlWiki = new \MediaWikiSite(); + $nlWiki->setGlobalId( 'nlwiki' ); + + $sites[] = $nlWiki; + + + $fooWiki = new \Site(); + $fooWiki->setGlobalId( 'foobarbaz' ); + + $sites[] = $fooWiki; + + return $sites; } /** - * Returns a site to test with. - * @return \MediaWikiSite + * @dataProvider constructorProvider */ - protected function getSite() { - $site = \MediaWikiSite::newFromGlobalId( 'enwiki' ); - $site->setPagePath( 'https://en.wikipedia.org/wiki/$1' ); + public function testToString( Site $site, $pageName ) { + $link = new SiteLink( $site, $pageName ); - return $site; - } + $this->assertInternalType( 'string', (string)$link ); - protected function newFromText( $pageText ) { - return new SiteLink( $this->getSite(), $pageText ); - } + $parts = explode( ':', (string)$link ); + $this->assertCount( 2, $parts, 'string representation should contain one colon' ); - public function testNewFromText() { - $link = SiteLink::newFromText( "enwiki", " foo " ); - $this->assertEquals( " foo ", $link->getPage() ); + $this->assertEquals( + $site->getGlobalId(), + substr( $parts[0], 2 ), + 'The first part of the string representation should be [[$globalSiteId' + ); - //NOTE: this does not actually call out to the enwiki site to perform the normalization, - // but uses a local Title object to do so. This is hardcoded on SiteLink::normalizePageTitle - // for the case that MW_PHPUNIT_TEST is set. - $link = SiteLink::newFromText( "enwiki", " foo ", true ); - $this->assertEquals( "Foo", $link->getPage() ); - } - - public function testConstructor() { - $link = new SiteLink( $this->getSite(), "Foo" ); - $this->assertEquals( "Foo", $link->getPage() ); - } - - /** - * @depends testNewFromText - */ - public function testGetPage() { - $link = $this->newFromText( 'Foo' ); - $this->assertEquals( "Foo", $link->getPage() ); - } - - /** - * @depends testNewFromText - */ - public function testGetSite() { - $this->assertEquals( $this->getSite(), $this->newFromText( 'Foo' )->getSite() ); - } - - /** - * @depends testNewFromText - */ - public function testGetSiteID() { - $this->assertEquals( 'enwiki', $this->newFromText( 'Foo' )->getSite()->getGlobalId() ); - } - - /** - * @depends testNewFromText - */ - public function testToString() { - $link = $this->newFromText( 'Foo Bar' ); - - $this->assertEquals( "[[enwiki:Foo Bar]]", "$link" ); - } - - public function dataGetSiteIDs() { - return array( - array( - array(), - array() ), - - array( - array( SiteLink::newFromText( 'enwiki', "Foo Bar" ), SiteLink::newFromText( 'dewiki', "Bla bla" ) ), - array( 'enwiki', 'dewiki' ) ), - - array( - array( SiteLink::newFromText( 'enwiki', "Foo Bar" ), SiteLink::newFromText( 'dewiki', "Bla bla" ), SiteLink::newFromText( 'enwiki', "More Stuff" ) ), - array( 'enwiki', 'dewiki' ) ), + $this->assertEquals( + $pageName, + substr( $parts[1], 0, strlen( $parts[1] ) - 2 ), + 'The second part of the string representation should be $pageName]]' ); } /** - * - * @dataProvider dataGetSiteIDs - * @depends testNewFromText + * @dataProvider constructorProvider */ - public function testGetSiteIDs( $links, $expected ) { - $ids = SiteLink::getSiteIDs( $links ); + public function testGetUrl( Site $site, $pageName ) { + $link = new SiteLink( $site, $pageName ); - $this->assertArrayEquals( $expected, $ids ); - } - - public function dataSiteLinksToArray() { - return array( - array( - array(), - array() ), - - array( - array( SiteLink::newFromText( 'enwiki', "Foo Bar" ), SiteLink::newFromText( 'dewiki', "Bla bla" ) ), - array( 'enwiki' => "Foo Bar", 'dewiki' => "Bla bla" ) ), - - array( - array( SiteLink::newFromText( 'enwiki', "Foo Bar" ), SiteLink::newFromText( 'dewiki', "Bla bla" ), SiteLink::newFromText( 'enwiki', "More Stuff" ) ), - array( 'enwiki' => "More Stuff", 'dewiki' => "Bla bla" ) ), + $this->assertEquals( + $site->getPageUrl( $pageName ), + $link->getUrl() ); } /** - * - * @dataProvider dataSiteLinksToArray - * @depends testNewFromText + * @dataProvider siteProvider */ - public function testSiteLinksToArray( $links, $expected ) { - $array = SiteLink::siteLinksToArray( $links ); - - $this->assertArrayEquals( $expected, $array ); + public function testConstructorWithNullPageName( Site $site ) { + $this->setExpectedException( 'MWException' ); + new SiteLink( $site, null ); } + + public function siteProvider() { + $argLists = array(); + + foreach ( $this->getSites() as $site ) { + $argLists[] = array( $site ); + } + + return $argLists; + } + } -- To view, visit https://gerrit.wikimedia.org/r/63126 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: Ifbd141dcc41640fd9348558efdc8d82a5423be82 Gerrit-PatchSet: 2 Gerrit-Project: mediawiki/extensions/Wikibase Gerrit-Branch: master Gerrit-Owner: Jeroen De Dauw <jeroended...@gmail.com> Gerrit-Reviewer: Anja Jentzsch <a...@anjeve.de> Gerrit-Reviewer: Ataherivand <abraham.taheriv...@wikimedia.de> Gerrit-Reviewer: Aude <aude.w...@gmail.com> Gerrit-Reviewer: Daniel Kinzler <daniel.kinz...@wikimedia.de> Gerrit-Reviewer: Daniel Werner <daniel.wer...@wikimedia.de> Gerrit-Reviewer: Denny Vrandecic <denny.vrande...@wikimedia.de> Gerrit-Reviewer: Henning Snater <henning.sna...@wikimedia.de> Gerrit-Reviewer: Jens Ohlig <jens.oh...@wikimedia.de> Gerrit-Reviewer: Jeroen De Dauw <jeroended...@gmail.com> Gerrit-Reviewer: John Erling Blad <jeb...@gmail.com> Gerrit-Reviewer: Lydia Pintscher <lydia.pintsc...@wikimedia.de> Gerrit-Reviewer: Markus Kroetzsch <mar...@semantic-mediawiki.org> Gerrit-Reviewer: Nikola Smolenski <smole...@eunet.rs> Gerrit-Reviewer: Silke Meyer <silke.me...@wikimedia.de> Gerrit-Reviewer: Tobias Gritschacher <tobias.gritschac...@wikimedia.de> Gerrit-Reviewer: jenkins-bot _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits