139 lines
3.7 KiB
PHP
139 lines
3.7 KiB
PHP
<?php
|
|
|
|
namespace SMW\Tests\Utils;
|
|
|
|
use SMW\Tests\PHPUnitCompat;
|
|
use SMW\Utils\HtmlTabs;
|
|
|
|
/**
|
|
* @covers \SMW\Utils\HtmlTabs
|
|
* @group semantic-mediawiki
|
|
*
|
|
* @license GPL-2.0-or-later
|
|
* @since 3.0
|
|
*
|
|
* @author mwjames
|
|
*/
|
|
class HtmlTabsTest extends \PHPUnit\Framework\TestCase {
|
|
|
|
use PHPUnitCompat;
|
|
|
|
public function testHasContents() {
|
|
$instance = new HtmlTabs();
|
|
|
|
$this->assertIsBool(
|
|
|
|
$instance->hasContents()
|
|
);
|
|
}
|
|
|
|
public function testTab_Contents() {
|
|
$instance = new HtmlTabs();
|
|
$instance->setActiveTab( 'foo' );
|
|
$instance->tab( 'foo', 'FOO' );
|
|
$instance->content( 'foo', '< ... bar ... >' );
|
|
|
|
$actual = $instance->buildHTML( [ 'class' => 'foo-bar' ] );
|
|
// MW 1.39-1.40 produces self-closing tag, which is invalid HTML
|
|
$actual = str_replace( '/>', '>', $actual );
|
|
|
|
$this->assertContains(
|
|
'<div class="smw-tabs foo-bar">' .
|
|
'<input id="tab-foo" class="nav-tab" type="radio" name="tabs" checked="">' .
|
|
'<label id="tab-label-foo" for="tab-foo" class="nav-label">FOO</label>' .
|
|
'<section id="tab-content-foo">< ... bar ... ></section>' .
|
|
'</div>',
|
|
$actual
|
|
);
|
|
}
|
|
|
|
public function testTab_Contents_Subtab() {
|
|
if ( version_compare( MW_VERSION, '1.41', '>=' ) ) {
|
|
$this->markTestSkipped( 'Check assertions for MW 1.41 and higher versions.' );
|
|
}
|
|
$instance = new HtmlTabs();
|
|
$instance->setActiveTab( 'foo' );
|
|
$instance->isSubTab();
|
|
|
|
$instance->tab( 'foo', 'FOO' );
|
|
$instance->content( 'foo', '< ... bar ... >' );
|
|
|
|
$actual = $instance->buildHTML( [ 'class' => 'foo-bar' ] );
|
|
// MW 1.39-1.40 produces self-closing tag, which is invalid HTML
|
|
$actual = str_replace(
|
|
htmlspecialchars( '/>' ),
|
|
htmlspecialchars( '>' ),
|
|
$actual
|
|
);
|
|
|
|
$this->assertContains(
|
|
'<div class="smw-tabs smw-subtab foo-bar" ' .
|
|
'data-subtab=""<input id=\"tab-foo\" ' .
|
|
'class=\"nav-tab\" type=\"radio\" ' .
|
|
'name=\"tabs\" checked=\"\"\><label ' .
|
|
'id=\"tab-label-foo\" for=\"tab-foo\" ' .
|
|
'class=\"nav-label\">FOO<\/label>"">' .
|
|
'<div id="tab-content-foo" class="subtab-content">< ... bar ... ></div></div>',
|
|
$actual
|
|
);
|
|
}
|
|
|
|
public function testTab_Contents_AutoChecked() {
|
|
$instance = new HtmlTabs();
|
|
$instance->tab( 'foo', 'FOO' );
|
|
$instance->content( 'foo', '< ... bar ... >' );
|
|
|
|
$actual = $instance->buildHTML( [ 'class' => 'foo-bar' ] );
|
|
// MW 1.39-1.40 produces self-closing tag, which is invalid HTML
|
|
$actual = str_replace( '/>', '>', $actual );
|
|
|
|
$this->assertContains(
|
|
'<div class="smw-tabs foo-bar">' .
|
|
'<input id="tab-foo" class="nav-tab" type="radio" name="tabs" checked="">' .
|
|
'<label id="tab-label-foo" for="tab-foo" class="nav-label">FOO</label>' .
|
|
'<section id="tab-content-foo">< ... bar ... ></section>' .
|
|
'</div>',
|
|
$actual
|
|
);
|
|
}
|
|
|
|
public function testTab_Contents_Hidden() {
|
|
$instance = new HtmlTabs();
|
|
|
|
$instance->tab( 'foo', 'FOO', [ 'hide' => true ] );
|
|
$instance->content( 'foo', '< ... bar ... >' );
|
|
|
|
$this->assertContains(
|
|
'<div class="smw-tabs foo-bar"></div>',
|
|
$instance->buildHTML( [ 'class' => 'foo-bar' ] )
|
|
);
|
|
}
|
|
|
|
public function testTab_WithExtraHtml() {
|
|
$instance = new HtmlTabs();
|
|
|
|
$instance->tab( 'foo', 'FOO' );
|
|
$instance->content( 'foo', '< ... bar ... >' );
|
|
$instance->html( '<span>Foobar</span>' );
|
|
|
|
$this->assertContains(
|
|
'<span>Foobar</span>',
|
|
$instance->buildHTML()
|
|
);
|
|
}
|
|
|
|
public function testIsRTL() {
|
|
$instance = new HtmlTabs();
|
|
$instance->isRTL( true );
|
|
|
|
$instance->tab( 'foo', 'FOO' );
|
|
$instance->content( 'foo', '< ... bar ... >' );
|
|
|
|
$this->assertContains(
|
|
'<div class="smw-tabs" dir="rtl">',
|
|
$instance->buildHTML()
|
|
);
|
|
}
|
|
|
|
}
|