testRenderHierarchyWithDepthLimit()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 33

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
nc 1
nop 0
dl 0
loc 33
rs 9.392
c 0
b 0
f 0
1
<?php
2
3
namespace Tests\Unit\SubPageList\Lister\UI;
4
5
use PHPUnit\Framework\TestCase;
6
use SubPageList\Lister\Page;
7
use SubPageList\Lister\UI\TreeListRenderer;
8
use Title;
9
10
/**
11
 * @covers \SubPageList\Lister\UI\TreeListRenderer
12
 *
13
 * @group SubPageList
14
 *
15
 * @licence GNU GPL v2+
16
 * @author Jeroen De Dauw < [email protected] >
17
 */
18
class TreeListRendererTest extends TestCase {
19
20
	/**
21
	 * @dataProvider titleTextProvider
22
	 */
23
	public function testRenderHierarchyWithNoSubPages( $titleText ) {
24
		$this->assertRendersHierarchy(
25
			new Page( Title::newFromText( $titleText ) ),
26
			'',
27
			[
28
				TreeListRenderer::OPT_SHOW_TOP_PAGE => false
29
			]
30
		);
31
	}
32
33
	public function titleTextProvider() {
34
		return [
35
			[ 'A' ],
36
			[ 'AAAAAAAA' ],
37
			[ 'AA BB CC' ],
38
		];
39
	}
40
41
	/**
42
	 * @dataProvider titleTextProvider
43
	 */
44
	public function testRenderHierarchyWithNoSubPagesShowingPageItself( $titleText ) {
45
		$this->assertRendersHierarchy(
46
			new Page( Title::newFromText( $titleText ) ),
47
			$titleText
48
		);
49
	}
50
51
	private function assertRendersHierarchy( Page $page, $expected, array $options = [] ) {
52
		$listRender = $this->newListRenderer( $options );
53
54
		$actual = $listRender->renderHierarchy( $page );
55
56
		$this->assertEquals( $expected, $actual );
57
	}
58
59
	private function newListRenderer( array $options ) {
60
		$pageRenderer = $this->createMock( 'SubPageList\Lister\UI\PageRenderer\PageRenderer' );
61
62
		$pageRenderer->expects( $this->any() )
63
			->method( 'renderPage' )
64
			->will( $this->returnCallback( function( Page $page ) {
65
				return $page->getTitle()->getFullText();
66
			} ) );
67
68
		 return new TreeListRenderer(
69
			 $pageRenderer,
70
			 $options
71
		 );
72
	}
73
74
	public function testRenderHierarchyWithSubPages() {
75
		$this->assertRendersHierarchy(
76
			new Page(
77
				Title::newFromText( 'AAA' ),
78
				[
79
					new Page( Title::newFromText( 'BBB' ) ),
80
                    new Page( Title::newFromText( 'CCC' ) ),
81
				]
82
			),
83
			'AAA
84
* BBB
85
* CCC'
86
		);
87
	}
88
89
	public function testRenderHierarchyWithManySubPages() {
90
		$this->assertRendersHierarchy(
91
			new Page(
92
				Title::newFromText( 'AAA' ),
93
				[
94
					new Page(
95
						Title::newFromText( 'BBB' ),
96
						[
97
							new Page( Title::newFromText( '111' ) ),
98
							new Page( Title::newFromText( '222' ) ),
99
						]
100
					),
101
					new Page(
102
						Title::newFromText( 'CCC' ),
103
						[]
104
					),
105
					new Page(
106
						Title::newFromText( 'DDD' ),
107
						[
108
							new Page( Title::newFromText( '333' ) ),
109
						]
110
					),
111
				]
112
			),
113
			'AAA
114
* BBB
115
** 111
116
** 222
117
* CCC
118
* DDD
119
** 333'
120
		);
121
	}
122
123
	public function testRenderHierarchyWithDepthLimit() {
124
		$this->assertRendersHierarchy(
125
			new Page(
126
				Title::newFromText( 'AAA' ),
127
				[
128
					new Page(
129
						Title::newFromText( 'BBB' ),
130
						[
131
							new Page( Title::newFromText( '111' ) ),
132
							new Page( Title::newFromText( '222' ) ),
133
						]
134
					),
135
					new Page(
136
						Title::newFromText( 'CCC' ),
137
						[]
138
					),
139
					new Page(
140
						Title::newFromText( 'DDD' ),
141
						[
142
							new Page( Title::newFromText( '333' ) ),
143
						]
144
					),
145
				]
146
			),
147
			'AAA
148
* BBB
149
* CCC
150
* DDD',
151
			[
152
				TreeListRenderer::OPT_MAX_DEPTH => 1
153
			]
154
		);
155
	}
156
157
}
158