Skip to content

Commit

Permalink
Add html util (#59)
Browse files Browse the repository at this point in the history
* add html util

* added missing tests, added documentation
  • Loading branch information
koertho committed Nov 9, 2022
1 parent f812465 commit d41b5c0
Show file tree
Hide file tree
Showing 4 changed files with 93 additions and 0 deletions.
37 changes: 37 additions & 0 deletions src/Util/Html/HtmlUtil.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
<?php

/*
* Copyright (c) 2022 Heimrich & Hannot GmbH
*
* @license LGPL-3.0-or-later
*/

namespace HeimrichHannot\UtilsBundle\Util\Html;

class HtmlUtil
{
/**
* Generate a attribute string for html elements out of an array.
*
* Options:
* - xhtml: (bool) XHTML format instead of HTML5 format. Default false
*/
public function generateAttributeString(array $attributes, array $options = []): string
{
$options = array_merge([
'xhtml' => false,
], $options);

return trim(implode(' ', array_map(function ($key) use ($attributes, $options) {
if (\is_bool($attributes[$key])) {
if ($options['xhtml']) {
return $attributes[$key] ? sprintf('%s="%s"', $key, $key) : '';
}

return $attributes[$key] ? $key : '';
}

return $key.'="'.$attributes[$key].'"';
}, array_keys($attributes))));
}
}
7 changes: 7 additions & 0 deletions src/Util/Utils.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
use HeimrichHannot\UtilsBundle\Util\Container\ContainerUtil;
use HeimrichHannot\UtilsBundle\Util\Dca\DcaUtil;
use HeimrichHannot\UtilsBundle\Util\File\FileUtil;
use HeimrichHannot\UtilsBundle\Util\Html\HtmlUtil;
use HeimrichHannot\UtilsBundle\Util\Locale\LocaleUtil;
use HeimrichHannot\UtilsBundle\Util\Model\ModelUtil;
use HeimrichHannot\UtilsBundle\Util\Request\RequestUtil;
Expand Down Expand Up @@ -61,6 +62,11 @@ public function file(): FileUtil
return $this->locator->get(FileUtil::class);
}

public function html(): HtmlUtil
{
return $this->locator->get(HtmlUtil::class);
}

public function locale(): LocaleUtil
{
return $this->locator->get(LocaleUtil::class);
Expand Down Expand Up @@ -99,6 +105,7 @@ public static function getSubscribedServices()
ContainerUtil::class,
DcaUtil::class,
FileUtil::class,
HtmlUtil::class,
LocaleUtil::class,
ModelUtil::class,
RequestUtil::class,
Expand Down
40 changes: 40 additions & 0 deletions tests/Util/Html/HtmlUtilTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
<?php

/*
* Copyright (c) 2022 Heimrich & Hannot GmbH
*
* @license LGPL-3.0-or-later
*/

namespace HeimrichHannot\UtilsBundle\Tests\Util\Html;

use HeimrichHannot\UtilsBundle\Tests\AbstractUtilsTestCase;
use HeimrichHannot\UtilsBundle\Util\Html\HtmlUtil;
use PHPUnit\Framework\MockObject\MockBuilder;

class HtmlUtilTest extends AbstractUtilsTestCase
{
public function getTestInstance(array $parameters = [], ?MockBuilder $mockBuilder = null)
{
return new HtmlUtil();
}

public function testGenerateAttributeString()
{
$instance = $this->getTestInstance();
$this->assertEmpty($instance->generateAttributeString([]));
$this->assertSame('a="b"', $instance->generateAttributeString(['a' => 'b']));
$this->assertSame(
'src="heimrich-hannot.de" type="text/website" async',
$instance->generateAttributeString(['src' => 'heimrich-hannot.de', 'type' => 'text/website', 'async' => true])
);
$this->assertSame(
'src="heimrich-hannot.de" type="text/website"',
$instance->generateAttributeString(['src' => 'heimrich-hannot.de', 'type' => 'text/website', 'async' => false])
);
$this->assertSame(
'src="heimrich-hannot.de" type="text/website" async="async"',
$instance->generateAttributeString(['src' => 'heimrich-hannot.de', 'type' => 'text/website', 'async' => true], ['xhtml' => true])
);
}
}
9 changes: 9 additions & 0 deletions tests/Util/UtilsTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
use Contao\TestCase\ContaoTestCase;
use HeimrichHannot\UtilsBundle\Util\Container\ContainerUtil;
use HeimrichHannot\UtilsBundle\Util\Dca\DcaUtil;
use HeimrichHannot\UtilsBundle\Util\Html\HtmlUtil;
use HeimrichHannot\UtilsBundle\Util\Locale\LocaleUtil;
use HeimrichHannot\UtilsBundle\Util\Model\ModelUtil;
use HeimrichHannot\UtilsBundle\Util\Request\RequestUtil;
Expand Down Expand Up @@ -42,6 +43,9 @@ public function getTestInstance(array $parameter = [])
case DcaUtil::class:
return $this->createMock(DcaUtil::class);

case HtmlUtil::class:
return $this->createMock(HtmlUtil::class);

case LocaleUtil::class:
return $this->createMock(LocaleUtil::class);

Expand Down Expand Up @@ -88,6 +92,11 @@ public function testDca()
$this->assertInstanceOf(DcaUtil::class, $this->getTestInstance()->dca());
}

public function testHtml()
{
$this->assertInstanceOf(HtmlUtil::class, $this->getTestInstance()->html());
}

public function testLocale()
{
$this->assertInstanceOf(LocaleUtil::class, $this->getTestInstance()->locale());
Expand Down

0 comments on commit d41b5c0

Please sign in to comment.