diff options
Diffstat (limited to 'www/wiki/tests/phpunit/includes/media/FormatMetadataTest.php')
-rw-r--r-- | www/wiki/tests/phpunit/includes/media/FormatMetadataTest.php | 144 |
1 files changed, 144 insertions, 0 deletions
diff --git a/www/wiki/tests/phpunit/includes/media/FormatMetadataTest.php b/www/wiki/tests/phpunit/includes/media/FormatMetadataTest.php new file mode 100644 index 00000000..0987bd0a --- /dev/null +++ b/www/wiki/tests/phpunit/includes/media/FormatMetadataTest.php @@ -0,0 +1,144 @@ +<?php + +/** + * @group Media + */ +class FormatMetadataTest extends MediaWikiMediaTestCase { + + protected function setUp() { + parent::setUp(); + + $this->checkPHPExtension( 'exif' ); + $this->setMwGlobals( 'wgShowEXIF', true ); + } + + /** + * @covers File::formatMetadata + */ + public function testInvalidDate() { + $file = $this->dataFile( 'broken_exif_date.jpg', 'image/jpeg' ); + + // Throws an error if bug hit + $meta = $file->formatMetadata(); + $this->assertNotEquals( false, $meta, 'Valid metadata extracted' ); + + // Find date exif entry + $this->assertArrayHasKey( 'visible', $meta ); + $dateIndex = null; + foreach ( $meta['visible'] as $i => $data ) { + if ( $data['id'] == 'exif-datetimeoriginal' ) { + $dateIndex = $i; + } + } + $this->assertNotNull( $dateIndex, 'Date entry exists in metadata' ); + $this->assertEquals( '0000:01:00 00:02:27', + $meta['visible'][$dateIndex]['value'], + 'File with invalid date metadata (T31471)' ); + } + + /** + * @param mixed $input + * @param mixed $output + * @dataProvider provideResolveMultivalueValue + * @covers FormatMetadata::resolveMultivalueValue + */ + public function testResolveMultivalueValue( $input, $output ) { + $formatMetadata = new FormatMetadata(); + $class = new ReflectionClass( FormatMetadata::class ); + $method = $class->getMethod( 'resolveMultivalueValue' ); + $method->setAccessible( true ); + $actualInput = $method->invoke( $formatMetadata, $input ); + $this->assertEquals( $output, $actualInput ); + } + + public function provideResolveMultivalueValue() { + return [ + 'nonArray' => [ + 'foo', + 'foo' + ], + 'multiValue' => [ + [ 'first', 'second', 'third', '_type' => 'ol' ], + 'first' + ], + 'noType' => [ + [ 'first', 'second', 'third' ], + 'first' + ], + 'typeFirst' => [ + [ '_type' => 'ol', 'first', 'second', 'third' ], + 'first' + ], + 'multilang' => [ + [ + 'en' => 'first', + 'de' => 'Erste', + '_type' => 'lang' + ], + [ + 'en' => 'first', + 'de' => 'Erste', + '_type' => 'lang' + ], + ], + 'multilang-multivalue' => [ + [ + 'en' => [ 'first', 'second' ], + 'de' => [ 'Erste', 'Zweite' ], + '_type' => 'lang' + ], + [ + 'en' => 'first', + 'de' => 'Erste', + '_type' => 'lang' + ], + ], + ]; + } + + /** + * @param mixed $input + * @param mixed $output + * @dataProvider provideGetFormattedData + * @covers FormatMetadata::getFormattedData + */ + public function testGetFormattedData( $input, $output ) { + $this->assertEquals( $output, FormatMetadata::getFormattedData( $input ) ); + } + + public function provideGetFormattedData() { + return [ + [ + [ 'Software' => 'Adobe Photoshop CS6 (Macintosh)' ], + [ 'Software' => 'Adobe Photoshop CS6 (Macintosh)' ], + ], + [ + [ 'Software' => [ 'FotoWare FotoStation' ] ], + [ 'Software' => 'FotoWare FotoStation' ], + ], + [ + [ 'Software' => [ [ 'Capture One PRO', '3.7.7' ] ] ], + [ 'Software' => 'Capture One PRO (Version 3.7.7)' ], + ], + [ + [ 'Software' => [ [ 'FotoWare ColorFactory', '' ] ] ], + [ 'Software' => 'FotoWare ColorFactory (Version )' ], + ], + [ + [ 'Software' => [ 'x-default' => 'paint.net 4.0.12', '_type' => 'lang' ] ], + [ 'Software' => '<ul class="metadata-langlist">'. + '<li class="mw-metadata-lang-default">'. + '<span class="mw-metadata-lang-value">paint.net 4.0.12</span>'. + "</li>\n". + '</ul>' + ], + ], + [ + // https://phabricator.wikimedia.org/T178130 + // WebMHandler.php turns both 'muxingapp' & 'writingapp' to 'Software' + [ 'Software' => [ [ 'Lavf57.25.100' ], [ 'Lavf57.25.100' ] ] ], + [ 'Software' => "<ul><li>Lavf57.25.100</li>\n<li>Lavf57.25.100</li></ul>" ], + ], + ]; + } +} |