Limit test leakage, $wgCapitalLinks expected to be true
[lhc/web/wiklou.git] / tests / phpunit / includes / api / query / ApiQueryTest.php
index bc01ec2..7b686a3 100644 (file)
@@ -4,18 +4,44 @@
  * @group API
  * @group Database
  * @group medium
+ * @covers ApiQuery
  */
 class ApiQueryTest extends ApiTestCase {
+       /**
+        * @var array Storage for $wgHooks
+        */
+       protected $hooks;
 
        protected function setUp() {
+               global $wgHooks;
+
                parent::setUp();
                $this->doLogin();
+
+               // Setup en: as interwiki prefix
+               $this->hooks = $wgHooks;
+               $wgHooks['InterwikiLoadPrefix'][] = function ( $prefix, &$data ) {
+                       if ( $prefix == 'apiquerytestiw' ) {
+                               $data = array( 'iw_url' => 'wikipedia' );
+                       }
+                       return false;
+               };
        }
 
-       function testTitlesGetNormalized() {
+       protected function tearDown() {
+               global $wgHooks;
+               $wgHooks = $this->hooks;
+
+               parent::tearDown();
+       }
 
+       public function testTitlesGetNormalized() {
                global $wgMetaNamespace;
 
+               $this->setMwGlobals( array(
+                       'wgCapitalLinks' => true,
+               ) );
+
                $data = $this->doApiRequest( array(
                        'action' => 'query',
                        'titles' => 'Project:articleA|article_B' ) );
@@ -43,7 +69,7 @@ class ApiQueryTest extends ApiTestCase {
                );
        }
 
-       function testTitlesAreRejectedIfInvalid() {
+       public function testTitlesAreRejectedIfInvalid() {
                $title = false;
                while ( !$title || Title::newFromText( $title )->exists() ) {
                        $title = md5( mt_rand( 0, 10000 ) + rand( 0, 999000 ) );
@@ -63,4 +89,42 @@ class ApiQueryTest extends ApiTestCase {
                $this->assertArrayHasKey( 'missing', $data[0]['query']['pages'][-2] );
                $this->assertArrayHasKey( 'invalid', $data[0]['query']['pages'][-1] );
        }
+
+       /**
+        * Test the ApiBase::titlePartToKey function
+        *
+        * @param string $titlePart
+        * @param int $namespace
+        * @param string $expected
+        * @param string $description
+        * @dataProvider provideTestTitlePartToKey
+        */
+       function testTitlePartToKey( $titlePart, $namespace, $expected, $expectException ) {
+               $this->setMwGlobals( array(
+                       'wgCapitalLinks' => true,
+               ) );
+
+               $api = new MockApiQueryBase();
+               $exceptionCaught = false;
+               try {
+                       $this->assertEquals( $expected, $api->titlePartToKey( $titlePart, $namespace ) );
+               } catch ( UsageException $e ) {
+                       $exceptionCaught = true;
+               }
+               $this->assertEquals( $expectException, $exceptionCaught,
+                       'UsageException thrown by titlePartToKey' );
+       }
+
+       function provideTestTitlePartToKey() {
+               return array(
+                       array( 'a  b  c', NS_MAIN, 'A_b_c', false ),
+                       array( 'x', NS_MAIN, 'X', false ),
+                       array( 'y ', NS_MAIN, 'Y_', false ),
+                       array( 'template:foo', NS_CATEGORY, 'Template:foo', false ),
+                       array( 'apiquerytestiw:foo', NS_CATEGORY, 'Apiquerytestiw:foo', false ),
+                       array( "\xF7", NS_MAIN, null, true ),
+                       array( 'template:foo', NS_MAIN, null, true ),
+                       array( 'apiquerytestiw:foo', NS_MAIN, null, true ),
+               );
+       }
 }