engelsystem/tests/Utils/FormFieldAssert.php

80 lines
2.5 KiB
PHP
Raw Permalink Normal View History

2023-04-01 14:23:52 +02:00
<?php
declare(strict_types=1);
namespace Engelsystem\Test\Utils;
use PHPUnit\Framework\Assert;
/**
* Class that provides some form field assertions.
*/
final class FormFieldAssert
{
/**
* Asserts that the HTML does contain an INPUT field with the given name.
*/
public static function assertContainsInputField(string $name, string $html): void
{
Assert::assertMatchesRegularExpression(self::makeInputPattern('input', $name), $html);
}
/**
* Asserts that the HTML does not contain an INPUT field with the given name.
*/
public static function assertNotContainsInputField(string $name, string $html): void
{
Assert::assertDoesNotMatchRegularExpression(self::makeInputPattern('input', $name), $html);
}
/**
* Asserts that the HTML does contain a SELECT field with the given name.
*/
public static function assertContainsSelectField(string $name, string $html): void
{
Assert::assertMatchesRegularExpression(self::makeInputPattern('select', $name), $html);
}
/**
* Asserts that the HTML does not contain a SELECT field with the given name.
*/
public static function assertNotContainsSelectField(string $name, string $html): void
{
Assert::assertDoesNotMatchRegularExpression(self::makeInputPattern('select', $name), $html);
}
/**
* Asserts that the HTML does contain an INPUT field of the type "checkbox" with the give name and
* with the "checked" attribute.
*/
public static function assertContainsCheckedCheckbox(string $name, string $html): void
{
Assert::assertMatchesRegularExpression(self::makeCheckedCheckboxPattern($name), $html);
}
/**
* Asserts that the HTML does contain an INPUT field of the type "checkbox" with the given name and
* without the "checked" attribute.
*/
public static function assertContainsUncheckedCheckbox(string $name, string $html): void
{
self::assertContainsInputField($name, $html);
Assert::assertDoesNotMatchRegularExpression(self::makeCheckedCheckboxPattern($name), $html);
}
private static function makeInputPattern(string $tag, string $name): string
{
return strtr('/<$TAG[^>]*name="$NAME"/s', [
'$TAG' => $tag,
'$NAME' => $name,
]);
}
private static function makeCheckedCheckboxPattern(string $name): string
{
return strtr('/<input[^>]*type="checkbox"[^>]*name="$NAME"[^>]*checked.*?/s', [
'$NAME' => $name,
]);
}
}