Account for HiDPI variants in thumb.php rate limiting
[lhc/web/wiklou.git] / tests / phpunit / includes / GlobalFunctions / wfThumbIsStandardTest.php
1 <?php
2
3 /**
4 * @group GlobalFunctions
5 * @covers ::wfThumbIsStandard
6 */
7 class WfThumbIsStandardTest extends MediaWikiTestCase {
8
9 protected function setUp() {
10 parent::setUp();
11
12 $this->setMwGlobals( array(
13 'wgThumbLimits' => array(
14 100,
15 401
16 ),
17 'wgImageLimits' => array(
18 array( 300, 225 ),
19 array( 800, 600 ),
20 ),
21 'wgMediaHandlers' => array(
22 'unknown/unknown' => 'MockBitmapHandler',
23 ),
24 ) );
25 }
26
27 public static function provideThumbParams() {
28 return array(
29 // Thumb limits
30 array(
31 'Standard thumb width',
32 true,
33 array( 'width' => 100 ),
34 ),
35 array(
36 'Standard thumb width',
37 true,
38 array( 'width' => 401 ),
39 ),
40 // wfThumbIsStandard should match Linker::processResponsiveImages
41 // in its rounding behaviour.
42 array(
43 'Standard thumb width (HiDPI 1.5x) - incorrect rounding',
44 false,
45 array( 'width' => 601 ),
46 ),
47 array(
48 'Standard thumb width (HiDPI 1.5x)',
49 true,
50 array( 'width' => 602 ),
51 ),
52 array(
53 'Standard thumb width (HiDPI 2x)',
54 true,
55 array( 'width' => 802 ),
56 ),
57 array(
58 'Non-standard thumb width',
59 false,
60 array( 'width' => 300 ),
61 ),
62 // Image limits
63 // Note: Image limits are measured as pairs. Individual values
64 // may be non-standard based on the aspect ratio.
65 array(
66 'Standard image width/height pair',
67 true,
68 array( 'width' => 250, 'height' => 225 ),
69 ),
70 array(
71 'Standard image width/height pair',
72 true,
73 array( 'width' => 667, 'height' => 600 ),
74 ),
75 array(
76 'Standard image width where image does not fit aspect ratio',
77 false,
78 array( 'width' => 300 ),
79 ),
80 array(
81 'Implicit width from image width/height pair aspect ratio fit',
82 true,
83 // 2000x1800 fit inside 300x225 makes w=250
84 array( 'width' => 250 ),
85 ),
86 array(
87 'Height-only is always non-standard',
88 false,
89 array( 'height' => 225 ),
90 ),
91 );
92 }
93
94 /**
95 * @dataProvider provideThumbParams
96 */
97 public function testIsStandard( $message, $expected, $params ) {
98 $this->assertSame(
99 $expected,
100 wfThumbIsStandard( new FakeDimensionFile( array( 2000, 1800 ) ), $params ),
101 $message
102 );
103 }
104 }