4 * @covers OldChangesList
6 * @todo add tests to cover article link, timestamp, character difference,
7 * log entry, user tool links, direction marks, tags, rollback,
8 * watching users, and date header.
12 * @licence GNU GPL v2+
13 * @author Katie Filbert < aude.wiki@gmail.com >
15 class OldChangesListTest
extends MediaWikiLangTestCase
{
18 * @var TestRecentChangesHelper
20 private $testRecentChangesHelper;
22 public function __construct( $name = null, array $data = array(), $dataName = '' ) {
23 parent
::__construct( $name, $data, $dataName );
25 $this->testRecentChangesHelper
= new TestRecentChangesHelper();
28 protected function setUp() {
31 $this->setMwGlobals( array(
32 'wgArticlePath' => '/wiki/$1'
37 * @dataProvider recentChangesLine_CssForLineNumberProvider
39 public function testRecentChangesLine_CssForLineNumber( $expected, $linenumber, $message ) {
40 $oldChangesList = $this->getOldChangesList();
41 $recentChange = $this->getEditChange();
43 $line = $oldChangesList->recentChangesLine( $recentChange, false, $linenumber );
45 $this->assertRegExp( $expected, $line, $message );
48 public function recentChangesLine_CssForLineNumberProvider() {
50 array( '/mw-line-odd/', 1, 'odd line number' ),
51 array( '/mw-line-even/', 2, 'even line number' )
55 public function testRecentChangesLine_NotWatchedCssClass() {
56 $oldChangesList = $this->getOldChangesList();
57 $recentChange = $this->getEditChange();
59 $line = $oldChangesList->recentChangesLine( $recentChange, false, 1 );
61 $this->assertRegExp( '/mw-changeslist-line-not-watched/', $line );
64 public function testRecentChangesLine_WatchedCssClass() {
65 $oldChangesList = $this->getOldChangesList();
66 $recentChange = $this->getEditChange();
68 $line = $oldChangesList->recentChangesLine( $recentChange, true, 1 );
70 $this->assertRegExp( '/mw-changeslist-line-watched/', $line );
73 public function testRecentChangesLine_LogTitle() {
74 $oldChangesList = $this->getOldChangesList();
75 $recentChange = $this->getLogChange( 'delete', 'delete' );
77 $line = $oldChangesList->recentChangesLine( $recentChange, false, 1 );
79 $message = new Message( 'dellogpage' );
80 $expectedLinkText = $message->inLanguage( 'en' )->text();
82 $this->assertRegExp( '/href="\/wiki\/Special:Log\/delete/', $line, 'link has href attribute' );
83 $this->assertRegExp( '/title="Special:Log\/delete/', $line, 'link has title attribute' );
84 $this->assertRegExp( "/$expectedLinkText/", $line, 'link text' );
87 public function testRecentChangesLine_DiffHistLinks() {
88 $oldChangesList = $this->getOldChangesList();
89 $recentChange = $this->getEditChange();
91 $line = $oldChangesList->recentChangesLine( $recentChange, false, 1 );
94 '/title=Cat&curid=20131103212153&diff=5&oldid=191/',
99 $this->assertRegExp( '/tabindex="0"/', $line, 'assert tab index' );
101 '/title=Cat&curid=20131103212153&action=history"/',
103 'assert history link'
107 public function testRecentChangesLine_Flags() {
108 $oldChangesList = $this->getOldChangesList();
109 $recentChange = $this->getNewBotEditChange();
111 $line = $oldChangesList->recentChangesLine( $recentChange, false, 1 );
114 "/<abbr class='newpage' title='This edit created a new page'>N<\/abbr>/",
120 "/<abbr class='botedit' title='This edit was performed by a bot'>b<\/abbr>/",
126 private function getNewBotEditChange() {
127 $user = $this->getTestUser();
129 $recentChange = $this->testRecentChangesHelper
->makeNewBotEditRecentChange(
130 $user, 'Abc', '20131103212153', 5, 191, 190, 0, 0
133 return $recentChange;
136 private function getLogChange( $logType, $logAction ) {
137 $user = $this->getTestUser();
139 $recentChange = $this->testRecentChangesHelper
->makeLogRecentChange(
140 $logType, $logAction, $user, 'Abc', '20131103212153', 0, 0
143 return $recentChange;
146 private function getEditChange() {
147 $user = $this->getTestUser();
148 $recentChange = $this->testRecentChangesHelper
->makeEditRecentChange(
149 $user, 'Cat', '20131103212153', 5, 191, 190, 0, 0
152 return $recentChange;
155 private function getOldChangesList() {
156 $context = $this->getContext();
157 return new OldChangesList( $context );
160 private function getTestUser() {
161 $user = User
::newFromName( 'TestRecentChangesUser' );
163 if ( !$user->getId() ) {
164 $user->addToDatabase();
170 private function getContext() {
171 $user = $this->getTestUser();
172 $context = $this->testRecentChangesHelper
->getTestContext( $user );
174 $title = Title
::newFromText( 'RecentChanges', NS_SPECIAL
);
175 $context->setTitle( $title );