Merge "Don't localize parentheses in version number in parserTests.php"
[lhc/web/wiklou.git] / tests / phpunit / includes / media / FormatMetadataTest.php
1 <?php
2
3 /**
4 * @group Media
5 */
6 class FormatMetadataTest extends MediaWikiMediaTestCase {
7
8 protected function setUp() {
9 parent::setUp();
10
11 $this->checkPHPExtension( 'exif' );
12 $this->setMwGlobals( 'wgShowEXIF', true );
13 }
14
15 /**
16 * @covers File::formatMetadata
17 */
18 public function testInvalidDate() {
19 $file = $this->dataFile( 'broken_exif_date.jpg', 'image/jpeg' );
20
21 // Throws an error if bug hit
22 $meta = $file->formatMetadata();
23 $this->assertNotEquals( false, $meta, 'Valid metadata extracted' );
24
25 // Find date exif entry
26 $this->assertArrayHasKey( 'visible', $meta );
27 $dateIndex = null;
28 foreach ( $meta['visible'] as $i => $data ) {
29 if ( $data['id'] == 'exif-datetimeoriginal' ) {
30 $dateIndex = $i;
31 }
32 }
33 $this->assertNotNull( $dateIndex, 'Date entry exists in metadata' );
34 $this->assertEquals( '0000:01:00 00:02:27',
35 $meta['visible'][$dateIndex]['value'],
36 'File with invalid date metadata (bug 29471)' );
37 }
38
39 /**
40 * @param mixed $input
41 * @param mixed $output
42 * @dataProvider provideResolveMultivalueValue
43 * @covers FormatMetadata::resolveMultivalueValue
44 */
45 public function testResolveMultivalueValue( $input, $output ) {
46 $formatMetadata = new FormatMetadata();
47 $class = new ReflectionClass( 'FormatMetadata' );
48 $method = $class->getMethod( 'resolveMultivalueValue' );
49 $method->setAccessible( true );
50 $actualInput = $method->invoke( $formatMetadata, $input );
51 $this->assertEquals( $output, $actualInput );
52 }
53
54 public function provideResolveMultivalueValue() {
55 return array(
56 'nonArray' => array( 'foo', 'foo' ),
57 'multiValue' => array( array( 'first', 'second', 'third', '_type' => 'ol' ), 'first' ),
58 'noType' => array( array( 'first', 'second', 'third' ), 'first' ),
59 'typeFirst' => array( array( '_type' => 'ol', 'first', 'second', 'third' ), 'first' ),
60 'multilang' => array(
61 array( 'en' => 'first', 'de' => 'Erste', '_type' => 'lang' ),
62 array( 'en' => 'first', 'de' => 'Erste', '_type' => 'lang' ),
63 ),
64 'multilang-multivalue' => array(
65 array( 'en' => array( 'first', 'second' ), 'de' => array( 'Erste', 'Zweite' ), '_type' => 'lang' ),
66 array( 'en' => 'first', 'de' => 'Erste', '_type' => 'lang' ),
67 ),
68 );
69 }
70 }