Mwjames has uploaded a new change for review. https://gerrit.wikimedia.org/r/61248
Change subject: SMW\HooksTests add unit test ...................................................................... SMW\HooksTests add unit test + Simplified wikipage creation/clean-up (borrowed from WikiPageTest) + Add testOnArticlePurge() + Add testOnTitleMoveComplete() + Add some @codeCoverageIgnoreEnd where tests deemed unnecessary Change-Id: Ie7db33c976d0c189f698d8302bdb2c1f65a3d9b0 --- M SemanticMediaWiki.hooks.php M tests/phpunit/includes/HooksTest.php 2 files changed, 159 insertions(+), 28 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/SemanticMediaWiki refs/changes/48/61248/1 diff --git a/SemanticMediaWiki.hooks.php b/SemanticMediaWiki.hooks.php index 27afa39..72ece68 100644 --- a/SemanticMediaWiki.hooks.php +++ b/SemanticMediaWiki.hooks.php @@ -24,9 +24,11 @@ * @return boolean */ public static function onSchemaUpdate( DatabaseUpdater $updater = null ) { + // @codeCoverageIgnoreStart $updater->addExtensionUpdate( array( 'SMWStore::setupStore' ) ); return true; + // @codeCoverageIgnoreEnd } /** @@ -37,8 +39,11 @@ * @return boolean */ public static function onPageSchemasRegistration() { + // @codeCoverageIgnoreStart $GLOBALS['wgPageSchemasHandlerClasses'][] = 'SMWPageSchemas'; + return true; + // @codeCoverageIgnoreEnd } /** @@ -51,6 +56,7 @@ * @return boolean */ public static function addToAdminLinks( ALTree &$admin_links_tree ) { + // @codeCoverageIgnoreStart $data_structure_section = new ALSection( wfMessage( 'smw_adminlinks_datastructure' )->text() ); $smw_row = new ALRow( 'smw' ); @@ -89,6 +95,7 @@ $browse_search_section->addRow( $smw_row ); return true; + // @codeCoverageIgnoreEnd } @@ -132,6 +139,7 @@ $parser->setFunctionHook( 'set', array( 'SMW\SetParserFunction', 'render' ) ); $parser->setFunctionHook( 'set_recurring_event', array( 'SMW\RecurringEventsParserFunction', 'render' ) ); $parser->setFunctionHook( 'declare', array( 'SMW\DeclareParserFunction', 'render' ), SFH_OBJECT_ARGS ); + return true; } @@ -145,8 +153,10 @@ * @return boolean */ public static function addSemanticExtensionType( array &$aExtensionTypes ) { + // @codeCoverageIgnoreStart $aExtensionTypes = array_merge( array( 'semantic' => wfMessage( 'version-semantic' )->text() ), $aExtensionTypes ); return true; + // @codeCoverageIgnoreEnd } /** @@ -159,12 +169,14 @@ * @return boolean */ public static function onParserTestTables( array &$tables ) { + // @codeCoverageIgnoreStart $tables = array_merge( $tables, smwfGetStore()->getParserTestTables() ); return true; + // @codeCoverageIgnoreEnd } /** @@ -180,7 +192,7 @@ * @return boolean */ public static function showBrowseLink( $skintemplate ) { - + // @codeCoverageIgnoreStart if ( $skintemplate->data['isarticle'] ) { $browselink = SMWInfolink::newBrowsingLink( wfMessage( 'smw_browselink' )->text(), $skintemplate->data['titleprefixeddbkey'], false ); @@ -188,6 +200,7 @@ } return true; + // @codeCoverageIgnoreEnd } /** @@ -202,7 +215,7 @@ * @return boolean */ public static function onSkinTemplateNavigation( SkinTemplate &$skinTemplate, array &$links ) { - + // @codeCoverageIgnoreStart if ( $skinTemplate->getUser()->isAllowed( 'purge' ) ) { $links['actions']['purge'] = array( 'class' => false, @@ -212,6 +225,7 @@ } return true; + // @codeCoverageIgnoreEnd } /** @@ -495,6 +509,7 @@ public static function onLinksUpdateConstructed( $linksUpdate ) { $parserData = new SMW\ParserData( $linksUpdate->getTitle(), $linksUpdate->getParserOutput() ); $parserData->updateStore(); + return true; } @@ -518,6 +533,7 @@ */ public static function onArticleDelete( &$wikiPage, &$user, &$reason, &$error ) { smwfGetStore()->deleteSubject( $wikiPage->getTitle() ); + return true; } @@ -568,8 +584,8 @@ 'smw:autorefresh:' . $newTitle->getPrefixedDBkey(), $GLOBALS['smwgAutoRefreshOnPageMove'] ); - smwfGetStore()->changeTitle( $oldTitle, $newTitle, $oldId, $newId ); + return true; } @@ -611,6 +627,7 @@ $parserData = new SMW\ParserData( $wikiPage->getTitle(), $parserOutput, $options ); $parserData->addSpecialProperties( $wikiPage, $revision, $user ); + return true; } @@ -647,6 +664,7 @@ $settings ); $processor->parse( $text ); + return true; } } diff --git a/tests/phpunit/includes/HooksTest.php b/tests/phpunit/includes/HooksTest.php index 2567423..c6c5703 100644 --- a/tests/phpunit/includes/HooksTest.php +++ b/tests/phpunit/includes/HooksTest.php @@ -9,6 +9,7 @@ use ParserOutput; use Parser; use LinksUpdate; +use ObjectCache; /** * Tests for the SMW\Hooks class @@ -67,6 +68,42 @@ } /** + * General set-up initializing cache and page array + * + * @since 1.9 + */ + protected function setUp() { + parent::setUp(); + + // Store pages created during testing + $this->wikiPagesToDelete = array(); + + // Initialize the cache test instance (HashBagOStuff) + ObjectCache::$instances[ $GLOBALS['smwgCacheType'] ] = new \HashBagOStuff; + } + + /** + * Clean-up and remove potential stored objects + * + * @since 1.9 + */ + protected function tearDown() { + foreach ( $this->wikiPagesToDelete as $p ) { + /* @var $p WikiPage */ + + try { + if ( $p->exists() ) { + $p->doDeleteArticle( "testing done." ); + smwfGetStore()->deleteSubject( $p->getTitle() ); + } + } catch ( MWException $ex ) { + // fail silently + } + } + parent::tearDown(); + } + + /** * Helper method to normalize a path * * @since 1.9 @@ -98,7 +135,20 @@ * @return Title */ private function getTitle(){ - return Title::newFromText( $this->getRandomString() ); + return Title::newFromText( $this->getRandomString(), NS_MAIN ); + } + + /** + * Create new wikipage + * + * @since 1.9 + * + * @return WikiPage + */ + protected function newPage( Title $title = null ) { + $wikiPage = new WikiPage( $title === null ? $this->getTitle() : $title ); + $this->wikiPagesToDelete[] = $wikiPage; + return $wikiPage; } /** @@ -109,7 +159,7 @@ * @return User */ private function getUser() { - return User::newFromName( $this->getRandomString() ); + return new MockSuperUser(); } /** @@ -145,13 +195,12 @@ private function getParser() { global $wgContLang, $wgParserConf; - $title = $this->getTitle(); + $wikiPage = $this->newPage(); $user = $this->getUser(); - $wikiPage = new WikiPage( $title ); $parserOptions = $wikiPage->makeParserOptions( $user ); $parser = new Parser( $wgParserConf ); - $parser->setTitle( $title ); + $parser->setTitle( $wikiPage->getTitle() ); $parser->setUser( $user ); $parser->Options( $parserOptions ); $parser->clearState(); @@ -165,13 +214,13 @@ */ public function testOnArticleFromTitle() { $title = Title::newFromText( 'Property', SMW_NS_PROPERTY ); - $wikiPage = new WikiPage( $title ); + $wikiPage = $this->newPage( $title ); $result = SMWHooks::onArticleFromTitle( $title, $wikiPage ); $this->assertTrue( $result ); $title = Title::newFromText( 'Concepts', SMW_NS_CONCEPT ); - $wikiPage = new WikiPage( $title ); + $wikiPage = $this->newPage( $title ); $result = SMWHooks::onArticleFromTitle( $title, $wikiPage ); $this->assertTrue( $result ); @@ -184,8 +233,8 @@ */ public function testOnParserFirstCallInit() { $parser = $this->getParser(); - $result = SMWHooks::onParserFirstCallInit( $parser ); + $result = SMWHooks::onParserFirstCallInit( $parser ); $this->assertTrue( $result ); } @@ -196,8 +245,8 @@ */ public function testOnSpecialStatsAddExtra() { $extraStats = array(); - $result = SMWHooks::onSpecialStatsAddExtra( $extraStats ); + $result = SMWHooks::onSpecialStatsAddExtra( $extraStats ); $this->assertTrue( $result ); } @@ -211,11 +260,11 @@ */ public function testOnParserAfterTidy( $text ) { $parser = $this->getParser(); + $result = SMWHooks::onParserAfterTidy( $parser, $text ); - $this->assertTrue( $result ); } @@ -227,8 +276,8 @@ public function testOnLinksUpdateConstructed() { list( $title, $parserOutput ) = $this->makeTitleAndParserOutput(); $update = new LinksUpdate( $title, $parserOutput ); - $result = SMWHooks::onLinksUpdateConstructed( $update ); + $result = SMWHooks::onLinksUpdateConstructed( $update ); $this->assertTrue( $result ); } @@ -240,9 +289,8 @@ public function testOnArticleDelete() { if ( method_exists( 'WikiPage', 'doEditContent' ) ) { - $title = $this->getTitle(); + $wikiPage = $this->newPage(); $user = $this->getUser(); - $wikiPage = new WikiPage( $title ); $revision = $wikiPage->getRevision(); $reason = ''; $error = ''; @@ -253,8 +301,8 @@ $reason, $error ); - $this->assertTrue( $result ); + } else { $this->markTestSkipped( 'Skipped test due to missing method (probably MW 1.19 or lower).' @@ -273,13 +321,12 @@ public function testOnNewRevisionFromEditComplete( $text ) { if ( method_exists( 'WikiPage', 'doEditContent' ) ) { - $title = $this->getTitle(); + $wikiPage = $this->newPage(); $user = $this->getUser(); - $wikiPage = new WikiPage( $title ); $content = \ContentHandler::makeContent( $text, - $title, + $wikiPage->getTitle(), CONTENT_MODEL_WIKITEXT ); @@ -293,13 +340,8 @@ $wikiPage->getId(), $user ); - - // Always make sure the clean-up - if ( $wikiPage->exists() ) { - $wikiPage->doDeleteArticle( "testing done." ); - } - $this->assertTrue( $result ); + } else { $this->markTestSkipped( 'Skipped test due to missing method (probably MW 1.19 or lower).' @@ -320,7 +362,6 @@ $result = SMWHooks::onSkinTemplateNavigation( $skinTemplate, $links ); $this->assertTrue( $result ); } - /** * @test SMWHooks::onResourceLoaderGetConfigVars @@ -400,8 +441,80 @@ */ public function testOnInternalParseBeforeLinks( $text ) { $parser = $this->getParser(); - $result = SMWHooks::onInternalParseBeforeLinks( $parser, $text ); + $result = SMWHooks::onInternalParseBeforeLinks( $parser, $text ); $this->assertTrue( $result ); } + + /** + * @test SMWHooks::onGetPreferences + * + * @since 1.9 + */ + public function testOnGetPreferences() { + $preferences = array(); + + $result = SMWHooks::onGetPreferences( $this->getUser(), $preferences ); + $this->assertTrue( $result ); + } + + /** + * @test SMWHooks::onArticlePurge + * + * @since 1.9 + */ + public function testOnArticlePurge() { + if ( method_exists( 'WikiPage', 'doEditContent' ) ) { + + $wikiPage = $this->newPage(); + + $user = $this->getUser(); + + $content = \ContentHandler::makeContent( + 'testing', + $wikiPage->getTitle(), + CONTENT_MODEL_WIKITEXT + ); + $wikiPage->doEditContent( $content, "testing", EDIT_NEW, false, $user ); + + $result = SMWHooks::onArticlePurge( $wikiPage ); + $this->assertTrue( $result ); + + } else { + $this->markTestSkipped( + 'Skipped test due to missing method (probably MW 1.19 or lower).' + ); + } + } + + /** + * @test SMWHooks::onTitleMoveComplete + * + * @since 1.9 + */ + public function testOnTitleMoveComplete() { + if ( method_exists( 'WikiPage', 'doEditContent' ) ) { + $wikiPage = $this->newPage(); + $user = $this->getUser(); + + $title = $wikiPage->getTitle(); + $newTitle = $this->getTitle(); + $pageid = $wikiPage->getId(); + + $content = \ContentHandler::makeContent( + 'testing', + $title, + CONTENT_MODEL_WIKITEXT + ); + $wikiPage->doEditContent( $content, "testing", EDIT_NEW, false, $user ); + + $result = SMWHooks::onTitleMoveComplete( $title, $newTitle, $user, $pageid, $pageid ); + $this->assertTrue( true ); + + } else { + $this->markTestSkipped( + 'Skipped test due to missing method (probably MW 1.19 or lower).' + ); + } + } } -- To view, visit https://gerrit.wikimedia.org/r/61248 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ie7db33c976d0c189f698d8302bdb2c1f65a3d9b0 Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/extensions/SemanticMediaWiki Gerrit-Branch: master Gerrit-Owner: Mwjames <jamesin.hongkon...@gmail.com> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits