gplx/mediawiki/extensions/SemanticMediaWiki/tests/phpunit/Utils/HtmlColumnsTest.php

318 lines
7.7 KiB
PHP

<?php
namespace SMW\Tests\Utils;
use SMW\Tests\PHPUnitCompat;
use SMW\Utils\HtmlColumns;
/**
* @covers \SMW\Utils\HtmlColumns
* @group semantic-mediawiki
*
* @license GPL-2.0-or-later
* @since 3.0
*
* @author mwjames
*/
class HtmlColumnsTest extends \PHPUnit\Framework\TestCase {
use PHPUnitCompat;
private $stringValidator;
protected function setUp(): void {
parent::setUp();
$this->stringValidator = UtilityFactory::getInstance()->newValidatorFactory()->newStringValidator();
}
public function testCanConstruct() {
$this->assertInstanceOf(
HtmlColumns::class,
new HtmlColumns()
);
}
public function testUnknownTypeThrowsException() {
$instance = new HtmlColumns();
$this->expectException( 'InvalidArgumentException' );
$instance->addContents(
[ 'Foo' ],
'bar'
);
}
public function testDefaultColumnUnorderedList() {
$instance = new HtmlColumns();
$instance->addContents(
[
'a' => [ 'Foo', 'Bar' ],
'B' => [ 'Ichi', 'Ni' ]
],
HtmlColumns::INDEXED_LIST
);
$expected = [
'<div class="smw-columnlist-container" dir="ltr">',
'<div class="smw-column" style="width:100%;" dir="ltr">',
'<div class="smw-column-header">a</div><ul><li>Foo</li><li>Bar</li></ul>',
'<div class="smw-column-header">B</div><ul><li>Ichi</li><li>Ni</li></ul></div>'
];
$this->stringValidator->assertThatStringContains(
$expected,
$instance->getHtml()
);
}
public function testTwoColumnUnorderedList() {
$listContinuesAbbrev = '...';
$instance = new HtmlColumns();
$instance->addContents(
[
'a' => [ 'Foo', 'Bar' ],
'B' => [ 'Baz', 'Fom', 'Fin', 'Fum' ]
],
HtmlColumns::INDEXED_LIST
);
$instance->setColumns( 2 );
$instance->setContinueAbbrev( $listContinuesAbbrev );
$expected = [
'<div class="smw-columnlist-container" dir="ltr">',
'<div class="smw-column" style="width:50%;" dir="ltr">',
'<div class="smw-column-header">a</div>',
'<ul><li>Foo</li><li>Bar</li></ul>',
'<div class="smw-column-header">B</div><ul><li>Baz</li></ul></div> <!-- end column -->',
'<div class="smw-column" style="width:50%;" dir="ltr">',
'<div class="smw-column-header">B ' . $listContinuesAbbrev . '</div>',
'<ul start=4><li>Fom</li><li>Fin</li><li>Fum</li></ul></div> <!-- end column -->',
'<br style="clear: both;"/></div>'
];
$this->stringValidator->assertThatStringContains(
$expected,
$instance->getHtml()
);
}
public function testThreeColumnUnorderedList() {
$instance = new HtmlColumns();
$instance->addContents(
[
'a' => [ 'Foo', 'Bar' ],
'B' => [ 'Ichi', 'Ni' ]
],
HtmlColumns::INDEXED_LIST
);
$instance->setColumns( 3 );
$expected = [
'<div class="smw-columnlist-container" dir="ltr">',
'<div class="smw-column" style="width:33%;" dir="ltr">',
'<div class="smw-column-header">a</div><ul><li>Foo</li><li>Bar</li></ul></div>',
'<div class="smw-column" style="width:33%;" dir="ltr">',
'<div class="smw-column-header">B</div><ul><li>Ichi</li><li>Ni</li></ul></div>'
];
$this->stringValidator->assertThatStringContains(
$expected,
$instance->getHtml()
);
}
public function testTwoColumnOrderedList() {
$instance = new HtmlColumns();
$instance->addContents(
[
'a' => [ 'Foo', 'Bar' ],
'B' => [ 'Ichi', 'Ni' ]
],
HtmlColumns::INDEXED_LIST
);
$instance->setColumns( 2 );
$instance->setListType( 'ol' );
$expected = [
'<div class="smw-columnlist-container" dir="ltr">',
'<div class="smw-column" style="width:50%;" dir="ltr">',
'<div class="smw-column-header">a</div><ol><li>Foo</li><li>Bar</li></ol></div> <!-- end column -->',
'<div class="smw-column" style="width:50%;" dir="ltr">',
'<div class="smw-column-header">B</div><ol><li>Ichi</li><li>Ni</li></ol></div> <!-- end column -->'
];
$this->stringValidator->assertThatStringContains(
$expected,
$instance->getHtml()
);
}
public function testTwoColumnOrderedListNoHeader() {
$instance = new HtmlColumns();
$instance->addContents(
[
'Foo', 'Baz', 'Bar'
],
HtmlColumns::PLAIN_LIST
);
$instance->setColumns( 2 );
$instance->setColumnListClass( 'foo-class' );
$instance->setColumnClass( 'bar-class' );
$instance->setListType( 'ul' );
$expected = [
'<div class="foo-class" dir="ltr">',
'<div class="bar-class" style="width:50%;" dir="ltr">',
'<ul start=1><li>Foo</li><li>Baz</li></ul></div> <!-- end column -->',
'<div class="bar-class" style="width:50%;" dir="ltr">',
'<ul start=3><li>Bar</li></ul></div> <!-- end column -->'
];
$this->stringValidator->assertThatStringContains(
$expected,
$instance->getHtml()
);
}
public function testResponsiveColumnsToBeDeterminedByBrowser() {
$instance = new HtmlColumns();
$instance->addContents(
[
'Foo', 'Baz', 'Bar'
],
HtmlColumns::PLAIN_LIST
);
$instance->setColumns( 2 );
$instance->setColumnListClass( 'foo-class' );
$instance->setResponsiveCols();
$instance->setResponsiveColsThreshold( 1 );
$instance->setListType( 'ul' );
$instance->isRTL( true );
$expected = [
'<div class="foo-class" dir="rtl"><div class="smw-column-responsive" style="width:100%;columns:2 20em;" dir="rtl">',
'<ul start=1><li>Foo</li><li>Baz</li><li>Bar</li></ul></div> <!-- end column -->'
];
$this->stringValidator->assertThatStringContains(
$expected,
$instance->getHtml()
);
}
public function testResponsiveColumnsOnResponsiveColsThreshold() {
$instance = new HtmlColumns();
$instance->addContents(
[
'Foo', 'Baz', 'Bar'
],
HtmlColumns::PLAIN_LIST
);
$instance->setColumns( 2 );
$instance->setColumnListClass( 'foo-class' );
$instance->setResponsiveCols();
$instance->setResponsiveColsThreshold( 4 );
$instance->setListType( 'ul' );
$instance->isRTL( true );
$expected = [
'<div class="foo-class" dir="rtl"><div class="smw-column-responsive" style="width:100%;columns:1 20em;" dir="rtl">',
'<ul start=1><li>Foo</li><li>Baz</li><li>Bar</li></ul></div> <!-- end column -->'
];
$this->stringValidator->assertThatStringContains(
$expected,
$instance->getHtml()
);
}
public function testItemListWithAttributes() {
$instance = new HtmlColumns();
$instance->addContents(
[
'Foo', 'Baz', 'Bar'
],
HtmlColumns::PLAIN_LIST
);
$instance->setColumns( 2 );
$instance->setColumnListClass( 'foo-class' );
$instance->setResponsiveCols();
$instance->setResponsiveColsThreshold( 1 );
$instance->setListType( 'ul' );
$instance->isRTL( true );
$instance->setItemAttributes(
[
md5( 'Foo' ) => [
'id' => 123
],
md5( 'Bar' ) => 456
]
);
$expected = [
'<div class="foo-class" dir="rtl"><div class="smw-column-responsive" style="width:100%;columns:2 20em;" dir="rtl">',
'<ul start=1><li id="123">Foo</li><li>Baz</li><li 0="456">Bar</li></ul></div> <!-- end column -->'
];
$this->stringValidator->assertThatStringContains(
$expected,
$instance->getHtml()
);
}
public function testOListWithAttributes() {
$instance = new HtmlColumns();
$instance->addContents(
[
'Foo', 'Baz', 'Bar'
],
HtmlColumns::PLAIN_LIST
);
$instance->setColumns( 2 );
$instance->setColumnListClass( 'foo-class' );
$instance->setResponsiveCols();
$instance->setResponsiveColsThreshold( 1 );
$instance->setListType( 'ol', 'i' );
$instance->isRTL( true );
$instance->setItemAttributes(
[
md5( 'Foo' ) => [
'id' => 123
],
md5( 'Bar' ) => 456
]
);
$expected = [
'<div class="foo-class" dir="rtl"><div class="smw-column-responsive" style="width:100%;columns:2 20em;" dir="rtl">',
'<ol type=i start=1><li id="123">Foo</li><li>Baz</li><li 0="456">Bar</li></ol></div> <!-- end column -->'
];
$this->stringValidator->assertThatStringContains(
$expected,
$instance->getHtml()
);
}
}