Merge "Type hint against LinkTarget in WatchedItemStore"
[lhc/web/wiklou.git] / tests / phpunit / unit / includes / TitleArrayFromResultTest.php
1 <?php
2
3 /**
4 * @author Addshore
5 * @covers TitleArrayFromResult
6 */
7 class TitleArrayFromResultTest extends MediaWikiUnitTestCase {
8
9 private function getMockResultWrapper( $row = null, $numRows = 1 ) {
10 $resultWrapper = $this->getMockBuilder( Wikimedia\Rdbms\ResultWrapper::class )
11 ->disableOriginalConstructor();
12
13 $resultWrapper = $resultWrapper->getMock();
14 $resultWrapper->expects( $this->atLeastOnce() )
15 ->method( 'current' )
16 ->will( $this->returnValue( $row ) );
17 $resultWrapper->expects( $this->any() )
18 ->method( 'numRows' )
19 ->will( $this->returnValue( $numRows ) );
20
21 return $resultWrapper;
22 }
23
24 private function getRowWithTitle( $namespace = 3, $title = 'foo' ) {
25 $row = new stdClass();
26 $row->page_namespace = $namespace;
27 $row->page_title = $title;
28 return $row;
29 }
30
31 /**
32 * @covers TitleArrayFromResult::__construct
33 */
34 public function testConstructionWithFalseRow() {
35 $row = false;
36 $resultWrapper = $this->getMockResultWrapper( $row );
37
38 $object = new TitleArrayFromResult( $resultWrapper );
39
40 $this->assertEquals( $resultWrapper, $object->res );
41 $this->assertSame( 0, $object->key );
42 $this->assertEquals( $row, $object->current );
43 }
44
45 /**
46 * @covers TitleArrayFromResult::__construct
47 */
48 public function testConstructionWithRow() {
49 $namespace = 0;
50 $title = 'foo';
51 $row = $this->getRowWithTitle( $namespace, $title );
52 $resultWrapper = $this->getMockResultWrapper( $row );
53
54 $object = new TitleArrayFromResult( $resultWrapper );
55
56 $this->assertEquals( $resultWrapper, $object->res );
57 $this->assertSame( 0, $object->key );
58 $this->assertInstanceOf( Title::class, $object->current );
59 $this->assertEquals( $namespace, $object->current->mNamespace );
60 $this->assertEquals( $title, $object->current->mTextform );
61 }
62
63 public static function provideNumberOfRows() {
64 return [
65 [ 0 ],
66 [ 1 ],
67 [ 122 ],
68 ];
69 }
70
71 /**
72 * @dataProvider provideNumberOfRows
73 * @covers TitleArrayFromResult::count
74 */
75 public function testCountWithVaryingValues( $numRows ) {
76 $object = new TitleArrayFromResult( $this->getMockResultWrapper(
77 $this->getRowWithTitle(),
78 $numRows
79 ) );
80 $this->assertEquals( $numRows, $object->count() );
81 }
82
83 /**
84 * @covers TitleArrayFromResult::current
85 */
86 public function testCurrentAfterConstruction() {
87 $namespace = 0;
88 $title = 'foo';
89 $row = $this->getRowWithTitle( $namespace, $title );
90 $object = new TitleArrayFromResult( $this->getMockResultWrapper( $row ) );
91 $this->assertInstanceOf( Title::class, $object->current() );
92 $this->assertEquals( $namespace, $object->current->mNamespace );
93 $this->assertEquals( $title, $object->current->mTextform );
94 }
95
96 public function provideTestValid() {
97 return [
98 [ $this->getRowWithTitle(), true ],
99 [ false, false ],
100 ];
101 }
102
103 /**
104 * @dataProvider provideTestValid
105 * @covers TitleArrayFromResult::valid
106 */
107 public function testValid( $input, $expected ) {
108 $object = new TitleArrayFromResult( $this->getMockResultWrapper( $input ) );
109 $this->assertEquals( $expected, $object->valid() );
110 }
111
112 // @todo unit test for key()
113 // @todo unit test for next()
114 // @todo unit test for rewind()
115 }