summaryrefslogtreecommitdiff
path: root/tests/phpunit/includes/media/FormatMetadataTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'tests/phpunit/includes/media/FormatMetadataTest.php')
-rw-r--r--tests/phpunit/includes/media/FormatMetadataTest.php71
1 files changed, 71 insertions, 0 deletions
diff --git a/tests/phpunit/includes/media/FormatMetadataTest.php b/tests/phpunit/includes/media/FormatMetadataTest.php
new file mode 100644
index 00000000..002e2cb9
--- /dev/null
+++ b/tests/phpunit/includes/media/FormatMetadataTest.php
@@ -0,0 +1,71 @@
+<?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 (bug 29471)' );
+ }
+
+ /**
+ * @param string $filename
+ * @param int $expected Total image area
+ * @dataProvider provideFlattenArray
+ * @covers FormatMetadata::flattenArray
+ */
+ public function testFlattenArray( $vals, $type, $noHtml, $ctx, $expected ) {
+ $actual = FormatMetadata::flattenArray( $vals, $type, $noHtml, $ctx );
+ $this->assertEquals( $expected, $actual );
+ }
+
+ public static function provideFlattenArray() {
+ return array(
+ array(
+ array( 1, 2, 3 ), 'ul', false, false,
+ "<ul><li>1</li>\n<li>2</li>\n<li>3</li></ul>",
+ ),
+ array(
+ array( 1, 2, 3 ), 'ol', false, false,
+ "<ol><li>1</li>\n<li>2</li>\n<li>3</li></ol>",
+ ),
+ array(
+ array( 1, 2, 3 ), 'ul', true, false,
+ "\n*1\n*2\n*3",
+ ),
+ array(
+ array( 1, 2, 3 ), 'ol', true, false,
+ "\n#1\n#2\n#3",
+ ),
+ // TODO: more test cases
+ );
+ }
+}