mirror of
https://gerrit.wikimedia.org/r/mediawiki/skins/Vector.git
synced 2024-12-24 05:33:24 +00:00
ed7fd252cd
In PHP we add collapsible classes to all elements except watchstar so that certain tabs can be collapsed under the more menu in JS. This adds unnecessary complexity to our codebase and is not used if JS is disabled. To simplify this and bring Vector's PHP consistency with core this logic is moved to JavaScript. Bug: T259372 Change-Id: I2acbf7089198118626368ee8a37615d2de062f83
105 lines
3 KiB
PHP
105 lines
3 KiB
PHP
<?php
|
|
namespace MediaWiki\Skins\Vector\Tests\Integration;
|
|
|
|
use MediaWikiIntegrationTestCase;
|
|
use RequestContext;
|
|
use SkinVector;
|
|
use Title;
|
|
use Wikimedia\TestingAccessWrapper;
|
|
|
|
/**
|
|
* Class VectorTemplateTest
|
|
* @package MediaWiki\Skins\Vector\Tests\Unit
|
|
* @group Vector
|
|
* @group Skins
|
|
*
|
|
* @coversDefaultClass \SkinVector
|
|
*/
|
|
class SkinVectorTest extends MediaWikiIntegrationTestCase {
|
|
|
|
/**
|
|
* @return \VectorTemplate
|
|
*/
|
|
private function provideVectorTemplateObject() {
|
|
$template = new SkinVector();
|
|
return $template;
|
|
}
|
|
|
|
/**
|
|
* @param string $nodeString an HTML of the node we want to verify
|
|
* @param string $tag Tag of the element we want to check
|
|
* @param string $attribute Attribute of the element we want to check
|
|
* @param string $search Value of the attribute we want to verify
|
|
* @return bool
|
|
*/
|
|
private function expectNodeAttribute( $nodeString, $tag, $attribute, $search ) {
|
|
$node = new \DOMDocument();
|
|
$node->loadHTML( $nodeString );
|
|
$element = $node->getElementsByTagName( $tag )->item( 0 );
|
|
if ( !$element ) {
|
|
return false;
|
|
}
|
|
|
|
$values = explode( ' ', $element->getAttribute( $attribute ) );
|
|
return in_array( $search, $values );
|
|
}
|
|
|
|
/**
|
|
* @covers ::getMenuProps
|
|
*/
|
|
public function testGetMenuProps() {
|
|
$title = Title::newFromText( 'SkinVector' );
|
|
$context = RequestContext::getMain();
|
|
$context->setTitle( $title );
|
|
$context->setLanguage( 'fr' );
|
|
$vectorTemplate = $this->provideVectorTemplateObject();
|
|
|
|
$this->setMwGlobals( 'wgHooks', [
|
|
'PersonalUrls' => [
|
|
function ( &$personal_urls, &$title, $skin ) {
|
|
$personal_urls = [];
|
|
}
|
|
],
|
|
'SkinTemplateNavigation' => [
|
|
function ( &$skinTemplate, &$content_navigation ) {
|
|
$content_navigation = [
|
|
'actions' => [],
|
|
'namespaces' => [],
|
|
'variants' => [],
|
|
'views' => [],
|
|
];
|
|
}
|
|
]
|
|
] );
|
|
$openVectorTemplate = TestingAccessWrapper::newFromObject( $vectorTemplate );
|
|
|
|
$props = $openVectorTemplate->getMenuProps();
|
|
$views = $props['data-page-actions'];
|
|
$namespaces = $props['data-namespace-tabs'];
|
|
|
|
$this->assertSame( $views, [
|
|
'id' => 'p-views',
|
|
'label-id' => 'p-views-label',
|
|
'label' => $context->msg( 'views' )->text(),
|
|
'list-classes' => 'vector-menu-content-list',
|
|
'html-items' => '',
|
|
'is-dropdown' => false,
|
|
'html-tooltip' => '',
|
|
'html-after-portal' => '',
|
|
'class' => 'vector-menu-empty emptyPortlet vector-menu vector-menu-tabs vectorTabs',
|
|
] );
|
|
|
|
$variants = $props['data-variants'];
|
|
$actions = $props['data-page-actions-more'];
|
|
$this->assertSame( $namespaces['class'],
|
|
'vector-menu-empty emptyPortlet vector-menu vector-menu-tabs vectorTabs' );
|
|
$this->assertSame( $variants['class'],
|
|
'vector-menu-empty emptyPortlet vector-menu vector-menu-dropdown vectorMenu' );
|
|
$this->assertSame( $actions['class'],
|
|
'vector-menu-empty emptyPortlet vector-menu vector-menu-dropdown vectorMenu' );
|
|
$this->assertSame( $props['data-personal-menu']['class'],
|
|
'vector-menu-empty emptyPortlet vector-menu' );
|
|
}
|
|
|
|
}
|