29 "WikitextContentTest_testGetParserOutput",
32 "<div class=\"mw-parser-output\"><p>hello <i>world</i>\n</p>\n\n\n</div>"
40 [
"WikitextContentTest_testGetSecondaryDataUpdates_1",
49 [
"WikitextContentTest_testGetSecondaryDataUpdates_2",
55 [
'World_test_21344' => 0 ]
71 $title = Title::newFromText( $title, $ns );
76 $page->doEditContent( $content,
'' );
78 $updates = $content->getSecondaryDataUpdates( $title );
81 foreach ( $updates as $update ) {
82 $class = get_class( $update );
83 $updates[$class] = $update;
86 foreach ( $expectedStuff as $class => $fieldValues ) {
87 $this->assertArrayHasKey( $class, $updates,
"missing an update of type $class" );
89 $update = $updates[$class];
91 foreach ( $fieldValues as $field =>
$value ) {
92 $v = $update->$field; #
if the field doesn
't exist, just crash and burn
96 "unexpected value for field $field in instance of $class"
101 $page->doDeleteArticle( '' );
104 public static function dataGetSection() {
126 public function testGetSection( $text, $sectionId, $expectedText ) {
127 $content = $this->newContent( $text );
129 $sectionContent = $content->getSection( $sectionId );
130 if ( is_object( $sectionContent ) ) {
131 $sectionText = $sectionContent->getNativeData();
133 $sectionText = $sectionContent;
136 $this->assertEquals( $expectedText, $sectionText );
139 public static function dataReplaceSection() {
145 trim( preg_replace( '/^Intro/sm
', 'No more
', self::$sections ) )
155 "== TEST ==\nmore fun",
158 '/^== test ==.*== foo ==/sm
', "== TEST ==\nmore fun\n\n== foo ==",
172 trim( self::$sections ) . "\n\n\n== New ==\n\nNo more"
181 public function testReplaceSection( $text, $section, $with, $sectionTitle, $expected ) {
182 $content = $this->newContent( $text );
183 $c = $content->replaceSection( $section, $this->newContent( $with ), $sectionTitle );
185 $this->assertEquals( $expected, is_null( $c ) ? null : $c->getNativeData() );
191 public function testAddSectionHeader() {
192 $content = $this->newContent( 'hello world
' );
193 $content = $content->addSectionHeader( 'test
' );
195 $this->assertEquals( "== test ==\n\nhello world", $content->getNativeData() );
198 public static function dataPreSaveTransform() {
200 [ 'hello
this is ~~~
',
201 "hello this is [[Special:Contributions/127.0.0.1|127.0.0.1]]",
203 [ 'hello \
'\'this\
'\' is <nowiki>~~~</nowiki>
',
204 'hello \
'\'this\
'\' is <nowiki>~~~</nowiki>
',
213 public static function dataPreloadTransform() {
220 'hello \
'\'this\
'\' is <noinclude>foo</noinclude><includeonly>bar</includeonly>
',
221 'hello \
'\'this\
'\' is bar
',
226 public static function dataGetRedirectTarget() {
228 [ '#REDIRECT [[Test]]
',
234 [ '* #REDIRECT [[Test]]
',
240 public static function dataGetTextForSummary() {
250 [ '[[hello world]].
',
257 public static function dataIsCountable() {
299 [ '#REDIRECT [[bar]]
',
304 [ '#REDIRECT [[bar]]
',
309 [ '#REDIRECT [[bar]]
',
320 public function testMatchMagicWord() {
321 $mw = MagicWord::get( "staticredirect" );
323 $content = $this->newContent( "#REDIRECT [[FOO]]\n__STATICREDIRECT__" );
324 $this->assertTrue( $content->matchMagicWord( $mw ), "should have matched magic word" );
326 $content = $this->newContent( "#REDIRECT [[FOO]]" );
328 $content->matchMagicWord( $mw ),
329 "should not have matched magic word"
336 public function testUpdateRedirect() {
337 $target = Title::newFromText( "testUpdateRedirect_target" );
339 // test with non-redirect page
340 $content = $this->newContent( "hello world." );
341 $newContent = $content->updateRedirect( $target );
343 $this->assertTrue( $content->equals( $newContent ), "content should be unchanged" );
345 // test with actual redirect
346 $content = $this->newContent( "#REDIRECT [[Someplace]]" );
347 $newContent = $content->updateRedirect( $target );
349 $this->assertFalse( $content->equals( $newContent ), "content should have changed" );
350 $this->assertTrue( $newContent->isRedirect(), "new content should be a redirect" );
353 $target->getFullText(),
354 $newContent->getRedirectTarget()->getFullText()
361 public function testGetModel() {
362 $content = $this->newContent( "hello world." );
364 $this->assertEquals( CONTENT_MODEL_WIKITEXT, $content->getModel() );
370 public function testGetContentHandler() {
371 $content = $this->newContent( "hello world." );
373 $this->assertEquals( CONTENT_MODEL_WIKITEXT, $content->getContentHandler()->getModelID() );
376 public function testRedirectParserOption() {
379 // Set up hook and its reporting variables
381 $redirectTarget = null;
382 $this->mergeMwGlobalArrayValue( 'wgHooks
', [
383 'InternalParseBeforeLinks
' => [
384 function ( &$parser, &$text, &$stripState ) use ( &$wikitext, &$redirectTarget ) {
386 $redirectTarget = $parser->getOptions()->getRedirectTarget();
391 // Test with non-redirect page
393 $redirectTarget = false;
394 $content = $this->newContent( 'hello world.
' );
395 $options = $content->getContentHandler()->makeParserOptions( 'canonical
' );
396 $options->setRedirectTarget( $title );
397 $content->getParserOutput( $title, null, $options );
398 $this->assertEquals( 'hello world.
', $wikitext,
399 'Wikitext passed to hook was not as expected
'
401 $this->assertEquals( null, $redirectTarget, 'Redirect
seen in hook was not
null' );
402 $this->assertEquals( $title, $options->getRedirectTarget(),
408 $redirectTarget =
false;
410 "#REDIRECT [[TestRedirectParserOption/redir]]\nhello redirect."
412 $options = $content->getContentHandler()->makeParserOptions(
'canonical' );
413 $content->getParserOutput( $title,
null,
$options );
417 'Wikitext passed to hook was not as expected'
419 $this->assertNotEquals(
422 'Redirect seen in hook was null' );
424 'TestRedirectParserOption/redir',
425 $redirectTarget->getFullText(),
426 'Redirect seen in hook was not the expected title'
431 'ParserOptions\' redirectTarget was changed'
447 [
"WikitextContentTest_testGetSecondaryDataUpdates_1",
449 [
'LinksDeletionUpdate' => [] ]
451 [
"WikitextContentTest_testGetSecondaryDataUpdates_2",
453 [
'LinksDeletionUpdate' => [] ]
static makeContent( $text, Title $title=null, $modelId=null, $format=null)
Convenience function for creating a Content object from a given textual representation.
Content for JavaScript pages.
Set options of the Parser.
ContentHandler Database ^— needed, because we do need the database to test link updates.
Content object implementation for representing flat text.
static factory(Title $title)
Create a WikiPage object of the appropriate class for the given title.
testRedirectParserOption()
static dataGetParserOutput()
testGetSecondaryDataUpdates( $title, $model, $text, $expectedStuff)
dataGetSecondaryDataUpdates Database WikitextContent::getSecondaryDataUpdates
static dataGetDeletionUpdates()
static dataGetSecondaryDataUpdates()
Content object for wiki text pages.
null means default in associative array with keys and values unescaped Should be merged with default with a value of false meaning to suppress the attribute in associative array with keys and values unescaped & $options
null means default in associative array with keys and values unescaped Should be merged with default with a value of false meaning to suppress the attribute in associative array with keys and values unescaped noclasses just before the function returns a value If you return true
processing should stop and the error should be shown to the user * false
globals will be eliminated from MediaWiki replaced by an application object which would be passed to constructors Whether that would be an convenient solution remains to be seen
const CONTENT_MODEL_WIKITEXT