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