Merge "Add debug logging for the case that the API goes read only"
[lhc/web/wiklou.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( array(
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 array(
31 /* Regular resize operations */
32 array(
33 array( 1024, 768 ),
34 array(
35 'width' => 512, 'height' => 384,
36 'physicalWidth' => 512, 'physicalHeight' => 384,
37 'page' => 1, 'interlace' => false,
38 ),
39 array( 'width' => 512 ),
40 'Resizing with width set',
41 ),
42 array(
43 array( 1024, 768 ),
44 array(
45 'width' => 512, 'height' => 384,
46 'physicalWidth' => 512, 'physicalHeight' => 384,
47 'page' => 1, 'interlace' => false,
48 ),
49 array( 'width' => 512, 'height' => 768 ),
50 'Resizing with height set too high',
51 ),
52 array(
53 array( 1024, 768 ),
54 array(
55 'width' => 512, 'height' => 384,
56 'physicalWidth' => 512, 'physicalHeight' => 384,
57 'page' => 1, 'interlace' => false,
58 ),
59 array( 'width' => 1024, 'height' => 384 ),
60 'Resizing with height set',
61 ),
62
63 /* Very tall images */
64 array(
65 array( 1000, 100 ),
66 array(
67 'width' => 5, 'height' => 1,
68 'physicalWidth' => 5, 'physicalHeight' => 1,
69 'page' => 1, 'interlace' => false,
70 ),
71 array( 'width' => 5 ),
72 'Very wide image',
73 ),
74
75 array(
76 array( 100, 1000 ),
77 array(
78 'width' => 1, 'height' => 10,
79 'physicalWidth' => 1, 'physicalHeight' => 10,
80 'page' => 1, 'interlace' => false,
81 ),
82 array( 'width' => 1 ),
83 'Very high image',
84 ),
85 array(
86 array( 100, 1000 ),
87 array(
88 'width' => 1, 'height' => 5,
89 'physicalWidth' => 1, 'physicalHeight' => 10,
90 'page' => 1, 'interlace' => false,
91 ),
92 array( 'width' => 10, 'height' => 5 ),
93 'Very high image with height set',
94 ),
95 /* Max image area */
96 array(
97 array( 4000, 4000 ),
98 array(
99 'width' => 5000, 'height' => 5000,
100 'physicalWidth' => 4000, 'physicalHeight' => 4000,
101 'page' => 1, 'interlace' => false,
102 ),
103 array( 'width' => 5000 ),
104 'Bigger than max image size but doesn\'t need scaling',
105 ),
106 /* Max interlace image area */
107 array(
108 array( 4000, 4000 ),
109 array(
110 'width' => 5000, 'height' => 5000,
111 'physicalWidth' => 4000, 'physicalHeight' => 4000,
112 'page' => 1, 'interlace' => false,
113 ),
114 array( '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( array( 4000, 4000 ) );
125 $handler = new BitmapHandler;
126 $params = array( '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( array( 4000, 4000 ) );
136 $file->mustRender = true;
137 $handler = new BitmapHandler;
138 $params = array( '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( array( 7, 9 ) );
148 $handler = new BitmapHandler;
149 $this->assertEquals( 63, $handler->getImageArea( $file ) );
150 }
151 }