Merge "Fix typo in mw.widgets.CategorySelector.js"
[lhc/web/wiklou.git] / tests / phpunit / includes / diff / DifferenceEngineTest.php
1 <?php
2
3 /**
4 * @covers DifferenceEngine
5 *
6 * @todo tests for the rest of DifferenceEngine!
7 *
8 * @group Database
9 * @group Diff
10 *
11 * @author Katie Filbert < aude.wiki@gmail.com >
12 */
13 class DifferenceEngineTest extends MediaWikiTestCase {
14
15 protected $context;
16
17 private static $revisions;
18
19 protected function setUp() {
20 parent::setUp();
21
22 $title = $this->getTitle();
23
24 $this->context = new RequestContext();
25 $this->context->setTitle( $title );
26
27 if ( !self::$revisions ) {
28 self::$revisions = $this->doEdits();
29 }
30 }
31
32 /**
33 * @return Title
34 */
35 protected function getTitle() {
36 $namespace = $this->getDefaultWikitextNS();
37 return Title::newFromText( 'Kitten', $namespace );
38 }
39
40 /**
41 * @return int[] Revision ids
42 */
43 protected function doEdits() {
44 $title = $this->getTitle();
45 $page = WikiPage::factory( $title );
46
47 $strings = array( "it is a kitten", "two kittens", "three kittens", "four kittens" );
48 $revisions = array();
49
50 foreach ( $strings as $string ) {
51 $content = ContentHandler::makeContent( $string, $title );
52 $page->doEditContent( $content, 'edit page' );
53 $revisions[] = $page->getLatest();
54 }
55
56 return $revisions;
57 }
58
59 public function testMapDiffPrevNext() {
60 $cases = $this->getMapDiffPrevNextCases();
61
62 foreach ( $cases as $case ) {
63 list( $expected, $old, $new, $message ) = $case;
64
65 $diffEngine = new DifferenceEngine( $this->context, $old, $new, 2, true, false );
66 $diffMap = $diffEngine->mapDiffPrevNext( $old, $new );
67 $this->assertEquals( $expected, $diffMap, $message );
68 }
69 }
70
71 private function getMapDiffPrevNextCases() {
72 $revs = self::$revisions;
73
74 return array(
75 array( array( $revs[1], $revs[2] ), $revs[2], 'prev', 'diff=prev' ),
76 array( array( $revs[2], $revs[3] ), $revs[2], 'next', 'diff=next' ),
77 array( array( $revs[1], $revs[3] ), $revs[1], $revs[3], 'diff=' . $revs[3] )
78 );
79 }
80
81 public function testLoadRevisionData() {
82 $cases = $this->getLoadRevisionDataCases();
83
84 foreach ( $cases as $case ) {
85 list( $expectedOld, $expectedNew, $old, $new, $message ) = $case;
86
87 $diffEngine = new DifferenceEngine( $this->context, $old, $new, 2, true, false );
88 $diffEngine->loadRevisionData();
89
90 $this->assertEquals( $diffEngine->getOldid(), $expectedOld, $message );
91 $this->assertEquals( $diffEngine->getNewid(), $expectedNew, $message );
92 }
93 }
94
95 private function getLoadRevisionDataCases() {
96 $revs = self::$revisions;
97
98 return array(
99 array( $revs[2], $revs[3], $revs[3], 'prev', 'diff=prev' ),
100 array( $revs[2], $revs[3], $revs[2], 'next', 'diff=next' ),
101 array( $revs[1], $revs[3], $revs[1], $revs[3], 'diff=' . $revs[3] ),
102 array( $revs[1], $revs[3], $revs[1], 0, 'diff=0' )
103 );
104 }
105
106 public function testGetOldid() {
107 $revs = self::$revisions;
108
109 $diffEngine = new DifferenceEngine( $this->context, $revs[1], $revs[2], 2, true, false );
110 $this->assertEquals( $revs[1], $diffEngine->getOldid(), 'diff get old id' );
111 }
112
113 public function testGetNewid() {
114 $revs = self::$revisions;
115
116 $diffEngine = new DifferenceEngine( $this->context, $revs[1], $revs[2], 2, true, false );
117 $this->assertEquals( $revs[2], $diffEngine->getNewid(), 'diff get new id' );
118 }
119
120 }