Merge "Add an audio file parser test"
[lhc/web/wiklou.git] / tests / phpunit / includes / resourceloader / ResourceLoaderImageTest.php
1 <?php
2
3 /**
4 * @group ResourceLoader
5 */
6 class ResourceLoaderImageTest extends ResourceLoaderTestCase {
7
8 protected $imagesPath;
9
10 protected function setUp() {
11 parent::setUp();
12 $this->imagesPath = __DIR__ . '/../../data/resourceloader';
13 }
14
15 protected function getTestImage( $name ) {
16 $options = ResourceLoaderImageModuleTest::$commonImageData[$name];
17 $fileDescriptor = is_string( $options ) ? $options : $options['file'];
18 $allowedVariants = is_array( $options ) &&
19 isset( $options['variants'] ) ? $options['variants'] : [];
20 $variants = array_fill_keys( $allowedVariants, [ 'color' => 'red' ] );
21 return new ResourceLoaderImageTestable(
22 $name,
23 'test',
24 $fileDescriptor,
25 $this->imagesPath,
26 $variants
27 );
28 }
29
30 public static function provideGetPath() {
31 return [
32 [ 'add', 'en', 'add.gif' ],
33 [ 'add', 'he', 'add.gif' ],
34 [ 'remove', 'en', 'remove.svg' ],
35 [ 'remove', 'he', 'remove.svg' ],
36 [ 'next', 'en', 'next.svg' ],
37 [ 'next', 'he', 'prev.svg' ],
38 [ 'help', 'en', 'help-ltr.svg' ],
39 [ 'help', 'ar', 'help-rtl.svg' ],
40 [ 'help', 'he', 'help-ltr.svg' ],
41 [ 'bold', 'en', 'bold-b.svg' ],
42 [ 'bold', 'de', 'bold-f.svg' ],
43 [ 'bold', 'ar', 'bold-f.svg' ],
44 [ 'bold', 'fr', 'bold-a.svg' ],
45 [ 'bold', 'he', 'bold-a.svg' ],
46 ];
47 }
48
49 /**
50 * @covers ResourceLoaderImage::getPath
51 * @dataProvider provideGetPath
52 */
53 public function testGetPath( $imageName, $languageCode, $path ) {
54 static $dirMap = [
55 'en' => 'ltr',
56 'de' => 'ltr',
57 'fr' => 'ltr',
58 'he' => 'rtl',
59 'ar' => 'rtl',
60 ];
61 static $contexts = [];
62
63 $image = $this->getTestImage( $imageName );
64 $context = $this->getResourceLoaderContext( $languageCode, $dirMap[$languageCode] );
65
66 $this->assertEquals( $image->getPath( $context ), $this->imagesPath . '/' . $path );
67 }
68
69 /**
70 * @covers ResourceLoaderImage::getExtension
71 * @covers ResourceLoaderImage::getMimeType
72 */
73 public function testGetExtension() {
74 $image = $this->getTestImage( 'remove' );
75 $this->assertEquals( $image->getExtension(), 'svg' );
76 $this->assertEquals( $image->getExtension( 'original' ), 'svg' );
77 $this->assertEquals( $image->getExtension( 'rasterized' ), 'png' );
78 $image = $this->getTestImage( 'add' );
79 $this->assertEquals( $image->getExtension(), 'gif' );
80 $this->assertEquals( $image->getExtension( 'original' ), 'gif' );
81 $this->assertEquals( $image->getExtension( 'rasterized' ), 'gif' );
82 }
83
84 /**
85 * @covers ResourceLoaderImage::getImageData
86 * @covers ResourceLoaderImage::variantize
87 * @covers ResourceLoaderImage::massageSvgPathdata
88 */
89 public function testGetImageData() {
90 $context = $this->getResourceLoaderContext( 'en', 'ltr' );
91
92 $image = $this->getTestImage( 'remove' );
93 $data = file_get_contents( $this->imagesPath . '/remove.svg' );
94 $dataConstructive = file_get_contents( $this->imagesPath . '/remove_variantize.svg' );
95 $this->assertEquals( $image->getImageData( $context, null, 'original' ), $data );
96 $this->assertEquals(
97 $image->getImageData( $context, 'destructive', 'original' ),
98 $dataConstructive
99 );
100 // Stub, since we don't know if we even have a SVG handler, much less what exactly it'll output
101 $this->assertEquals( $image->getImageData( $context, null, 'rasterized' ), 'RASTERIZESTUB' );
102
103 $image = $this->getTestImage( 'add' );
104 $data = file_get_contents( $this->imagesPath . '/add.gif' );
105 $this->assertEquals( $image->getImageData( $context, null, 'original' ), $data );
106 $this->assertEquals( $image->getImageData( $context, null, 'rasterized' ), $data );
107 }
108
109 /**
110 * @covers ResourceLoaderImage::massageSvgPathdata
111 */
112 public function testMassageSvgPathdata() {
113 $image = $this->getTestImage( 'next' );
114 $data = file_get_contents( $this->imagesPath . '/next.svg' );
115 $dataMassaged = file_get_contents( $this->imagesPath . '/next_massage.svg' );
116 $this->assertEquals( $image->massageSvgPathdata( $data ), $dataMassaged );
117 }
118 }
119
120 class ResourceLoaderImageTestable extends ResourceLoaderImage {
121 // Make some protected methods public
122 public function massageSvgPathdata( $svg ) {
123 return parent::massageSvgPathdata( $svg );
124 }
125 // Stub, since we don't know if we even have a SVG handler, much less what exactly it'll output
126 public function rasterize( $svg ) {
127 return 'RASTERIZESTUB';
128 }
129 }