<?php
+use MediaWiki\Linker\LinkTarget;
use MediaWiki\MediaWikiServices;
+use Wikimedia\TestingAccessWrapper;
/**
* @group Database
$this->setContentLang( 'en' );
}
+ protected function tearDown() {
+ // For testNewMainPage
+ MessageCache::destroyInstance();
+ parent::tearDown();
+ }
+
/**
* @covers Title::legalChars
*/
]
] );
- // Reset TitleParser since we modified $wgLocalInterwikis
- $this->setService( 'TitleParser', new MediaWikiTitleCodec(
- Language::factory( 'en' ),
- new GenderCache(),
- [ 'localtestiw' ]
- ) );
+ // Reset services since we modified $wgLocalInterwikis
+ $this->overrideMwServices();
}
/**
* @param string $action
* @param array|string|bool $expected Required error
*
- * @covers Title::checkReadPermissions
+ * @covers \Mediawiki\Permissions\PermissionManager::checkReadPermissions
* @dataProvider dataWgWhitelistReadRegexp
*/
public function testWgWhitelistReadRegexp( $whitelistRegexp, $source, $action, $expected ) {
$this->assertEquals( $value->getFragment(), $title->getFragment() );
}
+ /**
+ * @covers Title::newFromLinkTarget
+ * @dataProvider provideNewFromTitleValue
+ */
+ public function testNewFromLinkTarget( LinkTarget $value ) {
+ $title = Title::newFromLinkTarget( $value );
+
+ $dbkey = str_replace( ' ', '_', $value->getText() );
+ $this->assertEquals( $dbkey, $title->getDBkey() );
+ $this->assertEquals( $value->getNamespace(), $title->getNamespace() );
+ $this->assertEquals( $value->getFragment(), $title->getFragment() );
+ }
+
+ /**
+ * @covers Title::newFromLinkTarget
+ */
+ public function testNewFromLinkTarget_clone() {
+ $title = Title::newFromText( __METHOD__ );
+ $this->assertSame( $title, Title::newFromLinkTarget( $title ) );
+
+ // The Title::NEW_CLONE flag should ensure that a fresh instance is returned.
+ $clone = Title::newFromLinkTarget( $title, Title::NEW_CLONE );
+ $this->assertNotSame( $title, $clone );
+ $this->assertTrue( $clone->equals( $title ) );
+ }
+
+ public function provideCastFromLinkTarget() {
+ return array_merge( [ [ null ] ], self::provideNewFromTitleValue() );
+ }
+
+ /**
+ * @covers Title::castFromLinkTarget
+ * @dataProvider provideCastFromLinkTarget
+ */
+ public function testCastFromLinkTarget( $value ) {
+ $title = Title::castFromLinkTarget( $value );
+
+ if ( $value === null ) {
+ $this->assertNull( $title );
+ } else {
+ $dbkey = str_replace( ' ', '_', $value->getText() );
+ $this->assertSame( $dbkey, $title->getDBkey() );
+ $this->assertSame( $value->getNamespace(), $title->getNamespace() );
+ $this->assertSame( $value->getFragment(), $title->getFragment() );
+ }
+ }
+
public static function provideGetTitleValue() {
return [
[ 'Foo' ],
];
}
- /**
- * @dataProvider provideGetTalkPage_good
- * @covers Title::getTalkPage
- */
- public function testGetTalkPage_good( Title $title, Title $expected ) {
- $talk = $title->getTalkPage();
- $this->assertSame(
- $expected->getPrefixedDBKey(),
- $talk->getPrefixedDBKey(),
- $title->getPrefixedDBKey()
- );
- }
-
/**
* @dataProvider provideGetTalkPage_good
* @covers Title::getTalkPageIfDefined
$firstValue->equals( $secondValue )
);
}
+
+ /**
+ * @covers Title::newMainPage
+ */
+ public function testNewMainPage() {
+ $msgCache = TestingAccessWrapper::newFromClass( MessageCache::class );
+ $msgCache->instance = $this->createMock( MessageCache::class );
+ $msgCache->instance->method( 'get' )->willReturn( 'Foresheet' );
+ $msgCache->instance->method( 'transform' )->willReturn( 'Foresheet' );
+
+ $this->assertSame(
+ 'Foresheet',
+ Title::newMainPage()->getText()
+ );
+ }
+
+ /**
+ * @covers Title::newMainPage
+ */
+ public function testNewMainPageWithLocal() {
+ $local = $this->createMock( MessageLocalizer::class );
+ $local->method( 'msg' )->willReturn( new RawMessage( 'Prime Article' ) );
+
+ $this->assertSame(
+ 'Prime Article',
+ Title::newMainPage( $local )->getText()
+ );
+ }
}