4 * @group ResourceLoader
6 class ResourceLoaderImageModuleTest
extends ResourceLoaderTestCase
{
8 public static function providerGetModules() {
9 $commonVariants = array(
17 'constructive' => array(
20 'destructive' => array(
25 $commonImageData = array(
26 'advanced' => 'advanced.svg',
28 'image' => 'remove.svg',
29 'variants' => array( 'destructive' ),
39 'ltr' => 'help-ltr.svg',
40 'rtl' => 'help-rtl.svg',
42 'he' => 'help-ltr.svg',
48 'default' => 'bold-a.svg',
60 'class' => 'ResourceLoaderImageModule',
61 'prefix' => 'oo-ui-icon',
62 'variants' => $commonVariants,
63 'images' => $commonImageData,
65 '.oo-ui-icon-advanced {
68 .oo-ui-icon-advanced-invert {
74 .oo-ui-icon-remove-invert {
77 .oo-ui-icon-remove-destructive {
83 .oo-ui-icon-next-invert {
89 .oo-ui-icon-help-invert {
95 .oo-ui-icon-bold-invert {
101 'class' => 'ResourceLoaderImageModule',
102 'selectorWithoutVariant' => '.mw-ui-icon-{name}:after, .mw-ui-icon-{name}:before',
103 'selectorWithVariant' => '.mw-ui-icon-{name}-{variant}:after, .mw-ui-icon-{name}-{variant}:before',
104 'variants' => $commonVariants,
105 'images' => $commonImageData,
107 '.mw-ui-icon-advanced:after, .mw-ui-icon-advanced:before {
110 .mw-ui-icon-advanced-invert:after, .mw-ui-icon-advanced-invert:before {
113 .mw-ui-icon-remove:after, .mw-ui-icon-remove:before {
116 .mw-ui-icon-remove-invert:after, .mw-ui-icon-remove-invert:before {
119 .mw-ui-icon-remove-destructive:after, .mw-ui-icon-remove-destructive:before {
122 .mw-ui-icon-next:after, .mw-ui-icon-next:before {
125 .mw-ui-icon-next-invert:after, .mw-ui-icon-next-invert:before {
128 .mw-ui-icon-help:after, .mw-ui-icon-help:before {
131 .mw-ui-icon-help-invert:after, .mw-ui-icon-help-invert:before {
134 .mw-ui-icon-bold:after, .mw-ui-icon-bold:before {
137 .mw-ui-icon-bold-invert:after, .mw-ui-icon-bold-invert:before {
145 * @dataProvider providerGetModules
146 * @covers ResourceLoaderImageModule::getStyles
148 public function testGetStyles( $module, $expected ) {
149 $module = new ResourceLoaderImageModuleTestable( $module );
150 $styles = $module->getStyles( $this->getResourceLoaderContext() );
151 $this->assertEquals( $expected, $styles['all'] );
155 class ResourceLoaderImageModuleTestable
extends ResourceLoaderImageModule
{
157 * Replace with a stub to make test cases easier to write.
159 protected function getCssDeclarations( $primary, $fallback ) {
160 return array( '...' );
164 * Return mock ResourceLoaderImages that don't call file_get_contents and such.
166 public function getImages() {
167 $images = parent
::getImages();
168 foreach ( $images as $name => &$image ) {
169 $image = new ResourceLoaderImageWrapper( $image );
176 * Wraps a ResourceLoaderImage not to call file_get_contents and such.
178 class ResourceLoaderImageWrapper
extends ResourceLoaderImage
{
179 public function __construct( ResourceLoaderImage
$image ) {
180 $this->image
= $image;
183 public function getUrl( ResourceLoaderContext
$context, $script, $variant, $format ) {
187 public function getDataUri( ResourceLoaderContext
$context, $variant, $format ) {
191 public function __call( $method, $arguments ) {
192 return call_user_func_array( array( $this->image
, $method ), $arguments );
195 public function __get( $name ) {
196 return $this->image
->$name;