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