diff options
Diffstat (limited to 'tests/phpunit/includes/specials')
4 files changed, 128 insertions, 52 deletions
diff --git a/tests/phpunit/includes/specials/QueryAllSpecialPagesTest.php b/tests/phpunit/includes/specials/QueryAllSpecialPagesTest.php index a33c7b68..a806b4ac 100644 --- a/tests/phpunit/includes/specials/QueryAllSpecialPagesTest.php +++ b/tests/phpunit/includes/specials/QueryAllSpecialPagesTest.php @@ -39,9 +39,9 @@ class QueryAllSpecialPagesTest extends MediaWikiTestCase { parent::__construct(); global $wgQueryPages; - foreach( $wgQueryPages as $page ) { + foreach ( $wgQueryPages as $page ) { $class = $page[0]; - if( ! in_array( $class, $this->manualTest ) ) { + if ( !in_array( $class, $this->manualTest ) ) { $this->queryPages[$class] = new $class; } } @@ -51,25 +51,25 @@ class QueryAllSpecialPagesTest extends MediaWikiTestCase { * Test SQL for each of our QueryPages objects * @group Database */ - function testQuerypageSqlQuery() { + public function testQuerypageSqlQuery() { global $wgDBtype; - foreach( $this->queryPages as $page ) { + foreach ( $this->queryPages as $page ) { // With MySQL, skips special pages reopening a temporary table // See http://bugs.mysql.com/bug.php?id=10327 - if( + if ( $wgDBtype === 'mysql' && in_array( $page->getName(), $this->reopensTempTable ) ) { - $this->markTestSkipped( "SQL query for page {$page->getName()} can not be tested on MySQL backend (it reopens a temporary table)" ); - continue; - } + $this->markTestSkipped( "SQL query for page {$page->getName()} can not be tested on MySQL backend (it reopens a temporary table)" ); + continue; + } - $msg = "SQL query for page {$page->getName()} should give a result wrapper object" ; + $msg = "SQL query for page {$page->getName()} should give a result wrapper object"; $result = $page->reallyDoQuery( 50 ); - if( $result instanceof ResultWrapper ) { + if ( $result instanceof ResultWrapper ) { $this->assertTrue( true, $msg ); } else { $this->assertFalse( false, $msg ); diff --git a/tests/phpunit/includes/specials/SpecialPreferencesTest.php b/tests/phpunit/includes/specials/SpecialPreferencesTest.php new file mode 100644 index 00000000..6c637c65 --- /dev/null +++ b/tests/phpunit/includes/specials/SpecialPreferencesTest.php @@ -0,0 +1,60 @@ +<?php +/** + * Test class for SpecialPreferences class. + * + * Copyright © 2013, Antoine Musso + * Copyright © 2013, Wikimedia Foundation Inc. + * + */ + +class SpecialPreferencesTest extends MediaWikiTestCase { + + /** + * Make sure a nickname which is longer than $wgMaxSigChars + * is not throwing a fatal error. + * + * Test specifications by Alexandre "ialex" Emsenhuber. + */ + public function testBug41337() { + + // Set a low limit + $this->setMwGlobals( 'wgMaxSigChars', 2 ); + + $user = $this->getMock( 'User' ); + $user->expects( $this->any() ) + ->method( 'isAnon' ) + ->will( $this->returnValue( false ) ); + + # Yeah foreach requires an array, not NULL =( + $user->expects( $this->any() ) + ->method( 'getEffectiveGroups' ) + ->will( $this->returnValue( array() ) ); + + # The mocked user has a long nickname + $user->expects( $this->any() ) + ->method( 'getOption' ) + ->will( $this->returnValueMap( array( + array( 'nickname', null, false, 'superlongnickname' ), + ) + ) ); + + # Validate the mock (FIXME should probably be removed) + $this->assertFalse( $user->isAnon() ); + $this->assertEquals( array(), + $user->getEffectiveGroups() ); + $this->assertEquals( 'superlongnickname', + $user->getOption( 'nickname' ) ); + + # Forge a request to call the special page + $context = new RequestContext(); + $context->setRequest( new FauxRequest() ); + $context->setUser( $user ); + $context->setTitle( Title::newFromText( 'Test' ) ); + + # Do the call, should not spurt a fatal error. + $special = new SpecialPreferences(); + $special->setContext( $context ); + $special->execute( array() ); + } + +} diff --git a/tests/phpunit/includes/specials/SpecialRecentchangesTest.php b/tests/phpunit/includes/specials/SpecialRecentchangesTest.php index 2e4f4b09..436eb2e2 100644 --- a/tests/phpunit/includes/specials/SpecialRecentchangesTest.php +++ b/tests/phpunit/includes/specials/SpecialRecentchangesTest.php @@ -14,9 +14,6 @@ class SpecialRecentchangesTest extends MediaWikiTestCase { */ protected $rc; - function setUp() { - } - /** helper to test SpecialRecentchanges::buildMainQueryConds() */ private function assertConditions( $expected, $requestOptions = null, $message = '' ) { $context = new RequestContext; @@ -44,8 +41,7 @@ class SpecialRecentchangesTest extends MediaWikiTestCase { /** return false if condition begin with 'rc_timestamp ' */ private static function filterOutRcTimestampCondition( $var ) { - return (false === strpos( $var, 'rc_timestamp ' )); - + return ( false === strpos( $var, 'rc_timestamp ' ) ); } public function testRcNsFilter() { @@ -73,7 +69,7 @@ class SpecialRecentchangesTest extends MediaWikiTestCase { 'namespace' => NS_MAIN, 'invert' => 1, ), - "rc conditions with namespace inverted" + "rc conditions with namespace inverted" ); } @@ -92,7 +88,7 @@ class SpecialRecentchangesTest extends MediaWikiTestCase { 'namespace' => $ns1, 'associated' => 1, ), - "rc conditions with namespace inverted" + "rc conditions with namespace inverted" ); } @@ -108,11 +104,11 @@ class SpecialRecentchangesTest extends MediaWikiTestCase { 1 => sprintf( "(rc_namespace != '%s' AND rc_namespace != '%s')", $ns1, $ns2 ), ), array( - 'namespace' => $ns1, + 'namespace' => $ns1, 'associated' => 1, - 'invert' => 1, + 'invert' => 1, ), - "rc conditions with namespace inverted" + "rc conditions with namespace inverted" ); } @@ -120,13 +116,10 @@ class SpecialRecentchangesTest extends MediaWikiTestCase { * Provides associated namespaces to test recent changes * namespaces association filtering. */ - public function provideNamespacesAssociations() { + public static function provideNamespacesAssociations() { return array( # (NS => Associated_NS) - array( NS_MAIN, NS_TALK), - array( NS_TALK, NS_MAIN), + array( NS_MAIN, NS_TALK ), + array( NS_TALK, NS_MAIN ), ); } - } - - diff --git a/tests/phpunit/includes/specials/SpecialSearchTest.php b/tests/phpunit/includes/specials/SpecialSearchTest.php index 20e42a68..17e883fd 100644 --- a/tests/phpunit/includes/specials/SpecialSearchTest.php +++ b/tests/phpunit/includes/specials/SpecialSearchTest.php @@ -10,9 +10,6 @@ class SpecialSearchTest extends MediaWikiTestCase { private $search; - function setUp() { } - function tearDown() { } - /** * @covers SpecialSearch::load * @dataProvider provideSearchOptionsTests @@ -21,7 +18,7 @@ class SpecialSearchTest extends MediaWikiTestCase { * @param $expectedProfile An expected search profile name * @param $expectedNs Array Expected namespaces */ - function testProfileAndNamespaceLoading( + public function testProfileAndNamespaceLoading( $requested, $userOptions, $expectedProfile, $expectedNS, $message = 'Profile name and namespaces mismatches!' ) { @@ -35,7 +32,7 @@ class SpecialSearchTest extends MediaWikiTestCase { 'ns6'=>true, ) )); */ - $context->setRequest( new FauxRequest( $requested )); + $context->setRequest( new FauxRequest( $requested ) ); $search = new SpecialSearch(); $search->setContext( $context ); $search->load(); @@ -48,28 +45,27 @@ class SpecialSearchTest extends MediaWikiTestCase { $this->assertEquals( array( /** Expected: */ 'ProfileName' => $expectedProfile, - 'Namespaces' => $expectedNS, + 'Namespaces' => $expectedNS, ) , array( /** Actual: */ 'ProfileName' => $search->getProfile(), - 'Namespaces' => $search->getNamespaces(), + 'Namespaces' => $search->getNamespaces(), ) , $message ); - } - function provideSearchOptionsTests() { + public static function provideSearchOptionsTests() { $defaultNS = SearchEngine::defaultNamespaces(); $EMPTY_REQUEST = array(); - $NO_USER_PREF = null; + $NO_USER_PREF = null; return array( /** * Parameters: - * <Web Request>, <User options> + * <Web Request>, <User options> * Followed by expected values: - * <ProfileName>, <NSList> + * <ProfileName>, <NSList> * Then an optional message. */ array( @@ -79,21 +75,19 @@ class SpecialSearchTest extends MediaWikiTestCase { ), array( array( 'ns5' => 1 ), $NO_USER_PREF, - 'advanced', array( 5), + 'advanced', array( 5 ), 'Web request with specific NS should override user preference' ), array( - $EMPTY_REQUEST, array( 'searchNs2' => 1, 'searchNs14' => 1 ), - 'advanced', array( 2, 14 ), - 'Bug 33583: search with no option should honor User search preferences' - ), - array( - $EMPTY_REQUEST, array_fill_keys( array_map( function( $ns ) { - return "searchNs$ns"; - }, $defaultNS ), 0 ) + array( 'searchNs2' => 1, 'searchNs14' => 1 ), + $EMPTY_REQUEST, array( + 'searchNs2' => 1, + 'searchNs14' => 1, + ) + array_fill_keys( array_map( function ( $ns ) { + return "searchNs$ns"; + }, $defaultNS ), 0 ), 'advanced', array( 2, 14 ), 'Bug 33583: search with no option should honor User search preferences' - . 'and have all other namespace disabled' + . ' and have all other namespace disabled' ), ); } @@ -103,14 +97,43 @@ class SpecialSearchTest extends MediaWikiTestCase { * User remains anonymous though */ function newUserWithSearchNS( $opt = null ) { - $u = User::newFromId(0); - if( $opt === null ) { + $u = User::newFromId( 0 ); + if ( $opt === null ) { return $u; } - foreach($opt as $name => $value) { + foreach ( $opt as $name => $value ) { $u->setOption( $name, $value ); } + return $u; } -} + /** + * Verify we do not expand search term in <title> on search result page + * https://gerrit.wikimedia.org/r/4841 + */ + public function testSearchTermIsNotExpanded() { + + # Initialize [[Special::Search]] + $search = new SpecialSearch(); + $search->getContext()->setTitle( Title::newFromText( 'Special:Search' ) ); + $search->load(); + + # Simulate a user searching for a given term + $term = '{{SITENAME}}'; + $search->showResults( $term ); + + # Lookup the HTML page title set for that page + $pageTitle = $search + ->getContext() + ->getOutput() + ->getHTMLTitle(); + + # Compare :-] + $this->assertRegExp( + '/' . preg_quote( $term ) . '/', + $pageTitle, + "Search term '{$term}' should not be expanded in Special:Search <title>" + ); + } +} |