Merge "Made convertNamespace() use APC"
[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'] : array();
20 $variants = array_fill_keys( $allowedVariants, array( '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 array(
32 array( 'add', 'en', 'add.gif' ),
33 array( 'add', 'he', 'add.gif' ),
34 array( 'remove', 'en', 'remove.svg' ),
35 array( 'remove', 'he', 'remove.svg' ),
36 array( 'next', 'en', 'next.svg' ),
37 array( 'next', 'he', 'prev.svg' ),
38 array( 'help', 'en', 'help-ltr.svg' ),
39 array( 'help', 'ar', 'help-rtl.svg' ),
40 array( 'help', 'he', 'help-ltr.svg' ),
41 array( 'bold', 'en', 'bold-b.svg' ),
42 array( 'bold', 'de', 'bold-f.svg' ),
43 array( 'bold', 'ar', 'bold-f.svg' ),
44 array( 'bold', 'fr', 'bold-a.svg' ),
45 array( '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 = array(
55 'en' => 'ltr',
56 'de' => 'ltr',
57 'fr' => 'ltr',
58 'he' => 'rtl',
59 'ar' => 'rtl',
60 );
61 static $contexts = array();
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 }