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

Reply via email to