wiki.techinc.nl/tests/phpunit/includes/content/JavaScriptContentTest.php
James D. Forrester 326d655fc9 Drop 'comma' value for wgArticleCountMethod
We have three methods for page counting currently supported for wikitext
non-redirect pages; 'any' counts any page that exists, 'link' counts any
page that has any outbound links, and 'comma' which searches for any ','
in the text having loaded it. This last option is much slower than these
other two, and is only used on a very small number of installations. Now
by dropping support for this method we can simplify this code and so run
it more often. Note that non-wikitext pages already did not support this
count method.

Installations with this setting set to 'comma', or any other string will
now work as if it was configured with 'any'.

Bug: T188472
Change-Id: I965927edcd2485ec4b49b2d80fdf216dbf19520b
2018-03-01 16:37:23 -08:00

327 lines
7.1 KiB
PHP

<?php
/**
* @group ContentHandler
* @group Database
* ^--- needed, because we do need the database to test link updates
*/
class JavaScriptContentTest extends TextContentTest {
public function newContent( $text ) {
return new JavaScriptContent( $text );
}
public static function dataGetParserOutput() {
return [
[
'MediaWiki:Test.js',
null,
"hello <world>\n",
"<pre class=\"mw-code mw-js\" dir=\"ltr\">\nhello &lt;world&gt;\n\n</pre>"
],
[
'MediaWiki:Test.js',
null,
"hello(); // [[world]]\n",
"<pre class=\"mw-code mw-js\" dir=\"ltr\">\nhello(); // [[world]]\n\n</pre>",
[
'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 <nowiki>~~~</nowiki>',
'hello \'\'this\'\' is <nowiki>~~~</nowiki>',
],
[ " Foo \n ",
" Foo",
],
];
}
public static function dataPreloadTransform() {
return [
[
'hello this is ~~~',
'hello this is ~~~',
],
[
'hello \'\'this\'\' is <noinclude>foo</noinclude><includeonly>bar</includeonly>',
'hello \'\'this\'\' is <noinclude>foo</noinclude><includeonly>bar</includeonly>',
],
];
}
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 = MagicWord::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->getNativeData() );
}
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");'
],
// 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
}
}