1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
|
<?php
declare(strict_types=1);
namespace LaminasTest\EventManager;
use PHPUnit\Framework\Assert;
use ReflectionClass;
use stdClass;
use function property_exists;
use function sprintf;
// phpcs:ignore WebimpressCodingStandard.NamingConventions.Trait.Suffix
trait DeprecatedAssertions
{
/**
* @param non-empty-string $attributeName
*/
public static function assertAttributeEmpty(
string $attributeName,
object $instance,
string $message = ''
): void {
if (! self::propertyExists($instance, $attributeName)) {
Assert::fail(sprintf(
'Failed to assert attribute %s is empty; attribute does not exist in instance of %s',
$attributeName,
$instance::class
));
}
Assert::assertEmpty(self::getPropertyValue($instance, $attributeName), $message);
}
/**
* @param mixed $value
* @param non-empty-string $attributeName
*/
public static function assertAttributeEquals(
$value,
string $attributeName,
object $instance,
string $message = ''
): void {
if (! self::propertyExists($instance, $attributeName)) {
Assert::fail(sprintf(
'Failed to assert equality against attribute %s; attribute does not exist in instance of %s',
$attributeName,
$instance::class
));
}
Assert::assertEquals($value, self::getPropertyValue($instance, $attributeName), $message);
}
/**
* @param non-empty-string $attributeName
*/
public static function assertAttributeInstanceOf(
string $type,
string $attributeName,
object $instance,
string $message = ''
): void {
if (! self::propertyExists($instance, $attributeName)) {
Assert::fail(sprintf(
'Failed to assert type of attribute %s; attribute does not exist in instance of %s',
$attributeName,
$instance::class
));
}
Assert::assertInstanceOf($type, self::getPropertyValue($instance, $attributeName), $message);
}
/**
* @param mixed $value
* @param non-empty-string $attributeName
*/
public static function assertAttributeSame(
$value,
string $attributeName,
object $instance,
string $message = ''
): void {
if (! self::propertyExists($instance, $attributeName)) {
Assert::fail(sprintf(
'Failed to assert equality against attribute %s; attribute does not exist in instance of %s',
$attributeName,
$instance::class
));
}
Assert::assertSame($value, self::getPropertyValue($instance, $attributeName), $message);
}
/**
* @param non-empty-string $property
* @return mixed
*/
private static function getPropertyValue(object $instance, string $property)
{
if ($instance instanceof stdClass) {
return $instance->$property;
}
$r = new ReflectionClass($instance);
do {
if ($r->hasProperty($property)) {
$propertyReflection = $r->getProperty($property);
return $propertyReflection->getValue($instance);
}
} while ($r = $r->getParentClass());
return null;
}
/** @param non-empty-string $property */
private static function propertyExists(object $instance, string $property): bool
{
if (property_exists($instance, $property)) {
return true;
}
$r = new ReflectionClass($instance);
while ($r = $r->getParentClass()) {
if ($r->hasProperty($property)) {
return true;
}
}
return false;
}
}
|