summaryrefslogtreecommitdiff
path: root/www/wiki/tests/phpunit/includes/media/BitmapScalingTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/tests/phpunit/includes/media/BitmapScalingTest.php')
-rw-r--r--www/wiki/tests/phpunit/includes/media/BitmapScalingTest.php151
1 files changed, 151 insertions, 0 deletions
diff --git a/www/wiki/tests/phpunit/includes/media/BitmapScalingTest.php b/www/wiki/tests/phpunit/includes/media/BitmapScalingTest.php
new file mode 100644
index 00000000..fb96f7db
--- /dev/null
+++ b/www/wiki/tests/phpunit/includes/media/BitmapScalingTest.php
@@ -0,0 +1,151 @@
+<?php
+
+/**
+ * @group Media
+ */
+class BitmapScalingTest extends MediaWikiTestCase {
+
+ protected function setUp() {
+ parent::setUp();
+
+ $this->setMwGlobals( [
+ 'wgMaxImageArea' => 1.25e7, // 3500x3500
+ 'wgCustomConvertCommand' => 'dummy', // Set so that we don't get client side rendering
+ ] );
+ }
+
+ /**
+ * @dataProvider provideNormaliseParams
+ * @covers BitmapHandler::normaliseParams
+ */
+ public function testNormaliseParams( $fileDimensions, $expectedParams, $params, $msg ) {
+ $file = new FakeDimensionFile( $fileDimensions );
+ $handler = new BitmapHandler;
+ $valid = $handler->normaliseParams( $file, $params );
+ $this->assertTrue( $valid );
+ $this->assertEquals( $expectedParams, $params, $msg );
+ }
+
+ public static function provideNormaliseParams() {
+ return [
+ /* Regular resize operations */
+ [
+ [ 1024, 768 ],
+ [
+ 'width' => 512, 'height' => 384,
+ 'physicalWidth' => 512, 'physicalHeight' => 384,
+ 'page' => 1, 'interlace' => false,
+ ],
+ [ 'width' => 512 ],
+ 'Resizing with width set',
+ ],
+ [
+ [ 1024, 768 ],
+ [
+ 'width' => 512, 'height' => 384,
+ 'physicalWidth' => 512, 'physicalHeight' => 384,
+ 'page' => 1, 'interlace' => false,
+ ],
+ [ 'width' => 512, 'height' => 768 ],
+ 'Resizing with height set too high',
+ ],
+ [
+ [ 1024, 768 ],
+ [
+ 'width' => 512, 'height' => 384,
+ 'physicalWidth' => 512, 'physicalHeight' => 384,
+ 'page' => 1, 'interlace' => false,
+ ],
+ [ 'width' => 1024, 'height' => 384 ],
+ 'Resizing with height set',
+ ],
+
+ /* Very tall images */
+ [
+ [ 1000, 100 ],
+ [
+ 'width' => 5, 'height' => 1,
+ 'physicalWidth' => 5, 'physicalHeight' => 1,
+ 'page' => 1, 'interlace' => false,
+ ],
+ [ 'width' => 5 ],
+ 'Very wide image',
+ ],
+
+ [
+ [ 100, 1000 ],
+ [
+ 'width' => 1, 'height' => 10,
+ 'physicalWidth' => 1, 'physicalHeight' => 10,
+ 'page' => 1, 'interlace' => false,
+ ],
+ [ 'width' => 1 ],
+ 'Very high image',
+ ],
+ [
+ [ 100, 1000 ],
+ [
+ 'width' => 1, 'height' => 5,
+ 'physicalWidth' => 1, 'physicalHeight' => 10,
+ 'page' => 1, 'interlace' => false,
+ ],
+ [ 'width' => 10, 'height' => 5 ],
+ 'Very high image with height set',
+ ],
+ /* Max image area */
+ [
+ [ 4000, 4000 ],
+ [
+ 'width' => 5000, 'height' => 5000,
+ 'physicalWidth' => 4000, 'physicalHeight' => 4000,
+ 'page' => 1, 'interlace' => false,
+ ],
+ [ 'width' => 5000 ],
+ 'Bigger than max image size but doesn\'t need scaling',
+ ],
+ /* Max interlace image area */
+ [
+ [ 4000, 4000 ],
+ [
+ 'width' => 5000, 'height' => 5000,
+ 'physicalWidth' => 4000, 'physicalHeight' => 4000,
+ 'page' => 1, 'interlace' => false,
+ ],
+ [ 'width' => 5000, 'interlace' => true ],
+ 'Interlace bigger than max interlace area',
+ ],
+ ];
+ }
+
+ /**
+ * @covers BitmapHandler::doTransform
+ */
+ public function testTooBigImage() {
+ $file = new FakeDimensionFile( [ 4000, 4000 ] );
+ $handler = new BitmapHandler;
+ $params = [ 'width' => '3700' ]; // Still bigger than max size.
+ $this->assertEquals( TransformTooBigImageAreaError::class,
+ get_class( $handler->doTransform( $file, 'dummy path', '', $params ) ) );
+ }
+
+ /**
+ * @covers BitmapHandler::doTransform
+ */
+ public function testTooBigMustRenderImage() {
+ $file = new FakeDimensionFile( [ 4000, 4000 ] );
+ $file->mustRender = true;
+ $handler = new BitmapHandler;
+ $params = [ 'width' => '5000' ]; // Still bigger than max size.
+ $this->assertEquals( TransformTooBigImageAreaError::class,
+ get_class( $handler->doTransform( $file, 'dummy path', '', $params ) ) );
+ }
+
+ /**
+ * @covers BitmapHandler::getImageArea
+ */
+ public function testImageArea() {
+ $file = new FakeDimensionFile( [ 7, 9 ] );
+ $handler = new BitmapHandler;
+ $this->assertEquals( 63, $handler->getImageArea( $file ) );
+ }
+}