Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 2 additions & 3 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,12 +38,11 @@ jobs:
RUN_PHPSTAN: true
RUN_PSALM: true
RUN_BENCHMARK: false
- PHP_VERSION: 8.1.0RC1
- PHP_VERSION: 8.1
CODE_COVERAGE: true
RUN_PHPSTAN: true
RUN_PSALM: true
RUN_BENCHMARK: false
COMPOSER_EXTRA_ARGS: --ignore-platform-reqs
RUN_BENCHMARK: true

steps:
- uses: actions/checkout@v2
Expand Down
6 changes: 3 additions & 3 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,9 @@
},
"require-dev": {
"phpbench/phpbench": "^0.16.10 || ^1.0.4",
"phpstan/phpstan": "^0.12.96",
"phpunit/phpunit": "^7.5.20 | ^8.5.8 | ^9.3.8",
"vimeo/psalm": "^3.15.0"
"phpstan/phpstan": "^1.3.1",
"phpunit/phpunit": "^7.5.20 | ^8.5.22 | ^9.5.11",
"vimeo/psalm": "^4.17.0"
},
"autoload": {
"psr-4": {
Expand Down
8 changes: 5 additions & 3 deletions src/Enum.php
Original file line number Diff line number Diff line change
Expand Up @@ -261,7 +261,9 @@ final public static function byName(string $name)
'Ambiguous enumerator values detected for ' . static::class
);

return self::$instances[static::class][$name] = new static(\constant($const));
/** @var array<int|string, mixed>|bool|float|int|string|null $value */
$value = \constant($const);
return self::$instances[static::class][$name] = new static($value);
}

/**
Expand Down Expand Up @@ -320,7 +322,7 @@ final public static function getEnumerators()
*
* @return (null|bool|int|float|string|array)[]
*
* @phpstan-return array<int, null|bool|int|float|string|array>
* @phpstan-return array<int, null|bool|int|float|string|array<int|string, mixed>>
* @psalm-return list<null|bool|int|float|string|array>
* @psalm-pure
*/
Expand Down Expand Up @@ -367,7 +369,7 @@ final public static function getOrdinals()
* @return (null|bool|int|float|string|array)[]
* @throws LogicException On ambiguous constant values
*
* @phpstan-return array<string, null|bool|int|float|string|array>
* @phpstan-return array<string, null|bool|int|float|string|array<int|string, mixed>>
* @psalm-return array<non-empty-string, null|bool|int|float|string|array>
* @psalm-pure
*/
Expand Down
2 changes: 1 addition & 1 deletion src/EnumSerializableTrait.php
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ public function __serialize(): array
* @throws RuntimeException On missing, unknown or invalid value
* @throws LogicException On calling this method on an already initialized enumerator
*
* @param array<string, null|bool|int|float|string|array<mixed>> $data
* @param array<string, mixed> $data
* @return void
*/
public function __unserialize(array $data): void
Expand Down
2 changes: 1 addition & 1 deletion tests/MabeEnumStaticAnalysis/EnumIsImmutable.php
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ public static function getEnumeratorsIsPure(): array
}

/**
* @phpstan-return array<int, null|bool|int|float|string|array>
* @phpstan-return array<int, null|bool|int|float|string|array<int|string, mixed>>
* @psalm-return list<null|bool|int|float|string|array>
* @psalm-pure
*/
Expand Down
1 change: 1 addition & 0 deletions tests/MabeEnumTest/EnumMapTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -470,6 +470,7 @@ public function testSerializable(): void
$enumMap = new EnumMap(EnumBasic::class);
$enumMap[EnumBasic::ONE()] = 'one';

/** @var EnumMap<EnumBasic> $enumMapCopy */
$enumMapCopy = unserialize(serialize($enumMap));
$this->assertTrue($enumMapCopy->offsetExists(EnumBasic::ONE));
$this->assertFalse($enumMapCopy->offsetExists(EnumBasic::TWO));
Expand Down
6 changes: 6 additions & 0 deletions tests/MabeEnumTest/EnumSerializableTraitTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ public function testUnserializeFirstWillHoldTheSameInstance(): void
$this->clearEnumeration(SerializableEnum::class);

// First unserialize
/** @var Enum $unserialized */
$unserialized = unserialize($serialized);
$this->assertInstanceOf(SerializableEnum::class, $unserialized);

Expand Down Expand Up @@ -76,15 +77,20 @@ public function testInheritence(): void
$serialized = serialize($enum);
$this->assertIsString($serialized);

/** @var Enum $unserialized */
$unserialized = unserialize($serialized);

$this->assertInstanceOf(ExtendedSerializableEnum::class, $unserialized);
$this->assertSame($enum->getValue(), $unserialized->getValue());
}

public function testUnserializeFromPhp73(): void
{
$serialized = 'C:39:"MabeEnumTest\TestAsset\SerializableEnum":2:{N;}';

/** @var Enum $unserialized */
$unserialized = unserialize($serialized);

$this->assertInstanceOf(SerializableEnum::class, $unserialized);
$this->assertNull($unserialized->getValue());
}
Expand Down
2 changes: 2 additions & 0 deletions tests/MabeEnumTest/EnumTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -426,6 +426,8 @@ public function testConstVisibilityExtended(): void
public function testIsSerializableIssue(): void
{
$enum1 = SerializableEnum::INT();

/** @var SerializableEnum $enum2 */
$enum2 = unserialize(serialize($enum1));

$this->assertFalse($enum1 === $enum2, 'Wrong test implementation');
Expand Down
2 changes: 2 additions & 0 deletions tests/MabeEnumTest/TestAsset/ConstVisibilityEnum.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,5 +19,7 @@ class ConstVisibilityEnum extends Enum
const IPUB = 'indirect public';
public const PUB = 'public';
protected const PRO = 'protected';

/** @phpstan-ignore-next-line */
private const PRI = 'private';
}
2 changes: 2 additions & 0 deletions tests/MabeEnumTest/TestAsset/ConstVisibilityEnumExtended.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,5 +20,7 @@ class ConstVisibilityEnumExtended extends ConstVisibilityEnum
const IPUB2 = 'indirect public extended';
public const PUB2 = 'public extended';
protected const PRO2 = 'protected extended';

/** @phpstan-ignore-next-line */
private const PRI2 = 'private extended';
}
5 changes: 4 additions & 1 deletion tests/MabeEnumTest/TestAsset/EnumMapExt.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,10 @@
*/
class EnumMapExt extends EnumMap
{
/** @var string */
/**
* @var string
* @phpstan-ignore-next-line
*/
private $priv = 'private';

/** @var string */
Expand Down
5 changes: 4 additions & 1 deletion tests/MabeEnumTest/TestAsset/EnumSetExt.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,10 @@
*/
class EnumSetExt extends EnumSet
{
/** @var string */
/**
* @var string
* @phpstan-ignore-next-line
*/
private $priv = 'private';

/** @var string */
Expand Down