* @file
*/
+use MediaWiki\MediaWikiServices;
use Wikimedia\Rdbms\ResultWrapper;
/**
return parent::getEmptyPageParserOutput( $options );
}
+ /**
+ * Returns language code to be used for dispaying the image, based on request context and
+ * languages available in the file.
+ *
+ * @param WebRequest $request
+ * @param File $file
+ * @return string|null
+ */
private function getLanguageForRendering( WebRequest $request, File $file ) {
- $handler = $this->displayImg->getHandler();
+ $handler = $file->getHandler();
if ( !$handler ) {
return null;
}
- $requestLanguage = $request->getVal( 'lang' );
- if ( !is_null( $requestLanguage ) ) {
- if ( $handler->validateParam( 'lang', $requestLanguage ) ) {
- return $requestLanguage;
- }
+ $config = MediaWikiServices::getInstance()->getMainConfig();
+ $requestLanguage = $request->getVal( 'lang', $config->get( 'LanguageCode' ) );
+ if ( $handler->validateParam( 'lang', $requestLanguage ) ) {
+ return $file->getMatchedLanguage( $requestLanguage );
}
- return $handler->getDefaultRenderLanguage( $this->displayImg );
+ return $handler->getDefaultRenderLanguage( $file );
}
protected function openShowImage() {
<?php
+
+use Wikimedia\TestingAccessWrapper;
+
class ImagePageTest extends MediaWikiMediaTestCase {
- function setUp() {
+ public function setUp() {
$this->setMwGlobals( 'wgImageLimits', [
[ 320, 240 ],
[ 640, 480 ],
parent::setUp();
}
- function getImagePage( $filename ) {
+ public function getImagePage( $filename ) {
$title = Title::makeTitleSafe( NS_FILE, $filename );
$file = $this->dataFile( $filename );
$iPage = new ImagePage( $title );
* @param array $dim Array [maxWidth, maxHeight, width, height]
* @param array $expected Array [width, height] The width and height we expect to display at
*/
- function testGetDisplayWidthHeight( $dim, $expected ) {
+ public function testGetDisplayWidthHeight( $dim, $expected ) {
$iPage = $this->getImagePage( 'animated.gif' );
$reflection = new ReflectionClass( $iPage );
$reflMethod = $reflection->getMethod( 'getDisplayWidthHeight' );
$this->assertEquals( $actual, $expected );
}
- function providerGetDisplayWidthHeight() {
+ public function providerGetDisplayWidthHeight() {
return [
[
[ 1024.0, 768.0, 600.0, 600.0 ],
* @param string $filename
* @param int $expectedNumberThumbs How many thumbnails to show
*/
- function testGetThumbSizes( $filename, $expectedNumberThumbs ) {
+ public function testGetThumbSizes( $filename, $expectedNumberThumbs ) {
$iPage = $this->getImagePage( $filename );
$reflection = new ReflectionClass( $iPage );
$reflMethod = $reflection->getMethod( 'getThumbSizes' );
$this->assertEquals( count( $actual ), $expectedNumberThumbs );
}
- function providerGetThumbSizes() {
+ public function providerGetThumbSizes() {
return [
[ 'animated.gif', 2 ],
[ 'Toll_Texas_1.svg', 1 ],
[ 'jpeg-comment-binary.jpg', 2 ],
];
}
+
+ /**
+ * @covers ImagePage::getLanguageForRendering()
+ * @dataProvider provideGetLanguageForRendering
+ *
+ * @param string|null $expected Expected language code
+ * @param string $wikiLangCode Wiki language code
+ * @param string|null $lang lang=... URL parameter
+ */
+ public function testGetLanguageForRendering( $expected = null, $wikiLangCode, $lang = null ) {
+ $params = [];
+ if ( $lang !== null ) {
+ $params['lang'] = $lang;
+ }
+ $request = new FauxRequest( $params );
+ $this->setMwGlobals( 'wgLanguageCode', $wikiLangCode );
+
+ $page = $this->getImagePage( 'translated.svg' );
+ $page = TestingAccessWrapper::newFromObject( $page );
+
+ /** @var ImagePage $page */
+ $result = $page->getLanguageForRendering( $request, $page->getDisplayedFile() );
+ $this->assertEquals( $expected, $result );
+ }
+
+ public function provideGetLanguageForRendering() {
+ return [
+ [ 'ru', 'ru' ],
+ [ 'ru', 'ru', 'ru' ],
+ [ null, 'en' ],
+ [ null, 'fr' ],
+ [ null, 'en', 'en' ],
+ [ null, 'fr', 'fr' ],
+ [ null, 'ru', 'en' ],
+ [ 'de', 'ru', 'de' ],
+ ];
+ }
}