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