3 use Wikimedia\TestingAccessWrapper
;
6 * @covers DifferenceEngine
8 * @todo tests for the rest of DifferenceEngine!
13 * @author Katie Filbert < aude.wiki@gmail.com >
15 class DifferenceEngineTest
extends MediaWikiTestCase
{
19 private static $revisions;
21 protected function setUp() {
24 $title = $this->getTitle();
26 $this->context
= new RequestContext();
27 $this->context
->setTitle( $title );
29 if ( !self
::$revisions ) {
30 self
::$revisions = $this->doEdits();
37 protected function getTitle() {
38 $namespace = $this->getDefaultWikitextNS();
39 return Title
::newFromText( 'Kitten', $namespace );
43 * @return int[] Revision ids
45 protected function doEdits() {
46 $title = $this->getTitle();
47 $page = WikiPage
::factory( $title );
49 $strings = [ "it is a kitten", "two kittens", "three kittens", "four kittens" ];
52 foreach ( $strings as $string ) {
53 $content = ContentHandler
::makeContent( $string, $title );
54 $page->doEditContent( $content, 'edit page' );
55 $revisions[] = $page->getLatest();
61 public function testMapDiffPrevNext() {
62 $cases = $this->getMapDiffPrevNextCases();
64 foreach ( $cases as $case ) {
65 list( $expected, $old, $new, $message ) = $case;
67 $diffEngine = new DifferenceEngine( $this->context
, $old, $new, 2, true, false );
68 $diffMap = $diffEngine->mapDiffPrevNext( $old, $new );
69 $this->assertEquals( $expected, $diffMap, $message );
73 private function getMapDiffPrevNextCases() {
74 $revs = self
::$revisions;
77 [ [ $revs[1], $revs[2] ], $revs[2], 'prev', 'diff=prev' ],
78 [ [ $revs[2], $revs[3] ], $revs[2], 'next', 'diff=next' ],
79 [ [ $revs[1], $revs[3] ], $revs[1], $revs[3], 'diff=' . $revs[3] ]
83 public function testLoadRevisionData() {
84 $cases = $this->getLoadRevisionDataCases();
86 foreach ( $cases as $case ) {
87 list( $expectedOld, $expectedNew, $old, $new, $message ) = $case;
89 $diffEngine = new DifferenceEngine( $this->context
, $old, $new, 2, true, false );
90 $diffEngine->loadRevisionData();
92 $this->assertEquals( $diffEngine->getOldid(), $expectedOld, $message );
93 $this->assertEquals( $diffEngine->getNewid(), $expectedNew, $message );
97 private function getLoadRevisionDataCases() {
98 $revs = self
::$revisions;
101 [ $revs[2], $revs[3], $revs[3], 'prev', 'diff=prev' ],
102 [ $revs[2], $revs[3], $revs[2], 'next', 'diff=next' ],
103 [ $revs[1], $revs[3], $revs[1], $revs[3], 'diff=' . $revs[3] ],
104 [ $revs[1], $revs[3], $revs[1], 0, 'diff=0' ]
108 public function testGetOldid() {
109 $revs = self
::$revisions;
111 $diffEngine = new DifferenceEngine( $this->context
, $revs[1], $revs[2], 2, true, false );
112 $this->assertEquals( $revs[1], $diffEngine->getOldid(), 'diff get old id' );
115 public function testGetNewid() {
116 $revs = self
::$revisions;
118 $diffEngine = new DifferenceEngine( $this->context
, $revs[1], $revs[2], 2, true, false );
119 $this->assertEquals( $revs[2], $diffEngine->getNewid(), 'diff get new id' );
122 public function provideLocaliseTitleTooltipsTestData() {
124 'moved paragraph left shoud get new location title' => [
125 '<a class="mw-diff-movedpara-left">⚫</a>',
126 '<a class="mw-diff-movedpara-left" title="(diff-paragraph-moved-tonew)">⚫</a>',
128 'moved paragraph right shoud get old location title' => [
129 '<a class="mw-diff-movedpara-right">⚫</a>',
130 '<a class="mw-diff-movedpara-right" title="(diff-paragraph-moved-toold)">⚫</a>',
132 'nothing changed when key not hit' => [
133 '<a class="mw-diff-movedpara-rightis">⚫</a>',
134 '<a class="mw-diff-movedpara-rightis">⚫</a>',
140 * @dataProvider provideLocaliseTitleTooltipsTestData
142 public function testAddLocalisedTitleTooltips( $input, $expected ) {
143 $this->setContentLang( 'qqx' );
144 $diffEngine = TestingAccessWrapper
::newFromObject( new DifferenceEngine() );
145 $this->assertEquals( $expected, $diffEngine->addLocalisedTitleTooltips( $input ) );