diff options
Diffstat (limited to 'www/wiki/extensions/SemanticMediaWiki/tests/phpunit/includes/specials/SpecialsTest.php')
-rw-r--r-- | www/wiki/extensions/SemanticMediaWiki/tests/phpunit/includes/specials/SpecialsTest.php | 155 |
1 files changed, 155 insertions, 0 deletions
diff --git a/www/wiki/extensions/SemanticMediaWiki/tests/phpunit/includes/specials/SpecialsTest.php b/www/wiki/extensions/SemanticMediaWiki/tests/phpunit/includes/specials/SpecialsTest.php new file mode 100644 index 00000000..4447ed28 --- /dev/null +++ b/www/wiki/extensions/SemanticMediaWiki/tests/phpunit/includes/specials/SpecialsTest.php @@ -0,0 +1,155 @@ +<?php + +namespace SMW\Test; + +use FauxRequest; +use Language; +use RequestContext; +use SpecialPage; +use SpecialPageFactory; + +/** + * Tests for registered special pages + * + * @file + * + * @license GNU GPL v2+ + * @since 1.9 + * + * @author Jeroen De Dauw < jeroendedauw@gmail.com > + * @author mwjames + */ + +/** + * @covers \SMW\SpecialWantedProperties + * @covers \SMW\SpecialUnusedProperties + * @covers \SMW\SpecialProperties + * @covers \SMW\SpecialConcepts + * @covers \SMW\SpecialPage + * @covers \SMW\MediaWiki\Specials\SpecialAsk + * @covers \SMW\MediaWiki\Specials\SpecialAdmin + * @covers \SMW\MediaWiki\Specials\SpecialBrowse + * @covers \SMW\MediaWiki\Specials\SpecialSearchByProperty + * + * @note Test base was borrowed from the EducationProgram extension + * + * @group SMW + * @group SMWExtension + * @group medium + */ +class SpecialsTest extends SemanticMediaWikiTestCase { + + /** + * Returns the name of the class to be tested + * + * @return string|false + */ + public function getClass() { + return false; + } + + /** + * @dataProvider specialPageProvider + * + * @param $specialPage + */ + public function testSpecial( SpecialPage $specialPage ) { + + try { + $specialPage->execute( '' ); + } + catch ( \Exception $exception ) { + if ( !( $exception instanceof \PermissionsError ) && !( $exception instanceof \ErrorPageError ) ) { + throw $exception; + } + } + + $this->assertTrue( true, 'SpecialPage test did run without errors' ); + } + + /** + * @test SpecialPageFactory::getLocalNameFor + * @dataProvider specialPageProvider + * + * Test created in response to bug 44191 + * + * @param $specialPage + */ + public function testSpecialAliasesContLang( SpecialPage $specialPage ) { + + // Test for languages + $langCodes = [ 'en', 'fr', 'de', 'es', 'zh', 'ja' ]; + + // Test aliases for a specific language + foreach ( $langCodes as $langCode ) { + $langObj = Language::factory( $langCode ); + $aliases = $langObj->getSpecialPageAliases(); + $found = false; + $name = $specialPage->getName(); + + // Check against available aliases + foreach ( $aliases as $n => $values ) { + foreach ( $values as $value ) { + if( $name === $value ) { + $found = true; + break; + } + } + } + + $this->assertTrue( + $found, + "{$name} alias not found in language {$langCode}" + ); + } + } + + /** + * Provides special pages + * + * @return array + */ + public function specialPageProvider() { + $request = new FauxRequest( [], true ); + $argLists = []; + + $specialPages = [ + 'Ask', + 'Browse', + 'PageProperty', + 'SearchByProperty', + 'SMWAdmin', + 'ExportRDF', + 'Types', + 'Properties', + 'UnusedProperties', + 'WantedProperties', + 'Concepts', + 'ProcessingErrorList', + 'PropertyLabelSimilarity', + 'URIResolver' + ]; + + foreach ( $specialPages as $special ) { + + $specialPage = SpecialPageFactory::getPage( + $special + ); + + // Deprecated: Use of SpecialPage::getTitle was deprecated in MediaWiki 1.23 + $title = method_exists( $specialPage, 'getPageTitle') ? $specialPage->getPageTitle() : $specialPage->getTitle(); + + $context = RequestContext::newExtraneousContext( $title ); + $context->setRequest( $request ); + + $specialPage->setContext( clone $context ); + $argLists[] = [ clone $specialPage ]; + + $context->setUser( $this->getUser() ); + $specialPage->setContext( $context ); + $argLists[] = [ $specialPage ]; + } + + return $argLists; + } +} |