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 $page = $this->createPage( "WikiPageTest_testGetContentModel", "some text", CONTENT_MODEL_JAVASCRIPT
);
321 $page = new WikiPage( $page->getTitle() );
322 $this->assertEquals( CONTENT_MODEL_JAVASCRIPT
, $page->getContentModel() );
325 public function testGetContentHandler() {
326 $page = $this->createPage( "WikiPageTest_testGetContentHandler", "some text", CONTENT_MODEL_JAVASCRIPT
);
328 $page = new WikiPage( $page->getTitle() );
329 $this->assertEquals( 'JavaScriptContentHandler', get_class( $page->getContentHandler() ) );
332 public function testExists() {
333 $page = $this->newPage( "WikiPageTest_testExists" );
334 $this->assertFalse( $page->exists() );
337 $this->createPage( $page, "some text" );
338 $this->assertTrue( $page->exists() );
340 $page = new WikiPage( $page->getTitle() );
341 $this->assertTrue( $page->exists() );
344 $page->doDeleteArticle( "done testing" );
345 $this->assertFalse( $page->exists() );
347 $page = new WikiPage( $page->getTitle() );
348 $this->assertFalse( $page->exists() );
351 public function dataHasViewableContent() {
353 array( 'WikiPageTest_testHasViewableContent', false, true ),
354 array( 'Special:WikiPageTest_testHasViewableContent', false ),
355 array( 'MediaWiki:WikiPageTest_testHasViewableContent', false ),
356 array( 'Special:Userlogin', true ),
357 array( 'MediaWiki:help', true ),
362 * @dataProvider dataHasViewableContent
364 public function testHasViewableContent( $title, $viewable, $create = false ) {
365 $page = $this->newPage( $title );
366 $this->assertEquals( $viewable, $page->hasViewableContent() );
369 $this->createPage( $page, "some text" );
370 $this->assertTrue( $page->hasViewableContent() );
372 $page = new WikiPage( $page->getTitle() );
373 $this->assertTrue( $page->hasViewableContent() );
377 public function dataGetRedirectTarget() {
379 array( 'WikiPageTest_testGetRedirectTarget_1', "hello world", null ),
380 array( 'WikiPageTest_testGetRedirectTarget_2', "#REDIRECT [[hello world]]", "Hello world" ),
385 * @dataProvider dataGetRedirectTarget
387 public function testGetRedirectTarget( $title, $text, $target ) {
388 $page = $this->createPage( $title, $text );
390 # sanity check, because this test seems to fail for no reason for some people.
391 $c = $page->getContent();
392 $this->assertEquals( 'WikitextContent', get_class( $c ) );
394 # now, test the actual redirect
395 $t = $page->getRedirectTarget();
396 $this->assertEquals( $target, is_null( $t ) ?
null : $t->getPrefixedText() );
400 * @dataProvider dataGetRedirectTarget
402 public function testIsRedirect( $title, $text, $target ) {
403 $page = $this->createPage( $title, $text );
404 $this->assertEquals( !is_null( $target ), $page->isRedirect() );
407 public function dataIsCountable() {
411 array( 'WikiPageTest_testIsCountable',
416 array( 'WikiPageTest_testIsCountable',
423 array( 'WikiPageTest_testIsCountable',
428 array( 'WikiPageTest_testIsCountable',
435 array( 'WikiPageTest_testIsCountable',
440 array( 'WikiPageTest_testIsCountable',
447 array( 'WikiPageTest_testIsCountable',
452 array( 'WikiPageTest_testIsCountable',
457 array( 'WikiPageTest_testIsCountable',
463 // not a content namespace
464 array( 'Talk:WikiPageTest_testIsCountable',
469 array( 'Talk:WikiPageTest_testIsCountable',
474 array( 'Talk:WikiPageTest_testIsCountable',
480 // not a content namespace, different model
481 array( 'MediaWiki:WikiPageTest_testIsCountable.js',
486 array( 'MediaWiki:WikiPageTest_testIsCountable.js',
491 array( 'MediaWiki:WikiPageTest_testIsCountable.js',
501 * @dataProvider dataIsCountable
503 public function testIsCountable( $title, $text, $mode, $expected ) {
504 global $wgArticleCountMethod;
506 $oldArticleCountMethod = $wgArticleCountMethod;
507 $wgArticleCountMethod = $mode;
509 $page = $this->createPage( $title, $text );
510 $hasLinks = wfGetDB( DB_SLAVE
)->selectField( 'pagelinks', 1,
511 array( 'pl_from' => $page->getId() ), __METHOD__
);
513 $editInfo = $page->prepareContentForEdit( $page->getContent() );
515 $v = $page->isCountable();
516 $w = $page->isCountable( $editInfo );
518 $wgArticleCountMethod = $oldArticleCountMethod;
520 $this->assertEquals( $expected, $v, "isCountable( null ) returned unexpected value " . var_export( $v, true )
521 . " instead of " . var_export( $expected, true ) . " in mode `$mode` for text \"$text\"" );
523 $this->assertEquals( $expected, $w, "isCountable( \$editInfo ) returned unexpected value " . var_export( $v, true )
524 . " instead of " . var_export( $expected, true ) . " in mode `$mode` for text \"$text\"" );
527 public function dataGetParserOutput() {
529 array("hello ''world''\n", "<p>hello <i>world</i></p>"),
535 * @dataProvider dataGetParserOutput
537 public function testGetParserOutput( $text, $expectedHtml ) {
538 $page = $this->createPage( 'WikiPageTest_testGetParserOutput', $text );
540 $opt = new ParserOptions();
541 $po = $page->getParserOutput( $opt );
542 $text = $po->getText();
544 $text = trim( preg_replace( '/<!--.*?-->/sm', '', $text ) ); # strip injected comments
545 $text = preg_replace( '!\s*(</p>)!sm', '\1', $text ); # don't let tidy confuse us
547 $this->assertEquals( $expectedHtml, $text );
566 public function dataReplaceSection() {
568 array( 'WikiPageTest_testReplaceSection',
569 WikiPageTest
::$sections,
573 trim( preg_replace( '/^Intro/sm', 'No more', WikiPageTest
::$sections ) )
575 array( 'WikiPageTest_testReplaceSection',
576 WikiPageTest
::$sections,
582 array( 'WikiPageTest_testReplaceSection',
583 WikiPageTest
::$sections,
585 "== TEST ==\nmore fun",
587 trim( preg_replace( '/^== test ==.*== foo ==/sm', "== TEST ==\nmore fun\n\n== foo ==", WikiPageTest
::$sections ) )
589 array( 'WikiPageTest_testReplaceSection',
590 WikiPageTest
::$sections,
594 trim( WikiPageTest
::$sections )
596 array( 'WikiPageTest_testReplaceSection',
597 WikiPageTest
::$sections,
601 trim( WikiPageTest
::$sections ) . "\n\n== New ==\n\nNo more"
607 * @dataProvider dataReplaceSection
609 public function testReplaceSection( $title, $text, $section, $with, $sectionTitle, $expected ) {
610 $page = $this->createPage( $title, $text );
611 $text = $page->replaceSection( $section, $with, $sectionTitle );
612 $text = trim( $text );
614 $this->assertEquals( $expected, $text );
618 * @dataProvider dataReplaceSection
620 public function testReplaceSectionContent( $title, $text, $section, $with, $sectionTitle, $expected ) {
621 $page = $this->createPage( $title, $text );
623 $content = ContentHandler
::makeContent( $with, $page->getTitle(), $page->getContentModel() );
624 $c = $page->replaceSectionContent( $section, $content, $sectionTitle );
626 $this->assertEquals( $expected, is_null( $c ) ?
null : trim( $c->getNativeData() ) );
629 /* @todo FIXME: fix this!
630 public function testGetUndoText() {
633 wfSuppressWarnings();
634 $haveDiff3 = $wgDiff3 && file_exists( $wgDiff3 );
638 $this->markTestSkipped( "diff3 not installed or not found" );
643 $page = $this->createPage( "WikiPageTest_testGetUndoText", $text );
644 $rev1 = $page->getRevision();
647 $page->doEditContent( ContentHandler::makeContent( $text, $page->getTitle() ), "adding section two");
648 $rev2 = $page->getRevision();
650 $text .= "\n\nthree";
651 $page->doEditContent( ContentHandler::makeContent( $text, $page->getTitle() ), "adding section three");
652 $rev3 = $page->getRevision();
655 $page->doEditContent( ContentHandler::makeContent( $text, $page->getTitle() ), "adding section four");
656 $rev4 = $page->getRevision();
659 $page->doEditContent( ContentHandler::makeContent( $text, $page->getTitle() ), "adding section five");
660 $rev5 = $page->getRevision();
663 $page->doEditContent( ContentHandler::makeContent( $text, $page->getTitle() ), "adding section six");
664 $rev6 = $page->getRevision();
666 $undo6 = $page->getUndoText( $rev6 );
667 if ( $undo6 === false ) $this->fail( "getUndoText failed for rev6" );
668 $this->assertEquals( "one\n\ntwo\n\nthree\n\nfour\n\nfive", $undo6 );
670 $undo3 = $page->getUndoText( $rev4, $rev2 );
671 if ( $undo3 === false ) $this->fail( "getUndoText failed for rev4..rev2" );
672 $this->assertEquals( "one\n\ntwo\n\nfive", $undo3 );
674 $undo2 = $page->getUndoText( $rev2 );
675 if ( $undo2 === false ) $this->fail( "getUndoText failed for rev2" );
676 $this->assertEquals( "one\n\nfive", $undo2 );
681 * @todo FIXME: this is a better rollback test than the one below, but it keeps failing in jenkins for some reason.
683 public function broken_testDoRollback() {
685 $admin->setName("Admin");
688 $page = $this->newPage( "WikiPageTest_testDoRollback" );
689 $page->doEditContent( ContentHandler
::makeContent( $text, $page->getTitle() ), "section one", EDIT_NEW
, false, $admin );
692 $user1->setName( "127.0.1.11" );
694 $page = new WikiPage( $page->getTitle() );
695 $page->doEditContent( ContentHandler
::makeContent( $text, $page->getTitle() ), "adding section two", 0, false, $user1 );
698 $user2->setName( "127.0.2.13" );
699 $text .= "\n\nthree";
700 $page = new WikiPage( $page->getTitle() );
701 $page->doEditContent( ContentHandler
::makeContent( $text, $page->getTitle() ), "adding section three", 0, false, $user2 );
703 # we are having issues with doRollback spuriously failing. apparently the last revision somehow goes missing
704 # or not committed under some circumstances. so, make sure the last revision has the right user name.
705 $dbr = wfGetDB( DB_SLAVE
);
706 $this->assertEquals( 3, Revision
::countByPageId( $dbr, $page->getId() ) );
708 $page = new WikiPage( $page->getTitle() );
709 $rev3 = $page->getRevision();
710 $this->assertEquals( '127.0.2.13', $rev3->getUserText() );
712 $rev2 = $rev3->getPrevious();
713 $this->assertEquals( '127.0.1.11', $rev2->getUserText() );
715 $rev1 = $rev2->getPrevious();
716 $this->assertEquals( 'Admin', $rev1->getUserText() );
718 # now, try the actual rollback
719 $admin->addGroup( "sysop" ); #XXX: make the test user a sysop...
720 $token = $admin->getEditToken( array( $page->getTitle()->getPrefixedText(), $user2->getName() ), null );
721 $errors = $page->doRollback( $user2->getName(), "testing revert", $token, false, $details, $admin );
724 $this->fail( "Rollback failed:\n" . print_r( $errors, true ) . ";\n" . print_r( $details, true ) );
727 $page = new WikiPage( $page->getTitle() );
728 $this->assertEquals( $rev2->getSha1(), $page->getRevision()->getSha1(), "rollback did not revert to the correct revision" );
729 $this->assertEquals( "one\n\ntwo", $page->getContent()->getNativeData() );
733 * @todo FIXME: the above rollback test is better, but it keeps failing in jenkins for some reason.
735 public function testDoRollback() {
737 $admin->setName("Admin");
740 $page = $this->newPage( "WikiPageTest_testDoRollback" );
741 $page->doEditContent( ContentHandler
::makeContent( $text, $page->getTitle() ), "section one", EDIT_NEW
, false, $admin );
742 $rev1 = $page->getRevision();
745 $user1->setName( "127.0.1.11" );
747 $page = new WikiPage( $page->getTitle() );
748 $page->doEditContent( ContentHandler
::makeContent( $text, $page->getTitle() ), "adding section two", 0, false, $user1 );
750 # now, try the rollback
751 $admin->addGroup( "sysop" ); #XXX: make the test user a sysop...
752 $token = $admin->getEditToken( array( $page->getTitle()->getPrefixedText(), $user1->getName() ), null );
753 $errors = $page->doRollback( $user1->getName(), "testing revert", $token, false, $details, $admin );
756 $this->fail( "Rollback failed:\n" . print_r( $errors, true ) . ";\n" . print_r( $details, true ) );
759 $page = new WikiPage( $page->getTitle() );
760 $this->assertEquals( $rev1->getSha1(), $page->getRevision()->getSha1(), "rollback did not revert to the correct revision" );
761 $this->assertEquals( "one", $page->getContent()->getNativeData() );
764 public function dataGetAutosummary( ) {
767 'Hello there, world!',
770 '/^Redirected page .*Foo/'
777 '/^Created page .*Hello/'
781 'Hello there, world!',
788 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut
789 labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et
790 ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.',
793 '/^Replaced .*Hello/'
806 * @dataProvider dataGetAutoSummary
808 public function testGetAutosummary( $old, $new, $flags, $expected ) {
809 $page = $this->newPage( "WikiPageTest_testGetAutosummary" );
811 $summary = $page->getAutosummary( $old, $new, $flags );
813 $this->assertTrue( (bool)preg_match( $expected, $summary ), "Autosummary didn't match expected pattern $expected: $summary" );
816 public function dataGetAutoDeleteReason( ) {
826 array( "first edit", null ),
828 "/first edit.*only contributor/",
834 array( "first edit", null ),
835 array( "second edit", null ),
837 "/second edit.*only contributor/",
843 array( "first edit", "127.0.2.22" ),
844 array( "second edit", "127.0.3.33" ),
852 array( "first edit: "
853 . "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam "
854 . " nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. "
855 . "At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea "
856 . "takimata sanctus est Lorem ipsum dolor sit amet.'", null ),
858 '/first edit:.*\.\.\."/',
864 array( "first edit", "127.0.2.22" ),
865 array( "", "127.0.3.33" ),
867 "/before blanking.*first edit/",
875 * @dataProvider dataGetAutoDeleteReason
877 public function testGetAutoDeleteReason( $edits, $expectedResult, $expectedHistory ) {
880 $page = $this->newPage( "WikiPageTest_testGetAutoDeleteReason" );
884 foreach ( $edits as $edit ) {
887 if ( !empty( $edit[1] ) ) $user->setName( $edit[1] );
888 else $user = $wgUser;
890 $content = ContentHandler
::makeContent( $edit[0], $page->getTitle(), $page->getContentModel() );
892 $page->doEditContent( $content, "test edit $c", $c < 2 ? EDIT_NEW
: 0, false, $user );
897 $reason = $page->getAutoDeleteReason( $hasHistory );
899 if ( is_bool( $expectedResult ) ||
is_null( $expectedResult ) ) $this->assertEquals( $expectedResult, $reason );
900 else $this->assertTrue( (bool)preg_match( $expectedResult, $reason ), "Autosummary didn't match expected pattern $expectedResult: $reason" );
902 $this->assertEquals( $expectedHistory, $hasHistory, "expected \$hasHistory to be " . var_export( $expectedHistory, true ) );
904 $page->doDeleteArticle( "done" );
907 public function dataPreSaveTransform() {
909 array( 'hello this is ~~~',
910 "hello this is [[Special:Contributions/127.0.0.1|127.0.0.1]]",
912 array( 'hello \'\'this\'\' is <nowiki>~~~</nowiki>',
913 'hello \'\'this\'\' is <nowiki>~~~</nowiki>',
919 * @dataProvider dataPreSaveTransform
921 public function testPreSaveTransform( $text, $expected ) {
922 $this->hideDeprecated( 'WikiPage::preSaveTransform' );
924 $user->setName("127.0.0.1");
926 $page = $this->newPage( "WikiPageTest_testPreloadTransform" );
927 $text = $page->preSaveTransform( $text, $user );
929 $this->assertEquals( $expected, $text );