2011-08-21 18:05:34 +00:00
< ? php
2014-07-15 17:31:07 +00:00
/**
* @ group Media
*/
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 () {
2016-02-17 09:09:32 +00:00
return [
[ 'animated.gif' , true ],
[ 'nonanimated.gif' , false ],
];
2011-08-21 18:05:34 +00:00
}
/**
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 () {
2016-02-17 09:09:32 +00:00
return [
[ 'animated.gif' , 5400 ],
[ 'nonanimated.gif' , 1350 ],
];
2011-08-21 18:05:34 +00:00
}
/**
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 () {
2018-01-01 13:10:16 +00:00
// phpcs:disable Generic.Files.LineLength
2016-02-17 09:09:32 +00:00
return [
[ GIFHandler :: BROKEN_FILE , GIFHandler :: METADATA_GOOD ],
[ '' , GIFHandler :: METADATA_BAD ],
[ null , GIFHandler :: METADATA_BAD ],
[ 'Something invalid!' , GIFHandler :: METADATA_BAD ],
2016-03-19 01:05:19 +00:00
[
2017-05-20 15:53:19 +00:00
'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;}}' ,
2016-03-19 01:05:19 +00:00
GIFHandler :: METADATA_GOOD
],
2016-02-17 09:09:32 +00:00
];
2018-01-01 13:10:16 +00:00
// phpcs:enable
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 () {
2018-01-01 13:10:16 +00:00
// phpcs:disable Generic.Files.LineLength
2016-02-17 09:09:32 +00:00
return [
2016-03-19 01:05:19 +00:00
[
'nonanimated.gif' ,
2017-05-20 15:53:19 +00:00
'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;}}'
2016-03-19 01:05:19 +00:00
],
[
'animated-xmp.gif' ,
2017-05-20 15:53:19 +00:00
'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;}}'
2016-03-19 01:05:19 +00:00
],
2016-02-17 09:09:32 +00:00
];
2018-01-01 13:10:16 +00:00
// phpcs:enable
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 );
}
2014-09-18 01:28:26 +00:00
public static function provideGetIndependentMetaArray () {
2016-02-17 09:09:32 +00:00
return [
[ 'nonanimated.gif' , [
'GIFFileComment' => [
2013-08-28 23:09:07 +00:00
'GIF test file ⁕ Created with GIMP' ,
2016-02-17 09:09:32 +00:00
],
] ],
[ 'animated-xmp.gif' ,
[
2013-08-28 23:09:07 +00:00
'Artist' => 'Bawolff' ,
2016-02-17 09:09:32 +00:00
'ImageDescription' => [
2013-08-28 23:09:07 +00:00
'x-default' => 'A file to test GIF' ,
'_type' => 'lang' ,
2016-02-17 09:09:32 +00:00
],
2013-08-28 23:09:07 +00:00
'SublocationDest' => 'The interwebs' ,
'GIFFileComment' =>
2016-02-17 09:09:32 +00:00
[
2013-08-28 23:09:07 +00:00
'GIƒ·test·file' ,
2016-02-17 09:09:32 +00:00
],
]
],
];
2013-08-28 23:09:07 +00:00
}
2014-09-14 21:26:05 +00:00
/**
2016-04-30 10:10:17 +00:00
* @ param string $filename
* @ param float $expectedLength
2014-09-14 21:26:05 +00:00
* @ dataProvider provideGetLength
2017-12-25 07:26:10 +00:00
* @ covers GIFHandler :: getLength
2014-09-14 21:26:05 +00:00
*/
public function testGetLength ( $filename , $expectedLength ) {
$file = $this -> dataFile ( $filename , 'image/gif' );
$actualLength = $file -> getLength ();
$this -> assertEquals ( $expectedLength , $actualLength , '' , 0.00001 );
}
public function provideGetLength () {
2016-02-17 09:09:32 +00:00
return [
[ 'animated.gif' , 2.4 ],
[ 'animated-xmp.gif' , 2.4 ],
[ 'nonanimated' , 0.0 ],
[ 'Bishzilla_blink.gif' , 1.4 ],
];
2014-09-14 21:26:05 +00:00
}
2011-08-21 18:05:34 +00:00
}