Files
socialhose-php/tests/Helper/CssPropertiesAsserter.php
2022-12-09 08:36:26 -06:00

131 lines
2.9 KiB
PHP

<?php
namespace Tests\Helper;
use PHPUnit\Framework\TestCase;
use UserBundle\Entity\Notification\ThemeOption\ThemeOptionFont;
/**
* Class CssPropertiesAsserter
*
* @package Helper
*/
class CssPropertiesAsserter
{
/**
* @var string
*/
private $properties;
/**
* @var CssAsserter
*/
private $cssAsserter;
/**
* CssAsserter constructor.
*
* @param string $properties Css properties.
* @param CssAsserter|null $cssAsserter A parent CssAsserter instance.
*/
public function __construct($properties, CssAsserter $cssAsserter)
{
$this->properties = $properties;
$this->cssAsserter = $cssAsserter;
}
/**
* @param string $name Property name.
* @param string|null $value Property value.
*
* @return CssPropertiesAsserter
*/
public function has($name, $value = null)
{
if ($value !== null) {
$value = str_replace([ '(', ')' ], [ '\(', '\)' ], $value);
}
$pattern = $value === null
? sprintf('/%s:\s*[^;];/i', $name)
: sprintf('/%s:\s*%s;/i', $name, $value);
TestCase::assertRegExp($pattern, $this->properties);
return $this;
}
/**
* @param string $name Property name.
* @param string|null $value Property value.
*
* @return CssPropertiesAsserter
*/
public function hasNot($name, $value = null)
{
$pattern = $value === null
? sprintf('/%s:\s*[^;];/i', $name)
: sprintf('/%s:\s*%s;/i', $name, $value);
TestCase::assertNotRegExp($pattern, $this->properties);
return $this;
}
/**
* @param ThemeOptionFont $font A ThemeOptionFont instance.
*
* @return CssPropertiesAsserter
*/
public function hasFont(ThemeOptionFont $font)
{
$this
->has('font-family', $font->getFamily()->getCss())
->has('font-size', $font->getSize());
$style = $font->getStyle();
if ($style->isBold()) {
$this->has('font-weight', 'bold');
} else {
$this->hasNot('font-weight');
}
if ($style->isItalic()) {
$this->has('font-style', 'italic');
} else {
$this->hasNot('font-style');
}
if ($style->isUnderline()) {
$this->has('text-decoration', 'underline');
} else {
$this->hasNot('text-decoration');
}
return $this;
}
/**
* @return CssPropertiesAsserter
*/
public function hasNotFontAtAll()
{
return $this
->hasNot('font-family')
->hasNot('font-size')
->hasNot('font-weight')
->hasNot('font-style')
->hasNot('text-decoration');
}
/**
* @return null|CssAsserter
*/
public function end()
{
return $this->cssAsserter;
}
}