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 $this->hideDeprecated( "WikiPage::doEdit" );
149 $this->hideDeprecated( "WikiPage::getText" );
150 $this->hideDeprecated( "Revision::getText" );
152 $title = Title
::newFromText( "WikiPageTest_testDoEdit" );
154 $page = $this->newPage( $title );
156 $text = "[[Lorem ipsum]] dolor sit amet, consetetur sadipscing elitr, sed diam "
157 . " nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat.";
159 $page->doEdit( $text, "[[testing]] 1" );
161 $this->assertTrue( $title->getArticleID() > 0, "Title object should have new page id" );
162 $this->assertTrue( $page->getId() > 0, "WikiPage should have new page id" );
163 $this->assertTrue( $title->exists(), "Title object should indicate that the page now exists" );
164 $this->assertTrue( $page->exists(), "WikiPage object should indicate that the page now exists" );
166 $id = $page->getId();
168 # ------------------------
169 $dbr = wfGetDB( DB_SLAVE
);
170 $res = $dbr->select( 'pagelinks', '*', array( 'pl_from' => $id ) );
171 $n = $res->numRows();
174 $this->assertEquals( 1, $n, 'pagelinks should contain one link from the page' );
176 # ------------------------
177 $page = new WikiPage( $title );
179 $retrieved = $page->getText();
180 $this->assertEquals( $text, $retrieved, 'retrieved text doesn\'t equal original' );
182 # ------------------------
183 $text = "At vero eos et accusam et justo duo [[dolores]] et ea rebum. "
184 . "Stet clita kasd [[gubergren]], no sea takimata sanctus est.";
186 $page->doEdit( $text, "testing 2" );
188 # ------------------------
189 $page = new WikiPage( $title );
191 $retrieved = $page->getText();
192 $this->assertEquals( $text, $retrieved, 'retrieved text doesn\'t equal original' );
194 # ------------------------
195 $dbr = wfGetDB( DB_SLAVE
);
196 $res = $dbr->select( 'pagelinks', '*', array( 'pl_from' => $id ) );
197 $n = $res->numRows();
200 $this->assertEquals( 2, $n, 'pagelinks should contain two links from the page' );
203 public function testDoQuickEdit() {
206 $this->hideDeprecated( "WikiPage::doQuickEdit" );
208 $page = $this->createPage( "WikiPageTest_testDoQuickEdit", "original text" );
210 $text = "quick text";
211 $page->doQuickEdit( $text, $wgUser, "testing q" );
213 # ---------------------
214 $page = new WikiPage( $page->getTitle() );
215 $this->assertEquals( $text, $page->getText() );
218 public function testDoQuickEditContent() {
221 $page = $this->createPage( "WikiPageTest_testDoQuickEditContent", "original text" );
223 $content = ContentHandler
::makeContent( "quick text", $page->getTitle() );
224 $page->doQuickEditContent( $content, $wgUser, "testing q" );
226 # ---------------------
227 $page = new WikiPage( $page->getTitle() );
228 $this->assertTrue( $content->equals( $page->getContent() ) );
231 public function testDoDeleteArticle() {
232 $page = $this->createPage( "WikiPageTest_testDoDeleteArticle", "[[original text]] foo" );
233 $id = $page->getId();
235 $page->doDeleteArticle( "testing deletion" );
237 $this->assertFalse( $page->getTitle()->getArticleID() > 0, "Title object should now have page id 0" );
238 $this->assertFalse( $page->getId() > 0, "WikiPage should now have page id 0" );
239 $this->assertFalse( $page->exists(), "WikiPage::exists should return false after page was deleted" );
240 $this->assertNull( $page->getContent(), "WikiPage::getContent should return null after page was deleted" );
241 $this->assertFalse( $page->getText(), "WikiPage::getText should return false after page was deleted" );
243 $t = Title
::newFromText( $page->getTitle()->getPrefixedText() );
244 $this->assertFalse( $t->exists(), "Title::exists should return false after page was deleted" );
246 # ------------------------
247 $dbr = wfGetDB( DB_SLAVE
);
248 $res = $dbr->select( 'pagelinks', '*', array( 'pl_from' => $id ) );
249 $n = $res->numRows();
252 $this->assertEquals( 0, $n, 'pagelinks should contain no more links from the page' );
255 public function testDoDeleteUpdates() {
256 $page = $this->createPage( "WikiPageTest_testDoDeleteArticle", "[[original text]] foo" );
257 $id = $page->getId();
259 $page->doDeleteUpdates( $id );
261 # ------------------------
262 $dbr = wfGetDB( DB_SLAVE
);
263 $res = $dbr->select( 'pagelinks', '*', array( 'pl_from' => $id ) );
264 $n = $res->numRows();
267 $this->assertEquals( 0, $n, 'pagelinks should contain no more links from the page' );
270 public function testGetRevision() {
271 $page = $this->newPage( "WikiPageTest_testGetRevision" );
273 $rev = $page->getRevision();
274 $this->assertNull( $rev );
277 $this->createPage( $page, "some text" );
279 $rev = $page->getRevision();
281 $this->assertEquals( $page->getLatest(), $rev->getId() );
282 $this->assertEquals( "some text", $rev->getContent()->getNativeData() );
285 public function testGetContent() {
286 $page = $this->newPage( "WikiPageTest_testGetContent" );
288 $content = $page->getContent();
289 $this->assertNull( $content );
292 $this->createPage( $page, "some text" );
294 $content = $page->getContent();
295 $this->assertEquals( "some text", $content->getNativeData() );
298 public function testGetText() {
299 $this->hideDeprecated( "WikiPage::getText" );
301 $page = $this->newPage( "WikiPageTest_testGetText" );
303 $text = $page->getText();
304 $this->assertFalse( $text );
307 $this->createPage( $page, "some text" );
309 $text = $page->getText();
310 $this->assertEquals( "some text", $text );
313 public function testGetRawText() {
314 $this->hideDeprecated( "WikiPage::getRawText" );
316 $page = $this->newPage( "WikiPageTest_testGetRawText" );
318 $text = $page->getRawText();
319 $this->assertFalse( $text );
322 $this->createPage( $page, "some text" );
324 $text = $page->getRawText();
325 $this->assertEquals( "some text", $text );
328 public function testGetContentModel() {
329 global $wgContentHandlerUseDB;
331 if ( !$wgContentHandlerUseDB ) {
332 $this->markTestSkipped( '$wgContentHandlerUseDB is disabled' );
335 $page = $this->createPage( "WikiPageTest_testGetContentModel", "some text", CONTENT_MODEL_JAVASCRIPT
);
337 $page = new WikiPage( $page->getTitle() );
338 $this->assertEquals( CONTENT_MODEL_JAVASCRIPT
, $page->getContentModel() );
341 public function testGetContentHandler() {
342 global $wgContentHandlerUseDB;
344 if ( !$wgContentHandlerUseDB ) {
345 $this->markTestSkipped( '$wgContentHandlerUseDB is disabled' );
348 $page = $this->createPage( "WikiPageTest_testGetContentHandler", "some text", CONTENT_MODEL_JAVASCRIPT
);
350 $page = new WikiPage( $page->getTitle() );
351 $this->assertEquals( 'JavaScriptContentHandler', get_class( $page->getContentHandler() ) );
354 public function testExists() {
355 $page = $this->newPage( "WikiPageTest_testExists" );
356 $this->assertFalse( $page->exists() );
359 $this->createPage( $page, "some text" );
360 $this->assertTrue( $page->exists() );
362 $page = new WikiPage( $page->getTitle() );
363 $this->assertTrue( $page->exists() );
366 $page->doDeleteArticle( "done testing" );
367 $this->assertFalse( $page->exists() );
369 $page = new WikiPage( $page->getTitle() );
370 $this->assertFalse( $page->exists() );
373 public function dataHasViewableContent() {
375 array( 'WikiPageTest_testHasViewableContent', false, true ),
376 array( 'Special:WikiPageTest_testHasViewableContent', false ),
377 array( 'MediaWiki:WikiPageTest_testHasViewableContent', false ),
378 array( 'Special:Userlogin', true ),
379 array( 'MediaWiki:help', true ),
384 * @dataProvider dataHasViewableContent
386 public function testHasViewableContent( $title, $viewable, $create = false ) {
387 $page = $this->newPage( $title );
388 $this->assertEquals( $viewable, $page->hasViewableContent() );
391 $this->createPage( $page, "some text" );
392 $this->assertTrue( $page->hasViewableContent() );
394 $page = new WikiPage( $page->getTitle() );
395 $this->assertTrue( $page->hasViewableContent() );
399 public function dataGetRedirectTarget() {
401 array( 'WikiPageTest_testGetRedirectTarget_1', "hello world", null ),
402 array( 'WikiPageTest_testGetRedirectTarget_2', "#REDIRECT [[hello world]]", "Hello world" ),
407 * @dataProvider dataGetRedirectTarget
409 public function testGetRedirectTarget( $title, $text, $target ) {
410 $page = $this->createPage( $title, $text );
412 # sanity check, because this test seems to fail for no reason for some people.
413 $c = $page->getContent();
414 $this->assertEquals( 'WikitextContent', get_class( $c ) );
416 # now, test the actual redirect
417 $t = $page->getRedirectTarget();
418 $this->assertEquals( $target, is_null( $t ) ?
null : $t->getPrefixedText() );
422 * @dataProvider dataGetRedirectTarget
424 public function testIsRedirect( $title, $text, $target ) {
425 $page = $this->createPage( $title, $text );
426 $this->assertEquals( !is_null( $target ), $page->isRedirect() );
429 public function dataIsCountable() {
433 array( 'WikiPageTest_testIsCountable',
438 array( 'WikiPageTest_testIsCountable',
445 array( 'WikiPageTest_testIsCountable',
450 array( 'WikiPageTest_testIsCountable',
457 array( 'WikiPageTest_testIsCountable',
462 array( 'WikiPageTest_testIsCountable',
469 array( 'WikiPageTest_testIsCountable',
474 array( 'WikiPageTest_testIsCountable',
479 array( 'WikiPageTest_testIsCountable',
485 // not a content namespace
486 array( 'Talk:WikiPageTest_testIsCountable',
491 array( 'Talk:WikiPageTest_testIsCountable',
496 array( 'Talk:WikiPageTest_testIsCountable',
502 // not a content namespace, different model
503 array( 'MediaWiki:WikiPageTest_testIsCountable.js',
508 array( 'MediaWiki:WikiPageTest_testIsCountable.js',
513 array( 'MediaWiki:WikiPageTest_testIsCountable.js',
523 * @dataProvider dataIsCountable
525 public function testIsCountable( $title, $text, $mode, $expected ) {
526 global $wgArticleCountMethod;
528 $oldArticleCountMethod = $wgArticleCountMethod;
529 $wgArticleCountMethod = $mode;
531 $page = $this->createPage( $title, $text );
532 $hasLinks = wfGetDB( DB_SLAVE
)->selectField( 'pagelinks', 1,
533 array( 'pl_from' => $page->getId() ), __METHOD__
);
535 $editInfo = $page->prepareContentForEdit( $page->getContent() );
537 $v = $page->isCountable();
538 $w = $page->isCountable( $editInfo );
540 $wgArticleCountMethod = $oldArticleCountMethod;
542 $this->assertEquals( $expected, $v, "isCountable( null ) returned unexpected value " . var_export( $v, true )
543 . " instead of " . var_export( $expected, true ) . " in mode `$mode` for text \"$text\"" );
545 $this->assertEquals( $expected, $w, "isCountable( \$editInfo ) returned unexpected value " . var_export( $v, true )
546 . " instead of " . var_export( $expected, true ) . " in mode `$mode` for text \"$text\"" );
549 public function dataGetParserOutput() {
551 array("hello ''world''\n", "<p>hello <i>world</i></p>"),
557 * @dataProvider dataGetParserOutput
559 public function testGetParserOutput( $text, $expectedHtml ) {
560 $page = $this->createPage( 'WikiPageTest_testGetParserOutput', $text );
562 $opt = new ParserOptions();
563 $po = $page->getParserOutput( $opt );
564 $text = $po->getText();
566 $text = trim( preg_replace( '/<!--.*?-->/sm', '', $text ) ); # strip injected comments
567 $text = preg_replace( '!\s*(</p>)!sm', '\1', $text ); # don't let tidy confuse us
569 $this->assertEquals( $expectedHtml, $text );
588 public function dataReplaceSection() {
590 array( 'WikiPageTest_testReplaceSection',
591 WikiPageTest
::$sections,
595 trim( preg_replace( '/^Intro/sm', 'No more', WikiPageTest
::$sections ) )
597 array( 'WikiPageTest_testReplaceSection',
598 WikiPageTest
::$sections,
604 array( 'WikiPageTest_testReplaceSection',
605 WikiPageTest
::$sections,
607 "== TEST ==\nmore fun",
609 trim( preg_replace( '/^== test ==.*== foo ==/sm',
610 "== TEST ==\nmore fun\n\n== foo ==",
611 WikiPageTest
::$sections ) )
613 array( 'WikiPageTest_testReplaceSection',
614 WikiPageTest
::$sections,
618 trim( WikiPageTest
::$sections )
620 array( 'WikiPageTest_testReplaceSection',
621 WikiPageTest
::$sections,
625 trim( WikiPageTest
::$sections ) . "\n\n== New ==\n\nNo more"
631 * @dataProvider dataReplaceSection
633 public function testReplaceSection( $title, $text, $section, $with, $sectionTitle, $expected ) {
634 $this->hideDeprecated( "WikiPage::replaceSection" );
636 $page = $this->createPage( $title, $text );
637 $text = $page->replaceSection( $section, $with, $sectionTitle );
638 $text = trim( $text );
640 $this->assertEquals( $expected, $text );
644 * @dataProvider dataReplaceSection
646 public function testReplaceSectionContent( $title, $text, $section, $with, $sectionTitle, $expected ) {
647 $page = $this->createPage( $title, $text );
649 $content = ContentHandler
::makeContent( $with, $page->getTitle(), $page->getContentModel() );
650 $c = $page->replaceSectionContent( $section, $content, $sectionTitle );
652 $this->assertEquals( $expected, is_null( $c ) ?
null : trim( $c->getNativeData() ) );
655 /* @todo FIXME: fix this!
656 public function testGetUndoText() {
659 wfSuppressWarnings();
660 $haveDiff3 = $wgDiff3 && file_exists( $wgDiff3 );
664 $this->markTestSkipped( "diff3 not installed or not found" );
669 $page = $this->createPage( "WikiPageTest_testGetUndoText", $text );
670 $rev1 = $page->getRevision();
673 $page->doEditContent( ContentHandler::makeContent( $text, $page->getTitle() ), "adding section two");
674 $rev2 = $page->getRevision();
676 $text .= "\n\nthree";
677 $page->doEditContent( ContentHandler::makeContent( $text, $page->getTitle() ), "adding section three");
678 $rev3 = $page->getRevision();
681 $page->doEditContent( ContentHandler::makeContent( $text, $page->getTitle() ), "adding section four");
682 $rev4 = $page->getRevision();
685 $page->doEditContent( ContentHandler::makeContent( $text, $page->getTitle() ), "adding section five");
686 $rev5 = $page->getRevision();
689 $page->doEditContent( ContentHandler::makeContent( $text, $page->getTitle() ), "adding section six");
690 $rev6 = $page->getRevision();
692 $undo6 = $page->getUndoText( $rev6 );
693 if ( $undo6 === false ) $this->fail( "getUndoText failed for rev6" );
694 $this->assertEquals( "one\n\ntwo\n\nthree\n\nfour\n\nfive", $undo6 );
696 $undo3 = $page->getUndoText( $rev4, $rev2 );
697 if ( $undo3 === false ) $this->fail( "getUndoText failed for rev4..rev2" );
698 $this->assertEquals( "one\n\ntwo\n\nfive", $undo3 );
700 $undo2 = $page->getUndoText( $rev2 );
701 if ( $undo2 === false ) $this->fail( "getUndoText failed for rev2" );
702 $this->assertEquals( "one\n\nfive", $undo2 );
707 * @todo FIXME: this is a better rollback test than the one below, but it keeps failing in jenkins for some reason.
709 public function broken_testDoRollback() {
711 $admin->setName("Admin");
714 $page = $this->newPage( "WikiPageTest_testDoRollback" );
715 $page->doEditContent( ContentHandler
::makeContent( $text, $page->getTitle() ),
716 "section one", EDIT_NEW
, false, $admin );
719 $user1->setName( "127.0.1.11" );
721 $page = new WikiPage( $page->getTitle() );
722 $page->doEditContent( ContentHandler
::makeContent( $text, $page->getTitle() ),
723 "adding section two", 0, false, $user1 );
726 $user2->setName( "127.0.2.13" );
727 $text .= "\n\nthree";
728 $page = new WikiPage( $page->getTitle() );
729 $page->doEditContent( ContentHandler
::makeContent( $text, $page->getTitle() ),
730 "adding section three", 0, false, $user2 );
732 # we are having issues with doRollback spuriously failing. apparently the last revision somehow goes missing
733 # or not committed under some circumstances. so, make sure the last revision has the right user name.
734 $dbr = wfGetDB( DB_SLAVE
);
735 $this->assertEquals( 3, Revision
::countByPageId( $dbr, $page->getId() ) );
737 $page = new WikiPage( $page->getTitle() );
738 $rev3 = $page->getRevision();
739 $this->assertEquals( '127.0.2.13', $rev3->getUserText() );
741 $rev2 = $rev3->getPrevious();
742 $this->assertEquals( '127.0.1.11', $rev2->getUserText() );
744 $rev1 = $rev2->getPrevious();
745 $this->assertEquals( 'Admin', $rev1->getUserText() );
747 # now, try the actual rollback
748 $admin->addGroup( "sysop" ); #XXX: make the test user a sysop...
749 $token = $admin->getEditToken( array( $page->getTitle()->getPrefixedText(), $user2->getName() ), null );
750 $errors = $page->doRollback( $user2->getName(), "testing revert", $token, false, $details, $admin );
753 $this->fail( "Rollback failed:\n" . print_r( $errors, true ) . ";\n" . print_r( $details, true ) );
756 $page = new WikiPage( $page->getTitle() );
757 $this->assertEquals( $rev2->getSha1(), $page->getRevision()->getSha1(),
758 "rollback did not revert to the correct revision" );
759 $this->assertEquals( "one\n\ntwo", $page->getContent()->getNativeData() );
763 * @todo FIXME: the above rollback test is better, but it keeps failing in jenkins for some reason.
765 public function testDoRollback() {
767 $admin->setName("Admin");
770 $page = $this->newPage( "WikiPageTest_testDoRollback" );
771 $page->doEditContent( ContentHandler
::makeContent( $text, $page->getTitle() ),
772 "section one", EDIT_NEW
, false, $admin );
773 $rev1 = $page->getRevision();
776 $user1->setName( "127.0.1.11" );
778 $page = new WikiPage( $page->getTitle() );
779 $page->doEditContent( ContentHandler
::makeContent( $text, $page->getTitle() ),
780 "adding section two", 0, false, $user1 );
782 # now, try the rollback
783 $admin->addGroup( "sysop" ); #XXX: make the test user a sysop...
784 $token = $admin->getEditToken( array( $page->getTitle()->getPrefixedText(), $user1->getName() ), null );
785 $errors = $page->doRollback( $user1->getName(), "testing revert", $token, false, $details, $admin );
788 $this->fail( "Rollback failed:\n" . print_r( $errors, true ) . ";\n" . print_r( $details, true ) );
791 $page = new WikiPage( $page->getTitle() );
792 $this->assertEquals( $rev1->getSha1(), $page->getRevision()->getSha1(),
793 "rollback did not revert to the correct revision" );
794 $this->assertEquals( "one", $page->getContent()->getNativeData() );
797 public function dataGetAutosummary( ) {
800 'Hello there, world!',
803 '/^Redirected page .*Foo/'
810 '/^Created page .*Hello/'
814 'Hello there, world!',
821 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut
822 labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et
823 ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.',
826 '/^Replaced .*Hello/'
839 * @dataProvider dataGetAutoSummary
841 public function testGetAutosummary( $old, $new, $flags, $expected ) {
842 $this->hideDeprecated( "WikiPage::getAutosummary" );
844 $page = $this->newPage( "WikiPageTest_testGetAutosummary" );
846 $summary = $page->getAutosummary( $old, $new, $flags );
848 $this->assertTrue( (bool)preg_match( $expected, $summary ),
849 "Autosummary didn't match expected pattern $expected: $summary" );
852 public function dataGetAutoDeleteReason( ) {
862 array( "first edit", null ),
864 "/first edit.*only contributor/",
870 array( "first edit", null ),
871 array( "second edit", null ),
873 "/second edit.*only contributor/",
879 array( "first edit", "127.0.2.22" ),
880 array( "second edit", "127.0.3.33" ),
888 array( "first edit: "
889 . "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam "
890 . " nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. "
891 . "At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea "
892 . "takimata sanctus est Lorem ipsum dolor sit amet.'", null ),
894 '/first edit:.*\.\.\."/',
900 array( "first edit", "127.0.2.22" ),
901 array( "", "127.0.3.33" ),
903 "/before blanking.*first edit/",
911 * @dataProvider dataGetAutoDeleteReason
913 public function testGetAutoDeleteReason( $edits, $expectedResult, $expectedHistory ) {
916 $page = $this->newPage( "WikiPageTest_testGetAutoDeleteReason" );
920 foreach ( $edits as $edit ) {
923 if ( !empty( $edit[1] ) ) $user->setName( $edit[1] );
924 else $user = $wgUser;
926 $content = ContentHandler
::makeContent( $edit[0], $page->getTitle(), $page->getContentModel() );
928 $page->doEditContent( $content, "test edit $c", $c < 2 ? EDIT_NEW
: 0, false, $user );
933 $reason = $page->getAutoDeleteReason( $hasHistory );
935 if ( is_bool( $expectedResult ) ||
is_null( $expectedResult ) ) $this->assertEquals( $expectedResult, $reason );
936 else $this->assertTrue( (bool)preg_match( $expectedResult, $reason ),
937 "Autosummary didn't match expected pattern $expectedResult: $reason" );
939 $this->assertEquals( $expectedHistory, $hasHistory,
940 "expected \$hasHistory to be " . var_export( $expectedHistory, true ) );
942 $page->doDeleteArticle( "done" );
945 public function dataPreSaveTransform() {
947 array( 'hello this is ~~~',
948 "hello this is [[Special:Contributions/127.0.0.1|127.0.0.1]]",
950 array( 'hello \'\'this\'\' is <nowiki>~~~</nowiki>',
951 'hello \'\'this\'\' is <nowiki>~~~</nowiki>',
957 * @dataProvider dataPreSaveTransform
959 public function testPreSaveTransform( $text, $expected ) {
960 $this->hideDeprecated( 'WikiPage::preSaveTransform' );
962 $user->setName("127.0.0.1");
964 $page = $this->newPage( "WikiPageTest_testPreloadTransform" );
965 $text = $page->preSaveTransform( $text, $user );
967 $this->assertEquals( $expected, $text );