3 * @group ContentHandler
5 * ^--- important, causes temporary tables to be used instead of the real database
8 class WikiPageTest
extends MediaWikiTestCase
{
12 function __construct( $name = null, array $data = array(), $dataName = '' ) {
13 parent
::__construct( $name, $data, $dataName );
15 $this->tablesUsed
= array_merge ( $this->tablesUsed
,
33 public function setUp() {
34 $this->pages_to_delete
= array();
36 LinkCache
::singleton()->clear(); # avoid cached redirect status, etc
39 public function tearDown() {
40 foreach ( $this->pages_to_delete
as $p ) {
41 /* @var $p WikiPage */
45 $p->doDeleteArticle( "testing done." );
47 } catch ( MWException
$ex ) {
57 protected function newPage( $title ) {
58 if ( is_string( $title ) ) $title = Title
::newFromText( $title );
60 $p = new WikiPage( $title );
62 $this->pages_to_delete
[] = $p;
69 * @param String|Title|WikiPage $page
75 protected function createPage( $page, $text, $model = null ) {
76 if ( is_string( $page ) ) $page = Title
::newFromText( $page );
78 if ( $page instanceof Title
) {
80 $page = $this->newPage( $page );
85 $content = ContentHandler
::makeContent( $text, $page->getTitle(), $model );
86 $page->doEditContent( $content, "testing", EDIT_NEW
);
91 public function testDoEditContent() {
92 $title = Title
::newFromText( "WikiPageTest_testDoEditContent" );
94 $page = $this->newPage( $title );
96 $content = ContentHandler
::makeContent( "[[Lorem ipsum]] dolor sit amet, consetetur sadipscing elitr, sed diam "
97 . " nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat.",
100 $page->doEditContent( $content, "[[testing]] 1" );
102 $this->assertTrue( $title->getArticleID() > 0, "Title object should have new page id" );
103 $this->assertTrue( $page->getId() > 0, "WikiPage should have new page id" );
104 $this->assertTrue( $title->exists(), "Title object should indicate that the page now exists" );
105 $this->assertTrue( $page->exists(), "WikiPage object should indicate that the page now exists" );
107 $id = $page->getId();
109 # ------------------------
110 $dbr = wfGetDB( DB_SLAVE
);
111 $res = $dbr->select( 'pagelinks', '*', array( 'pl_from' => $id ) );
112 $n = $res->numRows();
115 $this->assertEquals( 1, $n, 'pagelinks should contain one link from the page' );
117 # ------------------------
118 $page = new WikiPage( $title );
120 $retrieved = $page->getContent();
121 $this->assertTrue( $content->equals( $retrieved ), 'retrieved content doesn\'t equal original' );
123 # ------------------------
124 $content = ContentHandler
::makeContent( "At vero eos et accusam et justo duo [[dolores]] et ea rebum. "
125 . "Stet clita kasd [[gubergren]], no sea takimata sanctus est.",
128 $page->doEditContent( $content, "testing 2" );
130 # ------------------------
131 $page = new WikiPage( $title );
133 $retrieved = $page->getContent();
134 $this->assertTrue( $content->equals( $retrieved ), 'retrieved content doesn\'t equal original' );
136 # ------------------------
137 $dbr = wfGetDB( DB_SLAVE
);
138 $res = $dbr->select( 'pagelinks', '*', array( 'pl_from' => $id ) );
139 $n = $res->numRows();
142 $this->assertEquals( 2, $n, 'pagelinks should contain two links from the page' );
145 public function testDoEdit() {
146 $title = Title
::newFromText( "WikiPageTest_testDoEdit" );
148 $page = $this->newPage( $title );
150 $text = "[[Lorem ipsum]] dolor sit amet, consetetur sadipscing elitr, sed diam "
151 . " nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat.";
153 $page->doEdit( $text, "[[testing]] 1" );
155 $this->assertTrue( $title->getArticleID() > 0, "Title object should have new page id" );
156 $this->assertTrue( $page->getId() > 0, "WikiPage should have new page id" );
157 $this->assertTrue( $title->exists(), "Title object should indicate that the page now exists" );
158 $this->assertTrue( $page->exists(), "WikiPage object should indicate that the page now exists" );
160 $id = $page->getId();
162 # ------------------------
163 $dbr = wfGetDB( DB_SLAVE
);
164 $res = $dbr->select( 'pagelinks', '*', array( 'pl_from' => $id ) );
165 $n = $res->numRows();
168 $this->assertEquals( 1, $n, 'pagelinks should contain one link from the page' );
170 # ------------------------
171 $page = new WikiPage( $title );
173 $retrieved = $page->getText();
174 $this->assertEquals( $text, $retrieved, 'retrieved text doesn\'t equal original' );
176 # ------------------------
177 $text = "At vero eos et accusam et justo duo [[dolores]] et ea rebum. "
178 . "Stet clita kasd [[gubergren]], no sea takimata sanctus est.";
180 $page->doEdit( $text, "testing 2" );
182 # ------------------------
183 $page = new WikiPage( $title );
185 $retrieved = $page->getText();
186 $this->assertEquals( $text, $retrieved, 'retrieved text doesn\'t equal original' );
188 # ------------------------
189 $dbr = wfGetDB( DB_SLAVE
);
190 $res = $dbr->select( 'pagelinks', '*', array( 'pl_from' => $id ) );
191 $n = $res->numRows();
194 $this->assertEquals( 2, $n, 'pagelinks should contain two links from the page' );
197 public function testDoQuickEdit() {
200 $page = $this->createPage( "WikiPageTest_testDoQuickEdit", "original text" );
202 $text = "quick text";
203 $page->doQuickEdit( $text, $wgUser, "testing q" );
205 # ---------------------
206 $page = new WikiPage( $page->getTitle() );
207 $this->assertEquals( $text, $page->getText() );
210 public function testDoQuickEditContent() {
213 $page = $this->createPage( "WikiPageTest_testDoQuickEditContent", "original text" );
215 $content = ContentHandler
::makeContent( "quick text", $page->getTitle() );
216 $page->doQuickEditContent( $content, $wgUser, "testing q" );
218 # ---------------------
219 $page = new WikiPage( $page->getTitle() );
220 $this->assertTrue( $content->equals( $page->getContent() ) );
223 public function testDoDeleteArticle() {
224 $page = $this->createPage( "WikiPageTest_testDoDeleteArticle", "[[original text]] foo" );
225 $id = $page->getId();
227 $page->doDeleteArticle( "testing deletion" );
229 $this->assertFalse( $page->getTitle()->getArticleID() > 0, "Title object should now have page id 0" );
230 $this->assertFalse( $page->getId() > 0, "WikiPage should now have page id 0" );
231 $this->assertFalse( $page->exists(), "WikiPage::exists should return false after page was deleted" );
232 $this->assertNull( $page->getContent(), "WikiPage::getContent should return null after page was deleted" );
233 $this->assertFalse( $page->getText(), "WikiPage::getText should return false after page was deleted" );
235 $t = Title
::newFromText( $page->getTitle()->getPrefixedText() );
236 $this->assertFalse( $t->exists(), "Title::exists should return false after page was deleted" );
238 # ------------------------
239 $dbr = wfGetDB( DB_SLAVE
);
240 $res = $dbr->select( 'pagelinks', '*', array( 'pl_from' => $id ) );
241 $n = $res->numRows();
244 $this->assertEquals( 0, $n, 'pagelinks should contain no more links from the page' );
247 public function testGetRevision() {
248 $page = $this->newPage( "WikiPageTest_testGetRevision" );
250 $rev = $page->getRevision();
251 $this->assertNull( $rev );
254 $this->createPage( $page, "some text" );
256 $rev = $page->getRevision();
258 $this->assertEquals( $page->getLatest(), $rev->getId() );
259 $this->assertEquals( "some text", $rev->getContent()->getNativeData() );
262 public function testGetContent() {
263 $page = $this->newPage( "WikiPageTest_testGetContent" );
265 $content = $page->getContent();
266 $this->assertNull( $content );
269 $this->createPage( $page, "some text" );
271 $content = $page->getContent();
272 $this->assertEquals( "some text", $content->getNativeData() );
275 public function testGetText() {
276 $page = $this->newPage( "WikiPageTest_testGetText" );
278 $text = $page->getText();
279 $this->assertFalse( $text );
282 $this->createPage( $page, "some text" );
284 $text = $page->getText();
285 $this->assertEquals( "some text", $text );
288 public function testGetRawText() {
289 $page = $this->newPage( "WikiPageTest_testGetRawText" );
291 $text = $page->getRawText();
292 $this->assertFalse( $text );
295 $this->createPage( $page, "some text" );
297 $text = $page->getRawText();
298 $this->assertEquals( "some text", $text );
301 public function testGetContentModel() {
302 $page = $this->createPage( "WikiPageTest_testGetContentModel", "some text", CONTENT_MODEL_JAVASCRIPT
);
304 $page = new WikiPage( $page->getTitle() );
305 $this->assertEquals( CONTENT_MODEL_JAVASCRIPT
, $page->getContentModel() );
308 public function testGetContentHandler() {
309 $page = $this->createPage( "WikiPageTest_testGetContentHandler", "some text", CONTENT_MODEL_JAVASCRIPT
);
311 $page = new WikiPage( $page->getTitle() );
312 $this->assertEquals( 'JavaScriptContentHandler', get_class( $page->getContentHandler() ) );
315 public function testExists() {
316 $page = $this->newPage( "WikiPageTest_testExists" );
317 $this->assertFalse( $page->exists() );
320 $this->createPage( $page, "some text" );
321 $this->assertTrue( $page->exists() );
323 $page = new WikiPage( $page->getTitle() );
324 $this->assertTrue( $page->exists() );
327 $page->doDeleteArticle( "done testing" );
328 $this->assertFalse( $page->exists() );
330 $page = new WikiPage( $page->getTitle() );
331 $this->assertFalse( $page->exists() );
334 public function dataHasViewableContent() {
336 array( 'WikiPageTest_testHasViewableContent', false, true ),
337 array( 'Special:WikiPageTest_testHasViewableContent', false ),
338 array( 'MediaWiki:WikiPageTest_testHasViewableContent', false ),
339 array( 'Special:Userlogin', true ),
340 array( 'MediaWiki:help', true ),
345 * @dataProvider dataHasViewableContent
347 public function testHasViewableContent( $title, $viewable, $create = false ) {
348 $page = $this->newPage( $title );
349 $this->assertEquals( $viewable, $page->hasViewableContent() );
352 $this->createPage( $page, "some text" );
353 $this->assertTrue( $page->hasViewableContent() );
355 $page = new WikiPage( $page->getTitle() );
356 $this->assertTrue( $page->hasViewableContent() );
360 public function dataGetRedirectTarget() {
362 array( 'WikiPageTest_testGetRedirectTarget_1', "hello world", null ),
363 array( 'WikiPageTest_testGetRedirectTarget_2', "#REDIRECT [[hello world]]", "Hello world" ),
368 * @dataProvider dataGetRedirectTarget
370 public function testGetRedirectTarget( $title, $text, $target ) {
371 $page = $this->createPage( $title, $text );
373 # sanity check, because this test seems to fail for no reason for some people.
374 $c = $page->getContent();
375 $this->assertEquals( 'WikitextContent', get_class( $c ) );
377 # now, test the actual redirect
378 $t = $page->getRedirectTarget();
379 $this->assertEquals( $target, is_null( $t ) ?
null : $t->getPrefixedText() );
383 * @dataProvider dataGetRedirectTarget
385 public function testIsRedirect( $title, $text, $target ) {
386 $page = $this->createPage( $title, $text );
387 $this->assertEquals( !is_null( $target ), $page->isRedirect() );
390 public function dataIsCountable() {
394 array( 'WikiPageTest_testIsCountable',
399 array( 'WikiPageTest_testIsCountable',
406 array( 'WikiPageTest_testIsCountable',
411 array( 'WikiPageTest_testIsCountable',
418 array( 'WikiPageTest_testIsCountable',
423 array( 'WikiPageTest_testIsCountable',
430 array( 'WikiPageTest_testIsCountable',
435 array( 'WikiPageTest_testIsCountable',
440 array( 'WikiPageTest_testIsCountable',
446 // not a content namespace
447 array( 'Talk:WikiPageTest_testIsCountable',
452 array( 'Talk:WikiPageTest_testIsCountable',
457 array( 'Talk:WikiPageTest_testIsCountable',
463 // not a content namespace, different model
464 array( 'MediaWiki:WikiPageTest_testIsCountable.js',
469 array( 'MediaWiki:WikiPageTest_testIsCountable.js',
474 array( 'MediaWiki:WikiPageTest_testIsCountable.js',
484 * @dataProvider dataIsCountable
486 public function testIsCountable( $title, $text, $mode, $expected ) {
487 global $wgArticleCountMethod;
489 $oldArticleCountMethod = $wgArticleCountMethod;
490 $wgArticleCountMethod = $mode;
492 $page = $this->createPage( $title, $text );
493 $hasLinks = wfGetDB( DB_SLAVE
)->selectField( 'pagelinks', 1,
494 array( 'pl_from' => $page->getId() ), __METHOD__
);
496 $editInfo = $page->prepareContentForEdit( $page->getContent() );
498 $v = $page->isCountable();
499 $w = $page->isCountable( $editInfo );
501 $wgArticleCountMethod = $oldArticleCountMethod;
503 $this->assertEquals( $expected, $v, "isCountable( null ) returned unexpected value " . var_export( $v, true )
504 . " instead of " . var_export( $expected, true ) . " in mode `$mode` for text \"$text\"" );
506 $this->assertEquals( $expected, $w, "isCountable( \$editInfo ) returned unexpected value " . var_export( $v, true )
507 . " instead of " . var_export( $expected, true ) . " in mode `$mode` for text \"$text\"" );
510 public function dataGetParserOutput() {
512 array("hello ''world''\n", "<p>hello <i>world</i></p>"),
518 * @dataProvider dataGetParserOutput
520 public function testGetParserOutput( $text, $expectedHtml ) {
521 $page = $this->createPage( 'WikiPageTest_testGetParserOutput', $text );
523 $opt = new ParserOptions();
524 $po = $page->getParserOutput( $opt );
525 $text = $po->getText();
527 $text = trim( preg_replace( '/<!--.*?-->/sm', '', $text ) ); # strip injected comments
528 $text = preg_replace( '!\s*(</p>)!sm', '\1', $text ); # don't let tidy confuse us
530 $this->assertEquals( $expectedHtml, $text );
549 public function dataReplaceSection() {
551 array( 'WikiPageTest_testReplaceSection',
552 WikiPageTest
::$sections,
556 trim( preg_replace( '/^Intro/sm', 'No more', WikiPageTest
::$sections ) )
558 array( 'WikiPageTest_testReplaceSection',
559 WikiPageTest
::$sections,
565 array( 'WikiPageTest_testReplaceSection',
566 WikiPageTest
::$sections,
568 "== TEST ==\nmore fun",
570 trim( preg_replace( '/^== test ==.*== foo ==/sm', "== TEST ==\nmore fun\n\n== foo ==", WikiPageTest
::$sections ) )
572 array( 'WikiPageTest_testReplaceSection',
573 WikiPageTest
::$sections,
577 trim( WikiPageTest
::$sections )
579 array( 'WikiPageTest_testReplaceSection',
580 WikiPageTest
::$sections,
584 trim( WikiPageTest
::$sections ) . "\n\n== New ==\n\nNo more"
590 * @dataProvider dataReplaceSection
592 public function testReplaceSection( $title, $text, $section, $with, $sectionTitle, $expected ) {
593 $page = $this->createPage( $title, $text );
594 $text = $page->replaceSection( $section, $with, $sectionTitle );
595 $text = trim( $text );
597 $this->assertEquals( $expected, $text );
601 * @dataProvider dataReplaceSection
603 public function testReplaceSectionContent( $title, $text, $section, $with, $sectionTitle, $expected ) {
604 $page = $this->createPage( $title, $text );
606 $content = ContentHandler
::makeContent( $with, $page->getTitle(), $page->getContentModel() );
607 $c = $page->replaceSectionContent( $section, $content, $sectionTitle );
609 $this->assertEquals( $expected, is_null( $c ) ?
null : trim( $c->getNativeData() ) );
613 public function testGetUndoText() {
616 wfSuppressWarnings();
617 $haveDiff3 = $wgDiff3 && file_exists( $wgDiff3 );
621 $this->markTestSkipped( "diff3 not installed or not found" );
626 $page = $this->createPage( "WikiPageTest_testGetUndoText", $text );
627 $rev1 = $page->getRevision();
630 $page->doEditContent( ContentHandler::makeContent( $text, $page->getTitle() ), "adding section two");
631 $rev2 = $page->getRevision();
633 $text .= "\n\nthree";
634 $page->doEditContent( ContentHandler::makeContent( $text, $page->getTitle() ), "adding section three");
635 $rev3 = $page->getRevision();
638 $page->doEditContent( ContentHandler::makeContent( $text, $page->getTitle() ), "adding section four");
639 $rev4 = $page->getRevision();
642 $page->doEditContent( ContentHandler::makeContent( $text, $page->getTitle() ), "adding section five");
643 $rev5 = $page->getRevision();
646 $page->doEditContent( ContentHandler::makeContent( $text, $page->getTitle() ), "adding section six");
647 $rev6 = $page->getRevision();
649 $undo6 = $page->getUndoText( $rev6 );
650 if ( $undo6 === false ) $this->fail( "getUndoText failed for rev6" );
651 $this->assertEquals( "one\n\ntwo\n\nthree\n\nfour\n\nfive", $undo6 );
653 $undo3 = $page->getUndoText( $rev4, $rev2 );
654 if ( $undo3 === false ) $this->fail( "getUndoText failed for rev4..rev2" );
655 $this->assertEquals( "one\n\ntwo\n\nfive", $undo3 );
657 $undo2 = $page->getUndoText( $rev2 );
658 if ( $undo2 === false ) $this->fail( "getUndoText failed for rev2" );
659 $this->assertEquals( "one\n\nfive", $undo2 );
664 * @todo FIXME: this is a better rollback test than the one below, but it keeps failing in jenkins for some reason.
666 public function broken_testDoRollback() {
668 $admin->setName("Admin");
671 $page = $this->newPage( "WikiPageTest_testDoRollback" );
672 $page->doEditContent( ContentHandler
::makeContent( $text, $page->getTitle() ), "section one", EDIT_NEW
, false, $admin );
675 $user1->setName( "127.0.1.11" );
677 $page = new WikiPage( $page->getTitle() );
678 $page->doEditContent( ContentHandler
::makeContent( $text, $page->getTitle() ), "adding section two", 0, false, $user1 );
681 $user2->setName( "127.0.2.13" );
682 $text .= "\n\nthree";
683 $page = new WikiPage( $page->getTitle() );
684 $page->doEditContent( ContentHandler
::makeContent( $text, $page->getTitle() ), "adding section three", 0, false, $user2 );
686 # we are having issues with doRollback spuriously failing. apparently the last revision somehow goes missing
687 # or not committed under some circumstances. so, make sure the last revision has the right user name.
688 $dbr = wfGetDB( DB_SLAVE
);
689 $this->assertEquals( 3, Revision
::countByPageId( $dbr, $page->getId() ) );
691 $page = new WikiPage( $page->getTitle() );
692 $rev3 = $page->getRevision();
693 $this->assertEquals( '127.0.2.13', $rev3->getUserText() );
695 $rev2 = $rev3->getPrevious();
696 $this->assertEquals( '127.0.1.11', $rev2->getUserText() );
698 $rev1 = $rev2->getPrevious();
699 $this->assertEquals( 'Admin', $rev1->getUserText() );
701 # now, try the actual rollback
702 $admin->addGroup( "sysop" ); #XXX: make the test user a sysop...
703 $token = $admin->getEditToken( array( $page->getTitle()->getPrefixedText(), $user2->getName() ), null );
704 $errors = $page->doRollback( $user2->getName(), "testing revert", $token, false, $details, $admin );
707 $this->fail( "Rollback failed:\n" . print_r( $errors, true ) . ";\n" . print_r( $details, true ) );
710 $page = new WikiPage( $page->getTitle() );
711 $this->assertEquals( $rev2->getSha1(), $page->getRevision()->getSha1(), "rollback did not revert to the correct revision" );
712 $this->assertEquals( "one\n\ntwo", $page->getContent()->getNativeData() );
716 * @todo FIXME: the above rollback test is better, but it keeps failing in jenkins for some reason.
718 public function testDoRollback() {
720 $admin->setName("Admin");
723 $page = $this->newPage( "WikiPageTest_testDoRollback" );
724 $page->doEditContent( ContentHandler
::makeContent( $text, $page->getTitle() ), "section one", EDIT_NEW
, false, $admin );
725 $rev1 = $page->getRevision();
728 $user1->setName( "127.0.1.11" );
730 $page = new WikiPage( $page->getTitle() );
731 $page->doEditContent( ContentHandler
::makeContent( $text, $page->getTitle() ), "adding section two", 0, false, $user1 );
733 # now, try the rollback
734 $admin->addGroup( "sysop" ); #XXX: make the test user a sysop...
735 $token = $admin->getEditToken( array( $page->getTitle()->getPrefixedText(), $user1->getName() ), null );
736 $errors = $page->doRollback( $user1->getName(), "testing revert", $token, false, $details, $admin );
739 $this->fail( "Rollback failed:\n" . print_r( $errors, true ) . ";\n" . print_r( $details, true ) );
742 $page = new WikiPage( $page->getTitle() );
743 $this->assertEquals( $rev1->getSha1(), $page->getRevision()->getSha1(), "rollback did not revert to the correct revision" );
744 $this->assertEquals( "one", $page->getContent()->getNativeData() );
747 public function dataGetAutosummary( ) {
750 'Hello there, world!',
753 '/^Redirected page .*Foo/'
760 '/^Created page .*Hello/'
764 'Hello there, world!',
771 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut
772 labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et
773 ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.',
776 '/^Replaced .*Hello/'
789 * @dataProvider dataGetAutoSummary
791 public function testGetAutosummary( $old, $new, $flags, $expected ) {
792 $page = $this->newPage( "WikiPageTest_testGetAutosummary" );
794 $summary = $page->getAutosummary( $old, $new, $flags );
796 $this->assertTrue( (bool)preg_match( $expected, $summary ), "Autosummary didn't match expected pattern $expected: $summary" );
799 public function dataGetAutoDeleteReason( ) {
809 array( "first edit", null ),
811 "/first edit.*only contributor/",
817 array( "first edit", null ),
818 array( "second edit", null ),
820 "/second edit.*only contributor/",
826 array( "first edit", "127.0.2.22" ),
827 array( "second edit", "127.0.3.33" ),
835 array( "first edit: "
836 . "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam "
837 . " nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. "
838 . "At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea "
839 . "takimata sanctus est Lorem ipsum dolor sit amet.'", null ),
841 '/first edit:.*\.\.\."/',
847 array( "first edit", "127.0.2.22" ),
848 array( "", "127.0.3.33" ),
850 "/before blanking.*first edit/",
858 * @dataProvider dataGetAutoDeleteReason
860 public function testGetAutoDeleteReason( $edits, $expectedResult, $expectedHistory ) {
863 $page = $this->newPage( "WikiPageTest_testGetAutoDeleteReason" );
867 foreach ( $edits as $edit ) {
870 if ( !empty( $edit[1] ) ) $user->setName( $edit[1] );
871 else $user = $wgUser;
873 $content = ContentHandler
::makeContent( $edit[0], $page->getTitle(), $page->getContentModel() );
875 $page->doEditContent( $content, "test edit $c", $c < 2 ? EDIT_NEW
: 0, false, $user );
880 $reason = $page->getAutoDeleteReason( $hasHistory );
882 if ( is_bool( $expectedResult ) ||
is_null( $expectedResult ) ) $this->assertEquals( $expectedResult, $reason );
883 else $this->assertTrue( (bool)preg_match( $expectedResult, $reason ), "Autosummary didn't match expected pattern $expectedResult: $reason" );
885 $this->assertEquals( $expectedHistory, $hasHistory, "expected \$hasHistory to be " . var_export( $expectedHistory, true ) );
887 $page->doDeleteArticle( "done" );
890 public function dataPreSaveTransform() {
892 array( 'hello this is ~~~',
893 "hello this is [[Special:Contributions/127.0.0.1|127.0.0.1]]",
895 array( 'hello \'\'this\'\' is <nowiki>~~~</nowiki>',
896 'hello \'\'this\'\' is <nowiki>~~~</nowiki>',
902 * @dataProvider dataPreSaveTransform
904 public function testPreSaveTransform( $text, $expected ) {
906 $user->setName("127.0.0.1");
908 $page = $this->newPage( "WikiPageTest_testPreloadTransform" );
909 $text = $page->preSaveTransform( $text, $user );
911 $this->assertEquals( $expected, $text );