2011-08-21 18:05:34 +00:00
< ? php
class GIFHandlerTest extends MediaWikiTestCase {
2013-10-23 22:12:39 +00:00
/** @var FSFileBackend */
protected $backend ;
/** @var GIFHandler */
protected $handler ;
/** @var FSRepo */
protected $repo ;
/** @var string */
protected $filePath ;
2012-10-08 10:56:20 +00:00
protected function setUp () {
parent :: setUp ();
2013-02-15 10:17:52 +00:00
$this -> filePath = __DIR__ . '/../../data/media' ;
2011-12-20 03:52:06 +00:00
$this -> backend = new FSFileBackend ( array (
2013-02-15 10:17:52 +00:00
'name' => 'localtesting' ,
'lockManager' => 'nullLockManager' ,
2011-12-20 03:52:06 +00:00
'containerPaths' => array ( 'data' => $this -> filePath )
) );
$this -> repo = new FSRepo ( array (
2013-02-15 10:17:52 +00:00
'name' => 'temp' ,
'url' => 'http://localhost/thumbtest' ,
2011-12-20 03:52:06 +00:00
'backend' => $this -> backend
) );
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
/**
* @ param $filename String basename of the file to check
* @ param $expected boolean 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 ),
);
}
/**
* @ param $filename String
* @ param $expected Integer 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 ),
);
}
/**
* @ param $metadata String Serialized metadata
* @ param $expected Integer 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 ),
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 ),
);
}
/**
* @ param $filename String
* @ param $expected String 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 (
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;}}' ),
);
}
2011-12-20 03:52:06 +00:00
2013-08-28 23:09:07 +00:00
/**
* @ param $filename String
* @ param $expected String Serialized array
* @ 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-12-20 03:52:06 +00:00
private function dataFile ( $name , $type ) {
return new UnregisteredLocalFile ( false , $this -> repo ,
" mwstore://localtesting/data/ $name " , $type );
}
2011-08-21 18:05:34 +00:00
}