diff options
author | Yaco <franco@reevo.org> | 2020-06-04 11:01:00 -0300 |
---|---|---|
committer | Yaco <franco@reevo.org> | 2020-06-04 11:01:00 -0300 |
commit | fc7369835258467bf97eb64f184b93691f9a9fd5 (patch) | |
tree | daabd60089d2dd76d9f5fb416b005fbe159c799d /www/wiki/tests/phpunit/includes/media/JpegPixelFormatTest.php |
first commit
Diffstat (limited to 'www/wiki/tests/phpunit/includes/media/JpegPixelFormatTest.php')
-rw-r--r-- | www/wiki/tests/phpunit/includes/media/JpegPixelFormatTest.php | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/www/wiki/tests/phpunit/includes/media/JpegPixelFormatTest.php b/www/wiki/tests/phpunit/includes/media/JpegPixelFormatTest.php new file mode 100644 index 00000000..6815a62b --- /dev/null +++ b/www/wiki/tests/phpunit/includes/media/JpegPixelFormatTest.php @@ -0,0 +1,115 @@ +<?php +/** + * Tests related to JPEG chroma subsampling via $wgJpegPixelFormat setting. + * + * @group Media + * @group medium + * + * @todo covers tags + */ +class JpegPixelFormatTest extends MediaWikiMediaTestCase { + + protected function setUp() { + parent::setUp(); + } + + /** + * Mark this test as creating thumbnail files. + */ + protected function createsThumbnails() { + return true; + } + + /** + * + * @dataProvider providePixelFormats + */ + public function testPixelFormatRendering( $sourceFile, $pixelFormat, $samplingFactor ) { + global $wgUseImageMagick, $wgUseImageResize; + if ( !$wgUseImageMagick ) { + $this->markTestSkipped( "This test is only applicable when using ImageMagick thumbnailing" ); + } + if ( !$wgUseImageResize ) { + $this->markTestSkipped( "This test is only applicable when using thumbnailing" ); + } + + $fmtStr = var_export( $pixelFormat, true ); + $this->setMwGlobals( 'wgJpegPixelFormat', $pixelFormat ); + + $file = $this->dataFile( $sourceFile, 'image/jpeg' ); + + $params = [ + 'width' => 320, + ]; + $thumb = $file->transform( $params, File::RENDER_NOW | File::RENDER_FORCE ); + $this->assertTrue( !$thumb->isError(), "created JPEG thumbnail for pixel format $fmtStr" ); + + $path = $thumb->getLocalCopyPath(); + $this->assertTrue( is_string( $path ), "path returned for JPEG thumbnail for $fmtStr" ); + + $cmd = [ + 'identify', + '-format', + '%[jpeg:sampling-factor]', + $path + ]; + $retval = null; + $output = wfShellExec( $cmd, $retval ); + $this->assertTrue( $retval === 0, "ImageMagick's identify command should return success" ); + + $expected = $samplingFactor; + $actual = trim( $output ); + $this->assertEquals( + $expected, + trim( $output ), + "IM identify expects JPEG chroma subsampling \"$expected\" for $fmtStr" + ); + } + + public static function providePixelFormats() { + return [ + // From 4:4:4 source file + [ + 'yuv444.jpg', + false, + '1x1,1x1,1x1' + ], + [ + 'yuv444.jpg', + 'yuv444', + '1x1,1x1,1x1' + ], + [ + 'yuv444.jpg', + 'yuv422', + '2x1,1x1,1x1' + ], + [ + 'yuv444.jpg', + 'yuv420', + '2x2,1x1,1x1' + ], + // From 4:2:0 source file + [ + 'yuv420.jpg', + false, + '2x2,1x1,1x1' + ], + [ + 'yuv420.jpg', + 'yuv444', + '1x1,1x1,1x1' + ], + [ + 'yuv420.jpg', + 'yuv422', + '2x1,1x1,1x1' + ], + [ + 'yuv420.jpg', + 'yuv420', + '2x2,1x1,1x1' + ] + ]; + } +} |