]> scripts.mit.edu Git - autoinstallsdev/mediawiki.git/blob - tests/phpunit/includes/media/BitmapScalingTest.php
MediaWiki 1.30.2
[autoinstallsdev/mediawiki.git] / tests / phpunit / includes / media / BitmapScalingTest.php
1 <?php
2
3 /**
4  * @group Media
5  */
6 class BitmapScalingTest extends MediaWikiTestCase {
7
8         protected function setUp() {
9                 parent::setUp();
10
11                 $this->setMwGlobals( [
12                         'wgMaxImageArea' => 1.25e7, // 3500x3500
13                         'wgCustomConvertCommand' => 'dummy', // Set so that we don't get client side rendering
14                 ] );
15         }
16
17         /**
18          * @dataProvider provideNormaliseParams
19          * @covers BitmapHandler::normaliseParams
20          */
21         public function testNormaliseParams( $fileDimensions, $expectedParams, $params, $msg ) {
22                 $file = new FakeDimensionFile( $fileDimensions );
23                 $handler = new BitmapHandler;
24                 $valid = $handler->normaliseParams( $file, $params );
25                 $this->assertTrue( $valid );
26                 $this->assertEquals( $expectedParams, $params, $msg );
27         }
28
29         public static function provideNormaliseParams() {
30                 return [
31                         /* Regular resize operations */
32                         [
33                                 [ 1024, 768 ],
34                                 [
35                                         'width' => 512, 'height' => 384,
36                                         'physicalWidth' => 512, 'physicalHeight' => 384,
37                                         'page' => 1, 'interlace' => false,
38                                 ],
39                                 [ 'width' => 512 ],
40                                 'Resizing with width set',
41                         ],
42                         [
43                                 [ 1024, 768 ],
44                                 [
45                                         'width' => 512, 'height' => 384,
46                                         'physicalWidth' => 512, 'physicalHeight' => 384,
47                                         'page' => 1, 'interlace' => false,
48                                 ],
49                                 [ 'width' => 512, 'height' => 768 ],
50                                 'Resizing with height set too high',
51                         ],
52                         [
53                                 [ 1024, 768 ],
54                                 [
55                                         'width' => 512, 'height' => 384,
56                                         'physicalWidth' => 512, 'physicalHeight' => 384,
57                                         'page' => 1, 'interlace' => false,
58                                 ],
59                                 [ 'width' => 1024, 'height' => 384 ],
60                                 'Resizing with height set',
61                         ],
62
63                         /* Very tall images */
64                         [
65                                 [ 1000, 100 ],
66                                 [
67                                         'width' => 5, 'height' => 1,
68                                         'physicalWidth' => 5, 'physicalHeight' => 1,
69                                         'page' => 1, 'interlace' => false,
70                                 ],
71                                 [ 'width' => 5 ],
72                                 'Very wide image',
73                         ],
74
75                         [
76                                 [ 100, 1000 ],
77                                 [
78                                         'width' => 1, 'height' => 10,
79                                         'physicalWidth' => 1, 'physicalHeight' => 10,
80                                         'page' => 1, 'interlace' => false,
81                                 ],
82                                 [ 'width' => 1 ],
83                                 'Very high image',
84                         ],
85                         [
86                                 [ 100, 1000 ],
87                                 [
88                                         'width' => 1, 'height' => 5,
89                                         'physicalWidth' => 1, 'physicalHeight' => 10,
90                                         'page' => 1, 'interlace' => false,
91                                 ],
92                                 [ 'width' => 10, 'height' => 5 ],
93                                 'Very high image with height set',
94                         ],
95                         /* Max image area */
96                         [
97                                 [ 4000, 4000 ],
98                                 [
99                                         'width' => 5000, 'height' => 5000,
100                                         'physicalWidth' => 4000, 'physicalHeight' => 4000,
101                                         'page' => 1, 'interlace' => false,
102                                 ],
103                                 [ 'width' => 5000 ],
104                                 'Bigger than max image size but doesn\'t need scaling',
105                         ],
106                         /* Max interlace image area */
107                         [
108                                 [ 4000, 4000 ],
109                                 [
110                                         'width' => 5000, 'height' => 5000,
111                                         'physicalWidth' => 4000, 'physicalHeight' => 4000,
112                                         'page' => 1, 'interlace' => false,
113                                 ],
114                                 [ 'width' => 5000, 'interlace' => true ],
115                                 'Interlace bigger than max interlace area',
116                         ],
117                 ];
118         }
119
120         /**
121          * @covers BitmapHandler::doTransform
122          */
123         public function testTooBigImage() {
124                 $file = new FakeDimensionFile( [ 4000, 4000 ] );
125                 $handler = new BitmapHandler;
126                 $params = [ 'width' => '3700' ]; // Still bigger than max size.
127                 $this->assertEquals( 'TransformTooBigImageAreaError',
128                         get_class( $handler->doTransform( $file, 'dummy path', '', $params ) ) );
129         }
130
131         /**
132          * @covers BitmapHandler::doTransform
133          */
134         public function testTooBigMustRenderImage() {
135                 $file = new FakeDimensionFile( [ 4000, 4000 ] );
136                 $file->mustRender = true;
137                 $handler = new BitmapHandler;
138                 $params = [ 'width' => '5000' ]; // Still bigger than max size.
139                 $this->assertEquals( 'TransformTooBigImageAreaError',
140                         get_class( $handler->doTransform( $file, 'dummy path', '', $params ) ) );
141         }
142
143         /**
144          * @covers BitmapHandler::getImageArea
145          */
146         public function testImageArea() {
147                 $file = new FakeDimensionFile( [ 7, 9 ] );
148                 $handler = new BitmapHandler;
149                 $this->assertEquals( 63, $handler->getImageArea( $file ) );
150         }
151 }