From: Timo Tijhof Date: Tue, 24 Sep 2019 22:48:48 +0000 (+0100) Subject: resourceloader: Convert ImageModule test to stricter unit test X-Git-Tag: 1.34.0-rc.0~98^2 X-Git-Url: http://git.cyclocoop.org/%7B%24admin_url%7Dmembres/Subpage_test/1/2/%22%20.%20%24self2%20.%20%22&var_mode_affiche=resultat?a=commitdiff_plain;h=d85ea2b0305ff62ab42c2c724a707963c3ed3848;p=lhc%2Fweb%2Fwiklou.git resourceloader: Convert ImageModule test to stricter unit test Bug: T233343 Change-Id: I1f9d0b6b735c9192bb32baf249eefea76c65929e --- diff --git a/tests/phpunit/includes/resourceloader/ResourceLoaderImageModuleTest.php b/tests/phpunit/includes/resourceloader/ResourceLoaderImageModuleTest.php index dad9f1ed4f..6ebbc3a036 100644 --- a/tests/phpunit/includes/resourceloader/ResourceLoaderImageModuleTest.php +++ b/tests/phpunit/includes/resourceloader/ResourceLoaderImageModuleTest.php @@ -292,9 +292,8 @@ TEXT ->disableOriginalConstructor() ->getMock(); $image->method( 'getDataUri' ) - ->will( $this->returnValue( $dataUriReturnValue ) ); - $image->expects( $this->any() ) - ->method( 'getUrl' ) + ->willReturn( $dataUriReturnValue ); + $image->method( 'getUrl' ) ->will( $this->returnValueMap( [ [ $context, 'load.php', null, 'original', 'original.svg' ], [ $context, 'load.php', null, 'rasterized', 'rasterized.png' ], diff --git a/tests/phpunit/includes/resourceloader/ResourceLoaderImageTest.php b/tests/phpunit/includes/resourceloader/ResourceLoaderImageTest.php deleted file mode 100644 index c3fc55acc1..0000000000 --- a/tests/phpunit/includes/resourceloader/ResourceLoaderImageTest.php +++ /dev/null @@ -1,136 +0,0 @@ -imagesPath = __DIR__ . '/../../data/resourceloader'; - } - - protected function getTestImage( $name ) { - $options = ResourceLoaderImageModuleTest::$commonImageData[$name]; - $fileDescriptor = is_string( $options ) ? $options : $options['file']; - $allowedVariants = ( is_array( $options ) && isset( $options['variants'] ) ) ? - $options['variants'] : []; - $variants = array_fill_keys( $allowedVariants, [ 'color' => 'red' ] ); - return new ResourceLoaderImageTestable( - $name, - 'test', - $fileDescriptor, - $this->imagesPath, - $variants - ); - } - - public static function provideGetPath() { - return [ - [ 'abc', 'en', 'abc.gif' ], - [ 'abc', 'he', 'abc.gif' ], - [ 'def', 'en', 'def.svg' ], - [ 'def', 'he', 'def.svg' ], - [ 'ghi', 'en', 'ghi.svg' ], - [ 'ghi', 'he', 'jkl.svg' ], - [ 'mno', 'en', 'mno-ltr.svg' ], - [ 'mno', 'ar', 'mno-rtl.svg' ], - [ 'mno', 'he', 'mno-ltr.svg' ], - [ 'pqr', 'en', 'pqr-b.svg' ], - [ 'pqr', 'en-gb', 'pqr-b.svg' ], - [ 'pqr', 'de', 'pqr-f.svg' ], - [ 'pqr', 'de-formal', 'pqr-f.svg' ], - [ 'pqr', 'ar', 'pqr-f.svg' ], - [ 'pqr', 'fr', 'pqr-a.svg' ], - [ 'pqr', 'he', 'pqr-a.svg' ], - ]; - } - - /** - * @covers ResourceLoaderImage::getPath - * @dataProvider provideGetPath - */ - public function testGetPath( $imageName, $languageCode, $path ) { - static $dirMap = [ - 'en' => 'ltr', - 'en-gb' => 'ltr', - 'de' => 'ltr', - 'de-formal' => 'ltr', - 'fr' => 'ltr', - 'he' => 'rtl', - 'ar' => 'rtl', - ]; - - $image = $this->getTestImage( $imageName ); - $context = $this->getResourceLoaderContext( [ - 'lang' => $languageCode, - 'dir' => $dirMap[$languageCode], - ] ); - - $this->assertEquals( $image->getPath( $context ), $this->imagesPath . '/' . $path ); - } - - /** - * @covers ResourceLoaderImage::getExtension - * @covers ResourceLoaderImage::getMimeType - */ - public function testGetExtension() { - $image = $this->getTestImage( 'def' ); - $this->assertEquals( $image->getExtension(), 'svg' ); - $this->assertEquals( $image->getExtension( 'original' ), 'svg' ); - $this->assertEquals( $image->getExtension( 'rasterized' ), 'png' ); - $image = $this->getTestImage( 'abc' ); - $this->assertEquals( $image->getExtension(), 'gif' ); - $this->assertEquals( $image->getExtension( 'original' ), 'gif' ); - $this->assertEquals( $image->getExtension( 'rasterized' ), 'gif' ); - } - - /** - * @covers ResourceLoaderImage::getImageData - * @covers ResourceLoaderImage::variantize - * @covers ResourceLoaderImage::massageSvgPathdata - */ - public function testGetImageData() { - $context = $this->getResourceLoaderContext(); - - $image = $this->getTestImage( 'def' ); - $data = file_get_contents( $this->imagesPath . '/def.svg' ); - $dataConstructive = file_get_contents( $this->imagesPath . '/def_variantize.svg' ); - $this->assertEquals( $image->getImageData( $context, null, 'original' ), $data ); - $this->assertEquals( - $image->getImageData( $context, 'destructive', 'original' ), - $dataConstructive - ); - // Stub, since we don't know if we even have a SVG handler, much less what exactly it'll output - $this->assertEquals( $image->getImageData( $context, null, 'rasterized' ), 'RASTERIZESTUB' ); - - $image = $this->getTestImage( 'abc' ); - $data = file_get_contents( $this->imagesPath . '/abc.gif' ); - $this->assertEquals( $image->getImageData( $context, null, 'original' ), $data ); - $this->assertEquals( $image->getImageData( $context, null, 'rasterized' ), $data ); - } - - /** - * @covers ResourceLoaderImage::massageSvgPathdata - */ - public function testMassageSvgPathdata() { - $image = $this->getTestImage( 'ghi' ); - $data = file_get_contents( $this->imagesPath . '/ghi.svg' ); - $dataMassaged = file_get_contents( $this->imagesPath . '/ghi_massage.svg' ); - $this->assertEquals( $image->massageSvgPathdata( $data ), $dataMassaged ); - } -} - -class ResourceLoaderImageTestable extends ResourceLoaderImage { - // Make some protected methods public - public function massageSvgPathdata( $svg ) { - return parent::massageSvgPathdata( $svg ); - } - - // Stub, since we don't know if we even have a SVG handler, much less what exactly it'll output - public function rasterize( $svg ) { - return 'RASTERIZESTUB'; - } -} diff --git a/tests/phpunit/unit/includes/resourceloader/ResourceLoaderImageTest.php b/tests/phpunit/unit/includes/resourceloader/ResourceLoaderImageTest.php new file mode 100644 index 0000000000..5265b3ee17 --- /dev/null +++ b/tests/phpunit/unit/includes/resourceloader/ResourceLoaderImageTest.php @@ -0,0 +1,148 @@ +imagesPath = __DIR__ . '/../../../data/resourceloader'; + } + + protected function tearDown() { + Language::$dataCache = null; + } + + protected function getTestImage( $name ) { + $options = ResourceLoaderImageModuleTest::$commonImageData[$name]; + $fileDescriptor = is_string( $options ) ? $options : $options['file']; + $allowedVariants = ( is_array( $options ) && isset( $options['variants'] ) ) ? + $options['variants'] : []; + $variants = array_fill_keys( $allowedVariants, [ 'color' => 'red' ] ); + return new ResourceLoaderImageTestable( + $name, + 'test', + $fileDescriptor, + $this->imagesPath, + $variants + ); + } + + public static function provideGetPath() { + return [ + [ 'abc', 'en', 'abc.gif' ], + [ 'abc', 'he', 'abc.gif' ], + [ 'def', 'en', 'def.svg' ], + [ 'def', 'he', 'def.svg' ], + [ 'ghi', 'en', 'ghi.svg' ], + [ 'ghi', 'he', 'jkl.svg' ], + [ 'mno', 'en', 'mno-ltr.svg' ], + [ 'mno', 'ar', 'mno-rtl.svg' ], + [ 'mno', 'he', 'mno-ltr.svg' ], + [ 'pqr', 'en', 'pqr-b.svg' ], + [ 'pqr', 'en-gb', 'pqr-b.svg' ], + [ 'pqr', 'de', 'pqr-f.svg' ], + [ 'pqr', 'de-formal', 'pqr-f.svg' ], + [ 'pqr', 'ar', 'pqr-f.svg' ], + [ 'pqr', 'fr', 'pqr-a.svg' ], + [ 'pqr', 'he', 'pqr-a.svg' ], + ]; + } + + /** + * @covers ResourceLoaderImage::getPath + * @dataProvider provideGetPath + */ + public function testGetPath( $imageName, $languageCode, $path ) { + static $dirMap = [ + 'en' => 'ltr', + 'en-gb' => 'ltr', + 'de' => 'ltr', + 'de-formal' => 'ltr', + 'fr' => 'ltr', + 'he' => 'rtl', + 'ar' => 'rtl', + ]; + + $image = $this->getTestImage( $imageName ); + $context = new DerivativeResourceLoaderContext( + $this->createMock( ResourceLoaderContext::class ) + ); + $context->setLanguage( $languageCode ); + $context->setDirection( $dirMap[$languageCode] ); + Language::$dataCache = $this->createMock( LocalisationCache::class ); + Language::$dataCache->method( 'getItem' )->will( $this->returnCallback( function ( $code ) { + return ( [ + 'en-gb' => [ 'en' ], + 'de-formal' => [ 'de' ], + ] )[ $code ] ?? []; + } ) ); + + $this->assertEquals( $image->getPath( $context ), $this->imagesPath . '/' . $path ); + } + + /** + * @covers ResourceLoaderImage::getExtension + * @covers ResourceLoaderImage::getMimeType + */ + public function testGetExtension() { + $image = $this->getTestImage( 'def' ); + $this->assertEquals( $image->getExtension(), 'svg' ); + $this->assertEquals( $image->getExtension( 'original' ), 'svg' ); + $this->assertEquals( $image->getExtension( 'rasterized' ), 'png' ); + $image = $this->getTestImage( 'abc' ); + $this->assertEquals( $image->getExtension(), 'gif' ); + $this->assertEquals( $image->getExtension( 'original' ), 'gif' ); + $this->assertEquals( $image->getExtension( 'rasterized' ), 'gif' ); + } + + /** + * @covers ResourceLoaderImage::getImageData + * @covers ResourceLoaderImage::variantize + * @covers ResourceLoaderImage::massageSvgPathdata + */ + public function testGetImageData() { + $context = $this->createMock( ResourceLoaderContext::class ); + + $image = $this->getTestImage( 'def' ); + $data = file_get_contents( $this->imagesPath . '/def.svg' ); + $dataConstructive = file_get_contents( $this->imagesPath . '/def_variantize.svg' ); + $this->assertEquals( $image->getImageData( $context, null, 'original' ), $data ); + $this->assertEquals( + $image->getImageData( $context, 'destructive', 'original' ), + $dataConstructive + ); + // Stub, since we don't know if we even have a SVG handler, much less what exactly it'll output + $this->assertEquals( $image->getImageData( $context, null, 'rasterized' ), 'RASTERIZESTUB' ); + + $image = $this->getTestImage( 'abc' ); + $data = file_get_contents( $this->imagesPath . '/abc.gif' ); + $this->assertEquals( $image->getImageData( $context, null, 'original' ), $data ); + $this->assertEquals( $image->getImageData( $context, null, 'rasterized' ), $data ); + } + + /** + * @covers ResourceLoaderImage::massageSvgPathdata + */ + public function testMassageSvgPathdata() { + $image = $this->getTestImage( 'ghi' ); + $data = file_get_contents( $this->imagesPath . '/ghi.svg' ); + $dataMassaged = file_get_contents( $this->imagesPath . '/ghi_massage.svg' ); + $this->assertEquals( $image->massageSvgPathdata( $data ), $dataMassaged ); + } +} + +class ResourceLoaderImageTestable extends ResourceLoaderImage { + // Make some protected methods public + public function massageSvgPathdata( $svg ) { + return parent::massageSvgPathdata( $svg ); + } + + // Stub, since we don't know if we even have a SVG handler, much less what exactly it'll output + public function rasterize( $svg ) { + return 'RASTERIZESTUB'; + } +}