2011-08-21 18:05:34 +00:00
< ? php
2014-05-26 20:16:07 +00:00
class GIFHandlerTest extends MediaWikiMediaTestCase {
2011-08-21 18:05:34 +00:00
2013-10-23 22:12:39 +00:00
/** @var GIFHandler */
protected $handler ;
2012-10-08 10:56:20 +00:00
protected function setUp () {
parent :: setUp ();
2011-08-21 18:05:34 +00:00
$this -> handler = new GIFHandler ();
}
2013-10-23 22:12:39 +00:00
/**
* @ covers GIFHandler :: getMetadata
*/
2011-08-21 18:05:34 +00:00
public function testInvalidFile () {
2011-12-20 03:52:06 +00:00
$res = $this -> handler -> getMetadata ( null , $this -> filePath . '/README' );
2011-08-21 18:05:34 +00:00
$this -> assertEquals ( GIFHandler :: BROKEN_FILE , $res );
}
2012-10-08 10:56:20 +00:00
2011-08-21 18:05:34 +00:00
/**
2014-04-17 18:43:42 +00:00
* @ param string $filename Basename of the file to check
* @ param bool $expected Expected result .
2012-10-08 10:56:20 +00:00
* @ dataProvider provideIsAnimated
2013-10-23 22:12:39 +00:00
* @ covers GIFHandler :: isAnimatedImage
2011-08-21 18:05:34 +00:00
*/
public function testIsAnimanted ( $filename , $expected ) {
2011-12-20 03:52:06 +00:00
$file = $this -> dataFile ( $filename , 'image/gif' );
2011-08-21 18:05:34 +00:00
$actual = $this -> handler -> isAnimatedImage ( $file );
$this -> assertEquals ( $expected , $actual );
}
2013-02-15 10:17:52 +00:00
2012-10-08 10:56:20 +00:00
public static function provideIsAnimated () {
2011-08-21 18:05:34 +00:00
return array (
array ( 'animated.gif' , true ),
array ( 'nonanimated.gif' , false ),
);
}
/**
2014-04-17 18:43:42 +00:00
* @ param string $filename
* @ param int $expected Total image area
2012-10-08 10:56:20 +00:00
* @ dataProvider provideGetImageArea
2013-10-23 22:12:39 +00:00
* @ covers GIFHandler :: getImageArea
2011-08-21 18:05:34 +00:00
*/
public function testGetImageArea ( $filename , $expected ) {
2011-12-20 03:52:06 +00:00
$file = $this -> dataFile ( $filename , 'image/gif' );
2011-08-21 18:05:34 +00:00
$actual = $this -> handler -> getImageArea ( $file , $file -> getWidth (), $file -> getHeight () );
$this -> assertEquals ( $expected , $actual );
}
2013-02-15 10:17:52 +00:00
2012-10-08 10:56:20 +00:00
public static function provideGetImageArea () {
2011-08-21 18:05:34 +00:00
return array (
array ( 'animated.gif' , 5400 ),
array ( 'nonanimated.gif' , 1350 ),
);
}
/**
2014-04-17 18:43:42 +00:00
* @ param string $metadata Serialized metadata
* @ param int $expected One of the class constants of GIFHandler
2012-10-08 10:56:20 +00:00
* @ dataProvider provideIsMetadataValid
2013-10-23 22:12:39 +00:00
* @ covers GIFHandler :: isMetadataValid
2011-08-21 18:05:34 +00:00
*/
public function testIsMetadataValid ( $metadata , $expected ) {
$actual = $this -> handler -> isMetadataValid ( null , $metadata );
$this -> assertEquals ( $expected , $actual );
}
2013-02-15 10:17:52 +00:00
2012-10-08 10:56:20 +00:00
public static function provideIsMetadataValid () {
2011-08-21 18:05:34 +00:00
return array (
array ( GIFHandler :: BROKEN_FILE , GIFHandler :: METADATA_GOOD ),
array ( '' , GIFHandler :: METADATA_BAD ),
array ( null , GIFHandler :: METADATA_BAD ),
array ( 'Something invalid!' , GIFHandler :: METADATA_BAD ),
2014-04-24 17:51:33 +00:00
// @codingStandardsIgnoreStart Ignore Generic.Files.LineLength.TooLong
2011-08-21 18:05:34 +00:00
array ( 'a:4:{s:10:"frameCount";i:1;s:6:"looped";b:0;s:8:"duration";d:0.1000000000000000055511151231257827021181583404541015625;s:8:"metadata";a:2:{s:14:"GIFFileComment";a:1:{i:0;s:35:"GIF test file ⁕ Created with GIMP";}s:15:"_MW_GIF_VERSION";i:1;}}' , GIFHandler :: METADATA_GOOD ),
2014-04-24 17:51:33 +00:00
// @codingStandardsIgnoreEnd
2011-08-21 18:05:34 +00:00
);
}
/**
2014-04-17 18:43:42 +00:00
* @ param string $filename
* @ param string $expected Serialized array
2012-10-08 10:56:20 +00:00
* @ dataProvider provideGetMetadata
2013-10-23 22:12:39 +00:00
* @ covers GIFHandler :: getMetadata
2011-08-21 18:05:34 +00:00
*/
public function testGetMetadata ( $filename , $expected ) {
2011-12-20 03:52:06 +00:00
$file = $this -> dataFile ( $filename , 'image/gif' );
$actual = $this -> handler -> getMetadata ( $file , " $this->filePath / $filename " );
2011-08-21 18:05:34 +00:00
$this -> assertEquals ( unserialize ( $expected ), unserialize ( $actual ) );
}
2011-12-20 03:52:06 +00:00
2012-10-08 10:56:20 +00:00
public static function provideGetMetadata () {
2011-08-21 18:05:34 +00:00
return array (
2014-04-24 17:51:33 +00:00
// @codingStandardsIgnoreStart Ignore Generic.Files.LineLength.TooLong
2011-08-21 18:05:34 +00:00
array ( 'nonanimated.gif' , 'a:4:{s:10:"frameCount";i:1;s:6:"looped";b:0;s:8:"duration";d:0.1000000000000000055511151231257827021181583404541015625;s:8:"metadata";a:2:{s:14:"GIFFileComment";a:1:{i:0;s:35:"GIF test file ⁕ Created with GIMP";}s:15:"_MW_GIF_VERSION";i:1;}}' ),
array ( 'animated-xmp.gif' , 'a:4:{s:10:"frameCount";i:4;s:6:"looped";b:1;s:8:"duration";d:2.399999999999999911182158029987476766109466552734375;s:8:"metadata";a:5:{s:6:"Artist";s:7:"Bawolff";s:16:"ImageDescription";a:2:{s:9:"x-default";s:18:"A file to test GIF";s:5:"_type";s:4:"lang";}s:15:"SublocationDest";s:13:"The interwebs";s:14:"GIFFileComment";a:1:{i:0;s:16:"GIƒ·test·file";}s:15:"_MW_GIF_VERSION";i:1;}}' ),
2014-04-24 17:51:33 +00:00
// @codingStandardsIgnoreEnd
2011-08-21 18:05:34 +00:00
);
}
2011-12-20 03:52:06 +00:00
2013-08-28 23:09:07 +00:00
/**
2014-04-17 18:43:42 +00:00
* @ param string $filename
* @ param string $expected Serialized array
2013-08-28 23:09:07 +00:00
* @ dataProvider provideGetIndependentMetaArray
2013-08-07 23:03:34 +00:00
* @ covers GIFHandler :: getCommonMetaArray
2013-08-28 23:09:07 +00:00
*/
public function testGetIndependentMetaArray ( $filename , $expected ) {
$file = $this -> dataFile ( $filename , 'image/gif' );
$actual = $this -> handler -> getCommonMetaArray ( $file );
$this -> assertEquals ( $expected , $actual );
}
public function provideGetIndependentMetaArray () {
return array (
array ( 'nonanimated.gif' , array (
'GIFFileComment' => array (
'GIF test file ⁕ Created with GIMP' ,
),
) ),
array ( 'animated-xmp.gif' ,
array (
'Artist' => 'Bawolff' ,
'ImageDescription' => array (
'x-default' => 'A file to test GIF' ,
'_type' => 'lang' ,
),
'SublocationDest' => 'The interwebs' ,
'GIFFileComment' =>
array (
'GIƒ·test·file' ,
),
)
),
);
}
2011-08-21 18:05:34 +00:00
}