Fix misnamed SVGHandler::canAnimateThumb()
[lhc/web/wiklou.git] / tests / phpunit / includes / media / SVGMetadataExtractorTest.php
1 <?php
2
3 /**
4 * @covers SVGMetadataExtractor
5 */
6 class SVGMetadataExtractorTest extends MediaWikiTestCase {
7
8 protected function setUp() {
9 parent::setUp();
10 AutoLoader::loadClass( 'SVGMetadataExtractorTest' );
11 }
12
13 /**
14 * @dataProvider provideSvgFiles
15 */
16 public function testGetMetadata( $infile, $expected ) {
17 $this->assertMetadata( $infile, $expected );
18 }
19
20 /**
21 * @dataProvider provideSvgFilesWithXMLMetadata
22 */
23 public function testGetXMLMetadata( $infile, $expected ) {
24 $r = new XMLReader();
25 if ( !method_exists( $r, 'readInnerXML' ) ) {
26 $this->markTestSkipped( 'XMLReader::readInnerXML() does not exist (libxml >2.6.20 needed).' );
27
28 return;
29 }
30 $this->assertMetadata( $infile, $expected );
31 }
32
33 function assertMetadata( $infile, $expected ) {
34 try {
35 $data = SVGMetadataExtractor::getMetadata( $infile );
36 $this->assertEquals( $expected, $data, 'SVG metadata extraction test' );
37 } catch ( MWException $e ) {
38 if ( $expected === false ) {
39 $this->assertTrue( true, 'SVG metadata extracted test (expected failure)' );
40 } else {
41 throw $e;
42 }
43 }
44 }
45
46 public static function provideSvgFiles() {
47 $base = __DIR__ . '/../../data/media';
48
49 return array(
50 array(
51 "$base/Wikimedia-logo.svg",
52 array(
53 'width' => 1024,
54 'height' => 1024,
55 'originalWidth' => '1024',
56 'originalHeight' => '1024',
57 'translations' => array(),
58 )
59 ),
60 array(
61 "$base/QA_icon.svg",
62 array(
63 'width' => 60,
64 'height' => 60,
65 'originalWidth' => '60',
66 'originalHeight' => '60',
67 'translations' => array(),
68 )
69 ),
70 array(
71 "$base/Gtk-media-play-ltr.svg",
72 array(
73 'width' => 60,
74 'height' => 60,
75 'originalWidth' => '60.0000000',
76 'originalHeight' => '60.0000000',
77 'translations' => array(),
78 )
79 ),
80 array(
81 "$base/Toll_Texas_1.svg",
82 // This file triggered bug 31719, needs entity expansion in the xmlns checks
83 array(
84 'width' => 385,
85 'height' => 385,
86 'originalWidth' => '385',
87 'originalHeight' => '385.0004883',
88 'translations' => array(),
89 )
90 ),
91 array(
92 "$base/Tux.svg",
93 array(
94 'width' => 512,
95 'height' => 594,
96 'originalWidth' => '100%',
97 'originalHeight' => '100%',
98 'title' => 'Tux',
99 'translations' => array(),
100 'description' => 'For more information see: http://commons.wikimedia.org/wiki/Image:Tux.svg',
101 )
102 ),
103 array(
104 "$base/Speech_bubbles.svg",
105 array(
106 'width' => 627,
107 'height' => 461,
108 'originalWidth' => '17.7cm',
109 'originalHeight' => '13cm',
110 'translations' => array(
111 'de' => SVGReader::LANG_FULL_MATCH,
112 'fr' => SVGReader::LANG_FULL_MATCH,
113 'nl' => SVGReader::LANG_FULL_MATCH,
114 'tlh-ca' => SVGReader::LANG_FULL_MATCH,
115 'tlh' => SVGReader::LANG_PREFIX_MATCH
116 ),
117 )
118 ),
119 array(
120 "$base/Soccer_ball_animated.svg",
121 array(
122 'width' => 150,
123 'height' => 150,
124 'originalWidth' => '150',
125 'originalHeight' => '150',
126 'animated' => true,
127 'translations' => array()
128 ),
129 ),
130 );
131 }
132
133 public static function provideSvgFilesWithXMLMetadata() {
134 $base = __DIR__ . '/../../data/media';
135 // @codingStandardsIgnoreStart Ignore Generic.Files.LineLength.TooLong
136 $metadata = '<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
137 <ns4:Work xmlns:ns4="http://creativecommons.org/ns#" rdf:about="">
138 <ns5:format xmlns:ns5="http://purl.org/dc/elements/1.1/">image/svg+xml</ns5:format>
139 <ns5:type xmlns:ns5="http://purl.org/dc/elements/1.1/" rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
140 </ns4:Work>
141 </rdf:RDF>';
142 // @codingStandardsIgnoreEnd
143
144 $metadata = str_replace( "\r", '', $metadata ); // Windows compat
145 return array(
146 array(
147 "$base/US_states_by_total_state_tax_revenue.svg",
148 array(
149 'height' => 593,
150 'metadata' => $metadata,
151 'width' => 959,
152 'originalWidth' => '958.69',
153 'originalHeight' => '592.78998',
154 'translations' => array(),
155 )
156 ),
157 );
158 }
159 }