diff options
Diffstat (limited to 'www/wiki/extensions/SemanticMediaWiki/tests/phpunit/Unit/MediaWiki/Hooks/HookRegistryTest.php')
-rw-r--r-- | www/wiki/extensions/SemanticMediaWiki/tests/phpunit/Unit/MediaWiki/Hooks/HookRegistryTest.php | 1733 |
1 files changed, 1733 insertions, 0 deletions
diff --git a/www/wiki/extensions/SemanticMediaWiki/tests/phpunit/Unit/MediaWiki/Hooks/HookRegistryTest.php b/www/wiki/extensions/SemanticMediaWiki/tests/phpunit/Unit/MediaWiki/Hooks/HookRegistryTest.php new file mode 100644 index 00000000..889d03b0 --- /dev/null +++ b/www/wiki/extensions/SemanticMediaWiki/tests/phpunit/Unit/MediaWiki/Hooks/HookRegistryTest.php @@ -0,0 +1,1733 @@ +<?php + +namespace SMW\Tests\MediaWiki\Hooks; + +use SMW\DIProperty; +use SMW\DIWikiPage; +use SMW\MediaWiki\Hooks\HookRegistry; +use SMW\Tests\TestEnvironment; +use Title; + +/** + * @covers \SMW\MediaWiki\Hooks\HookRegistry + * @group semantic-mediawiki + * @group medium + * + * @license GNU GPL v2+ + * @since 2.1 + * + * @author mwjames + */ +class HookRegistryTest extends \PHPUnit_Framework_TestCase { + + private $parser; + private $title; + private $outputPage; + private $requestContext; + private $skin; + private $store; + private $testEnvironment; + + /** + * Has a static signature on purpose! + * + * @var array + */ + private static $handlers = []; + + protected function setUp() { + + $this->testEnvironment = new TestEnvironment(); + + $user = $this->getMockBuilder( '\User' ) + ->disableOriginalConstructor() + ->getMock(); + + $this->parser = $this->getMockBuilder( '\Parser' ) + ->disableOriginalConstructor() + ->getMock(); + + $this->title = $this->getMockBuilder( '\Title' ) + ->disableOriginalConstructor() + ->getMock(); + + $this->title->expects( $this->any() ) + ->method( 'getNamespace' ) + ->will( $this->returnValue( NS_MAIN ) ); + + $this->outputPage = $this->getMockBuilder( '\OutputPage' ) + ->disableOriginalConstructor() + ->getMock(); + + $this->outputPage->expects( $this->any() ) + ->method( 'getUser' ) + ->will( $this->returnValue( $user ) ); + + $webRequest = $this->getMockBuilder( '\WebRequest' ) + ->disableOriginalConstructor() + ->getMock(); + + $this->requestContext = $this->getMockBuilder( '\RequestContext' ) + ->disableOriginalConstructor() + ->getMock(); + + $this->requestContext->expects( $this->any() ) + ->method( 'getOutput' ) + ->will( $this->returnValue( $this->outputPage ) ); + + $this->requestContext->expects( $this->any() ) + ->method( 'getRequest' ) + ->will( $this->returnValue( $webRequest ) ); + + $this->skin = $this->getMockBuilder( '\Skin' ) + ->disableOriginalConstructor() + ->getMock(); + + $this->skin->expects( $this->any() ) + ->method( 'getContext' ) + ->will( $this->returnValue( $this->requestContext ) ); + + $this->skin->expects( $this->any() ) + ->method( 'getOutput' ) + ->will( $this->returnValue( $this->outputPage ) ); + + $this->store = $this->getMockBuilder( '\SMW\Store' ) + ->disableOriginalConstructor() + ->getMockForAbstractClass(); + + $contentParser = $this->getMockBuilder( '\SMW\ContentParser' ) + ->disableOriginalConstructor() + ->getMock(); + + $contentParser->expects( $this->any() ) + ->method( 'parse' ) + ->will( $this->returnValue( $this->parser ) ); + + $deferredCallableUpdate = $this->getMockBuilder( '\SMW\DeferredCallableUpdate' ) + ->disableOriginalConstructor() + ->getMock(); + + $this->testEnvironment->registerObject( 'Store', $this->store ); + $this->testEnvironment->registerObject( 'ContentParser', $contentParser ); + $this->testEnvironment->registerObject( 'DeferredCallableUpdate', $deferredCallableUpdate ); + } + + protected function tearDown() { + $this->testEnvironment->tearDown(); + } + + public function testCanConstruct() { + + $vars = []; + + $this->assertInstanceOf( + HookRegistry::class, + new HookRegistry( $vars, 'foo' ) + ); + } + + public function testInitExtension() { + + $vars = []; + + HookRegistry::initExtension( $vars ); + + // CanonicalNamespaces + $callback = end( $vars['wgHooks']['CanonicalNamespaces'] ); + $namespaces = []; + + $this->assertThatHookIsExcutable( + $callback, + [ &$namespaces ] + ); + + // SpecialPage_initList + $callback = end( $vars['wgHooks']['SpecialPage_initList'] ); + $specialPages = []; + + $this->assertThatHookIsExcutable( + $callback, + [ &$specialPages ] + ); + + // ApiMain::moduleManager + $callback = end( $vars['wgHooks']['ApiMain::moduleManager'] ); + + $apiModuleManager = $this->getMockBuilder( '\ApiModuleManager' ) + ->disableOriginalConstructor() + ->getMock(); + + $this->assertThatHookIsExcutable( + $callback, + [ $apiModuleManager ] + ); + } + + /** + * @dataProvider callMethodProvider + */ + public function testRegister( $method ) { + + $language = $this->getMockBuilder( '\Language' ) + ->disableOriginalConstructor() + ->getMock(); + + $vars = [ + 'IP' => 'bar', + 'wgVersion' => '1.24', + 'wgLang' => $language, + 'smwgEnabledDeferredUpdate' => false + ]; + + $instance = new HookRegistry( $vars, 'foo' ); + $instance->register(); + + self::$handlers[] = call_user_func_array( [ $this, $method ], [ $instance ] ); + } + + /** + * @depends testRegister + */ + public function testCheckOnMissingHandlers() { + + $language = $this->getMockBuilder( '\Language' ) + ->disableOriginalConstructor() + ->getMock(); + + $vars = [ + 'IP' => 'bar', + 'wgVersion' => '1.24', + 'wgLang' => $language, + 'smwgEnabledDeferredUpdate' => false + ]; + + $instance = new HookRegistry( $vars, 'foo' ); + $instance->register(); + + $handlerList = $instance->getHandlerList(); + $handlers = array_flip( self::$handlers ); + + foreach ( $handlerList as $handler ) { + $this->assertArrayHasKey( $handler, $handlers, "Missing a `$handler` test!" ); + } + + self::$handlers = []; + } + + public function callMethodProvider() { + + return [ + [ 'callParserAfterTidy' ], + [ 'callBaseTemplateToolbox' ], + [ 'callSkinAfterContent' ], + [ 'callOutputPageParserOutput' ], + [ 'callBeforePageDisplay' ], + [ 'callSpecialSearchResultsPrepend' ], + [ 'callSpecialSearchProfiles' ], + [ 'callSpecialSearchProfileForm' ], + [ 'callInternalParseBeforeLinks' ], + [ 'callNewRevisionFromEditComplete' ], + [ 'callTitleMoveComplete' ], + [ 'callArticleProtectComplete' ], + [ 'callArticleViewHeader' ], + [ 'callArticlePurge' ], + [ 'callArticleDelete' ], + [ 'callLinksUpdateConstructed' ], + [ 'callSpecialStatsAddExtra' ], + [ 'callFileUpload' ], + [ 'callResourceLoaderGetConfigVars' ], + [ 'callGetPreferences' ], + [ 'callPersonalUrls' ], + [ 'callSkinTemplateNavigation' ], + [ 'callLoadExtensionSchemaUpdates' ], + [ 'callResourceLoaderTestModules' ], + [ 'callExtensionTypes' ], + [ 'callTitleIsAlwaysKnown' ], + [ 'callBeforeDisplayNoArticleText' ], + [ 'callArticleFromTitle' ], + [ 'callTitleIsMovable' ], + [ 'callContentHandlerForModelID' ], + [ 'callEditPageForm' ], + [ 'callParserOptionsRegister' ], + [ 'callParserFirstCallInit' ], + [ 'callTitleQuickPermissions' ], + [ 'callOutputPageCheckLastModified' ], + [ 'callIsFileCacheable' ], + [ 'callRejectParserCacheValue' ], + [ 'callSoftwareInfo' ], + [ 'callBlockIpComplete' ], + [ 'callUnblockUserComplete' ], + [ 'callUserGroupsChanged' ], + [ 'callSMWSQLStoreEntityReferenceCleanUpComplete' ], + [ 'callSMWAdminTaskHandlerFactory' ], + [ 'callSMWSQLStorAfterDataUpdateComplete' ], + [ 'callSMWStoreBeforeQueryResultLookupComplete' ], + [ 'callSMWStoreAfterQueryResultLookupComplete' ], + [ 'callSMWBrowseAfterIncomingPropertiesLookupComplete' ], + [ 'callSMWBrowseBeforeIncomingPropertyValuesFurtherLinkCreate' ], + [ 'callSMWSQLStoreInstallerAfterCreateTablesComplete' ], + ]; + } + + public function callParserAfterTidy( $instance ) { + + $handler = 'ParserAfterTidy'; + + $this->title->expects( $this->any() ) + ->method( 'isSpecialPage' ) + ->will( $this->returnValue( true ) ); + + $this->parser->expects( $this->any() ) + ->method( 'getTitle' ) + ->will( $this->returnValue( $this->title ) ); + + $text = ''; + + $this->assertTrue( + $instance->isRegistered( $handler ) + ); + + $this->assertThatHookIsExcutable( + $instance->getHandlerFor( $handler ), + [ &$this->parser, &$text ] + ); + + return $handler; + } + + public function callBaseTemplateToolbox( $instance ) { + + $handler = 'BaseTemplateToolbox'; + + $this->title->expects( $this->any() ) + ->method( 'isSpecialPage' ) + ->will( $this->returnValue( true ) ); + + $this->skin->expects( $this->any() ) + ->method( 'getTitle' ) + ->will( $this->returnValue( $this->title ) ); + + $skinTemplate = $this->getMockBuilder( '\SkinTemplate' ) + ->disableOriginalConstructor() + ->getMock(); + + $skinTemplate->expects( $this->any() ) + ->method( 'getSkin' ) + ->will( $this->returnValue( $this->skin ) ); + + $toolbox = ''; + + $this->assertTrue( + $instance->isRegistered( $handler ) + ); + + $this->assertThatHookIsExcutable( + $instance->getHandlerFor( $handler ), + [ $skinTemplate, &$toolbox ] + ); + + return $handler; + } + + public function callSkinAfterContent( $instance ) { + + $handler = 'SkinAfterContent'; + + $this->title->expects( $this->any() ) + ->method( 'isSpecialPage' ) + ->will( $this->returnValue( true ) ); + + $this->skin->expects( $this->any() ) + ->method( 'getTitle' ) + ->will( $this->returnValue( $this->title ) ); + + $data = ''; + + $this->assertTrue( + $instance->isRegistered( $handler ) + ); + + $this->assertThatHookIsExcutable( + $instance->getHandlerFor( $handler ), + [ &$data, $this->skin ] + ); + + return $handler; + } + + public function callOutputPageParserOutput( $instance ) { + + $handler = 'OutputPageParserOutput'; + + $parserOutput = $this->getMockBuilder( '\ParserOutput' ) + ->disableOriginalConstructor() + ->getMock(); + + $this->title->expects( $this->any() ) + ->method( 'isSpecialPage' ) + ->will( $this->returnValue( true ) ); + + $this->outputPage->expects( $this->any() ) + ->method( 'getTitle' ) + ->will( $this->returnValue( $this->title ) ); + + $this->assertTrue( + $instance->isRegistered( $handler ) + ); + + $this->assertThatHookIsExcutable( + $instance->getHandlerFor( $handler ), + [ &$this->outputPage, $parserOutput ] + ); + + return $handler; + } + + public function callBeforePageDisplay( $instance ) { + + $handler = 'BeforePageDisplay'; + + $this->title->expects( $this->any() ) + ->method( 'isSpecialPage' ) + ->will( $this->returnValue( true ) ); + + $this->outputPage->expects( $this->any() ) + ->method( 'getTitle' ) + ->will( $this->returnValue( $this->title ) ); + + $this->assertTrue( + $instance->isRegistered( $handler ) + ); + + $this->assertThatHookIsExcutable( + $instance->getHandlerFor( $handler ), + [ &$this->outputPage, &$this->skin ] + ); + + return $handler; + } + + public function callSpecialSearchResultsPrepend( $instance ) { + + $handler = 'SpecialSearchResultsPrepend'; + + $specialSearch = $this->getMockBuilder( '\SpecialSearch' ) + ->disableOriginalConstructor() + ->getMock(); + + $this->assertTrue( + $instance->isRegistered( $handler ) + ); + + $this->assertThatHookIsExcutable( + $instance->getHandlerFor( $handler ), + [ $specialSearch, $this->outputPage, '' ] + ); + + return $handler; + } + + public function callSpecialSearchProfiles( $instance ) { + + $handler = 'SpecialSearchProfiles'; + + $this->assertTrue( + $instance->isRegistered( $handler ) + ); + + $profiles = []; + + $this->assertThatHookIsExcutable( + $instance->getHandlerFor( $handler ), + [ &$profiles ] + ); + + return $handler; + } + + public function callSpecialSearchProfileForm( $instance ) { + + $handler = 'SpecialSearchProfileForm'; + + $this->store->expects( $this->any() ) + ->method( 'getPropertySubjects' ) + ->will( $this->returnValue( [] ) ); + + $user = $this->getMockBuilder( '\User' ) + ->disableOriginalConstructor() + ->getMock(); + + $searchEngine = $this->getMockBuilder( '\SMW\MediaWiki\Search\Search' ) + ->disableOriginalConstructor() + ->getMock(); + + $searchEngine->expects( $this->any() ) + ->method( 'getErrors' ) + ->will( $this->returnValue( [] ) ); + + $specialSearch = $this->getMockBuilder( '\SpecialSearch' ) + ->disableOriginalConstructor() + ->getMock(); + + $specialSearch->expects( $this->any() ) + ->method( 'getSearchEngine' ) + ->will( $this->returnValue( $searchEngine ) ); + + $specialSearch->expects( $this->any() ) + ->method( 'getUser' ) + ->will( $this->returnValue( $user ) ); + + $specialSearch->expects( $this->any() ) + ->method( 'getNamespaces' ) + ->will( $this->returnValue( [] ) ); + + $specialSearch->expects( $this->any() ) + ->method( 'getContext' ) + ->will( $this->returnValue( $this->requestContext ) ); + + $this->assertTrue( + $instance->isRegistered( $handler ) + ); + + $form = ''; + $profile = 'smw'; + $term = ''; + $opts = []; + + $this->assertThatHookIsExcutable( + $instance->getHandlerFor( $handler ), + [ $specialSearch, &$form, $profile, $term, $opts ] + ); + + return $handler; + } + + public function callInternalParseBeforeLinks( $instance ) { + + $handler = 'InternalParseBeforeLinks'; + + $this->title->expects( $this->any() ) + ->method( 'isSpecialPage' ) + ->will( $this->returnValue( true ) ); + + $parser = $this->getMockBuilder( '\Parser' ) + ->disableOriginalConstructor() + ->getMock(); + + $parser->expects( $this->any() ) + ->method( 'getTitle' ) + ->will( $this->returnValue( $this->title ) ); + + $stripState = $this->getMockBuilder( '\StripState' ) + ->disableOriginalConstructor() + ->getMock(); + + $text = ''; + + $this->assertTrue( + $instance->isRegistered( $handler ) + ); + + $this->assertThatHookIsExcutable( + $instance->getHandlerFor( $handler ), + [ &$parser, &$text, &$stripState ] + ); + + return $handler; + } + + public function callNewRevisionFromEditComplete( $instance ) { + + $handler = 'NewRevisionFromEditComplete'; + + $contentHandler = $this->getMockBuilder( '\ContentHandler' ) + ->disableOriginalConstructor() + ->getMock(); + + $content = $this->getMockBuilder( '\Content' ) + ->disableOriginalConstructor() + ->getMock(); + + $content->expects( $this->any() ) + ->method( 'getContentHandler' ) + ->will( $this->returnValue( $contentHandler ) ); + + $title = $this->getMockBuilder( '\Title' ) + ->disableOriginalConstructor() + ->getMock(); + + $wikiPage = $this->getMockBuilder( '\WikiPage' ) + ->disableOriginalConstructor() + ->getMock(); + + $wikiPage->expects( $this->any() ) + ->method( 'getTitle' ) + ->will( $this->returnValue( $title ) ); + + $revision = $this->getMockBuilder( '\Revision' ) + ->disableOriginalConstructor() + ->getMock(); + + $revision->expects( $this->any() ) + ->method( 'getContent' ) + ->will( $this->returnValue( $content ) ); + + $user = $this->getMockBuilder( '\User' ) + ->disableOriginalConstructor() + ->getMock(); + + $baseId = ''; + + $this->assertTrue( + $instance->isRegistered( $handler ) + ); + + $this->assertThatHookIsExcutable( + $instance->getHandlerFor( $handler ), + [ $wikiPage, $revision, $baseId, $user ] + ); + + return $handler; + } + + public function callTitleMoveComplete( $instance ) { + + $handler = 'TitleMoveComplete'; + + $store = $this->getMockBuilder( '\SMW\SQLStore\SQLStore' ) + ->disableOriginalConstructor() + ->setMethods( [ 'deleteSubject' ] ) + ->getMock(); + + $this->testEnvironment->registerObject( 'Store', $store ); + + $oldTitle = $this->getMockBuilder( '\Title' ) + ->disableOriginalConstructor() + ->getMock(); + + $oldTitle->expects( $this->any() ) + ->method( 'getNamespace' ) + ->will( $this->returnValue( NS_SPECIAL ) ); + + $oldTitle->expects( $this->any() ) + ->method( 'isSpecialPage' ) + ->will( $this->returnValue( true ) ); + + $newTitle = $this->getMockBuilder( '\Title' ) + ->disableOriginalConstructor() + ->getMock(); + + $newTitle->expects( $this->any() ) + ->method( 'getNamespace' ) + ->will( $this->returnValue( NS_SPECIAL ) ); + + $user = $this->getMockBuilder( '\User' ) + ->disableOriginalConstructor() + ->getMock(); + + $oldId = 42; + $newId = 0; + + $this->assertTrue( + $instance->isRegistered( $handler ) + ); + + $this->assertThatHookIsExcutable( + $instance->getHandlerFor( $handler ), + [ &$oldTitle, &$newTitle, &$user, $oldId, $newId ] + ); + + $this->testEnvironment->registerObject( 'Store', $this->store ); + return $handler; + } + + public function callArticleProtectComplete( $instance ) { + + $handler = 'ArticleProtectComplete'; + + $contentHandler = $this->getMockBuilder( '\ContentHandler' ) + ->disableOriginalConstructor() + ->getMock(); + + $content = $this->getMockBuilder( '\Content' ) + ->disableOriginalConstructor() + ->getMock(); + + $content->expects( $this->any() ) + ->method( 'getContentHandler' ) + ->will( $this->returnValue( $contentHandler ) ); + + $revision = $this->getMockBuilder( '\Revision' ) + ->disableOriginalConstructor() + ->getMock(); + + $revision->expects( $this->any() ) + ->method( 'getContent' ) + ->will( $this->returnValue( $content ) ); + + $wikiPage = $this->getMockBuilder( '\WikiPage' ) + ->disableOriginalConstructor() + ->getMock(); + + $wikiPage->expects( $this->any() ) + ->method( 'getRevision' ) + ->will( $this->returnValue( $revision ) ); + + $wikiPage->expects( $this->any() ) + ->method( 'getTitle' ) + ->will( $this->returnValue( $this->title ) ); + + $user = $this->getMockBuilder( '\User' ) + ->disableOriginalConstructor() + ->getMock(); + + $protections = []; + $reason = ''; + + $this->assertTrue( + $instance->isRegistered( $handler ) + ); + + $this->assertThatHookIsExcutable( + $instance->getHandlerFor( $handler ), + [ &$wikiPage, &$user, $protections, $reason ] + ); + + return $handler; + } + + public function callArticleViewHeader( $instance ) { + + $handler = 'ArticleViewHeader'; + + $page = $this->getMockBuilder( '\WikiPage' ) + ->disableOriginalConstructor() + ->getMock(); + + $page->expects( $this->any() ) + ->method( 'getTitle' ) + ->will( $this->returnValue( $this->title ) ); + + $outputDone = ''; + $useParserCache = ''; + + $this->assertTrue( + $instance->isRegistered( $handler ) + ); + + $this->assertThatHookIsExcutable( + $instance->getHandlerFor( $handler ), + [ &$page, &$outputDone, &$useParserCache ] + ); + + return $handler; + } + + public function callArticlePurge( $instance ) { + + $handler = 'ArticlePurge'; + + $wikiPage = $this->getMockBuilder( '\WikiPage' ) + ->disableOriginalConstructor() + ->getMock(); + + $wikiPage->expects( $this->any() ) + ->method( 'getTitle' ) + ->will( $this->returnValue( $this->title ) ); + + $this->assertTrue( + $instance->isRegistered( $handler ) + ); + + $this->assertThatHookIsExcutable( + $instance->getHandlerFor( $handler ), + [ &$wikiPage ] + ); + + return $handler; + } + + public function callArticleDelete( $instance ) { + + $handler = 'ArticleDelete'; + + $semanticData = $this->getMockBuilder( '\SMW\SemanticData' ) + ->disableOriginalConstructor() + ->getMock(); + + $semanticData->expects( $this->any() ) + ->method( 'getSubject' ) + ->will( $this->returnValue( DIWikiPage::newFromText( __METHOD__ ) ) ); + + $semanticData->expects( $this->any() ) + ->method( 'getProperties' ) + ->will( $this->returnValue( [] ) ); + + $semanticData->expects( $this->any() ) + ->method( 'getSubSemanticData' ) + ->will( $this->returnValue( [] ) ); + + $this->store->expects( $this->any() ) + ->method( 'getSemanticData' ) + ->will( $this->returnValue( $semanticData ) ); + + $this->title->expects( $this->any() ) + ->method( 'getDBKey' ) + ->will( $this->returnValue( 'Foo' ) ); + + $this->title->expects( $this->any() ) + ->method( 'getNamespace' ) + ->will( $this->returnValue( NS_MAIN ) ); + + $wikiPage = $this->getMockBuilder( '\WikiPage' ) + ->disableOriginalConstructor() + ->getMock(); + + $wikiPage->expects( $this->any() ) + ->method( 'getTitle' ) + ->will( $this->returnValue( $this->title ) ); + + $user = $this->getMockBuilder( '\User' ) + ->disableOriginalConstructor() + ->getMock(); + + $reason = ''; + $error = ''; + + $this->assertTrue( + $instance->isRegistered( $handler ) + ); + + $this->assertThatHookIsExcutable( + $instance->getHandlerFor( $handler ), + [ &$wikiPage, &$user, &$reason, &$error ] + ); + + return $handler; + } + + public function callLinksUpdateConstructed( $instance ) { + + $handler = 'LinksUpdateConstructed'; + + $idTable = $this->getMockBuilder( '\stdClass' ) + ->setMethods( [ 'exists' ] ) + ->getMock(); + + $store = $this->getMockBuilder( '\SMW\SQLStore\SQLStore' ) + ->disableOriginalConstructor() + ->setMethods( [ 'getObjectIds', 'updateData' ] ) + ->getMock(); + + $store->expects( $this->any() ) + ->method( 'getObjectIds' ) + ->will( $this->returnValue( $idTable ) ); + + $store->getOptions()->set( 'smwgSemanticsEnabled', false ); + + $this->testEnvironment->registerObject( 'Store', $store ); + + $parserOutput = $this->getMockBuilder( '\ParserOutput' ) + ->disableOriginalConstructor() + ->getMock(); + + $this->title->expects( $this->any() ) + ->method( 'getNamespace' ) + ->will( $this->returnValue( NS_SPECIAL ) ); + + $linksUpdate = $this->getMockBuilder( '\LinksUpdate' ) + ->disableOriginalConstructor() + ->getMock(); + + $linksUpdate->expects( $this->any() ) + ->method( 'getTitle' ) + ->will( $this->returnValue( $this->title ) ); + + $linksUpdate->expects( $this->any() ) + ->method( 'getParserOutput' ) + ->will( $this->returnValue( $parserOutput ) ); + + $this->assertTrue( + $instance->isRegistered( $handler ) + ); + + $this->assertThatHookIsExcutable( + $instance->getHandlerFor( $handler ), + [ $linksUpdate ] + ); + + $this->testEnvironment->registerObject( 'Store', $this->store ); + return $handler; + } + + public function callSpecialStatsAddExtra( $instance ) { + + $handler = 'SpecialStatsAddExtra'; + + $extraStats = []; + + $this->assertTrue( + $instance->isRegistered( $handler ) + ); + + $this->assertThatHookIsExcutable( + $instance->getHandlerFor( $handler ), + [ &$extraStats ] + ); + + return $handler; + } + + public function callFileUpload( $instance ) { + + $handler = 'FileUpload'; + + $file = $this->getMockBuilder( '\File' ) + ->disableOriginalConstructor() + ->getMock(); + + $reupload = ''; + + $this->assertTrue( + $instance->isRegistered( $handler ) + ); + + $this->assertThatHookIsExcutable( + $instance->getHandlerFor( $handler ), + [ $file, $reupload ] + ); + + return $handler; + } + + public function callResourceLoaderGetConfigVars( $instance ) { + + $handler = 'ResourceLoaderGetConfigVars'; + + $vars = []; + + $this->assertTrue( + $instance->isRegistered( $handler ) + ); + + $this->assertThatHookIsExcutable( + $instance->getHandlerFor( $handler ), + [ &$vars ] + ); + + return $handler; + } + + public function callGetPreferences( $instance ) { + + $handler = 'GetPreferences'; + + $user = $this->getMockBuilder( '\User' ) + ->disableOriginalConstructor() + ->getMock(); + + $preferences = []; + + $this->assertTrue( + $instance->isRegistered( $handler ) + ); + + $this->assertThatHookIsExcutable( + $instance->getHandlerFor( $handler ), + [ $user, &$preferences ] + ); + + return $handler; + } + + public function callPersonalUrls( $instance ) { + + $handler = 'PersonalUrls'; + + $user = $this->getMockBuilder( '\User' ) + ->disableOriginalConstructor() + ->getMock(); + + $title = $this->getMockBuilder( '\Title' ) + ->disableOriginalConstructor() + ->getMock(); + + $skinTemplate = $this->getMockBuilder( '\SkinTemplate' ) + ->disableOriginalConstructor() + ->getMock(); + + $skinTemplate->expects( $this->any() ) + ->method( 'getUser' ) + ->will( $this->returnValue( $user ) ); + + $personal_urls = []; + + $this->assertTrue( + $instance->isRegistered( $handler ) + ); + + $this->assertThatHookIsExcutable( + $instance->getHandlerFor( $handler ), + [ &$personal_urls, $title, $skinTemplate ] + ); + + return $handler; + } + + public function callSkinTemplateNavigation( $instance ) { + + $handler = 'SkinTemplateNavigation'; + + $user = $this->getMockBuilder( '\User' ) + ->disableOriginalConstructor() + ->getMock(); + + $skinTemplate = $this->getMockBuilder( '\SkinTemplate' ) + ->disableOriginalConstructor() + ->getMock(); + + $skinTemplate->expects( $this->any() ) + ->method( 'getUser' ) + ->will( $this->returnValue( $user ) ); + + $links = []; + + $this->assertTrue( + $instance->isRegistered( $handler ) + ); + + $this->assertThatHookIsExcutable( + $instance->getHandlerFor( $handler ), + [ &$skinTemplate, &$links ] + ); + + return $handler; + } + + public function callLoadExtensionSchemaUpdates( $instance ) { + + $handler = 'LoadExtensionSchemaUpdates'; + + $databaseUpdater = $this->getMockBuilder( '\DatabaseUpdater' ) + ->disableOriginalConstructor() + ->getMockForAbstractClass(); + + $this->assertTrue( + $instance->isRegistered( $handler ) + ); + + $this->assertThatHookIsExcutable( + $instance->getHandlerFor( $handler ), + [ $databaseUpdater ] + ); + + return $handler; + } + + public function callResourceLoaderTestModules( $instance ) { + + $handler = 'ResourceLoaderTestModules'; + + $resourceLoader = $this->getMockBuilder( '\ResourceLoader' ) + ->disableOriginalConstructor() + ->getMock(); + + $testModules = []; + + $this->assertTrue( + $instance->isRegistered( $handler ) + ); + + $this->assertThatHookIsExcutable( + $instance->getHandlerFor( $handler ), + [ &$testModules, &$resourceLoader ] + ); + + return $handler; + } + + public function callExtensionTypes( $instance ) { + + $handler = 'ExtensionTypes'; + + $extTypes = []; + + $this->assertTrue( + $instance->isRegistered( $handler ) + ); + + $this->assertThatHookIsExcutable( + $instance->getHandlerFor( $handler ), + [ &$extTypes ] + ); + + return $handler; + } + + public function callTitleIsAlwaysKnown( $instance ) { + + $handler = 'TitleIsAlwaysKnown'; + + $result = ''; + + $this->assertTrue( + $instance->isRegistered( $handler ) + ); + + $this->assertThatHookIsExcutable( + $instance->getHandlerFor( $handler ), + [ $this->title, &$result ] + ); + + return $handler; + } + + public function callBeforeDisplayNoArticleText( $instance ) { + + $handler = 'BeforeDisplayNoArticleText'; + + $article = $this->getMockBuilder( '\Article' ) + ->disableOriginalConstructor() + ->getMock(); + + $article->expects( $this->any() ) + ->method( 'getTitle' ) + ->will( $this->returnValue( $this->title ) ); + + $this->assertTrue( + $instance->isRegistered( $handler ) + ); + + $this->assertThatHookIsExcutable( + $instance->getHandlerFor( $handler ), + [ $article ] + ); + + return $handler; + } + + public function callArticleFromTitle( $instance ) { + + $handler = 'ArticleFromTitle'; + + $article = $this->getMockBuilder( '\Article' ) + ->disableOriginalConstructor() + ->getMock(); + + $article->expects( $this->any() ) + ->method( 'getTitle' ) + ->will( $this->returnValue( $this->title ) ); + + $this->assertTrue( + $instance->isRegistered( $handler ) + ); + + $this->assertThatHookIsExcutable( + $instance->getHandlerFor( $handler ), + [ &$this->title, &$article ] + ); + + return $handler; + } + + public function callTitleIsMovable( $instance ) { + + $handler = 'TitleIsMovable'; + + $isMovable = ''; + + $this->assertTrue( + $instance->isRegistered( $handler ) + ); + + $this->assertThatHookIsExcutable( + $instance->getHandlerFor( $handler ), + [ $this->title, &$isMovable ] + ); + + return $handler; + } + + public function callContentHandlerForModelID( $instance ) { + + $handler = 'ContentHandlerForModelID'; + + $this->assertTrue( + $instance->isRegistered( $handler ) + ); + + $modelId = 'smw/schema'; + $contentHandler = ''; + + $this->assertThatHookIsExcutable( + $instance->getHandlerFor( $handler ), + [ $modelId, &$contentHandler ] + ); + + return $handler; + } + + public function callEditPageForm( $instance ) { + + $handler = 'EditPage::showEditForm:initial'; + + $title = Title::newFromText( 'Foo' ); + + $user = $this->getMockBuilder( '\User' ) + ->disableOriginalConstructor() + ->getMock(); + + $editPage = $this->getMockBuilder( '\EditPage' ) + ->disableOriginalConstructor() + ->getMock(); + + $editPage->expects( $this->any() ) + ->method( 'getTitle' ) + ->will( $this->returnValue( $title ) ); + + $outputPage = $this->getMockBuilder( '\OutputPage' ) + ->disableOriginalConstructor() + ->getMock(); + + $outputPage->expects( $this->any() ) + ->method( 'getUser' ) + ->will( $this->returnValue( $user ) ); + + $this->assertTrue( + $instance->isRegistered( $handler ) + ); + + $this->assertThatHookIsExcutable( + $instance->getHandlerFor( $handler ), + [ $editPage, $outputPage ] + ); + + return $handler; + } + + public function callParserOptionsRegister( $instance ) { + + $handler = 'ParserOptionsRegister'; + + $this->assertTrue( + $instance->isRegistered( $handler ) + ); + + $defaults = []; + $inCacheKey = []; + + $this->assertThatHookIsExcutable( + $instance->getHandlerFor( $handler ), + [ &$defaults, &$inCacheKey ] + ); + + return $handler; + } + + public function callParserFirstCallInit( $instance ) { + + $handler = 'ParserFirstCallInit'; + + $parser = $this->getMockBuilder( '\Parser' ) + ->disableOriginalConstructor() + ->getMock(); + + $parser->expects( $this->any() ) + ->method( 'getTitle' ) + ->will( $this->returnValue( $this->title ) ); + + $this->assertTrue( + $instance->isRegistered( $handler ) + ); + + $this->assertThatHookIsExcutable( + $instance->getHandlerFor( $handler ), + [ &$parser ] + ); + + return $handler; + } + + public function callTitleQuickPermissions( $instance ) { + + $handler = 'TitleQuickPermissions'; + + $title = $this->title; + + $user = $this->getMockBuilder( '\User' ) + ->disableOriginalConstructor() + ->getMock(); + + $action = ''; + $errors = []; + $rigor = ''; + $short = ''; + + $this->assertTrue( + $instance->isRegistered( $handler ) + ); + + $this->assertThatHookIsExcutable( + $instance->getHandlerFor( $handler ), + [ $title, $user, $action, &$errors, $rigor, $short ] + ); + + return $handler; + } + + public function callOutputPageCheckLastModified( $instance ) { + + $handler = 'OutputPageCheckLastModified'; + $modifiedTimes = []; + + $this->assertTrue( + $instance->isRegistered( $handler ) + ); + + $this->assertThatHookIsExcutable( + $instance->getHandlerFor( $handler ), + [ &$modifiedTimes ] + ); + + return $handler; + } + + public function callIsFileCacheable( $instance ) { + + $handler = 'IsFileCacheable'; + + $article = $this->getMockBuilder( '\Article' ) + ->disableOriginalConstructor() + ->getMock(); + + $article->expects( $this->any() ) + ->method( 'getTitle' ) + ->will( $this->returnValue( $this->title ) ); + + $this->assertTrue( + $instance->isRegistered( $handler ) + ); + + $this->assertThatHookIsExcutable( + $instance->getHandlerFor( $handler ), + [ &$article ] + ); + + return $handler; + } + + public function callRejectParserCacheValue( $instance ) { + + $handler = 'RejectParserCacheValue'; + + $wikiPage = $this->getMockBuilder( '\WikiPage' ) + ->disableOriginalConstructor() + ->getMock(); + + $wikiPage->expects( $this->any() ) + ->method( 'getTitle' ) + ->will( $this->returnValue( $this->title ) ); + + $this->assertTrue( + $instance->isRegistered( $handler ) + ); + + $value = ''; + $popts = ''; + + $this->assertThatHookIsExcutable( + $instance->getHandlerFor( $handler ), + [ $value, $wikiPage, $popts ] + ); + + return $handler; + } + + public function callSoftwareInfo( $instance ) { + + $handler = 'SoftwareInfo'; + + $software = []; + + $this->assertThatHookIsExcutable( + $instance->getHandlerFor( $handler ), + [ &$software ] + ); + + return $handler; + } + + public function callBlockIpComplete( $instance ) { + + $handler = 'BlockIpComplete'; + + $block = $this->getMockBuilder( '\Block' ) + ->disableOriginalConstructor() + ->getMock(); + + $block->expects( $this->any() ) + ->method( 'getTarget' ) + ->will( $this->returnValue( 'Foo' ) ); + + $performer = ''; + $priorBlock = ''; + + $this->assertTrue( + $instance->isRegistered( $handler ) + ); + + $this->assertThatHookIsExcutable( + $instance->getHandlerFor( $handler ), + [ $block, $performer, $priorBlock ] + ); + + return $handler; + } + + public function callUnblockUserComplete( $instance ) { + + $handler = 'UnblockUserComplete'; + + $block = $this->getMockBuilder( '\Block' ) + ->disableOriginalConstructor() + ->getMock(); + + $block->expects( $this->any() ) + ->method( 'getTarget' ) + ->will( $this->returnValue( 'Foo' ) ); + + $performer = ''; + $priorBlock = ''; + + $this->assertTrue( + $instance->isRegistered( $handler ) + ); + + $this->assertThatHookIsExcutable( + $instance->getHandlerFor( $handler ), + [ $block, $performer, $priorBlock ] + ); + + return $handler; + } + + public function callUserGroupsChanged( $instance ) { + + $handler = 'UserGroupsChanged'; + + $user = $this->getMockBuilder( '\User' ) + ->disableOriginalConstructor() + ->getMock(); + + $user->expects( $this->any() ) + ->method( 'getName' ) + ->will( $this->returnValue( 'Foo' ) ); + + $this->assertTrue( + $instance->isRegistered( $handler ) + ); + + $this->assertThatHookIsExcutable( + $instance->getHandlerFor( $handler ), + [ $user ] + ); + + return $handler; + } + + public function callSMWStoreDropTables( $instance ) { + + $handler = 'SMW::Store::dropTables'; + + $verbose = false; + + $this->assertThatHookIsExcutable( + $instance->getHandlerFor( $handler ), + [ $verbose ] + ); + + return $handler; + } + + public function callSMWSQLStoreEntityReferenceCleanUpComplete( $instance ) { + + $handler = 'SMW::SQLStore::EntityReferenceCleanUpComplete'; + + if ( !$instance->getHandlerFor( $handler ) ) { + return $this->markTestSkipped( "$handler not used" ); + } + + $id = 42; + $subject = DIWikiPage::newFromText( __METHOD__ ); + $isRedirect = false; + + $this->assertThatHookIsExcutable( + $instance->getHandlerFor( $handler ), + [ $this->store, $id, $subject, $isRedirect ] + ); + + return $handler; + } + + public function callSMWAdminTaskHandlerFactory( $instance ) { + + $handler = 'SMW::Admin::TaskHandlerFactory'; + + if ( !$instance->getHandlerFor( $handler ) ) { + return $this->markTestSkipped( "$handler not used" ); + } + + $taskHandlers = []; + + $store = $this->getMockBuilder( '\SMW\SQLStore\SQLStore' ) + ->disableOriginalConstructor() + ->getMock(); + + $outputFormatter = $this->getMockBuilder( '\SMW\MediaWiki\Specials\Admin\OutputFormatter' ) + ->disableOriginalConstructor() + ->getMock(); + + $user = $this->getMockBuilder( 'User' ) + ->disableOriginalConstructor() + ->getMock(); + + $this->assertThatHookIsExcutable( + $instance->getHandlerFor( $handler ), + [ &$taskHandlers, $store, $outputFormatter, $user ] + ); + + return $handler; + } + + public function callSMWSQLStorAfterDataUpdateComplete( $instance ) { + + $handler = 'SMW::SQLStore::AfterDataUpdateComplete'; + + $connection = $this->getMockBuilder( '\SMW\MediaWiki\Database' ) + ->disableOriginalConstructor() + ->getMock(); + + $propertyTableInfoFetcher = $this->getMockBuilder( '\SMW\SQLStore\PropertyTableInfoFetcher' ) + ->disableOriginalConstructor() + ->getMock(); + + $store = $this->getMockBuilder( '\SMW\SQLStore\SQLStore' ) + ->disableOriginalConstructor() + ->getMock(); + + $store->expects( $this->any() ) + ->method( 'getPropertyTableInfoFetcher' ) + ->will( $this->returnValue( $propertyTableInfoFetcher ) ); + + $store->expects( $this->any() ) + ->method( 'getConnection' ) + ->will( $this->returnValue( $connection ) ); + + $store->expects( $this->any() ) + ->method( 'getOptions' ) + ->will( $this->returnValue( new \SMW\Options() ) ); + + $semanticData = $this->getMockBuilder( '\SMW\SemanticData' ) + ->disableOriginalConstructor() + ->getMock(); + + $semanticData->expects( $this->any() ) + ->method( 'getSubject' ) + ->will( $this->returnValue( DIWikiPage::newFromText( __METHOD__ ) ) ); + + $changeOp = $this->getMockBuilder( '\SMW\SQLStore\ChangeOp\ChangeOp' ) + ->disableOriginalConstructor() + ->getMock(); + + $changeOp->expects( $this->any() ) + ->method( 'getChangedEntityIdSummaryList' ) + ->will( $this->returnValue( [] ) ); + + $changeOp->expects( $this->any() ) + ->method( 'getOrderedDiffByTable' ) + ->will( $this->returnValue( [] ) ); + + $changeOp->expects( $this->any() ) + ->method( 'getTableChangeOps' ) + ->will( $this->returnValue( [] ) ); + + $changeOp->expects( $this->any() ) + ->method( 'getFixedPropertyRecords' ) + ->will( $this->returnValue( [] ) ); + + $this->assertTrue( + $instance->isRegistered( $handler ) + ); + + $this->assertThatHookIsExcutable( + $instance->getHandlerFor( $handler ), + [ $store, $semanticData, $changeOp ] + ); + + return $handler; + } + + public function callSMWStoreBeforeQueryResultLookupComplete( $instance ) { + + $handler = 'SMW::Store::BeforeQueryResultLookupComplete'; + + $query = $this->getMockBuilder( '\SMWQuery' ) + ->disableOriginalConstructor() + ->getMock(); + + $queryEngine = $this->getMockBuilder( '\SMW\QueryEngine' ) + ->disableOriginalConstructor() + ->getMock(); + + $result = ''; + + $this->assertTrue( + $instance->isRegistered( $handler ) + ); + + $this->assertThatHookIsExcutable( + $instance->getHandlerFor( $handler ), + [ $this->store, $query, &$result, $queryEngine ] + ); + + return $handler; + } + + public function callSMWStoreAfterQueryResultLookupComplete( $instance ) { + + $handler = 'SMW::Store::AfterQueryResultLookupComplete'; + + $idTableLookup = $this->getMockBuilder( '\stdClass' ) + ->setMethods( [ 'warmUpCache' ] ) + ->getMock(); + + $store = $this->getMockBuilder( '\SMW\SQLStore\SQLStore' ) + ->disableOriginalConstructor() + ->setMethods( [ 'getObjectIds', 'getPropertyValues' ] ) + ->getMock(); + + $store->expects( $this->any() ) + ->method( 'getObjectIds' ) + ->will( $this->returnValue( $idTableLookup ) ); + + $result = ''; + + $this->assertTrue( + $instance->isRegistered( $handler ) + ); + + $this->assertThatHookIsExcutable( + $instance->getHandlerFor( $handler ), + [ $store, &$result ] + ); + + return $handler; + } + + public function callSMWBrowseAfterIncomingPropertiesLookupComplete( $instance ) { + + $handler = 'SMW::Browse::AfterIncomingPropertiesLookupComplete'; + + $idTable = $this->getMockBuilder( '\stdClass' ) + ->setMethods( [ 'exists', 'getId' ] ) + ->getMock(); + + $store = $this->getMockBuilder( '\SMW\SQLStore\SQLStore' ) + ->disableOriginalConstructor() + ->setMethods( [ 'getObjectIds', 'getPropertyValues' ] ) + ->getMock(); + + $store->expects( $this->any() ) + ->method( 'getObjectIds' ) + ->will( $this->returnValue( $idTable ) ); + + $store->expects( $this->any() ) + ->method( 'getPropertyValues' ) + ->will( $this->returnValue( [] ) ); + + $semanticData = $this->getMockBuilder( '\SMW\SemanticData' ) + ->disableOriginalConstructor() + ->getMock(); + + $semanticData->expects( $this->any() ) + ->method( 'getSubject' ) + ->will( $this->returnValue( DIWikiPage::newFromText( __METHOD__ ) ) ); + + $requestOptions = $this->getMockBuilder( '\SMW\RequestOptions' ) + ->disableOriginalConstructor() + ->getMock(); + + $requestOptions->expects( $this->any() ) + ->method( 'getExtraConditions' ) + ->will( $this->returnValue( [] ) ); + + $this->assertTrue( + $instance->isRegistered( $handler ) + ); + + $this->assertThatHookIsExcutable( + $instance->getHandlerFor( $handler ), + [ $store, $semanticData, $requestOptions ] + ); + + return $handler; + } + + public function callSMWBrowseBeforeIncomingPropertyValuesFurtherLinkCreate( $instance ) { + + $handler = 'SMW::Browse::BeforeIncomingPropertyValuesFurtherLinkCreate'; + + $html = ''; + $property = new DIProperty( 'Foo' ); + $subject = DIWikiPage::newFromText( __METHOD__ ); + + $this->assertTrue( + $instance->isRegistered( $handler ) + ); + + $this->assertThatHookIsExcutable( + $instance->getHandlerFor( $handler ), + [ $property, $subject, &$html, $this->store ] + ); + + return $handler; + } + + public function callSMWSQLStoreInstallerAfterCreateTablesComplete( $instance ) { + + $handler = 'SMW::SQLStore::Installer::AfterCreateTablesComplete'; + + $result = ''; + + $this->assertTrue( + $instance->isRegistered( $handler ) + ); + + $tableBuilder = $this->getMockBuilder( '\SMW\SQLStore\TableBuilder' ) + ->disableOriginalConstructor() + ->getMock(); + + $messageReporter = $this->getMockBuilder( '\Onoi\MessageReporter\MessageReporter' ) + ->disableOriginalConstructor() + ->getMock(); + + $options = $this->getMockBuilder( '\SMW\Options' ) + ->disableOriginalConstructor() + ->getMock(); + + $this->assertThatHookIsExcutable( + $instance->getHandlerFor( $handler ), + [ $tableBuilder, $messageReporter, $options ] + ); + + return $handler; + } + + private function assertThatHookIsExcutable( callable $handler, $arguments ) { + $this->assertInternalType( + 'boolean', + call_user_func_array( $handler, $arguments ) + ); + } + +} |