diff options
author | Yaco <franco@reevo.org> | 2020-06-04 11:01:00 -0300 |
---|---|---|
committer | Yaco <franco@reevo.org> | 2020-06-04 11:01:00 -0300 |
commit | fc7369835258467bf97eb64f184b93691f9a9fd5 (patch) | |
tree | daabd60089d2dd76d9f5fb416b005fbe159c799d /www/wiki/tests/phpunit/includes/content/CssContentTest.php |
first commit
Diffstat (limited to 'www/wiki/tests/phpunit/includes/content/CssContentTest.php')
-rw-r--r-- | www/wiki/tests/phpunit/includes/content/CssContentTest.php | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/www/wiki/tests/phpunit/includes/content/CssContentTest.php b/www/wiki/tests/phpunit/includes/content/CssContentTest.php new file mode 100644 index 00000000..f5cc05e0 --- /dev/null +++ b/www/wiki/tests/phpunit/includes/content/CssContentTest.php @@ -0,0 +1,133 @@ +<?php + +/** + * @group ContentHandler + * @group Database + * ^--- needed, because we do need the database to test link updates + * + * @FIXME this should not extend JavaScriptContentTest. + */ +class CssContentTest extends JavaScriptContentTest { + + protected function setUp() { + parent::setUp(); + + // Anon user + $user = new User(); + $user->setName( '127.0.0.1' ); + + $this->setMwGlobals( [ + 'wgUser' => $user, + 'wgTextModelsToParse' => [ + CONTENT_MODEL_CSS, + ] + ] ); + } + + public function newContent( $text ) { + return new CssContent( $text ); + } + + public static function dataGetParserOutput() { + return [ + [ + 'MediaWiki:Test.css', + null, + "hello <world>\n", + "<pre class=\"mw-code mw-css\" dir=\"ltr\">\nhello <world>\n\n</pre>" + ], + [ + 'MediaWiki:Test.css', + null, + "/* hello [[world]] */\n", + "<pre class=\"mw-code mw-css\" dir=\"ltr\">\n/* hello [[world]] */\n\n</pre>", + [ + 'Links' => [ + [ 'World' => 0 ] + ] + ] + ], + + // TODO: more...? + ]; + } + + /** + * @covers CssContent::getModel + */ + public function testGetModel() { + $content = $this->newContent( 'hello world.' ); + + $this->assertEquals( CONTENT_MODEL_CSS, $content->getModel() ); + } + + /** + * @covers CssContent::getContentHandler + */ + public function testGetContentHandler() { + $content = $this->newContent( 'hello world.' ); + + $this->assertEquals( CONTENT_MODEL_CSS, $content->getContentHandler()->getModelID() ); + } + + /** + * Redirects aren't supported + */ + public static function provideUpdateRedirect() { + return [ + [ + '#REDIRECT [[Someplace]]', + '#REDIRECT [[Someplace]]', + ], + ]; + } + + /** + * @covers CssContent::getRedirectTarget + * @dataProvider provideGetRedirectTarget + */ + public function testGetRedirectTarget( $title, $text ) { + $this->setMwGlobals( [ + 'wgServer' => '//example.org', + 'wgScriptPath' => '/w', + 'wgScript' => '/w/index.php', + ] ); + $content = new CssContent( $text ); + $target = $content->getRedirectTarget(); + $this->assertEquals( $title, $target ? $target->getPrefixedText() : null ); + } + + /** + * Keep this in sync with CssContentHandlerTest::provideMakeRedirectContent() + */ + public static function provideGetRedirectTarget() { + // phpcs:disable Generic.Files.LineLength + return [ + [ 'MediaWiki:MonoBook.css', "/* #REDIRECT */@import url(//example.org/w/index.php?title=MediaWiki:MonoBook.css&action=raw&ctype=text/css);" ], + [ 'User:FooBar/common.css', "/* #REDIRECT */@import url(//example.org/w/index.php?title=User:FooBar/common.css&action=raw&ctype=text/css);" ], + [ 'Gadget:FooBaz.css', "/* #REDIRECT */@import url(//example.org/w/index.php?title=Gadget:FooBaz.css&action=raw&ctype=text/css);" ], + # No #REDIRECT comment + [ null, "@import url(//example.org/w/index.php?title=Gadget:FooBaz.css&action=raw&ctype=text/css);" ], + # Wrong domain + [ null, "/* #REDIRECT */@import url(//example.com/w/index.php?title=Gadget:FooBaz.css&action=raw&ctype=text/css);" ], + ]; + // phpcs:enable + } + + public static function dataEquals() { + return [ + [ new CssContent( 'hallo' ), null, false ], + [ new CssContent( 'hallo' ), new CssContent( 'hallo' ), true ], + [ new CssContent( 'hallo' ), new WikitextContent( 'hallo' ), false ], + [ new CssContent( 'hallo' ), new CssContent( 'HALLO' ), false ], + ]; + } + + /** + * @dataProvider dataEquals + * @covers CssContent::equals + */ + public function testEquals( Content $a, Content $b = null, $equal = false ) { + $this->assertEquals( $equal, $a->equals( $b ) ); + } +} |