Completed
Push — modern ( 903809...f162d1 )
by Jeroen De
13:05 queued 03:07
created

SubPageCountingTest::tearDown()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
nc 2
nop 0
dl 0
loc 9
rs 9.9666
c 0
b 0
f 0
1
<?php
2
3
namespace Tests\System\SubPageList;
4
5
use ParserHooks\FunctionRunner;
6
use PHPUnit\Framework\TestCase;
7
use SubPageList\Extension;
8
use SubPageList\Settings;
9
use Title;
10
11
/**
12
 * @group SubPageList
13
 * @licence GNU GPL v2+
14
 * @author Jeroen De Dauw < [email protected] >
15
 */
16
class SubPageCountingTest extends TestCase {
17
18
	const CURRENT_PAGE_NAME = 'TempSPLTest:CurrentPage';
19
20
	/**
21
	 * @var Title[]
22
	 */
23
	private $titles = [];
24
25
	public function createPage( $titleText ) {
26
		$title = Title::newFromText( $titleText );
27
		$this->titles[] = $title;
28
29
		$pageCreator = new PageCreator();
30
		$pageCreator->createPage( $title );
31
	}
32
33
	public function tearDown() {
34
		$pageDeleter = new PageDeleter();
35
36
		foreach ( $this->titles as $title ) {
37
			$pageDeleter->deletePage( $title );
38
		}
39
40
		$this->titles = [];
41
	}
42
43
	public function testPageDefaulting() {
44
		$this->createPage( self::CURRENT_PAGE_NAME );
45
		$this->createPage( self::CURRENT_PAGE_NAME . '/SubPage' );
46
47
		$this->assertSubPageCountFor(
48
			'',
49
			1
50
		);
51
	}
52
53
	public function testCountsIndirectChildren() {
54
		$this->createPage( 'TempSPLTest:CountAAA' );
55
		$this->createPage( 'TempSPLTest:CountAAA/AAA' );
56
		$this->createPage( 'TempSPLTest:CountAAA/AAA/AAA' );
57
		$this->createPage( 'TempSPLTest:CountAAA/AAA/BBB' );
58
59
		$this->assertSubPageCountFor(
60
			'TempSPLTest:CountAAA',
61
			3
62
		);
63
	}
64
65
	/**
66
	 * @depends testCountsIndirectChildren
67
	 */
68
	public function testDoesNotCountParents() {
69
		$this->assertSubPageCountFor(
70
			'TempSPLTest:CountAAA/AAA',
71
			2
72
		);
73
	}
74
75
	public function testCountsIndirectChildrenWithoutParent() {
76
		$this->createPage( 'TempSPLTest:CountBBB' );
77
		$this->createPage( 'TempSPLTest:CountBBB/AAA/AAA' );
78
		$this->createPage( 'TempSPLTest:CountBBB/AAA/BBB' );
79
80
		$this->assertSubPageCountFor(
81
			'TempSPLTest:CountBBB',
82
			2
83
		);
84
	}
85
86
	private function assertSubPageCountFor( $pageName, $expectedCount ) {
87
		$this->assertEquals(
88
			$expectedCount,
89
			(int)$this->getSubPageCountFor( $pageName )
90
		);
91
	}
92
93
	private function getSubPageCountFor( $pageName ) {
94
		$extension = new Extension( Settings::newFromGlobals( $GLOBALS ) );
95
96
		$functionRunner = new FunctionRunner(
97
			$extension->getCountHookDefinition(),
98
			$extension->getCountHookHandler()
99
		);
100
101
		$frame = $this->createMock( 'PPFrame' );
102
103
		$frame->expects( $this->once() )
104
			->method( 'expand' )
105
			->will( $this->returnArgument( 0 ) );
106
107
108
		$parser = $this->newParser();
109
		$result = $functionRunner->run(
110
			$parser,
111
			[
112
				'page' => $pageName
113
			],
114
			$frame
115
		);
116
117
		return reset( $result );
118
	}
119
120
	private function newParser() {
121
		$parser = new \Parser();
122
123
		$parser->mOptions = new \ParserOptions();
124
		$parser->clearState();
125
		$parser->setTitle( \Title::newFromText( self::CURRENT_PAGE_NAME ) );
126
127
		return $parser;
128
	}
129
130
}