1<?php
2
3/**
4 * @group Media
5 */
6class MediaHandlerTest extends \MediaWikiUnitTestCase {
7
8	/**
9	 * @covers MediaHandler::fitBoxWidth
10	 *
11	 * @dataProvider provideTestFitBoxWidth
12	 */
13	public function testFitBoxWidth( $width, $height, $max, $expected ) {
14		$y = round( $expected * $height / $width );
15		$result = MediaHandler::fitBoxWidth( $width, $height, $max );
16		$y2 = round( $result * $height / $width );
17		$this->assertEquals( $expected,
18			$result,
19			"($width, $height, $max) wanted: {$expected}x$y, got: {z$result}x$y2" );
20	}
21
22	public static function provideTestFitBoxWidth() {
23		return array_merge(
24			static::generateTestFitBoxWidthData( 50, 50, [
25					50 => 50,
26					17 => 17,
27					18 => 18 ]
28			),
29			static::generateTestFitBoxWidthData( 366, 300, [
30					50 => 61,
31					17 => 21,
32					18 => 22 ]
33			),
34			static::generateTestFitBoxWidthData( 300, 366, [
35					50 => 41,
36					17 => 14,
37					18 => 15 ]
38			),
39			static::generateTestFitBoxWidthData( 100, 400, [
40					50 => 12,
41					17 => 4,
42					18 => 4 ]
43			)
44		);
45	}
46
47	/**
48	 * Generate single test cases by combining the dimensions and tests contents
49	 *
50	 * It creates:
51	 * [$width, $height, $max, $expected],
52	 * [$width, $height, $max2, $expected2], ...
53	 * out of parameters:
54	 * $width, $height, { $max => $expected, $max2 => $expected2, ... }
55	 *
56	 * @param int $width
57	 * @param int $height
58	 * @param array $tests associative array of $max => $expected values
59	 * @return array
60	 */
61	private static function generateTestFitBoxWidthData( $width, $height, $tests ) {
62		$result = [];
63		foreach ( $tests as $max => $expected ) {
64			$result[] = [ $width, $height, $max, $expected ];
65		}
66		return $result;
67	}
68}
69