From: Brian Wolff Date: Thu, 23 Jun 2011 23:25:49 +0000 (+0000) Subject: Per CR on r86169, start adding unit tests for metadata extraction. X-Git-Tag: 1.31.0-rc.0~29321 X-Git-Url: http://git.cyclocoop.org/%7B%24www_url%7Dadmin/password.php?a=commitdiff_plain;h=cf32ccd0726a262fe1d2b6dc85ef367558703fda;p=lhc%2Fweb%2Fwiklou.git Per CR on r86169, start adding unit tests for metadata extraction. This is just some initial tests that really only cover png's. I plan to add more soon. Also well I'm here, fix the svn prop on broken_exif_date.jpg from r90421. --- diff --git a/tests/phpunit/includes/media/1bit-png.png b/tests/phpunit/includes/media/1bit-png.png new file mode 100644 index 0000000000..254e403a23 Binary files /dev/null and b/tests/phpunit/includes/media/1bit-png.png differ diff --git a/tests/phpunit/includes/media/Animated_PNG_example_bouncing_beach_ball.png b/tests/phpunit/includes/media/Animated_PNG_example_bouncing_beach_ball.png new file mode 100644 index 0000000000..c2f45d900b Binary files /dev/null and b/tests/phpunit/includes/media/Animated_PNG_example_bouncing_beach_ball.png differ diff --git a/tests/phpunit/includes/media/BitmapMetadataHandlerTest.php b/tests/phpunit/includes/media/BitmapMetadataHandlerTest.php new file mode 100644 index 0000000000..7059545e77 --- /dev/null +++ b/tests/phpunit/includes/media/BitmapMetadataHandlerTest.php @@ -0,0 +1,27 @@ + 'right(iptc)', + 'en' => 'right translation', + '_type' => 'lang' + ); + + $this->assertArrayHasKey( 'ImageDescription', $meta, + 'Did not extract any ImageDescription info?!' ); + + $this->assertEquals( $expected, $meta['ImageDescription'] ); + } +} diff --git a/tests/phpunit/includes/media/PNGMetadataExtractorTest.php b/tests/phpunit/includes/media/PNGMetadataExtractorTest.php new file mode 100644 index 0000000000..025127e3ce --- /dev/null +++ b/tests/phpunit/includes/media/PNGMetadataExtractorTest.php @@ -0,0 +1,138 @@ +assertArrayHasKey( 'text', $meta ); + $meta = $meta['text']; + $this->assertArrayHasKey( 'Make', $meta ); + $this->assertArrayHasKey( 'x-default', $meta['Make'] ); + + $this->assertEquals( $expected, $meta['Make']['x-default'] ); + } + + /** + * Test tEXt tag (Uncompressed textual metadata) + */ + function testPNGNativetEXt() { + $meta = PNGMetadataExtractor::getMetadata( dirname( __FILE__ ) . + '/Png-native-test.png' ); + $expected = "Some long image desc"; + $this->assertArrayHasKey( 'text', $meta ); + $meta = $meta['text']; + $this->assertArrayHasKey( 'ImageDescription', $meta ); + $this->assertArrayHasKey( 'x-default', $meta['ImageDescription'] ); + $this->assertArrayHasKey( '_type', $meta['ImageDescription'] ); + + $this->assertEquals( $expected, $meta['ImageDescription']['x-default'] ); + } + + /** + * tEXt tags must be encoded iso-8859-1 (vs iTXt which are utf-8) + * Make sure non-ascii characters get converted properly + */ + function testPNGNativettEXtNonASCII() { + $meta = PNGMetadataExtractor::getMetadata( dirname( __FILE__ ) . + '/Png-native-test.png' ); + + // Note the Copyright symbol here is a utf-8 one + // (aka \xC2\xA9) where in the file its iso-8859-1 + // encoded as just \xA9. + $expected = "© 2010 Bawolff"; + + + $this->assertArrayHasKey( 'text', $meta ); + $meta = $meta['text']; + $this->assertArrayHasKey( 'Copyright', $meta ); + $this->assertArrayHasKey( 'x-default', $meta['Copyright'] ); + + $this->assertEquals( $expected, $meta['Copyright']['x-default'] ); + } + + /** + * Test extraction of pHYs tags, which can tell what the + * actual resolution of the image is (aka in dots per meter). + function testPNGpHYsTag () { + $meta = PNGMetadataExtractor::getMetadata( dirname( __FILE__ ) . + '/Png-native-test.png' ); + + $this->assertArrayHasKey( 'text', $meta ); + $meta = $meta['text']; + + $this->assertEquals( '2835/100', $meta['XResolution'] ); + $this->assertEquals( '2835/100', $meta['YResolution'] ); + $this->assertEquals( 3, $meta['ResolutionUnit'] ); // 3 = cm + } + + /** + * Given a normal static PNG, check the animation metadata returned. + */ + function testStaticPNGAnimationMetadata() { + $meta = PNGMetadataExtractor::getMetadata( dirname( __FILE__ ) . + '/Png-native-test.png' ); + + $this->assertEquals( 0, $meta['frameCount'] ); + $this->assertEquals( 1, $meta['loopCount'] ); + $this->assertEquals( 0, $meta['duration'] ); + } + + /** + * Given an animated APNG image file + * check it gets animated metadata right. + */ + function testAPNGAnimationMetadata() { + $meta = PNGMetadataExtractor::getMetadata( dirname( __FILE__ ) . + '/Animated_PNG_example_bouncing_beach_ball.png' ); + + $this->assertEquals( 20, $meta['frameCount'] ); + // Note loop count of 0 = infinity + $this->assertEquals( 0, $meta['loopCount'] ); + $this->assertEquals( 1.5, $meta['duration'], '', 0.00001 ); + } + + function testPNGBitDepth8() { + $meta = PNGMetadataExtractor::getMetadata( dirname( __FILE__ ) . + '/Png-native-test.png' ); + + $this->assertEquals( 8, $meta['bitDepth'] ); + } + function testPNGBitDepth1() { + $meta = PNGMetadataExtractor::getMetadata( dirname( __FILE__ ) . + '/1bit-png.png' ); + $this->assertEquals( 1, $meta['bitDepth'] ); + } + + + function testPNGindexColour() { + $meta = PNGMetadataExtractor::getMetadata( dirname( __FILE__ ) . + '/Png-native-test.png' ); + + $this->assertEquals( 'index-coloured', $meta['colorType'] ); + } + function testPNGrgbColour() { + $meta = PNGMetadataExtractor::getMetadata( dirname( __FILE__ ) . + '/rgb-png.png' ); + $this->assertEquals( 'truecolour-alpha', $meta['colorType'] ); + } + function testPNGrgbNoAlphaColour() { + $meta = PNGMetadataExtractor::getMetadata( dirname( __FILE__ ) . + '/rgb-na-png.png' ); + $this->assertEquals( 'truecolour', $meta['colorType'] ); + } + function testPNGgreyscaleColour() { + $meta = PNGMetadataExtractor::getMetadata( dirname( __FILE__ ) . + '/greyscale-png.png' ); + $this->assertEquals( 'greyscale-alpha', $meta['colorType'] ); + } + function testPNGgreyscaleNoAlphaColour() { + $meta = PNGMetadataExtractor::getMetadata( dirname( __FILE__ ) . + '/greyscale-na-png.png' ); + $this->assertEquals( 'greyscale', $meta['colorType'] ); + } + + +} diff --git a/tests/phpunit/includes/media/Png-native-test.png b/tests/phpunit/includes/media/Png-native-test.png new file mode 100644 index 0000000000..a0b81ca996 Binary files /dev/null and b/tests/phpunit/includes/media/Png-native-test.png differ diff --git a/tests/phpunit/includes/media/README b/tests/phpunit/includes/media/README index cbed0ac368..91e3c4f158 100644 --- a/tests/phpunit/includes/media/README +++ b/tests/phpunit/includes/media/README @@ -14,3 +14,15 @@ http://commons.wikimedia.org/wiki/File:US_states_by_total_state_tax_revenue.svg CC-BY 3.0 TastyCakes on English Wikipedia + +greyscale-na-png.png, rgb-png.png, Xmp-exif-multilingual_test.jpg +greyscale-png.png, 1bit-png.png, Png-native-test.png, rgb-na-png.png +Are all by Bawolff. I don't think they contain enough originality to +claim copyright, but on the off chance they do, feel free to use them +however you feel fit, without restriction. + +Animated_PNG_example_bouncing_beach_ball.png +http://commons.wikimedia.org/wiki/File:Animated_PNG_example_bouncing_beach_ball.png (originally http://www.treebuilder.de/default.asp?file=89031.xml ) +Public Domain +Holger Will + diff --git a/tests/phpunit/includes/media/Xmp-exif-multilingual_test.jpg b/tests/phpunit/includes/media/Xmp-exif-multilingual_test.jpg new file mode 100644 index 0000000000..f7b23025cd Binary files /dev/null and b/tests/phpunit/includes/media/Xmp-exif-multilingual_test.jpg differ diff --git a/tests/phpunit/includes/media/greyscale-na-png.png b/tests/phpunit/includes/media/greyscale-na-png.png new file mode 100644 index 0000000000..4a4b7452d0 Binary files /dev/null and b/tests/phpunit/includes/media/greyscale-na-png.png differ diff --git a/tests/phpunit/includes/media/greyscale-png.png b/tests/phpunit/includes/media/greyscale-png.png new file mode 100644 index 0000000000..340a67b436 Binary files /dev/null and b/tests/phpunit/includes/media/greyscale-png.png differ diff --git a/tests/phpunit/includes/media/rgb-na-png.png b/tests/phpunit/includes/media/rgb-na-png.png new file mode 100644 index 0000000000..2f2a5ca013 Binary files /dev/null and b/tests/phpunit/includes/media/rgb-na-png.png differ diff --git a/tests/phpunit/includes/media/rgb-png.png b/tests/phpunit/includes/media/rgb-png.png new file mode 100644 index 0000000000..6f40cc9237 Binary files /dev/null and b/tests/phpunit/includes/media/rgb-png.png differ