Merge "resourceloader: Simplify StringSet fallback"
[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 (T31471)' );
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::class );
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 [
56 'nonArray' => [
57 'foo',
58 'foo'
59 ],
60 'multiValue' => [
61 [ 'first', 'second', 'third', '_type' => 'ol' ],
62 'first'
63 ],
64 'noType' => [
65 [ 'first', 'second', 'third' ],
66 'first'
67 ],
68 'typeFirst' => [
69 [ '_type' => 'ol', 'first', 'second', 'third' ],
70 'first'
71 ],
72 'multilang' => [
73 [
74 'en' => 'first',
75 'de' => 'Erste',
76 '_type' => 'lang'
77 ],
78 [
79 'en' => 'first',
80 'de' => 'Erste',
81 '_type' => 'lang'
82 ],
83 ],
84 'multilang-multivalue' => [
85 [
86 'en' => [ 'first', 'second' ],
87 'de' => [ 'Erste', 'Zweite' ],
88 '_type' => 'lang'
89 ],
90 [
91 'en' => 'first',
92 'de' => 'Erste',
93 '_type' => 'lang'
94 ],
95 ],
96 ];
97 }
98
99 /**
100 * @param mixed $input
101 * @param mixed $output
102 * @dataProvider provideGetFormattedData
103 * @covers FormatMetadata::getFormattedData
104 */
105 public function testGetFormattedData( $input, $output ) {
106 $this->assertEquals( $output, FormatMetadata::getFormattedData( $input ) );
107 }
108
109 public function provideGetFormattedData() {
110 return [
111 [
112 [ 'Software' => 'Adobe Photoshop CS6 (Macintosh)' ],
113 [ 'Software' => 'Adobe Photoshop CS6 (Macintosh)' ],
114 ],
115 [
116 [ 'Software' => [ 'FotoWare FotoStation' ] ],
117 [ 'Software' => 'FotoWare FotoStation' ],
118 ],
119 [
120 [ 'Software' => [ [ 'Capture One PRO', '3.7.7' ] ] ],
121 [ 'Software' => 'Capture One PRO (Version 3.7.7)' ],
122 ],
123 [
124 [ 'Software' => [ [ 'FotoWare ColorFactory', '' ] ] ],
125 [ 'Software' => 'FotoWare ColorFactory (Version )' ],
126 ],
127 [
128 [ 'Software' => [ 'x-default' => 'paint.net 4.0.12', '_type' => 'lang' ] ],
129 [ 'Software' => '<ul class="metadata-langlist">' .
130 '<li class="mw-metadata-lang-default">' .
131 '<span class="mw-metadata-lang-value">paint.net 4.0.12</span>' .
132 "</li>\n" .
133 '</ul>'
134 ],
135 ],
136 [
137 // https://phabricator.wikimedia.org/T178130
138 // WebMHandler.php turns both 'muxingapp' & 'writingapp' to 'Software'
139 [ 'Software' => [ [ 'Lavf57.25.100' ], [ 'Lavf57.25.100' ] ] ],
140 [ 'Software' => "<ul><li>Lavf57.25.100</li>\n<li>Lavf57.25.100</li></ul>" ],
141 ],
142 ];
143 }
144 }