Merge "Add SPARQL client to core"
[lhc/web/wiklou.git] / tests / phpunit / includes / diff / DifferenceEngineTest.php
1 <?php
2
3 use Wikimedia\TestingAccessWrapper;
4
5 /**
6 * @covers DifferenceEngine
7 *
8 * @todo tests for the rest of DifferenceEngine!
9 *
10 * @group Database
11 * @group Diff
12 *
13 * @author Katie Filbert < aude.wiki@gmail.com >
14 */
15 class DifferenceEngineTest extends MediaWikiTestCase {
16
17 protected $context;
18
19 private static $revisions;
20
21 protected function setUp() {
22 parent::setUp();
23
24 $title = $this->getTitle();
25
26 $this->context = new RequestContext();
27 $this->context->setTitle( $title );
28
29 if ( !self::$revisions ) {
30 self::$revisions = $this->doEdits();
31 }
32 }
33
34 /**
35 * @return Title
36 */
37 protected function getTitle() {
38 $namespace = $this->getDefaultWikitextNS();
39 return Title::newFromText( 'Kitten', $namespace );
40 }
41
42 /**
43 * @return int[] Revision ids
44 */
45 protected function doEdits() {
46 $title = $this->getTitle();
47 $page = WikiPage::factory( $title );
48
49 $strings = [ "it is a kitten", "two kittens", "three kittens", "four kittens" ];
50 $revisions = [];
51
52 foreach ( $strings as $string ) {
53 $content = ContentHandler::makeContent( $string, $title );
54 $page->doEditContent( $content, 'edit page' );
55 $revisions[] = $page->getLatest();
56 }
57
58 return $revisions;
59 }
60
61 public function testMapDiffPrevNext() {
62 $cases = $this->getMapDiffPrevNextCases();
63
64 foreach ( $cases as $case ) {
65 list( $expected, $old, $new, $message ) = $case;
66
67 $diffEngine = new DifferenceEngine( $this->context, $old, $new, 2, true, false );
68 $diffMap = $diffEngine->mapDiffPrevNext( $old, $new );
69 $this->assertEquals( $expected, $diffMap, $message );
70 }
71 }
72
73 private function getMapDiffPrevNextCases() {
74 $revs = self::$revisions;
75
76 return [
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] ]
80 ];
81 }
82
83 public function testLoadRevisionData() {
84 $cases = $this->getLoadRevisionDataCases();
85
86 foreach ( $cases as $case ) {
87 list( $expectedOld, $expectedNew, $old, $new, $message ) = $case;
88
89 $diffEngine = new DifferenceEngine( $this->context, $old, $new, 2, true, false );
90 $diffEngine->loadRevisionData();
91
92 $this->assertEquals( $diffEngine->getOldid(), $expectedOld, $message );
93 $this->assertEquals( $diffEngine->getNewid(), $expectedNew, $message );
94 }
95 }
96
97 private function getLoadRevisionDataCases() {
98 $revs = self::$revisions;
99
100 return [
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' ]
105 ];
106 }
107
108 public function testGetOldid() {
109 $revs = self::$revisions;
110
111 $diffEngine = new DifferenceEngine( $this->context, $revs[1], $revs[2], 2, true, false );
112 $this->assertEquals( $revs[1], $diffEngine->getOldid(), 'diff get old id' );
113 }
114
115 public function testGetNewid() {
116 $revs = self::$revisions;
117
118 $diffEngine = new DifferenceEngine( $this->context, $revs[1], $revs[2], 2, true, false );
119 $this->assertEquals( $revs[2], $diffEngine->getNewid(), 'diff get new id' );
120 }
121
122 public function provideLocaliseTitleTooltipsTestData() {
123 return [
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>',
127 ],
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>',
131 ],
132 'nothing changed when key not hit' => [
133 '<a class="mw-diff-movedpara-rightis">⚫</a>',
134 '<a class="mw-diff-movedpara-rightis">⚫</a>',
135 ],
136 ];
137 }
138
139 /**
140 * @dataProvider provideLocaliseTitleTooltipsTestData
141 */
142 public function testAddLocalisedTitleTooltips( $input, $expected ) {
143 $this->setContentLang( 'qqx' );
144 $diffEngine = TestingAccessWrapper::newFromObject( new DifferenceEngine() );
145 $this->assertEquals( $expected, $diffEngine->addLocalisedTitleTooltips( $input ) );
146 }
147
148 }