2022-02-11 23:43:45 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
use MediaWiki\Skin\SkinComponentTableOfContents;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @covers \MediaWiki\Skin\SkinComponentTableOfContents
|
|
|
|
|
*
|
|
|
|
|
* @group Output
|
|
|
|
|
*/
|
|
|
|
|
class SkinComponentTableOfContentsTest extends MediaWikiUnitTestCase {
|
|
|
|
|
|
|
|
|
|
public function provideGetSectionsData(): array {
|
|
|
|
|
// byteoffset and fromtitle are redacted from this test.
|
|
|
|
|
$SECTION_1 = [
|
|
|
|
|
'toclevel' => 1,
|
|
|
|
|
'line' => 'Section 1',
|
|
|
|
|
'anchor' => 'section_1',
|
|
|
|
|
];
|
|
|
|
|
$SECTION_1_1 = [
|
|
|
|
|
'toclevel' => 2,
|
|
|
|
|
'line' => 'Section 1.1',
|
|
|
|
|
'anchor' => 'section_1_1',
|
|
|
|
|
];
|
|
|
|
|
$SECTION_1_2 = [
|
|
|
|
|
'toclevel' => 2,
|
|
|
|
|
'line' => 'Section 1.2',
|
|
|
|
|
'anchor' => 'section_1_2',
|
|
|
|
|
];
|
|
|
|
|
$SECTION_1_2_1 = [
|
|
|
|
|
'toclevel' => 3,
|
|
|
|
|
'line' => 'Section 1.2.1',
|
|
|
|
|
'anchor' => 'section_1_2_1',
|
|
|
|
|
];
|
|
|
|
|
$SECTION_1_3 = [
|
|
|
|
|
'toclevel' => 2,
|
|
|
|
|
'line' => 'Section 1.3',
|
|
|
|
|
'anchor' => 'section_1_3',
|
|
|
|
|
];
|
|
|
|
|
$SECTION_2 = [
|
|
|
|
|
'toclevel' => 1,
|
|
|
|
|
'line' => 'Section 2',
|
|
|
|
|
'anchor' => 'section_2',
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
return [
|
|
|
|
|
[
|
2022-02-21 18:51:35 +00:00
|
|
|
// isTocEnabled
|
|
|
|
|
false,
|
2022-02-11 23:43:45 +00:00
|
|
|
// sections data
|
|
|
|
|
[],
|
2022-02-21 18:51:35 +00:00
|
|
|
// expected
|
2022-02-11 23:43:45 +00:00
|
|
|
[]
|
|
|
|
|
],
|
|
|
|
|
[
|
2022-02-21 18:51:35 +00:00
|
|
|
// isTocEnabled
|
|
|
|
|
true,
|
|
|
|
|
// sections data
|
2022-02-11 23:43:45 +00:00
|
|
|
[
|
|
|
|
|
$SECTION_1,
|
|
|
|
|
$SECTION_2
|
|
|
|
|
],
|
2022-02-21 18:51:35 +00:00
|
|
|
// expected
|
2022-02-11 23:43:45 +00:00
|
|
|
[
|
2022-02-21 18:51:35 +00:00
|
|
|
'number-section-count' => 2,
|
|
|
|
|
'array-sections' => [
|
|
|
|
|
$SECTION_1 + [
|
|
|
|
|
'array-sections' => [],
|
|
|
|
|
'is-top-level-section' => true,
|
|
|
|
|
'is-parent-section' => false,
|
|
|
|
|
],
|
|
|
|
|
$SECTION_2 + [
|
|
|
|
|
'array-sections' => [],
|
|
|
|
|
'is-top-level-section' => true,
|
|
|
|
|
'is-parent-section' => false,
|
|
|
|
|
]
|
|
|
|
|
]
|
2022-02-11 23:43:45 +00:00
|
|
|
]
|
|
|
|
|
],
|
|
|
|
|
[
|
2022-02-21 18:51:35 +00:00
|
|
|
// isTocEnabled
|
|
|
|
|
true,
|
|
|
|
|
// sections data
|
2022-02-11 23:43:45 +00:00
|
|
|
[
|
|
|
|
|
$SECTION_1,
|
|
|
|
|
$SECTION_1_1,
|
|
|
|
|
$SECTION_2,
|
|
|
|
|
],
|
2022-02-21 18:51:35 +00:00
|
|
|
// expected
|
2022-02-11 23:43:45 +00:00
|
|
|
[
|
2022-02-21 18:51:35 +00:00
|
|
|
'number-section-count' => 3,
|
|
|
|
|
'array-sections' => [
|
|
|
|
|
$SECTION_1 + [
|
|
|
|
|
'array-sections' => [
|
|
|
|
|
$SECTION_1_1 + [
|
|
|
|
|
'array-sections' => [],
|
|
|
|
|
'is-top-level-section' => false,
|
|
|
|
|
'is-parent-section' => false,
|
|
|
|
|
]
|
|
|
|
|
],
|
|
|
|
|
'is-top-level-section' => true,
|
|
|
|
|
'is-parent-section' => true,
|
2022-02-14 17:17:02 +00:00
|
|
|
],
|
2022-02-21 18:51:35 +00:00
|
|
|
$SECTION_2 + [
|
|
|
|
|
'array-sections' => [],
|
|
|
|
|
'is-top-level-section' => true,
|
|
|
|
|
'is-parent-section' => false,
|
|
|
|
|
]
|
2022-02-11 23:43:45 +00:00
|
|
|
]
|
|
|
|
|
]
|
|
|
|
|
],
|
|
|
|
|
[
|
2022-02-21 18:51:35 +00:00
|
|
|
// isTocEnabled
|
|
|
|
|
true,
|
|
|
|
|
// sections data
|
2022-02-11 23:43:45 +00:00
|
|
|
[
|
|
|
|
|
$SECTION_1,
|
|
|
|
|
$SECTION_1_1,
|
|
|
|
|
$SECTION_1_2,
|
|
|
|
|
$SECTION_1_2_1,
|
|
|
|
|
$SECTION_1_3,
|
|
|
|
|
$SECTION_2,
|
|
|
|
|
],
|
2022-02-21 18:51:35 +00:00
|
|
|
// expected
|
2022-02-11 23:43:45 +00:00
|
|
|
[
|
2022-02-21 18:51:35 +00:00
|
|
|
'number-section-count' => 6,
|
|
|
|
|
'array-sections' => [
|
|
|
|
|
$SECTION_1 + [
|
|
|
|
|
'array-sections' => [
|
|
|
|
|
$SECTION_1_1 + [
|
|
|
|
|
'array-sections' => [],
|
|
|
|
|
'is-top-level-section' => false,
|
|
|
|
|
'is-parent-section' => false,
|
|
|
|
|
],
|
|
|
|
|
$SECTION_1_2 + [
|
|
|
|
|
'array-sections' => [
|
|
|
|
|
$SECTION_1_2_1 + [
|
|
|
|
|
'array-sections' => [],
|
|
|
|
|
'is-top-level-section' => false,
|
|
|
|
|
'is-parent-section' => false,
|
|
|
|
|
],
|
2022-02-14 17:17:02 +00:00
|
|
|
],
|
2022-02-21 18:51:35 +00:00
|
|
|
'is-top-level-section' => false,
|
|
|
|
|
'is-parent-section' => true,
|
2022-02-14 17:17:02 +00:00
|
|
|
],
|
2022-02-21 18:51:35 +00:00
|
|
|
$SECTION_1_3 + [
|
|
|
|
|
'array-sections' => [],
|
|
|
|
|
'is-top-level-section' => false,
|
|
|
|
|
'is-parent-section' => false,
|
|
|
|
|
]
|
2022-02-11 23:43:45 +00:00
|
|
|
],
|
2022-02-21 18:51:35 +00:00
|
|
|
'is-top-level-section' => true,
|
|
|
|
|
'is-parent-section' => true,
|
2022-02-14 17:17:02 +00:00
|
|
|
],
|
2022-02-21 18:51:35 +00:00
|
|
|
$SECTION_2 + [
|
|
|
|
|
'array-sections' => [],
|
|
|
|
|
'is-top-level-section' => true,
|
|
|
|
|
'is-parent-section' => false,
|
|
|
|
|
]
|
2022-02-11 23:43:45 +00:00
|
|
|
]
|
|
|
|
|
]
|
|
|
|
|
]
|
|
|
|
|
];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
2022-02-21 18:51:35 +00:00
|
|
|
* @covers \MediaWiki\Skin\SkinComponentTableOfContents::getTemplateData
|
2022-02-11 23:43:45 +00:00
|
|
|
* @dataProvider provideGetSectionsData
|
|
|
|
|
*
|
2022-02-21 18:51:35 +00:00
|
|
|
* @param bool $isTocEnabled
|
2022-02-11 23:43:45 +00:00
|
|
|
* @param array $sectionsData
|
|
|
|
|
* @param array $expected
|
|
|
|
|
*/
|
2022-02-21 18:51:35 +00:00
|
|
|
public function testGetTemplateData( $isTocEnabled, $sectionsData, $expected ) {
|
2022-02-11 23:43:45 +00:00
|
|
|
$mockOutput = $this->createMock( OutputPage::class );
|
2022-02-21 18:51:35 +00:00
|
|
|
$mockOutput->method( 'isTOCEnabled' )->willReturn( $isTocEnabled );
|
2022-02-11 23:43:45 +00:00
|
|
|
$mockOutput->method( 'getSections' )->willReturn( $sectionsData );
|
|
|
|
|
$skinComponent = new SkinComponentTableOfContents( $mockOutput );
|
|
|
|
|
|
2022-02-23 02:26:27 +00:00
|
|
|
$data = $skinComponent->getTemplateData();
|
2022-02-11 23:43:45 +00:00
|
|
|
|
|
|
|
|
$this->assertEquals( $expected, $data );
|
|
|
|
|
}
|
|
|
|
|
}
|