summaryrefslogtreecommitdiff
path: root/www/wiki/extensions/SemanticMediaWiki/tests/phpunit/includes/specials/SpecialsTest.php
diff options
context:
space:
mode:
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.php155
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;
+ }
+}