14e4d57c5d85a8d5c9649acd4009804e7f7324bb
[lhc/web/wiklou.git] / tests / phpunit / includes / media / PNGTest.php
1 <?php
2 class PNGHandlerTest extends MediaWikiMediaTestCase {
3
4 /** @var PNGHandler */
5 protected $handler;
6
7 protected function setUp() {
8 parent::setUp();
9 $this->handler = new PNGHandler();
10 }
11
12 /**
13 * @covers PNGHandler::getMetadata
14 */
15 public function testInvalidFile() {
16 $res = $this->handler->getMetadata( null, $this->filePath . '/README' );
17 $this->assertEquals( PNGHandler::BROKEN_FILE, $res );
18 }
19
20 /**
21 * @param string $filename basename of the file to check
22 * @param bool $expected Expected result.
23 * @dataProvider provideIsAnimated
24 * @covers PNGHandler::isAnimatedImage
25 */
26 public function testIsAnimanted( $filename, $expected ) {
27 $file = $this->dataFile( $filename, 'image/png' );
28 $actual = $this->handler->isAnimatedImage( $file );
29 $this->assertEquals( $expected, $actual );
30 }
31
32 public static function provideIsAnimated() {
33 return array(
34 array( 'Animated_PNG_example_bouncing_beach_ball.png', true ),
35 array( '1bit-png.png', false ),
36 );
37 }
38
39 /**
40 * @param string $filename
41 * @param int $expected Total image area
42 * @dataProvider provideGetImageArea
43 * @covers PNGHandler::getImageArea
44 */
45 public function testGetImageArea( $filename, $expected ) {
46 $file = $this->dataFile( $filename, 'image/png' );
47 $actual = $this->handler->getImageArea( $file, $file->getWidth(), $file->getHeight() );
48 $this->assertEquals( $expected, $actual );
49 }
50
51 public static function provideGetImageArea() {
52 return array(
53 array( '1bit-png.png', 2500 ),
54 array( 'greyscale-png.png', 2500 ),
55 array( 'Png-native-test.png', 126000 ),
56 array( 'Animated_PNG_example_bouncing_beach_ball.png', 10000 ),
57 );
58 }
59
60 /**
61 * @param string $metadata Serialized metadata
62 * @param int $expected One of the class constants of PNGHandler
63 * @dataProvider provideIsMetadataValid
64 * @covers PNGHandler::isMetadataValid
65 */
66 public function testIsMetadataValid( $metadata, $expected ) {
67 $actual = $this->handler->isMetadataValid( null, $metadata );
68 $this->assertEquals( $expected, $actual );
69 }
70
71 public static function provideIsMetadataValid() {
72 return array(
73 array( PNGHandler::BROKEN_FILE, PNGHandler::METADATA_GOOD ),
74 array( '', PNGHandler::METADATA_BAD ),
75 array( null, PNGHandler::METADATA_BAD ),
76 array( 'Something invalid!', PNGHandler::METADATA_BAD ),
77 // @codingStandardsIgnoreStart Ignore Generic.Files.LineLength.TooLong
78 array( 'a:6:{s:10:"frameCount";i:0;s:9:"loopCount";i:1;s:8:"duration";d:0;s:8:"bitDepth";i:8;s:9:"colorType";s:10:"truecolour";s:8:"metadata";a:1:{s:15:"_MW_PNG_VERSION";i:1;}}', PNGHandler::METADATA_GOOD ),
79 // @codingStandardsIgnoreEnd
80 );
81 }
82
83 /**
84 * @param string $filename
85 * @param string $expected Serialized array
86 * @dataProvider provideGetMetadata
87 * @covers PNGHandler::getMetadata
88 */
89 public function testGetMetadata( $filename, $expected ) {
90 $file = $this->dataFile( $filename, 'image/png' );
91 $actual = $this->handler->getMetadata( $file, "$this->filePath/$filename" );
92 // $this->assertEquals( unserialize( $expected ), unserialize( $actual ) );
93 $this->assertEquals( ( $expected ), ( $actual ) );
94 }
95
96 public static function provideGetMetadata() {
97 return array(
98 // @codingStandardsIgnoreStart Ignore Generic.Files.LineLength.TooLong
99 array( 'rgb-na-png.png', 'a:6:{s:10:"frameCount";i:0;s:9:"loopCount";i:1;s:8:"duration";d:0;s:8:"bitDepth";i:8;s:9:"colorType";s:10:"truecolour";s:8:"metadata";a:1:{s:15:"_MW_PNG_VERSION";i:1;}}' ),
100 array( 'xmp.png', 'a:6:{s:10:"frameCount";i:0;s:9:"loopCount";i:1;s:8:"duration";d:0;s:8:"bitDepth";i:1;s:9:"colorType";s:14:"index-coloured";s:8:"metadata";a:2:{s:12:"SerialNumber";s:9:"123456789";s:15:"_MW_PNG_VERSION";i:1;}}' ),
101 // @codingStandardsIgnoreEnd
102 );
103 }
104
105 /**
106 * @param string $filename
107 * @param array $expected Expected standard metadata
108 * @dataProvider provideGetIndependentMetaArray
109 * @covers PNGHandler::getCommonMetaArray
110 */
111 public function testGetIndependentMetaArray( $filename, $expected ) {
112 $file = $this->dataFile( $filename, 'image/png' );
113 $actual = $this->handler->getCommonMetaArray( $file );
114 $this->assertEquals( $expected, $actual );
115 }
116
117 public function provideGetIndependentMetaArray() {
118 return array(
119 array( 'rgb-na-png.png', array() ),
120 array( 'xmp.png',
121 array(
122 'SerialNumber' => '123456789',
123 )
124 ),
125 );
126 }
127 }