1<?php 2 3/** 4 * @group Database 5 * @covers SpecialMyLanguage 6 */ 7class SpecialMyLanguageTest extends MediaWikiIntegrationTestCase { 8 public function addDBDataOnce() { 9 $titles = [ 10 'Page/Another', 11 'Page/Another/ar', 12 'Page/Another/en', 13 'Page/Another/ru', 14 'Page/Another/zh-hans', 15 ]; 16 foreach ( $titles as $title ) { 17 $page = WikiPage::factory( Title::newFromText( $title ) ); 18 if ( $page->getId() == 0 ) { 19 $page->doEditContent( 20 new WikitextContent( 'UTContent' ), 21 'UTPageSummary', 22 EDIT_NEW, 23 false, 24 User::newFromName( 'UTSysop' ) ); 25 } 26 } 27 } 28 29 /** 30 * @covers SpecialMyLanguage::findTitle 31 * @dataProvider provideFindTitle 32 * @param string $expected 33 * @param string $subpage 34 * @param string $langCode 35 * @param string $userLang 36 */ 37 public function testFindTitle( $expected, $subpage, $langCode, $userLang ) { 38 $this->setContentLang( $langCode ); 39 $special = new SpecialMyLanguage(); 40 $special->getContext()->setLanguage( $userLang ); 41 // Test with subpages both enabled and disabled 42 $this->mergeMwGlobalArrayValue( 'wgNamespacesWithSubpages', [ NS_MAIN => true ] ); 43 $this->assertTitle( $expected, $special->findTitle( $subpage ) ); 44 $this->mergeMwGlobalArrayValue( 'wgNamespacesWithSubpages', [ NS_MAIN => false ] ); 45 $this->assertTitle( $expected, $special->findTitle( $subpage ) ); 46 } 47 48 /** 49 * @param string $expected 50 * @param Title|null $title 51 */ 52 private function assertTitle( $expected, $title ) { 53 if ( $title ) { 54 $title = $title->getPrefixedText(); 55 } 56 $this->assertEquals( $expected, $title ); 57 } 58 59 public static function provideFindTitle() { 60 // See addDBDataOnce() for page declarations 61 return [ 62 // [ $expected, $subpage, $langCode, $userLang ] 63 [ null, '::Fail', 'en', 'en' ], 64 [ 'Page/Another', 'Page/Another/en', 'en', 'en' ], 65 [ 'Page/Another', 'Page/Another', 'en', 'en' ], 66 [ 'Page/Another/ru', 'Page/Another', 'en', 'ru' ], 67 [ 'Page/Another', 'Page/Another', 'en', 'es' ], 68 [ 'Page/Another/zh-hans', 'Page/Another', 'en', 'zh-hans' ], 69 [ 'Page/Another/zh-hans', 'Page/Another', 'en', 'zh-mo' ], 70 [ 'Page/Another/en', 'Page/Another', 'de', 'es' ], 71 [ 'Page/Another/ar', 'Page/Another', 'en', 'ar' ], 72 [ 'Page/Another/ar', 'Page/Another', 'en', 'arz' ], 73 [ 'Page/Another/ar', 'Page/Another/de', 'en', 'arz' ], 74 [ 'Page/Another/ru', 'Page/Another/ru', 'en', 'arz' ], 75 [ 'Page/Another/ar', 'Page/Another/ru', 'en', 'ar' ], 76 ]; 77 } 78} 79