02c06772dc5f90291fb6ea6f1dfc21f2510eeb68
3 * @group ContentHandler
5 * ^--- important, causes temporary tables to be used instead of the real database
8 class WikiPageTest
extends MediaWikiLangTestCase
{
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() {
35 $this->pages_to_delete
= array();
37 LinkCache
::singleton()->clear(); # avoid cached redirect status, etc
40 public function tearDown() {
41 foreach ( $this->pages_to_delete
as $p ) {
42 /* @var $p WikiPage */
46 $p->doDeleteArticle( "testing done." );
48 } catch ( MWException
$ex ) {
59 protected function newPage( $title ) {
60 if ( is_string( $title ) ) $title = Title
::newFromText( $title );
62 $p = new WikiPage( $title );
64 $this->pages_to_delete
[] = $p;
71 * @param String|Title|WikiPage $page
77 protected function createPage( $page, $text, $model = null ) {
78 if ( is_string( $page ) ) $page = Title
::newFromText( $page );
80 if ( $page instanceof Title
) {
82 $page = $this->newPage( $page );
87 $content = ContentHandler
::makeContent( $text, $page->getTitle(), $model );
88 $page->doEditContent( $content, "testing", EDIT_NEW
);
93 public function testDoEditContent() {
94 $title = Title
::newFromText( "WikiPageTest_testDoEditContent" );
96 $page = $this->newPage( $title );
98 $content = ContentHandler
::makeContent( "[[Lorem ipsum]] dolor sit amet, consetetur sadipscing elitr, sed diam "
99 . " nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat.",
102 $page->doEditContent( $content, "[[testing]] 1" );
104 $this->assertTrue( $title->getArticleID() > 0, "Title object should have new page id" );
105 $this->assertTrue( $page->getId() > 0, "WikiPage should have new page id" );
106 $this->assertTrue( $title->exists(), "Title object should indicate that the page now exists" );
107 $this->assertTrue( $page->exists(), "WikiPage object should indicate that the page now exists" );
109 $id = $page->getId();
111 # ------------------------
112 $dbr = wfGetDB( DB_SLAVE
);
113 $res = $dbr->select( 'pagelinks', '*', array( 'pl_from' => $id ) );
114 $n = $res->numRows();
117 $this->assertEquals( 1, $n, 'pagelinks should contain one link from the page' );
119 # ------------------------
120 $page = new WikiPage( $title );
122 $retrieved = $page->getContent();
123 $this->assertTrue( $content->equals( $retrieved ), 'retrieved content doesn\'t equal original' );
125 # ------------------------
126 $content = ContentHandler
::makeContent( "At vero eos et accusam et justo duo [[dolores]] et ea rebum. "
127 . "Stet clita kasd [[gubergren]], no sea takimata sanctus est.",
130 $page->doEditContent( $content, "testing 2" );
132 # ------------------------
133 $page = new WikiPage( $title );
135 $retrieved = $page->getContent();
136 $this->assertTrue( $content->equals( $retrieved ), 'retrieved content doesn\'t equal original' );
138 # ------------------------
139 $dbr = wfGetDB( DB_SLAVE
);
140 $res = $dbr->select( 'pagelinks', '*', array( 'pl_from' => $id ) );
141 $n = $res->numRows();
144 $this->assertEquals( 2, $n, 'pagelinks should contain two links from the page' );
147 public function testDoEdit() {
148 $title = Title
::newFromText( "WikiPageTest_testDoEdit" );
150 $page = $this->newPage( $title );
152 $text = "[[Lorem ipsum]] dolor sit amet, consetetur sadipscing elitr, sed diam "
153 . " nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat.";
155 $page->doEdit( $text, "[[testing]] 1" );
157 $this->assertTrue( $title->getArticleID() > 0, "Title object should have new page id" );
158 $this->assertTrue( $page->getId() > 0, "WikiPage should have new page id" );
159 $this->assertTrue( $title->exists(), "Title object should indicate that the page now exists" );
160 $this->assertTrue( $page->exists(), "WikiPage object should indicate that the page now exists" );
162 $id = $page->getId();
164 # ------------------------
165 $dbr = wfGetDB( DB_SLAVE
);
166 $res = $dbr->select( 'pagelinks', '*', array( 'pl_from' => $id ) );
167 $n = $res->numRows();
170 $this->assertEquals( 1, $n, 'pagelinks should contain one link from the page' );
172 # ------------------------
173 $page = new WikiPage( $title );
175 $retrieved = $page->getText();
176 $this->assertEquals( $text, $retrieved, 'retrieved text doesn\'t equal original' );
178 # ------------------------
179 $text = "At vero eos et accusam et justo duo [[dolores]] et ea rebum. "
180 . "Stet clita kasd [[gubergren]], no sea takimata sanctus est.";
182 $page->doEdit( $text, "testing 2" );
184 # ------------------------
185 $page = new WikiPage( $title );
187 $retrieved = $page->getText();
188 $this->assertEquals( $text, $retrieved, 'retrieved text doesn\'t equal original' );
190 # ------------------------
191 $dbr = wfGetDB( DB_SLAVE
);
192 $res = $dbr->select( 'pagelinks', '*', array( 'pl_from' => $id ) );
193 $n = $res->numRows();
196 $this->assertEquals( 2, $n, 'pagelinks should contain two links from the page' );
199 public function testDoQuickEdit() {
202 $page = $this->createPage( "WikiPageTest_testDoQuickEdit", "original text" );
204 $text = "quick text";
205 $page->doQuickEdit( $text, $wgUser, "testing q" );
207 # ---------------------
208 $page = new WikiPage( $page->getTitle() );
209 $this->assertEquals( $text, $page->getText() );
212 public function testDoQuickEditContent() {
215 $page = $this->createPage( "WikiPageTest_testDoQuickEditContent", "original text" );
217 $content = ContentHandler
::makeContent( "quick text", $page->getTitle() );
218 $page->doQuickEditContent( $content, $wgUser, "testing q" );
220 # ---------------------
221 $page = new WikiPage( $page->getTitle() );
222 $this->assertTrue( $content->equals( $page->getContent() ) );
225 public function testDoDeleteArticle() {
226 $page = $this->createPage( "WikiPageTest_testDoDeleteArticle", "[[original text]] foo" );
227 $id = $page->getId();
229 $page->doDeleteArticle( "testing deletion" );
231 $this->assertFalse( $page->getTitle()->getArticleID() > 0, "Title object should now have page id 0" );
232 $this->assertFalse( $page->getId() > 0, "WikiPage should now have page id 0" );
233 $this->assertFalse( $page->exists(), "WikiPage::exists should return false after page was deleted" );
234 $this->assertNull( $page->getContent(), "WikiPage::getContent should return null after page was deleted" );
235 $this->assertFalse( $page->getText(), "WikiPage::getText should return false after page was deleted" );
237 $t = Title
::newFromText( $page->getTitle()->getPrefixedText() );
238 $this->assertFalse( $t->exists(), "Title::exists should return false after page was deleted" );
240 # ------------------------
241 $dbr = wfGetDB( DB_SLAVE
);
242 $res = $dbr->select( 'pagelinks', '*', array( 'pl_from' => $id ) );
243 $n = $res->numRows();
246 $this->assertEquals( 0, $n, 'pagelinks should contain no more links from the page' );
249 public function testDoDeleteUpdates() {
250 $page = $this->createPage( "WikiPageTest_testDoDeleteArticle", "[[original text]] foo" );
251 $id = $page->getId();
253 $page->doDeleteUpdates( $id );
255 # ------------------------
256 $dbr = wfGetDB( DB_SLAVE
);
257 $res = $dbr->select( 'pagelinks', '*', array( 'pl_from' => $id ) );
258 $n = $res->numRows();
261 $this->assertEquals( 0, $n, 'pagelinks should contain no more links from the page' );
264 public function testGetRevision() {
265 $page = $this->newPage( "WikiPageTest_testGetRevision" );
267 $rev = $page->getRevision();
268 $this->assertNull( $rev );
271 $this->createPage( $page, "some text" );
273 $rev = $page->getRevision();
275 $this->assertEquals( $page->getLatest(), $rev->getId() );
276 $this->assertEquals( "some text", $rev->getContent()->getNativeData() );
279 public function testGetContent() {
280 $page = $this->newPage( "WikiPageTest_testGetContent" );
282 $content = $page->getContent();
283 $this->assertNull( $content );
286 $this->createPage( $page, "some text" );
288 $content = $page->getContent();
289 $this->assertEquals( "some text", $content->getNativeData() );
292 public function testGetText() {
293 $page = $this->newPage( "WikiPageTest_testGetText" );
295 $text = $page->getText();
296 $this->assertFalse( $text );
299 $this->createPage( $page, "some text" );
301 $text = $page->getText();
302 $this->assertEquals( "some text", $text );
305 public function testGetRawText() {
306 $page = $this->newPage( "WikiPageTest_testGetRawText" );
308 $text = $page->getRawText();
309 $this->assertFalse( $text );
312 $this->createPage( $page, "some text" );
314 $text = $page->getRawText();
315 $this->assertEquals( "some text", $text );
318 public function testGetContentModel() {
319 global $wgContentHandlerUseDB;
321 if ( !$wgContentHandlerUseDB ) {
322 $this->markTestSkipped( '$wgContentHandlerUseDB is disabled' );
325 $page = $this->createPage( "WikiPageTest_testGetContentModel", "some text", CONTENT_MODEL_JAVASCRIPT
);
327 $page = new WikiPage( $page->getTitle() );
328 $this->assertEquals( CONTENT_MODEL_JAVASCRIPT
, $page->getContentModel() );
331 public function testGetContentHandler() {
332 global $wgContentHandlerUseDB;
334 if ( !$wgContentHandlerUseDB ) {
335 $this->markTestSkipped( '$wgContentHandlerUseDB is disabled' );
338 $page = $this->createPage( "WikiPageTest_testGetContentHandler", "some text", CONTENT_MODEL_JAVASCRIPT
);
340 $page = new WikiPage( $page->getTitle() );
341 $this->assertEquals( 'JavaScriptContentHandler', get_class( $page->getContentHandler() ) );
344 public function testExists() {
345 $page = $this->newPage( "WikiPageTest_testExists" );
346 $this->assertFalse( $page->exists() );
349 $this->createPage( $page, "some text" );
350 $this->assertTrue( $page->exists() );
352 $page = new WikiPage( $page->getTitle() );
353 $this->assertTrue( $page->exists() );
356 $page->doDeleteArticle( "done testing" );
357 $this->assertFalse( $page->exists() );
359 $page = new WikiPage( $page->getTitle() );
360 $this->assertFalse( $page->exists() );
363 public function dataHasViewableContent() {
365 array( 'WikiPageTest_testHasViewableContent', false, true ),
366 array( 'Special:WikiPageTest_testHasViewableContent', false ),
367 array( 'MediaWiki:WikiPageTest_testHasViewableContent', false ),
368 array( 'Special:Userlogin', true ),
369 array( 'MediaWiki:help', true ),
374 * @dataProvider dataHasViewableContent
376 public function testHasViewableContent( $title, $viewable, $create = false ) {
377 $page = $this->newPage( $title );
378 $this->assertEquals( $viewable, $page->hasViewableContent() );
381 $this->createPage( $page, "some text" );
382 $this->assertTrue( $page->hasViewableContent() );
384 $page = new WikiPage( $page->getTitle() );
385 $this->assertTrue( $page->hasViewableContent() );
389 public function dataGetRedirectTarget() {
391 array( 'WikiPageTest_testGetRedirectTarget_1', "hello world", null ),
392 array( 'WikiPageTest_testGetRedirectTarget_2', "#REDIRECT [[hello world]]", "Hello world" ),
397 * @dataProvider dataGetRedirectTarget
399 public function testGetRedirectTarget( $title, $text, $target ) {
400 $page = $this->createPage( $title, $text );
402 # sanity check, because this test seems to fail for no reason for some people.
403 $c = $page->getContent();
404 $this->assertEquals( 'WikitextContent', get_class( $c ) );
406 # now, test the actual redirect
407 $t = $page->getRedirectTarget();
408 $this->assertEquals( $target, is_null( $t ) ?
null : $t->getPrefixedText() );
412 * @dataProvider dataGetRedirectTarget
414 public function testIsRedirect( $title, $text, $target ) {
415 $page = $this->createPage( $title, $text );
416 $this->assertEquals( !is_null( $target ), $page->isRedirect() );
419 public function dataIsCountable() {
423 array( 'WikiPageTest_testIsCountable',
428 array( 'WikiPageTest_testIsCountable',
435 array( 'WikiPageTest_testIsCountable',
440 array( 'WikiPageTest_testIsCountable',
447 array( 'WikiPageTest_testIsCountable',
452 array( 'WikiPageTest_testIsCountable',
459 array( 'WikiPageTest_testIsCountable',
464 array( 'WikiPageTest_testIsCountable',
469 array( 'WikiPageTest_testIsCountable',
475 // not a content namespace
476 array( 'Talk:WikiPageTest_testIsCountable',
481 array( 'Talk:WikiPageTest_testIsCountable',
486 array( 'Talk:WikiPageTest_testIsCountable',
492 // not a content namespace, different model
493 array( 'MediaWiki:WikiPageTest_testIsCountable.js',
498 array( 'MediaWiki:WikiPageTest_testIsCountable.js',
503 array( 'MediaWiki:WikiPageTest_testIsCountable.js',
513 * @dataProvider dataIsCountable
515 public function testIsCountable( $title, $text, $mode, $expected ) {
516 global $wgArticleCountMethod;
518 $oldArticleCountMethod = $wgArticleCountMethod;
519 $wgArticleCountMethod = $mode;
521 $page = $this->createPage( $title, $text );
522 $hasLinks = wfGetDB( DB_SLAVE
)->selectField( 'pagelinks', 1,
523 array( 'pl_from' => $page->getId() ), __METHOD__
);
525 $editInfo = $page->prepareContentForEdit( $page->getContent() );
527 $v = $page->isCountable();
528 $w = $page->isCountable( $editInfo );
530 $wgArticleCountMethod = $oldArticleCountMethod;
532 $this->assertEquals( $expected, $v, "isCountable( null ) returned unexpected value " . var_export( $v, true )
533 . " instead of " . var_export( $expected, true ) . " in mode `$mode` for text \"$text\"" );
535 $this->assertEquals( $expected, $w, "isCountable( \$editInfo ) returned unexpected value " . var_export( $v, true )
536 . " instead of " . var_export( $expected, true ) . " in mode `$mode` for text \"$text\"" );
539 public function dataGetParserOutput() {
541 array("hello ''world''\n", "<p>hello <i>world</i></p>"),
547 * @dataProvider dataGetParserOutput
549 public function testGetParserOutput( $text, $expectedHtml ) {
550 $page = $this->createPage( 'WikiPageTest_testGetParserOutput', $text );
552 $opt = new ParserOptions();
553 $po = $page->getParserOutput( $opt );
554 $text = $po->getText();
556 $text = trim( preg_replace( '/<!--.*?-->/sm', '', $text ) ); # strip injected comments
557 $text = preg_replace( '!\s*(</p>)!sm', '\1', $text ); # don't let tidy confuse us
559 $this->assertEquals( $expectedHtml, $text );
578 public function dataReplaceSection() {
580 array( 'WikiPageTest_testReplaceSection',
581 WikiPageTest
::$sections,
585 trim( preg_replace( '/^Intro/sm', 'No more', WikiPageTest
::$sections ) )
587 array( 'WikiPageTest_testReplaceSection',
588 WikiPageTest
::$sections,
594 array( 'WikiPageTest_testReplaceSection',
595 WikiPageTest
::$sections,
597 "== TEST ==\nmore fun",
599 trim( preg_replace( '/^== test ==.*== foo ==/sm',
600 "== TEST ==\nmore fun\n\n== foo ==",
601 WikiPageTest
::$sections ) )
603 array( 'WikiPageTest_testReplaceSection',
604 WikiPageTest
::$sections,
608 trim( WikiPageTest
::$sections )
610 array( 'WikiPageTest_testReplaceSection',
611 WikiPageTest
::$sections,
615 trim( WikiPageTest
::$sections ) . "\n\n== New ==\n\nNo more"
621 * @dataProvider dataReplaceSection
623 public function testReplaceSection( $title, $text, $section, $with, $sectionTitle, $expected ) {
624 $page = $this->createPage( $title, $text );
625 $text = $page->replaceSection( $section, $with, $sectionTitle );
626 $text = trim( $text );
628 $this->assertEquals( $expected, $text );
632 * @dataProvider dataReplaceSection
634 public function testReplaceSectionContent( $title, $text, $section, $with, $sectionTitle, $expected ) {
635 $page = $this->createPage( $title, $text );
637 $content = ContentHandler
::makeContent( $with, $page->getTitle(), $page->getContentModel() );
638 $c = $page->replaceSectionContent( $section, $content, $sectionTitle );
640 $this->assertEquals( $expected, is_null( $c ) ?
null : trim( $c->getNativeData() ) );
643 /* @todo FIXME: fix this!
644 public function testGetUndoText() {
647 wfSuppressWarnings();
648 $haveDiff3 = $wgDiff3 && file_exists( $wgDiff3 );
652 $this->markTestSkipped( "diff3 not installed or not found" );
657 $page = $this->createPage( "WikiPageTest_testGetUndoText", $text );
658 $rev1 = $page->getRevision();
661 $page->doEditContent( ContentHandler::makeContent( $text, $page->getTitle() ), "adding section two");
662 $rev2 = $page->getRevision();
664 $text .= "\n\nthree";
665 $page->doEditContent( ContentHandler::makeContent( $text, $page->getTitle() ), "adding section three");
666 $rev3 = $page->getRevision();
669 $page->doEditContent( ContentHandler::makeContent( $text, $page->getTitle() ), "adding section four");
670 $rev4 = $page->getRevision();
673 $page->doEditContent( ContentHandler::makeContent( $text, $page->getTitle() ), "adding section five");
674 $rev5 = $page->getRevision();
677 $page->doEditContent( ContentHandler::makeContent( $text, $page->getTitle() ), "adding section six");
678 $rev6 = $page->getRevision();
680 $undo6 = $page->getUndoText( $rev6 );
681 if ( $undo6 === false ) $this->fail( "getUndoText failed for rev6" );
682 $this->assertEquals( "one\n\ntwo\n\nthree\n\nfour\n\nfive", $undo6 );
684 $undo3 = $page->getUndoText( $rev4, $rev2 );
685 if ( $undo3 === false ) $this->fail( "getUndoText failed for rev4..rev2" );
686 $this->assertEquals( "one\n\ntwo\n\nfive", $undo3 );
688 $undo2 = $page->getUndoText( $rev2 );
689 if ( $undo2 === false ) $this->fail( "getUndoText failed for rev2" );
690 $this->assertEquals( "one\n\nfive", $undo2 );
695 * @todo FIXME: this is a better rollback test than the one below, but it keeps failing in jenkins for some reason.
697 public function broken_testDoRollback() {
699 $admin->setName("Admin");
702 $page = $this->newPage( "WikiPageTest_testDoRollback" );
703 $page->doEditContent( ContentHandler
::makeContent( $text, $page->getTitle() ),
704 "section one", EDIT_NEW
, false, $admin );
707 $user1->setName( "127.0.1.11" );
709 $page = new WikiPage( $page->getTitle() );
710 $page->doEditContent( ContentHandler
::makeContent( $text, $page->getTitle() ),
711 "adding section two", 0, false, $user1 );
714 $user2->setName( "127.0.2.13" );
715 $text .= "\n\nthree";
716 $page = new WikiPage( $page->getTitle() );
717 $page->doEditContent( ContentHandler
::makeContent( $text, $page->getTitle() ),
718 "adding section three", 0, false, $user2 );
720 # we are having issues with doRollback spuriously failing. apparently the last revision somehow goes missing
721 # or not committed under some circumstances. so, make sure the last revision has the right user name.
722 $dbr = wfGetDB( DB_SLAVE
);
723 $this->assertEquals( 3, Revision
::countByPageId( $dbr, $page->getId() ) );
725 $page = new WikiPage( $page->getTitle() );
726 $rev3 = $page->getRevision();
727 $this->assertEquals( '127.0.2.13', $rev3->getUserText() );
729 $rev2 = $rev3->getPrevious();
730 $this->assertEquals( '127.0.1.11', $rev2->getUserText() );
732 $rev1 = $rev2->getPrevious();
733 $this->assertEquals( 'Admin', $rev1->getUserText() );
735 # now, try the actual rollback
736 $admin->addGroup( "sysop" ); #XXX: make the test user a sysop...
737 $token = $admin->getEditToken( array( $page->getTitle()->getPrefixedText(), $user2->getName() ), null );
738 $errors = $page->doRollback( $user2->getName(), "testing revert", $token, false, $details, $admin );
741 $this->fail( "Rollback failed:\n" . print_r( $errors, true ) . ";\n" . print_r( $details, true ) );
744 $page = new WikiPage( $page->getTitle() );
745 $this->assertEquals( $rev2->getSha1(), $page->getRevision()->getSha1(),
746 "rollback did not revert to the correct revision" );
747 $this->assertEquals( "one\n\ntwo", $page->getContent()->getNativeData() );
751 * @todo FIXME: the above rollback test is better, but it keeps failing in jenkins for some reason.
753 public function testDoRollback() {
755 $admin->setName("Admin");
758 $page = $this->newPage( "WikiPageTest_testDoRollback" );
759 $page->doEditContent( ContentHandler
::makeContent( $text, $page->getTitle() ),
760 "section one", EDIT_NEW
, false, $admin );
761 $rev1 = $page->getRevision();
764 $user1->setName( "127.0.1.11" );
766 $page = new WikiPage( $page->getTitle() );
767 $page->doEditContent( ContentHandler
::makeContent( $text, $page->getTitle() ),
768 "adding section two", 0, false, $user1 );
770 # now, try the rollback
771 $admin->addGroup( "sysop" ); #XXX: make the test user a sysop...
772 $token = $admin->getEditToken( array( $page->getTitle()->getPrefixedText(), $user1->getName() ), null );
773 $errors = $page->doRollback( $user1->getName(), "testing revert", $token, false, $details, $admin );
776 $this->fail( "Rollback failed:\n" . print_r( $errors, true ) . ";\n" . print_r( $details, true ) );
779 $page = new WikiPage( $page->getTitle() );
780 $this->assertEquals( $rev1->getSha1(), $page->getRevision()->getSha1(),
781 "rollback did not revert to the correct revision" );
782 $this->assertEquals( "one", $page->getContent()->getNativeData() );
785 public function dataGetAutosummary( ) {
788 'Hello there, world!',
791 '/^Redirected page .*Foo/'
798 '/^Created page .*Hello/'
802 'Hello there, world!',
809 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut
810 labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et
811 ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.',
814 '/^Replaced .*Hello/'
827 * @dataProvider dataGetAutoSummary
829 public function testGetAutosummary( $old, $new, $flags, $expected ) {
830 $page = $this->newPage( "WikiPageTest_testGetAutosummary" );
832 $summary = $page->getAutosummary( $old, $new, $flags );
834 $this->assertTrue( (bool)preg_match( $expected, $summary ),
835 "Autosummary didn't match expected pattern $expected: $summary" );
838 public function dataGetAutoDeleteReason( ) {
848 array( "first edit", null ),
850 "/first edit.*only contributor/",
856 array( "first edit", null ),
857 array( "second edit", null ),
859 "/second edit.*only contributor/",
865 array( "first edit", "127.0.2.22" ),
866 array( "second edit", "127.0.3.33" ),
874 array( "first edit: "
875 . "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam "
876 . " nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. "
877 . "At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea "
878 . "takimata sanctus est Lorem ipsum dolor sit amet.'", null ),
880 '/first edit:.*\.\.\."/',
886 array( "first edit", "127.0.2.22" ),
887 array( "", "127.0.3.33" ),
889 "/before blanking.*first edit/",
897 * @dataProvider dataGetAutoDeleteReason
899 public function testGetAutoDeleteReason( $edits, $expectedResult, $expectedHistory ) {
902 $page = $this->newPage( "WikiPageTest_testGetAutoDeleteReason" );
906 foreach ( $edits as $edit ) {
909 if ( !empty( $edit[1] ) ) $user->setName( $edit[1] );
910 else $user = $wgUser;
912 $content = ContentHandler
::makeContent( $edit[0], $page->getTitle(), $page->getContentModel() );
914 $page->doEditContent( $content, "test edit $c", $c < 2 ? EDIT_NEW
: 0, false, $user );
919 $reason = $page->getAutoDeleteReason( $hasHistory );
921 if ( is_bool( $expectedResult ) ||
is_null( $expectedResult ) ) $this->assertEquals( $expectedResult, $reason );
922 else $this->assertTrue( (bool)preg_match( $expectedResult, $reason ),
923 "Autosummary didn't match expected pattern $expectedResult: $reason" );
925 $this->assertEquals( $expectedHistory, $hasHistory,
926 "expected \$hasHistory to be " . var_export( $expectedHistory, true ) );
928 $page->doDeleteArticle( "done" );
931 public function dataPreSaveTransform() {
933 array( 'hello this is ~~~',
934 "hello this is [[Special:Contributions/127.0.0.1|127.0.0.1]]",
936 array( 'hello \'\'this\'\' is <nowiki>~~~</nowiki>',
937 'hello \'\'this\'\' is <nowiki>~~~</nowiki>',
943 * @dataProvider dataPreSaveTransform
945 public function testPreSaveTransform( $text, $expected ) {
946 $this->hideDeprecated( 'WikiPage::preSaveTransform' );
948 $user->setName("127.0.0.1");
950 $page = $this->newPage( "WikiPageTest_testPreloadTransform" );
951 $text = $page->preSaveTransform( $text, $user );
953 $this->assertEquals( $expected, $text );