\n", "
\nhello <world>\n\n
" ], [ 'MediaWiki:Test.js', null, "hello(); // [[world]]\n", "
\nhello(); // [[world]]\n\n
", [ 'Links' => [ [ 'World' => 0 ] ] ] ], // TODO: more...? ]; } // XXX: Unused function public static function dataGetSection() { return [ [ WikitextContentTest::$sections, '0', null ], [ WikitextContentTest::$sections, '2', null ], [ WikitextContentTest::$sections, '8', null ], ]; } // XXX: Unused function public static function dataReplaceSection() { return [ [ WikitextContentTest::$sections, '0', 'No more', null, null ], [ WikitextContentTest::$sections, '', 'No more', null, null ], [ WikitextContentTest::$sections, '2', "== TEST ==\nmore fun", null, null ], [ WikitextContentTest::$sections, '8', 'No more', null, null ], [ WikitextContentTest::$sections, 'new', 'No more', 'New', null ], ]; } /** * @covers JavaScriptContent::addSectionHeader */ public function testAddSectionHeader() { $content = $this->newContent( 'hello world' ); $c = $content->addSectionHeader( 'test' ); $this->assertTrue( $content->equals( $c ) ); } // XXX: currently, preSaveTransform is applied to scripts. this may change or become optional. public static function dataPreSaveTransform() { return [ [ 'hello this is ~~~', "hello this is [[Special:Contributions/127.0.0.1|127.0.0.1]]", ], [ 'hello \'\'this\'\' is ~~~', 'hello \'\'this\'\' is ~~~', ], [ " Foo \n ", " Foo", ], ]; } public static function dataPreloadTransform() { return [ [ 'hello this is ~~~', 'hello this is ~~~', ], [ 'hello \'\'this\'\' is foobar', 'hello \'\'this\'\' is foobar', ], ]; } public static function dataGetRedirectTarget() { return [ [ '#REDIRECT [[Test]]', null, ], [ '#REDIRECT Test', null, ], [ '* #REDIRECT [[Test]]', null, ], ]; } public static function dataIsCountable() { return [ [ '', null, 'any', true ], [ 'Foo', null, 'any', true ], [ 'Foo', null, 'link', false ], [ 'Foo [[bar]]', null, 'link', false ], [ 'Foo', true, 'link', false ], [ 'Foo [[bar]]', false, 'link', false ], [ '#REDIRECT [[bar]]', true, 'any', true ], [ '#REDIRECT [[bar]]', true, 'link', false ], ]; } public static function dataGetTextForSummary() { return [ [ "hello\nworld.", 16, 'hello world.', ], [ 'hello world.', 8, 'hello...', ], [ '[[hello world]].', 8, '[[hel...', ], ]; } /** * @covers JavaScriptContent::matchMagicWord */ public function testMatchMagicWord() { $mw = MediaWikiServices::getInstance()->getMagicWordFactory()->get( "staticredirect" ); $content = $this->newContent( "#REDIRECT [[FOO]]\n__STATICREDIRECT__" ); $this->assertFalse( $content->matchMagicWord( $mw ), "should not have matched magic word, since it's not wikitext" ); } /** * @covers JavaScriptContent::updateRedirect * @dataProvider provideUpdateRedirect */ public function testUpdateRedirect( $oldText, $expectedText ) { $this->setMwGlobals( [ 'wgServer' => '//example.org', 'wgScriptPath' => '/w', 'wgScript' => '/w/index.php', 'wgResourceBasePath' => '/w', ] ); $target = Title::newFromText( "testUpdateRedirect_target" ); $content = new JavaScriptContent( $oldText ); $newContent = $content->updateRedirect( $target ); $this->assertEquals( $expectedText, $newContent->getText() ); } public static function provideUpdateRedirect() { // phpcs:disable Generic.Files.LineLength return [ [ '#REDIRECT [[Someplace]]', '#REDIRECT [[Someplace]]', ], [ '/* #REDIRECT */mw.loader.load("//example.org/w/index.php?title=MediaWiki:MonoBook.js\u0026action=raw\u0026ctype=text/javascript");', '/* #REDIRECT */mw.loader.load("//example.org/w/index.php?title=TestUpdateRedirect_target\u0026action=raw\u0026ctype=text/javascript");' ] ]; // phpcs:enable } /** * @covers JavaScriptContent::getModel */ public function testGetModel() { $content = $this->newContent( "hello world." ); $this->assertEquals( CONTENT_MODEL_JAVASCRIPT, $content->getModel() ); } /** * @covers JavaScriptContent::getContentHandler */ public function testGetContentHandler() { $content = $this->newContent( "hello world." ); $this->assertEquals( CONTENT_MODEL_JAVASCRIPT, $content->getContentHandler()->getModelID() ); } public static function dataEquals() { return [ [ new JavaScriptContent( "hallo" ), null, false ], [ new JavaScriptContent( "hallo" ), new JavaScriptContent( "hallo" ), true ], [ new JavaScriptContent( "hallo" ), new CssContent( "hallo" ), false ], [ new JavaScriptContent( "hallo" ), new JavaScriptContent( "HALLO" ), false ], ]; } /** * @covers JavaScriptContent::getRedirectTarget * @dataProvider provideGetRedirectTarget */ public function testGetRedirectTarget( $title, $text ) { $this->setMwGlobals( [ 'wgServer' => '//example.org', 'wgScriptPath' => '/w', 'wgScript' => '/w/index.php', 'wgResourceBasePath' => '/w', ] ); $content = new JavaScriptContent( $text ); $target = $content->getRedirectTarget(); $this->assertEquals( $title, $target ? $target->getPrefixedText() : null ); } /** * Keep this in sync with JavaScriptContentHandlerTest::provideMakeRedirectContent() */ public static function provideGetRedirectTarget() { // phpcs:disable Generic.Files.LineLength return [ [ 'MediaWiki:MonoBook.js', '/* #REDIRECT */mw.loader.load("//example.org/w/index.php?title=MediaWiki:MonoBook.js\u0026action=raw\u0026ctype=text/javascript");' ], [ 'User:FooBar/common.js', '/* #REDIRECT */mw.loader.load("//example.org/w/index.php?title=User:FooBar/common.js\u0026action=raw\u0026ctype=text/javascript");' ], [ 'Gadget:FooBaz.js', '/* #REDIRECT */mw.loader.load("//example.org/w/index.php?title=Gadget:FooBaz.js\u0026action=raw\u0026ctype=text/javascript");' ], // Unicode [ 'User:😂/unicode.js', '/* #REDIRECT */mw.loader.load("//example.org/w/index.php?title=User:%F0%9F%98%82/unicode.js\u0026action=raw\u0026ctype=text/javascript");' ], // No #REDIRECT comment [ null, 'mw.loader.load("//example.org/w/index.php?title=MediaWiki:NoRedirect.js\u0026action=raw\u0026ctype=text/javascript");' ], // Different domain [ null, '/* #REDIRECT */mw.loader.load("//example.com/w/index.php?title=MediaWiki:OtherWiki.js\u0026action=raw\u0026ctype=text/javascript");' ], ]; // phpcs:enable } }