diff --git a/.github/workflows/static-analysis.yaml b/.github/workflows/static-analysis.yaml index 4dd985f..29d608b 100644 --- a/.github/workflows/static-analysis.yaml +++ b/.github/workflows/static-analysis.yaml @@ -11,12 +11,12 @@ on: jobs: - psalm: - runs-on: 'ubuntu-20.04' + phpstan: + runs-on: 'ubuntu-22.04' strategy: matrix: php: - - '8.1' + - '8.3' steps: - uses: 'actions/checkout@v2' - uses: 'shivammathur/setup-php@v2' @@ -25,8 +25,8 @@ jobs: - uses: 'ramsey/composer-install@v2' with: dependency-versions: 'highest' - # Require vimeo/psalm via command-line instead of adding to Composer's + # Require PHPStan via command-line instead of adding to Composer's # "require-dev"; we only want to run static analysis once on the highest - # version of PHP available. Also, Psalm on 5.6? No, thank you. - - run: 'composer require --dev vimeo/psalm' - - run: './vendor/bin/psalm --config="tests/psalm.xml" --threads="$(nproc)" --php-version="5.6" --no-cache --stats --show-info=false --output-format="github"' + # version of PHP available. + - run: 'composer require --dev phpstan/phpstan phpstan/phpstan-deprecation-rules' + - run: './vendor/bin/phpstan analyze --no-progress --error-format="github"' diff --git a/.github/workflows/testing.yaml b/.github/workflows/testing.yaml index 1b66b9d..a435bb7 100644 --- a/.github/workflows/testing.yaml +++ b/.github/workflows/testing.yaml @@ -24,6 +24,8 @@ jobs: - '7.4' - '8.0' - '8.1' + - '8.2' + - '8.3' steps: - uses: 'actions/checkout@v2' - uses: 'shivammathur/setup-php@v2' @@ -44,6 +46,8 @@ jobs: - '7.4' - '8.0' - '8.1' + - '8.2' + - '8.3' steps: - uses: 'actions/checkout@v2' - uses: 'shivammathur/setup-php@v2' diff --git a/composer.json b/composer.json index 91dc847..8f32f06 100644 --- a/composer.json +++ b/composer.json @@ -19,7 +19,8 @@ }, "require": { "php-64bit": ">=5.6", - "php-ipv6": ">=5.6" + "php-ipv6": ">=5.6", + "ext-ctype": "*" }, "autoload-dev": { "psr-4": { @@ -28,7 +29,7 @@ }, "require-dev": { "ext-pdo": "*", - "doctrine/dbal": "^2.3", + "doctrine/dbal": "^2.3 || ^3", "phpunit/phpunit": "*" }, "prefer-stable": true, diff --git a/phpstan.neon b/phpstan.neon new file mode 100644 index 0000000..8d0f28f --- /dev/null +++ b/phpstan.neon @@ -0,0 +1,17 @@ +parameters: + level: 'max' + paths: [ 'src', 'tests' ] + checkFunctionNameCase: true + checkGenericClassInNonGenericObjectType: true + reportUnmatchedIgnoredErrors: true + treatPhpDocTypesAsCertain: false + parallel: + maximumNumberOfProcesses: 4 + ignoreErrors: + - + # This project purposefully uses variable constructors and "new static()". + message: "#^Unsafe usage of new static\\(\\)\\.$#" + +includes: + - 'vendor/phpstan/phpstan-deprecation-rules/rules.neon' + - 'vendor/phpstan/phpstan/conf/bleedingEdge.neon' diff --git a/src/Doctrine/AbstractType.php b/src/Doctrine/AbstractType.php index 04d8c88..90b89e9 100644 --- a/src/Doctrine/AbstractType.php +++ b/src/Doctrine/AbstractType.php @@ -64,12 +64,10 @@ public function convertToPHPValue($value, AbstractPlatform $platform) if (empty($value)) { return null; } - /** @var string|\Darsyn\IP\IpInterface $value */ - if (\is_a($value, $this->getIpClass(), false)) { + if (\is_object($value) && \is_a($value, $this->getIpClass(), false)) { /** @var \Darsyn\IP\IpInterface $value */ return $value; } - /** @var string $value */ try { return $this->createIpObject($value); } catch (IpException $e) { diff --git a/src/Formatter/ConsistentFormatter.php b/src/Formatter/ConsistentFormatter.php index 1db9831..f6d071e 100644 --- a/src/Formatter/ConsistentFormatter.php +++ b/src/Formatter/ConsistentFormatter.php @@ -16,7 +16,7 @@ public function ntop($binary) if (\is_string($binary)) { $length = MbString::getLength($binary); if ($length === 16) { - return $this->ntopVersion6(Binary::toHex($binary)); + return $this->ntopVersion6($binary); } if ($length === 4) { return $this->ntopVersion4($binary); @@ -26,11 +26,12 @@ public function ntop($binary) } /** - * @param string $hex + * @param string $binary * @return string */ - private function ntopVersion6($hex) + private function ntopVersion6($binary) { + $hex = Binary::toHex($binary); $parts = \str_split($hex, 4); $zeroes = \array_map(function ($part) { return $part === '0000'; @@ -57,7 +58,10 @@ private function ntopVersion6($hex) if ($maxLength > 0) { \array_splice($parts, $startPosition, $maxLength, ':'); } - return \str_pad(\preg_replace('/\:{2,}/', '::', \implode(':', $parts)), 2, ':'); + if (null === $shortened = \preg_replace('/\:{2,}/', '::', \implode(':', $parts))) { + throw new FormatException($binary); + } + return \str_pad($shortened, 2, ':'); } /** @@ -66,6 +70,13 @@ private function ntopVersion6($hex) */ private function ntopVersion4($binary) { - return \inet_ntop(\pack('A4', $binary)); + // $pack return type is `string|false` below PHP 8 and `string` + // above PHP 8. + $pack = \pack('A4', $binary); + /** @phpstan-ignore-next-line (@phpstan-ignore identical.alwaysFalse) */ + if (false === $pack || false === $protocol = \inet_ntop($pack)) { + throw new FormatException($binary); + } + return $protocol; } } diff --git a/src/Formatter/NativeFormatter.php b/src/Formatter/NativeFormatter.php index 3fbc0f0..41afd54 100644 --- a/src/Formatter/NativeFormatter.php +++ b/src/Formatter/NativeFormatter.php @@ -15,7 +15,14 @@ public function ntop($binary) if (\is_string($binary)) { $length = MbString::getLength($binary); if ($length === 16 || $length === 4) { - return \inet_ntop(\pack('A' . (string) $length, $binary)); + $pack = \pack(\sprintf('A%d', $length), $binary); + // $pack return type is `string|false` below PHP 8 and `string` + // above PHP 8. + /** @phpstan-ignore-next-line (@phpstan-ignore identical.alwaysFalse) */ + if (false === $pack || false === $protocol = \inet_ntop($pack)) { + throw new FormatException($binary); + } + return $protocol; } } throw new FormatException($binary); @@ -28,11 +35,17 @@ public function pton($binary) { if (\is_string($binary)) { if (\filter_var($binary, \FILTER_VALIDATE_IP, \FILTER_FLAG_IPV4)) { - $sequence = \unpack('a4', \inet_pton($binary)); + $number = \inet_pton($binary); + if (false === $number || false === $sequence = \unpack('a4', $number)) { + throw new FormatException($binary); + } return \current($sequence); } if (\filter_var($binary, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) { - $sequence = \unpack('a16', \inet_pton($binary)); + $number = \inet_pton($binary); + if (false === $number || false === $sequence = \unpack('a16', $number)) { + throw new FormatException($binary); + } return \current($sequence); } $length = MbString::getLength($binary); diff --git a/src/Util/Binary.php b/src/Util/Binary.php index 007ec9c..7668ea7 100644 --- a/src/Util/Binary.php +++ b/src/Util/Binary.php @@ -25,9 +25,11 @@ public static function fromHex($hex) public static function toHex($binary) { if (!\is_string($binary)) { - throw new \InvalidArgumentException('Cannot convert non-string to hexidecimal.'); + throw new \InvalidArgumentException('Cannot convert non-string to hexadecimal.'); + } + if (false === $data = \unpack('H*', $binary)) { + throw new \InvalidArgumentException('Unknown error converting string to hexadecimal.'); } - $data = \unpack('H*', $binary); return \reset($data); } @@ -61,7 +63,7 @@ public static function toHumanReadable($binary) } $hex = static::toHex($binary); return \implode('', \array_map(function ($character) { - return MbString::padString(\decbin(\hexdec($character)), 8, '0', \STR_PAD_LEFT); + return MbString::padString(\decbin((int) \hexdec($character)), 8, '0', \STR_PAD_LEFT); }, \function_exists('mb_str_split') ? \mb_str_split($hex, 2, '8bit') : \str_split($hex, 2))); } } diff --git a/tests/DataProvider/Formatter/ConsistentFormatter.php b/tests/DataProvider/Formatter/ConsistentFormatter.php index 1e3cc66..7e57b90 100644 --- a/tests/DataProvider/Formatter/ConsistentFormatter.php +++ b/tests/DataProvider/Formatter/ConsistentFormatter.php @@ -4,6 +4,7 @@ class ConsistentFormatter { + /** @return list */ public static function getValidBinarySequences() { return [ @@ -33,6 +34,7 @@ public static function getValidBinarySequences() ]; } + /** @return list */ public static function getInvalidBinarySequences() { return [ diff --git a/tests/DataProvider/Formatter/NativeFormatter.php b/tests/DataProvider/Formatter/NativeFormatter.php index 7790b2d..2dc492f 100644 --- a/tests/DataProvider/Formatter/NativeFormatter.php +++ b/tests/DataProvider/Formatter/NativeFormatter.php @@ -4,6 +4,7 @@ class NativeFormatter { + /** @return list */ public static function getValidBinarySequences() { return [ @@ -32,6 +33,7 @@ public static function getValidBinarySequences() ]; } + /** @return list */ public static function getInvalidBinarySequences() { return [ diff --git a/tests/DataProvider/IPv4.php b/tests/DataProvider/IPv4.php index 5003a68..a409c96 100644 --- a/tests/DataProvider/IPv4.php +++ b/tests/DataProvider/IPv4.php @@ -4,6 +4,7 @@ class IPv4 implements IpDataProviderInterface { + /** @return list */ public static function getValidBinarySequences() { return [ @@ -23,6 +24,7 @@ public static function getValidBinarySequences() ]; } + /** @return list */ public static function getValidProtocolIpAddresses() { return [ @@ -41,11 +43,13 @@ public static function getValidProtocolIpAddresses() ]; } + /** @return list */ public static function getValidIpAddresses() { return array_merge(self::getValidBinarySequences(), self::getValidProtocolIpAddresses()); } + /** @return list */ public static function getInvalidIpAddresses() { return [ @@ -67,6 +71,7 @@ public static function getInvalidIpAddresses() ]; } + /** @return list */ public static function getValidCidrValues() { return [ @@ -82,6 +87,7 @@ public static function getValidCidrValues() ]; } + /** @return list */ public static function getInvalidCidrValues() { return [ @@ -97,6 +103,7 @@ public static function getInvalidCidrValues() ]; } + /** @return list */ public static function getNetworkIpAddresses() { return [ @@ -109,6 +116,7 @@ public static function getNetworkIpAddresses() ]; } + /** @return list */ public static function getBroadcastIpAddresses() { return [ @@ -121,6 +129,7 @@ public static function getBroadcastIpAddresses() ]; } + /** @return list */ public static function getValidInRangeIpAddresses() { return [ @@ -131,6 +140,7 @@ public static function getValidInRangeIpAddresses() ]; } + /** @return list */ public static function getCommonCidrValues() { return [ @@ -153,56 +163,67 @@ public static function getCommonCidrValues() ]; } + /** @return list */ public static function getLinkLocalIpAddresses() { return self::getCategoryOfIpAddresses(self::LINK_LOCAL); } + /** @return list */ public static function getLoopbackIpAddresses() { return self::getCategoryOfIpAddresses(self::LOOPBACK); } + /** @return list */ public static function getMulticastIpAddresses() { return self::getCategoryOfIpAddresses(self::MULTICAST); } + /** @return list */ public static function getPrivateUseIpAddresses() { return self::getCategoryOfIpAddresses(self::PRIVATE_USE); } + /** @return list */ public static function getUnspecifiedIpAddresses() { return self::getCategoryOfIpAddresses(self::UNSPECIFIED); } + /** @return list */ public static function getBenchmarkingIpAddresses() { return self::getCategoryOfIpAddresses(self::BENCHMARKING); } + /** @return list */ public static function getDocumentationIpAddresses() { return self::getCategoryOfIpAddresses(self::DOCUMENTATION); } + /** @return list */ public static function getPublicUseIpAddresses() { return self::getCategoryOfIpAddresses(self::PUBLIC_USE_V4); } + /** @return list */ public static function getIsBroadcastIpAddresses() { return self::getCategoryOfIpAddresses(self::BROADCAST); } + /** @return list */ public static function getSharedIpAddresses() { return self::getCategoryOfIpAddresses(self::SHARED); } + /** @return list */ public static function getFutureReservedIpAddresses() { return self::getCategoryOfIpAddresses(self::FUTURE_RESERVED); diff --git a/tests/DataProvider/IPv6.php b/tests/DataProvider/IPv6.php index d198fc9..9649867 100644 --- a/tests/DataProvider/IPv6.php +++ b/tests/DataProvider/IPv6.php @@ -4,6 +4,7 @@ class IPv6 implements IpDataProviderInterface { + /** @return list */ public static function getValidBinarySequences() { return [ @@ -23,6 +24,7 @@ public static function getValidBinarySequences() ]; } + /** @return list */ public static function getValidProtocolIpAddresses() { return [ @@ -40,11 +42,13 @@ public static function getValidProtocolIpAddresses() ]; } + /** @return list */ public static function getValidIpAddresses() { return array_merge(self::getValidBinarySequences(), self::getValidProtocolIpAddresses()); } + /** @return list */ public static function getInvalidIpAddresses() { return [ @@ -67,6 +71,7 @@ public static function getInvalidIpAddresses() ]; } + /** @return list */ public static function getValidCidrValues() { return [ @@ -81,6 +86,7 @@ public static function getValidCidrValues() ]; } + /** @return list */ public static function getInvalidCidrValues() { return [ @@ -96,6 +102,7 @@ public static function getInvalidCidrValues() ]; } + /** @return list */ public static function getNetworkIpAddresses() { return [ @@ -107,6 +114,7 @@ public static function getNetworkIpAddresses() ]; } + /** @return list */ public static function getBroadcastIpAddresses() { return [ @@ -118,6 +126,7 @@ public static function getBroadcastIpAddresses() ]; } + /** @return list */ public static function getValidInRangeIpAddresses() { return [ @@ -130,6 +139,7 @@ public static function getValidInRangeIpAddresses() ]; } + /** @return list */ public static function getCommonCidrValues() { return [ @@ -152,61 +162,73 @@ public static function getCommonCidrValues() ]; } + /** @return list */ public static function getMappedIpAddresses() { return self::getCategoryOfIpAddresses(self::MAPPED); } + /** @return list */ public static function getDerivedIpAddresses() { return self::getCategoryOfIpAddresses(self::DERIVED); } + /** @return list */ public static function getCompatibleIpAddresses() { return self::getCategoryOfIpAddresses(self::COMPATIBLE); } + /** @return list */ public static function getLinkLocalIpAddresses() { return self::getCategoryOfIpAddresses(self::LINK_LOCAL); } + /** @return list */ public static function getLoopbackIpAddresses() { return self::getCategoryOfIpAddresses(self::LOOPBACK); } + /** @return list */ public static function getMulticastIpAddresses() { return self::getCategoryOfIpAddresses(self::MULTICAST); } + /** @return list */ public static function getPrivateUseIpAddresses() { return self::getCategoryOfIpAddresses(self::PRIVATE_USE); } + /** @return list */ public static function getUnspecifiedIpAddresses() { return self::getCategoryOfIpAddresses(self::UNSPECIFIED); } + /** @return list */ public static function getBenchmarkingIpAddresses() { return self::getCategoryOfIpAddresses(self::BENCHMARKING); } + /** @return list */ public static function getDocumentationIpAddresses() { return self::getCategoryOfIpAddresses(self::DOCUMENTATION); } + /** @return list */ public static function getPublicUseIpAddresses() { return self::getCategoryOfIpAddresses(self::PUBLIC_USE_V6); } + /** @return list */ public static function getPublicUseIpAddressesExcludingMapped() { // Exclude IPv4-embedded addresses embedded using the Mapped strategy, @@ -215,31 +237,37 @@ public static function getPublicUseIpAddressesExcludingMapped() return self::getCategoryOfIpAddresses(self::PUBLIC_USE_V6, self::MAPPED); } + /** @return list */ public static function getUniqueLocalIpAddresses() { return self::getCategoryOfIpAddresses(self::UNIQUE_LOCAL); } + /** @return list */ public static function getUniqueLocalIpAddressesExcludingMapped() { return self::getCategoryOfIpAddresses(self::UNIQUE_LOCAL, self::MAPPED); } + /** @return list */ public static function getUnicastIpAddresses() { return self::getCategoryOfIpAddresses(self::UNICAST); } + /** @return list */ public static function getUnicastIpAddressesExcludingMapped() { return self::getCategoryOfIpAddresses(self::UNICAST, self::MAPPED); } + /** @return list */ public static function getUnicastGlobalIpAddresses() { return self::getCategoryOfIpAddresses(self::UNICAST_GLOBAL); } + /** @return list */ public static function getUnicastGlobalIpAddressesExcludingMapped() { return self::getCategoryOfIpAddresses(self::UNICAST_GLOBAL, self::MAPPED); diff --git a/tests/DataProvider/IpDataProviderInterface.php b/tests/DataProvider/IpDataProviderInterface.php index d7349ac..ad32abb 100644 --- a/tests/DataProvider/IpDataProviderInterface.php +++ b/tests/DataProvider/IpDataProviderInterface.php @@ -60,14 +60,14 @@ interface IpDataProviderInterface | self::UNICAST_OTHER; /** - * @return array + * @return array */ public static function getCategorizedIpAddresses(); /** * @param int $category * @param int $exclude - * @return array + * @return list */ public static function getCategoryOfIpAddresses($category, $exclude = 0); } diff --git a/tests/DataProvider/Multi.php b/tests/DataProvider/Multi.php index 3001a83..1fb739f 100644 --- a/tests/DataProvider/Multi.php +++ b/tests/DataProvider/Multi.php @@ -4,10 +4,12 @@ use Darsyn\IP\Strategy\Compatible; use Darsyn\IP\Strategy\Derived; +use Darsyn\IP\Strategy\EmbeddingStrategyInterface; use Darsyn\IP\Strategy\Mapped; class Multi { + /** @return list */ public static function getValidBinarySequences() { return [ @@ -20,7 +22,7 @@ public static function getValidBinarySequences() [pack('H*', '9800ea8800a5cbcc9d6868f3dc4ace01'), '9800ea8800a5cbcc9d6868f3dc4ace01', '9800:ea88:00a5:cbcc:9d68:68f3:dc4a:ce01', '9800:ea88:a5:cbcc:9d68:68f3:dc4a:ce01', null ], [pack('H*', 'c3f889b050c8b06c043cff4f7f4ae66d'), 'c3f889b050c8b06c043cff4f7f4ae66d', 'c3f8:89b0:50c8:b06c:043c:ff4f:7f4a:e66d', 'c3f8:89b0:50c8:b06c:43c:ff4f:7f4a:e66d', null ], [pack('H*', 'ffffffffffffffffffffffffffffffff'), 'ffffffffffffffffffffffffffffffff', 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', null ], - ['1234567890123456', '31323334353637383930313233343536', '3132:3334:3536:3738:3930:3132:3334:3536', '3132:3334:3536:3738:3930:3132:3334:3536', null ], + ['1234567890123456', '31323334353637383930313233343536', '3132:3334:3536:3738:3930:3132:3334:3536', '3132:3334:3536:3738:3930:3132:3334:3536', null ], [pack('H*', '00000000000000000000ffff00000000'), '00000000000000000000ffff00000000', '0000:0000:0000:0000:0000:ffff:0000:0000', '::ffff:0:0', '0.0.0.0' ], [pack('H*', '00000000000000000000ffff71637a89'), '00000000000000000000ffff71637a89', '0000:0000:0000:0000:0000:ffff:7163:7a89', '::ffff:7163:7a89', '113.99.122.137' ], [pack('H*', '00000000000000000000ffff4708d36c'), '00000000000000000000ffff4708d36c', '0000:0000:0000:0000:0000:ffff:4708:d36c', '::ffff:4708:d36c', '71.8.211.108' ], @@ -32,6 +34,7 @@ public static function getValidBinarySequences() ]; } + /** @return list */ public static function getValidProtocolIpAddresses() { return [ @@ -55,25 +58,29 @@ public static function getValidProtocolIpAddresses() ]; } + /** @return list */ public static function getValidIpAddresses() { return array_merge(self::getValidBinarySequences(), self::getValidProtocolIpAddresses()); } + /** @return list */ public static function getValidIpVersion4Addresses() { - return array_filter(self::getValidIpAddresses(), function (array $row) { + return array_values(array_filter(self::getValidIpAddresses(), function (array $row) { return is_string($row[4]); - }); + })); } + /** @return list */ public static function getValidIpVersion6Addresses() { - return array_filter(self::getValidIpAddresses(), function (array $row) { + return array_values(array_filter(self::getValidIpAddresses(), function (array $row) { return !is_string($row[4]); - }); + })); } + /** @return list */ public static function getInvalidIpAddresses() { return [ @@ -94,6 +101,7 @@ public static function getInvalidIpAddresses() ]; } + /** @return list */ public static function getIpAddressVersions() { return array_merge( @@ -106,16 +114,19 @@ public static function getIpAddressVersions() ); } + /** @return list */ public static function getValidCidrValues() { return IPv6::getValidCidrValues(); } + /** @return list */ public static function getInvalidCidrValues() { return IPv6::getInvalidCidrValues(); } + /** @return list */ public static function getNetworkIpAddresses() { return array_merge( @@ -131,6 +142,7 @@ public static function getNetworkIpAddresses() ); } + /** @return list */ public static function getBroadcastIpAddresses() { return array_merge( @@ -145,17 +157,12 @@ public static function getBroadcastIpAddresses() ); } + /** @return list */ public static function getValidInRangeIpAddresses() { return array_merge( - array_map(function ($row) { - array_push($row, true); - return $row; - }, IPv4::getValidInRangeIpAddresses()), - array_map(function ($row) { - array_push($row, true); - return $row; - }, IPv6::getValidInRangeIpAddresses()), + IPv4::getValidInRangeIpAddresses(), + IPv6::getValidInRangeIpAddresses(), [ // Mix IPv6 and IPv4 addresses together. ['::ffff:12.34.56.78', '12.34.56.78', 30], @@ -163,6 +170,7 @@ public static function getValidInRangeIpAddresses() ); } + /** @return list */ public static function getCommonCidrValues() { return array_merge( @@ -171,6 +179,7 @@ public static function getCommonCidrValues() ); } + /** @return list */ public static function getEmbeddedAddresses() { return array_merge( @@ -183,26 +192,31 @@ public static function getEmbeddedAddresses() ); } + /** @return list */ public function getMappedIpAddresses() { return IPv6::getMappedIpAddresses(); } + /** @return list */ public function getDerivedIpAddresses() { return IPv6::getDerivedIpAddresses(); } + /** @return list */ public function getCompatibleIpAddresses() { return IPv6::getCompatibleIpAddresses(); } + /** @return list */ public static function getLinkLocalIpAddresses() { return array_merge(IPv4::getLinkLocalIpAddresses(), IPv6::getLinkLocalIpAddresses()); } + /** @return list */ public static function getMappedLoopbackIpAddresses() { return array_merge( @@ -211,6 +225,7 @@ public static function getMappedLoopbackIpAddresses() ); } + /** @return list */ public static function getCompatibleLoopbackIpAddresses() { return array_merge( @@ -219,6 +234,7 @@ public static function getCompatibleLoopbackIpAddresses() ); } + /** @return list */ public static function getDerivedLoopbackIpAddresses() { return array_merge( @@ -227,36 +243,43 @@ public static function getDerivedLoopbackIpAddresses() ); } + /** @return list */ public static function getMulticastIpAddresses() { return array_merge(IPv4::getMulticastIpAddresses(), IPv6::getMulticastIpAddresses()); } + /** @return list */ public static function getPrivateUseIpAddresses() { return array_merge(IPv4::getPrivateUseIpAddresses(), IPv6::getPrivateUseIpAddresses()); } + /** @return list */ public static function getUnspecifiedIpAddresses() { return array_merge(IPv4::getUnspecifiedIpAddresses(), IPv6::getUnspecifiedIpAddresses()); } + /** @return list */ public static function getBenchmarkingIpAddresses() { return array_merge(IPv4::getBenchmarkingIpAddresses(), IPv6::getBenchmarkingIpAddresses()); } + /** @return list */ public static function getDocumentationIpAddresses() { return array_merge(IPv4::getDocumentationIpAddresses(), IPv6::getDocumentationIpAddresses()); } + /** @return list */ public static function getPublicUseIpAddresses() { return array_merge(IPv4::getPublicUseIpAddresses(), IPv6::getPublicUseIpAddressesExcludingMapped()); } + /** @return list */ public static function getUniqueLocalIpAddresses() { return array_merge( @@ -270,6 +293,7 @@ public static function getUniqueLocalIpAddresses() ); } + /** @return list */ public static function getUnicastIpAddresses() { return array_merge( @@ -283,6 +307,7 @@ public static function getUnicastIpAddresses() ); } + /** @return list */ public static function getUnicastGlobalIpAddresses() { return array_merge( @@ -296,6 +321,7 @@ public static function getUnicastGlobalIpAddresses() ); } + /** @return list */ public static function getIsBroadcastIpAddresses() { return array_merge( @@ -309,6 +335,7 @@ public static function getIsBroadcastIpAddresses() ); } + /** @return list */ public static function getSharedIpAddresses() { return array_merge( @@ -322,6 +349,7 @@ public static function getSharedIpAddresses() ); } + /** @return list */ public static function getFutureReservedIpAddresses() { return array_merge( @@ -335,6 +363,7 @@ public static function getFutureReservedIpAddresses() ); } + /** @return list, string, string}> */ public static function getEmbeddingStrategyIpAddresses() { return [ diff --git a/tests/DataProvider/Strategy/Compatible.php b/tests/DataProvider/Strategy/Compatible.php index 750bfba..0f34073 100644 --- a/tests/DataProvider/Strategy/Compatible.php +++ b/tests/DataProvider/Strategy/Compatible.php @@ -4,6 +4,7 @@ class Compatible { + /** @return list */ public static function getValidIpAddresses() { $valid = array_map(function (array $row) { @@ -17,6 +18,7 @@ public static function getValidIpAddresses() return array_merge($valid, $invalid); } + /** @return array */ public static function getInvalidIpAddresses() { return [ @@ -28,6 +30,7 @@ public static function getInvalidIpAddresses() ]; } + /** @return list */ public static function getValidSequences() { return [ @@ -38,6 +41,7 @@ public static function getValidSequences() ]; } + /** @return list */ public static function getInvalidSequences() { return [ diff --git a/tests/DataProvider/Strategy/Derived.php b/tests/DataProvider/Strategy/Derived.php index a93459b..29f6d19 100644 --- a/tests/DataProvider/Strategy/Derived.php +++ b/tests/DataProvider/Strategy/Derived.php @@ -4,6 +4,7 @@ class Derived { + /** @return list */ public static function getValidIpAddresses() { $valid = array_map(function (array $row) { @@ -17,6 +18,7 @@ public static function getValidIpAddresses() return array_merge($valid, $invalid); } + /** @return list */ public static function getInvalidIpAddresses() { return [ @@ -28,6 +30,7 @@ public static function getInvalidIpAddresses() ]; } + /** @return list */ public static function getValidSequences() { return [ @@ -38,6 +41,7 @@ public static function getValidSequences() ]; } + /** @return list */ public static function getInvalidSequences() { return [ diff --git a/tests/DataProvider/Strategy/Mapped.php b/tests/DataProvider/Strategy/Mapped.php index 3f167fb..fd40125 100644 --- a/tests/DataProvider/Strategy/Mapped.php +++ b/tests/DataProvider/Strategy/Mapped.php @@ -4,6 +4,7 @@ class Mapped { + /** @return list */ public static function getValidIpAddresses() { $valid = array_map(function (array $row) { @@ -17,6 +18,7 @@ public static function getValidIpAddresses() return array_merge($valid, $invalid); } + /** @return list */ public static function getInvalidIpAddresses() { return [ @@ -28,6 +30,7 @@ public static function getInvalidIpAddresses() ]; } + /** @return list */ public static function getValidSequences() { return [ @@ -38,6 +41,7 @@ public static function getValidSequences() ]; } + /** @return list */ public static function getInvalidSequences() { return [ diff --git a/tests/DataProvider/Util/Binary.php b/tests/DataProvider/Util/Binary.php index 33e22d1..06c9fed 100644 --- a/tests/DataProvider/Util/Binary.php +++ b/tests/DataProvider/Util/Binary.php @@ -4,6 +4,7 @@ class Binary { + /** @return list */ public static function getBinaryData() { return [ @@ -31,6 +32,7 @@ public static function getBinaryData() ]; } + /** @return list */ public static function getInvalidHex() { return [ @@ -46,6 +48,7 @@ public static function getInvalidHex() ]; } + /** @return list */ public static function getInvalidHumanReadable() { return [ diff --git a/tests/Doctrine/IPv4TypeTest.php b/tests/Doctrine/IPv4TypeTest.php index 09fc6ca..189581f 100644 --- a/tests/Doctrine/IPv4TypeTest.php +++ b/tests/Doctrine/IPv4TypeTest.php @@ -6,6 +6,7 @@ use Darsyn\IP\Version\IPv4 as IP; use Doctrine\DBAL\Types\Type; use PDO; +use PHPUnit\Framework\Attributes as PHPUnit; use PHPUnit\Framework\TestCase; class IPv4TypeTest extends TestCase @@ -16,7 +17,11 @@ class IPv4TypeTest extends TestCase /** @var \Darsyn\IP\Doctrine\IPv4Type $type */ private $type; - /** @beforeClass */ + /** + * @beforeClass + * @return void + */ + #[PHPUnit\BeforeClass] public static function setUpBeforeClassWithoutReturnDeclaration() { if (class_exists(Type::class)) { @@ -24,36 +29,28 @@ public static function setUpBeforeClassWithoutReturnDeclaration() } } - private function getPlatformMock() - { - // We have to use MySQL as the platform here, because the AbstractPlatform does not support BINARY types. - $mockBuilder = $this->getMockBuilder('Doctrine\DBAL\Platforms\MySqlPlatform'); - $mockedMethods = ['getBinaryTypeDeclarationSQL']; - // MockBuilder::setMethods() was deprecated in favour of MockBuilder::onlyMethods() in PHPUnit v7.5.x - method_exists($mockBuilder, 'onlyMethods') - ? $mockBuilder->onlyMethods($mockedMethods) - : $mockBuilder->setMethods($mockedMethods); - return $mockBuilder->getMockForAbstractClass(); - } - - /** @before */ + /** + * @before + * @return void + */ + #[PHPUnit\Before] protected function setUpWithoutReturnDeclaration() { if (!class_exists('Doctrine\DBAL\Types\Type')) { $this->markTestSkipped('Skipping test that requires "doctrine/dbal".'); } - $this->platform = $this->getPlatformMock(); - $this->platform - ->expects($this->any()) - ->method('getBinaryTypeDeclarationSQL') - ->will($this->returnValue('DUMMYBINARY()')); - $this->type = Type::getType('ipv4'); + $this->platform = new TestPlatform; + $type = Type::getType('ipv4'); + $this->assertInstanceOf(IPv4Type::class, $type); + $this->type = $type; } /** * @test + * @return void */ + #[PHPUnit\Test] public function testIpConvertsToDatabaseValue() { $ip = IP::factory('12.34.56.78'); @@ -66,7 +63,9 @@ public function testIpConvertsToDatabaseValue() /** * @test + * @return void */ + #[PHPUnit\Test] public function testInvalidIpConversionForDatabaseValue() { $this->expectException(\Doctrine\DBAL\Types\ConversionException::class); @@ -75,7 +74,9 @@ public function testInvalidIpConversionForDatabaseValue() /** * @test + * @return void */ + #[PHPUnit\Test] public function testNullConversionForDatabaseValue() { $this->assertNull($this->type->convertToDatabaseValue(null, $this->platform)); @@ -83,7 +84,9 @@ public function testNullConversionForDatabaseValue() /** * @test + * @return void */ + #[PHPUnit\Test] public function testIpConvertsToPHPValue() { $ip = IP::factory('12.34.56.78'); @@ -95,7 +98,9 @@ public function testIpConvertsToPHPValue() /** * @test + * @return void */ + #[PHPUnit\Test] public function testIpObjectConvertsToPHPValue() { $ip = IP::factory('12.34.56.78'); @@ -107,11 +112,15 @@ public function testIpObjectConvertsToPHPValue() /** * @test + * @return void */ + #[PHPUnit\Test] public function testStreamConvertsToPHPValue() { $ip = IP::factory('12.34.56.78'); $stream = fopen('php://memory','r+'); + // assertIsResource() isn't available for PHP 5.6 and 7.0 (PHPUnit < 7.0). + $this->assertTrue(is_resource($stream)); fwrite($stream, $ip->getBinary()); rewind($stream); /** @var IP $dbIp */ @@ -122,7 +131,9 @@ public function testStreamConvertsToPHPValue() /** * @test + * @return void */ + #[PHPUnit\Test] public function testInvalidIpConversionForPHPValue() { $this->expectException(\Doctrine\DBAL\Types\ConversionException::class); @@ -131,7 +142,9 @@ public function testInvalidIpConversionForPHPValue() /** * @test + * @return void */ + #[PHPUnit\Test] public function testNullConversionForPHPValue() { $this->assertNull($this->type->convertToPHPValue(null, $this->platform)); @@ -139,23 +152,19 @@ public function testNullConversionForPHPValue() /** * @test + * @return void */ - public function testGetName() - { - $this->assertEquals('ip', $this->type->getName()); - } - - /** - * @test - */ + #[PHPUnit\Test] public function testGetBinaryTypeDeclarationSQL() { - $this->assertEquals('DUMMYBINARY()', $this->type->getSqlDeclaration(['length' => 4], $this->platform)); + $this->assertEquals('DUMMYBINARY()', $this->type->getSQLDeclaration(['length' => 4], $this->platform)); } /** * @test + * @return void */ + #[PHPUnit\Test] public function testBindingTypeIsAValidPDOTypeConstant() { // Get all constants of the PDO class. @@ -171,12 +180,4 @@ public function testBindingTypeIsAValidPDOTypeConstant() // PDO PARAM constant. $this->assertContains($this->type->getBindingType(), $paramConstants); } - - /** - * @test - */ - public function testRequiresSQLCommentHint() - { - $this->assertTrue($this->type->requiresSQLCommentHint($this->platform)); - } } diff --git a/tests/Doctrine/IPv6TypeTest.php b/tests/Doctrine/IPv6TypeTest.php index 0af2c77..9c4f85b 100644 --- a/tests/Doctrine/IPv6TypeTest.php +++ b/tests/Doctrine/IPv6TypeTest.php @@ -6,6 +6,7 @@ use Darsyn\IP\Version\IPv6 as IP; use Doctrine\DBAL\Types\Type; use PDO; +use PHPUnit\Framework\Attributes as PHPUnit; use PHPUnit\Framework\TestCase; class IPv6TypeTest extends TestCase @@ -16,7 +17,11 @@ class IPv6TypeTest extends TestCase /** @var \Darsyn\IP\Doctrine\IPv6Type $type */ private $type; - /** @beforeClass */ + /** + * @beforeClass + * @return void + */ + #[PHPUnit\BeforeClass] public static function setUpBeforeClassWithoutReturnDeclaration() { if (class_exists(Type::class)) { @@ -24,36 +29,28 @@ public static function setUpBeforeClassWithoutReturnDeclaration() } } - private function getPlatformMock() - { - // We have to use MySQL as the platform here, because the AbstractPlatform does not support BINARY types. - $mockBuilder = $this->getMockBuilder('Doctrine\DBAL\Platforms\MySqlPlatform'); - $mockedMethods = ['getBinaryTypeDeclarationSQL']; - // MockBuilder::setMethods() was deprecated in favour of MockBuilder::onlyMethods() in PHPUnit v7.5.x - method_exists($mockBuilder, 'onlyMethods') - ? $mockBuilder->onlyMethods($mockedMethods) - : $mockBuilder->setMethods($mockedMethods); - return $mockBuilder->getMockForAbstractClass(); - } - - /** @before */ + /** + * @before + * @return void + */ + #[PHPUnit\Before] protected function setUpWithoutReturnDeclaration() { if (!class_exists('Doctrine\DBAL\Types\Type')) { $this->markTestSkipped('Skipping test that requires "doctrine/dbal".'); } - $this->platform = $this->getPlatformMock(); - $this->platform - ->expects($this->any()) - ->method('getBinaryTypeDeclarationSQL') - ->will($this->returnValue('DUMMYBINARY()')); - $this->type = Type::getType('ipv6'); + $this->platform = new TestPlatform; + $type = Type::getType('ipv6'); + $this->assertInstanceOf(IPv6Type::class, $type); + $this->type = $type; } /** * @test + * @return void */ + #[PHPUnit\Test] public function testIpConvertsToDatabaseValue() { $ip = IP::factory('::1'); @@ -66,7 +63,9 @@ public function testIpConvertsToDatabaseValue() /** * @test + * @return void */ + #[PHPUnit\Test] public function testInvalidIpConversionForDatabaseValue() { $this->expectException(\Doctrine\DBAL\Types\ConversionException::class); @@ -75,7 +74,9 @@ public function testInvalidIpConversionForDatabaseValue() /** * @test + * @return void */ + #[PHPUnit\Test] public function testNullConversionForDatabaseValue() { $this->assertNull($this->type->convertToDatabaseValue(null, $this->platform)); @@ -83,7 +84,9 @@ public function testNullConversionForDatabaseValue() /** * @test + * @return void */ + #[PHPUnit\Test] public function testIpConvertsToPHPValue() { $ip = IP::factory('::1'); @@ -95,7 +98,9 @@ public function testIpConvertsToPHPValue() /** * @test + * @return void */ + #[PHPUnit\Test] public function testIpObjectConvertsToPHPValue() { $ip = IP::factory('::1'); @@ -107,11 +112,15 @@ public function testIpObjectConvertsToPHPValue() /** * @test + * @return void */ + #[PHPUnit\Test] public function testStreamConvertsToPHPValue() { $ip = IP::factory('::1'); $stream = fopen('php://memory','r+'); + // assertIsResource() isn't available for PHP 5.6 and 7.0 (PHPUnit < 7.0). + $this->assertTrue(is_resource($stream)); fwrite($stream, $ip->getBinary()); rewind($stream); /** @var IP $dbIp */ @@ -122,7 +131,9 @@ public function testStreamConvertsToPHPValue() /** * @test + * @return void */ + #[PHPUnit\Test] public function testInvalidIpConversionForPHPValue() { $this->expectException(\Doctrine\DBAL\Types\ConversionException::class); @@ -131,7 +142,9 @@ public function testInvalidIpConversionForPHPValue() /** * @test + * @return void */ + #[PHPUnit\Test] public function testNullConversionForPHPValue() { $this->assertNull($this->type->convertToPHPValue(null, $this->platform)); @@ -139,23 +152,19 @@ public function testNullConversionForPHPValue() /** * @test + * @return void */ - public function testGetName() - { - $this->assertEquals('ip', $this->type->getName()); - } - - /** - * @test - */ + #[PHPUnit\Test] public function testGetBinaryTypeDeclarationSQL() { - $this->assertEquals('DUMMYBINARY()', $this->type->getSqlDeclaration(['length' => 16], $this->platform)); + $this->assertEquals('DUMMYBINARY()', $this->type->getSQLDeclaration(['length' => 16], $this->platform)); } /** * @test + * @return void */ + #[PHPUnit\Test] public function testBindingTypeIsAValidPDOTypeConstant() { // Get all constants of the PDO class. @@ -171,12 +180,4 @@ public function testBindingTypeIsAValidPDOTypeConstant() // PDO PARAM constant. $this->assertContains($this->type->getBindingType(), $paramConstants); } - - /** - * @test - */ - public function testRequiresSQLCommentHint() - { - $this->assertTrue($this->type->requiresSQLCommentHint($this->platform)); - } } diff --git a/tests/Doctrine/MultiTypeTest.php b/tests/Doctrine/MultiTypeTest.php index 7d78910..81bf5c0 100644 --- a/tests/Doctrine/MultiTypeTest.php +++ b/tests/Doctrine/MultiTypeTest.php @@ -6,6 +6,7 @@ use Darsyn\IP\Version\Multi as IP; use Doctrine\DBAL\Types\Type; use PDO; +use PHPUnit\Framework\Attributes as PHPUnit; use PHPUnit\Framework\TestCase; class MultiTypeTest extends TestCase @@ -16,7 +17,11 @@ class MultiTypeTest extends TestCase /** @var \Darsyn\IP\Doctrine\MultiType $type */ private $type; - /** @beforeClass */ + /** + * @beforeClass + * @return void + */ + #[PHPUnit\BeforeClass] public static function setUpBeforeClassWithoutReturnDeclaration() { if (class_exists(Type::class)) { @@ -24,36 +29,28 @@ public static function setUpBeforeClassWithoutReturnDeclaration() } } - private function getPlatformMock() - { - // We have to use MySQL as the platform here, because the AbstractPlatform does not support BINARY types. - $mockBuilder = $this->getMockBuilder('Doctrine\DBAL\Platforms\MySqlPlatform'); - $mockedMethods = ['getBinaryTypeDeclarationSQL']; - // MockBuilder::setMethods() was deprecated in favour of MockBuilder::onlyMethods() in PHPUnit v7.5.x - method_exists($mockBuilder, 'onlyMethods') - ? $mockBuilder->onlyMethods($mockedMethods) - : $mockBuilder->setMethods($mockedMethods); - return $mockBuilder->getMockForAbstractClass(); - } - - /** @before */ + /** + * @before + * @return void + */ + #[PHPUnit\Before] protected function setUpWithoutReturnDeclaration() { if (!class_exists('Doctrine\DBAL\Types\Type')) { $this->markTestSkipped('Skipping test that requires "doctrine/dbal".'); } - $this->platform = $this->getPlatformMock(); - $this->platform - ->expects($this->any()) - ->method('getBinaryTypeDeclarationSQL') - ->will($this->returnValue('DUMMYBINARY()')); - $this->type = Type::getType('ip_multi'); + $this->platform = new TestPlatform; + $type = Type::getType('ip_multi'); + $this->assertInstanceOf(MultiType::class, $type); + $this->type = $type; } /** * @test + * @return void */ + #[PHPUnit\Test] public function testIpConvertsToDatabaseValue() { $ip = IP::factory('12.34.56.78'); @@ -66,7 +63,9 @@ public function testIpConvertsToDatabaseValue() /** * @test + * @return void */ + #[PHPUnit\Test] public function testInvalidIpConversionForDatabaseValue() { $this->expectException(\Doctrine\DBAL\Types\ConversionException::class); @@ -75,7 +74,9 @@ public function testInvalidIpConversionForDatabaseValue() /** * @test + * @return void */ + #[PHPUnit\Test] public function testNullConversionForDatabaseValue() { $this->assertNull($this->type->convertToDatabaseValue(null, $this->platform)); @@ -83,7 +84,9 @@ public function testNullConversionForDatabaseValue() /** * @test + * @return void */ + #[PHPUnit\Test] public function testIpConvertsToPHPValue() { $ip = IP::factory('12.34.56.78'); @@ -95,7 +98,9 @@ public function testIpConvertsToPHPValue() /** * @test + * @return void */ + #[PHPUnit\Test] public function testIpObjectConvertsToPHPValue() { $ip = IP::factory('12.34.56.78'); @@ -107,11 +112,15 @@ public function testIpObjectConvertsToPHPValue() /** * @test + * @return void */ + #[PHPUnit\Test] public function testStreamConvertsToPHPValue() { $ip = IP::factory('12.34.56.78'); $stream = fopen('php://memory','r+'); + // assertIsResource() isn't available for PHP 5.6 and 7.0 (PHPUnit < 7.0). + $this->assertTrue(is_resource($stream)); fwrite($stream, $ip->getBinary()); rewind($stream); /** @var IP $dbIp */ @@ -122,7 +131,9 @@ public function testStreamConvertsToPHPValue() /** * @test + * @return void */ + #[PHPUnit\Test] public function testInvalidIpConversionForPHPValue() { $this->expectException(\Doctrine\DBAL\Types\ConversionException::class); @@ -131,7 +142,9 @@ public function testInvalidIpConversionForPHPValue() /** * @test + * @return void */ + #[PHPUnit\Test] public function testNullConversionForPHPValue() { $this->assertNull($this->type->convertToPHPValue(null, $this->platform)); @@ -139,23 +152,19 @@ public function testNullConversionForPHPValue() /** * @test + * @return void */ - public function testGetName() - { - $this->assertEquals('ip', $this->type->getName()); - } - - /** - * @test - */ + #[PHPUnit\Test] public function testGetBinaryTypeDeclarationSQL() { - $this->assertEquals('DUMMYBINARY()', $this->type->getSqlDeclaration(['length' => 16], $this->platform)); + $this->assertEquals('DUMMYBINARY()', $this->type->getSQLDeclaration(['length' => 16], $this->platform)); } /** * @test + * @return void */ + #[PHPUnit\Test] public function testBindingTypeIsAValidPDOTypeConstant() { // Get all constants of the PDO class. @@ -171,12 +180,4 @@ public function testBindingTypeIsAValidPDOTypeConstant() // PDO PARAM constant. $this->assertContains($this->type->getBindingType(), $paramConstants); } - - /** - * @test - */ - public function testRequiresSQLCommentHint() - { - $this->assertTrue($this->type->requiresSQLCommentHint($this->platform)); - } } diff --git a/tests/Doctrine/TestPlatform.php b/tests/Doctrine/TestPlatform.php new file mode 100644 index 0000000..11da815 --- /dev/null +++ b/tests/Doctrine/TestPlatform.php @@ -0,0 +1,13 @@ +formatter = new Formatter; @@ -20,7 +26,9 @@ protected function setUpWithoutReturnDeclaration() /** * @test + * @return void */ + #[PHPUnit\Test] public function testFormatterIsInstanceOfInterface() { $this->assertInstanceOf(ProtocolFormatterInterface::class, $this->formatter); @@ -29,7 +37,12 @@ public function testFormatterIsInstanceOfInterface() /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\Formatter\ConsistentFormatter::getValidBinarySequences() + * @param string $value + * @param string $expected + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(ConsistentFormatterDataProvider::class, 'getValidBinarySequences')] public function testFormatterReturnsCorrectProtocolString($value, $expected) { $this->assertSame($expected, $this->formatter->ntop($value)); @@ -38,11 +51,16 @@ public function testFormatterReturnsCorrectProtocolString($value, $expected) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\Formatter\ConsistentFormatter::getInvalidBinarySequences() + * @param mixed $value + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(ConsistentFormatterDataProvider::class, 'getInvalidBinarySequences')] public function testFormatterThrowsExceptionOnInvalidBinarySequences($value) { $this->expectException(\Darsyn\IP\Exception\Formatter\FormatException::class); try { + /** @phpstan-ignore-next-line (@phpstan-ignore argument.type) */ $this->formatter->ntop($value); } catch (FormatException $e) { $this->assertSame($value, $e->getSuppliedBinary()); diff --git a/tests/Formatter/NativeFormatterTest.php b/tests/Formatter/NativeFormatterTest.php index 9d56919..0194f0d 100644 --- a/tests/Formatter/NativeFormatterTest.php +++ b/tests/Formatter/NativeFormatterTest.php @@ -5,6 +5,8 @@ use Darsyn\IP\Exception\Formatter\FormatException; use Darsyn\IP\Formatter\NativeFormatter as Formatter; use Darsyn\IP\Formatter\ProtocolFormatterInterface; +use Darsyn\IP\Tests\DataProvider\Formatter\NativeFormatter as NativeFormatterDataProvider; +use PHPUnit\Framework\Attributes as PHPUnit; use PHPUnit\Framework\TestCase; class NativeFormatterTest extends TestCase @@ -12,7 +14,11 @@ class NativeFormatterTest extends TestCase /** @var \Darsyn\IP\Formatter\ProtocolFormatterInterface $formatter */ private $formatter; - /** @before */ + /** + * @before + * @return void + */ + #[PHPUnit\Before] protected function setUpWithoutReturnDeclaration() { $this->formatter = new Formatter; @@ -20,7 +26,9 @@ protected function setUpWithoutReturnDeclaration() /** * @test + * @return void */ + #[PHPUnit\Test] public function testFormatterIsInstanceOfInterface() { $this->assertInstanceOf(ProtocolFormatterInterface::class, $this->formatter); @@ -29,7 +37,12 @@ public function testFormatterIsInstanceOfInterface() /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\Formatter\NativeFormatter::getValidBinarySequences() + * @param string $value + * @param string $expected + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(NativeFormatterDataProvider::class, 'getValidBinarySequences')] public function testFormatterReturnsCorrectProtocolString($value, $expected) { $this->assertSame($expected, $this->formatter->ntop($value)); @@ -38,11 +51,16 @@ public function testFormatterReturnsCorrectProtocolString($value, $expected) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\Formatter\NativeFormatter::getInvalidBinarySequences() + * @param mixed $value + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(NativeFormatterDataProvider::class, 'getInvalidBinarySequences')] public function testFormatterThrowsExceptionOnInvalidBinarySequences($value) { $this->expectException(\Darsyn\IP\Exception\Formatter\FormatException::class); try { + /** @phpstan-ignore-next-line (@phpstan-ignore argument.type) */ $this->formatter->ntop($value); } catch (FormatException $e) { $this->assertSame($value, $e->getSuppliedBinary()); diff --git a/tests/Strategy/CompatibleTest.php b/tests/Strategy/CompatibleTest.php index 6276991..836220f 100644 --- a/tests/Strategy/CompatibleTest.php +++ b/tests/Strategy/CompatibleTest.php @@ -5,6 +5,8 @@ use Darsyn\IP\Exception\Strategy\ExtractionException; use Darsyn\IP\Exception\Strategy\PackingException; use Darsyn\IP\Strategy\Compatible; +use Darsyn\IP\Tests\DataProvider\Strategy\Compatible as CompatibleDataProvider; +use PHPUnit\Framework\Attributes as PHPUnit; use PHPUnit\Framework\TestCase; class CompatibleTest extends TestCase @@ -12,7 +14,11 @@ class CompatibleTest extends TestCase /** @var \Darsyn\IP\Strategy\EmbeddingStrategyInterface $strategy */ private $strategy; - /** @before */ + /** + * @before + * @return void + */ + #[PHPUnit\Before] protected function setUpWithoutReturnDeclaration() { $this->strategy = new Compatible; @@ -21,16 +27,26 @@ protected function setUpWithoutReturnDeclaration() /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\Strategy\Compatible::getInvalidIpAddresses() + * @param mixed $value + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(CompatibleDataProvider::class, 'getInvalidIpAddresses')] public function testIsEmbeddedReturnsFalseForAStringOtherThan16BytesLong($value) { + /** @phpstan-ignore-next-line (@phpstan-ignore argument.type) */ $this->assertFalse($this->strategy->isEmbedded($value)); } /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\Strategy\Compatible::getValidIpAddresses() + * @param string $value + * @param bool $isEmbedded + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(CompatibleDataProvider::class, 'getValidIpAddresses')] public function testIsEmbedded($value, $isEmbedded) { $this->assertSame($isEmbedded, $this->strategy->isEmbedded($value)); @@ -39,11 +55,16 @@ public function testIsEmbedded($value, $isEmbedded) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\Strategy\Compatible::getInvalidIpAddresses() + * @param mixed $value + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(CompatibleDataProvider::class, 'getInvalidIpAddresses')] public function testExceptionIsThrownWhenTryingToExtractFromStringsNot16Bytes($value) { $this->expectException(\Darsyn\IP\Exception\Strategy\ExtractionException::class); try { + /** @phpstan-ignore-next-line (@phpstan-ignore argument.type) */ $this->strategy->extract($value); } catch (ExtractionException $e) { $this->assertSame($this->strategy, $e->getEmbeddingStrategy()); @@ -56,7 +77,12 @@ public function testExceptionIsThrownWhenTryingToExtractFromStringsNot16Bytes($v /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\Strategy\Compatible::getValidSequences() + * @param string $ipv6 + * @param string $ipv4 + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(CompatibleDataProvider::class, 'getValidSequences')] public function testCorrectSequenceExtractedFromIpBinary($ipv6, $ipv4) { $this->assertSame($ipv4, $this->strategy->extract($ipv6)); @@ -65,11 +91,16 @@ public function testCorrectSequenceExtractedFromIpBinary($ipv6, $ipv4) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\Strategy\Compatible::getInvalidIpAddresses() + * @param mixed $value + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(CompatibleDataProvider::class, 'getInvalidIpAddresses')] public function testExceptionIsThrownWhenTryingToPackStringsNot4Bytes($value) { $this->expectException(\Darsyn\IP\Exception\Strategy\PackingException::class); try { + /** @phpstan-ignore-next-line (@phpstan-ignore argument.type) */ $this->strategy->pack($value); } catch (PackingException $e) { $this->assertSame($this->strategy, $e->getEmbeddingStrategy()); @@ -82,7 +113,12 @@ public function testExceptionIsThrownWhenTryingToPackStringsNot4Bytes($value) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\Strategy\Compatible::getValidSequences() + * @param string $ipv6 + * @param string $ipv4 + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(CompatibleDataProvider::class, 'getValidSequences')] public function testSequenceCorrectlyPackedIntoIpBinaryFromIpBinary($ipv6, $ipv4) { $this->assertSame($ipv6, $this->strategy->pack($ipv4)); diff --git a/tests/Strategy/DerivedTest.php b/tests/Strategy/DerivedTest.php index 304023c..5222cbd 100644 --- a/tests/Strategy/DerivedTest.php +++ b/tests/Strategy/DerivedTest.php @@ -3,6 +3,8 @@ namespace Darsyn\IP\Tests\Strategy; use Darsyn\IP\Strategy\Derived; +use Darsyn\IP\Tests\DataProvider\Strategy\Derived as DerivedDataProvider; +use PHPUnit\Framework\Attributes as PHPUnit; use PHPUnit\Framework\TestCase; class DerivedTest extends TestCase @@ -10,7 +12,11 @@ class DerivedTest extends TestCase /** @var \Darsyn\IP\Strategy\EmbeddingStrategyInterface $strategy */ private $strategy; - /** @before */ + /** + * @before + * @return void + */ + #[PHPUnit\Before] protected function setUpWithoutReturnDeclaration() { $this->strategy = new Derived; @@ -19,16 +25,26 @@ protected function setUpWithoutReturnDeclaration() /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\Strategy\Derived::getInvalidIpAddresses() + * @param mixed $value + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(DerivedDataProvider::class, 'getInvalidIpAddresses')] public function testIsEmbeddedReturnsFalseForAStringOtherThan16BytesLong($value) { + /** @phpstan-ignore-next-line (@phpstan-ignore argument.type) */ $this->assertFalse($this->strategy->isEmbedded($value)); } /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\Strategy\Derived::getValidIpAddresses() + * @param string $value + * @param bool $isEmbedded + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(DerivedDataProvider::class, 'getValidIpAddresses')] public function testIsEmbedded($value, $isEmbedded) { $this->assertSame($isEmbedded, $this->strategy->isEmbedded($value)); @@ -37,17 +53,27 @@ public function testIsEmbedded($value, $isEmbedded) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\Strategy\Derived::getInvalidIpAddresses() + * @param mixed $value + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(DerivedDataProvider::class, 'getInvalidIpAddresses')] public function testExceptionIsThrownWhenTryingToExtractFromStringsNot16Bytes($value) { $this->expectException(\Darsyn\IP\Exception\Strategy\ExtractionException::class); + /** @phpstan-ignore-next-line (@phpstan-ignore argument.type) */ $this->strategy->extract($value); } /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\Strategy\Derived::getValidSequences() + * @param string $ipv6 + * @param string $ipv4 + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(DerivedDataProvider::class, 'getValidSequences')] public function testCorrectSequenceExtractedFromIpBinary($ipv6, $ipv4) { $this->assertSame($ipv4, $this->strategy->extract($ipv6)); @@ -56,17 +82,27 @@ public function testCorrectSequenceExtractedFromIpBinary($ipv6, $ipv4) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\Strategy\Derived::getInvalidIpAddresses() + * @param mixed $value + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(DerivedDataProvider::class, 'getInvalidIpAddresses')] public function testExceptionIsThrownWhenTryingToPackStringsNot4Bytes($value) { $this->expectException(\Darsyn\IP\Exception\Strategy\PackingException::class); + /** @phpstan-ignore-next-line (@phpstan-ignore argument.type) */ $this->strategy->pack($value); } /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\Strategy\Derived::getValidSequences() + * @param string $ipv6 + * @param string $ipv4 + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(DerivedDataProvider::class, 'getValidSequences')] public function testSequenceCorrectlyPackedIntoIpBinaryFromIpBinary($ipv6, $ipv4) { $this->assertSame($ipv6, $this->strategy->pack($ipv4)); diff --git a/tests/Strategy/MappedTest.php b/tests/Strategy/MappedTest.php index c072b8d..ea2afd4 100644 --- a/tests/Strategy/MappedTest.php +++ b/tests/Strategy/MappedTest.php @@ -3,6 +3,8 @@ namespace Darsyn\IP\Tests\Strategy; use Darsyn\IP\Strategy\Mapped; +use Darsyn\IP\Tests\DataProvider\Strategy\Mapped as MappedDataProvider; +use PHPUnit\Framework\Attributes as PHPUnit; use PHPUnit\Framework\TestCase; class MappedTest extends TestCase @@ -10,7 +12,11 @@ class MappedTest extends TestCase /** @var \Darsyn\IP\Strategy\EmbeddingStrategyInterface $strategy */ private $strategy; - /** @before */ + /** + * @before + * @return void + */ + #[PHPUnit\Before] protected function setUpWithoutReturnDeclaration() { $this->strategy = new Mapped; @@ -19,16 +25,26 @@ protected function setUpWithoutReturnDeclaration() /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\Strategy\Mapped::getInvalidIpAddresses() + * @param mixed $value + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(MappedDataProvider::class, 'getInvalidIpAddresses')] public function testIsEmbeddedReturnsFalseForAStringOtherThan16BytesLong($value) { + /** @phpstan-ignore-next-line (@phpstan-ignore argument.type) */ $this->assertFalse($this->strategy->isEmbedded($value)); } /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\Strategy\Mapped::getValidIpAddresses() + * @param string $value + * @param bool $isEmbedded + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(MappedDataProvider::class, 'getValidIpAddresses')] public function testIsEmbedded($value, $isEmbedded) { $this->assertSame($isEmbedded, $this->strategy->isEmbedded($value)); @@ -37,17 +53,27 @@ public function testIsEmbedded($value, $isEmbedded) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\Strategy\Mapped::getInvalidIpAddresses() + * @param mixed $value + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(MappedDataProvider::class, 'getInvalidIpAddresses')] public function testExceptionIsThrownWhenTryingToExtractFromStringsNot16Bytes($value) { $this->expectException(\Darsyn\IP\Exception\Strategy\ExtractionException::class); + /** @phpstan-ignore-next-line (@phpstan-ignore argument.type) */ $this->strategy->extract($value); } /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\Strategy\Mapped::getValidSequences() + * @param string $ipv6 + * @param string $ipv4 + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(MappedDataProvider::class, 'getValidSequences')] public function testCorrectSequenceExtractedFromIpBinary($ipv6, $ipv4) { $this->assertSame($ipv4, $this->strategy->extract($ipv6)); @@ -56,17 +82,27 @@ public function testCorrectSequenceExtractedFromIpBinary($ipv6, $ipv4) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\Strategy\Mapped::getInvalidIpAddresses() + * @param mixed $value + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(MappedDataProvider::class, 'getInvalidIpAddresses')] public function testExceptionIsThrownWhenTryingToPackStringsNot4Bytes($value) { $this->expectException(\Darsyn\IP\Exception\Strategy\PackingException::class); + /** @phpstan-ignore-next-line (@phpstan-ignore argument.type) */ $this->strategy->pack($value); } /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\Strategy\Mapped::getValidSequences() + * @param string $ipv6 + * @param string $ipv4 + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(MappedDataProvider::class, 'getValidSequences')] public function testSequenceCorrectlyPackedIntoIpBinaryFromIpBinary($ipv6, $ipv4) { $this->assertSame($ipv6, $this->strategy->pack($ipv4)); diff --git a/tests/Util/BinaryTest.php b/tests/Util/BinaryTest.php index 8d9f1bc..1cf30ae 100644 --- a/tests/Util/BinaryTest.php +++ b/tests/Util/BinaryTest.php @@ -2,7 +2,9 @@ namespace Darsyn\IP\Tests\Util; +use Darsyn\IP\Tests\DataProvider\Util\Binary as BinaryDataProvider; use Darsyn\IP\Util\Binary; +use PHPUnit\Framework\Attributes as PHPUnit; use PHPUnit\Framework\TestCase; class BinaryTest extends TestCase @@ -10,30 +12,48 @@ class BinaryTest extends TestCase /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\Util\Binary::getInvalidHex() + * @param mixed $input + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(BinaryDataProvider::class, 'getInvalidHex')] public function testInvalidHexInput($input) { $this->expectException(\InvalidArgumentException::class); + /** @phpstan-ignore-next-line (@phpstan-ignore argument.type) */ Binary::fromHex($input); } /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\Util\Binary::getInvalidHumanReadable() + * @param mixed $input + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(BinaryDataProvider::class, 'getInvalidHumanReadable')] public function testInvalidHumanReadableInput($input) { $this->expectException(\InvalidArgumentException::class); + /** @phpstan-ignore-next-line (@phpstan-ignore argument.type) */ Binary::fromHumanReadable($input); } - /** @test */ + /** + * @test + * @return void + */ + #[PHPUnit\Test] public function testEmptyHexInput() { $this->assertSame('', Binary::fromHex('')); } - /** @test */ + /** + * @test + * @return void + */ + #[PHPUnit\Test] public function testEmptyHumanReadableInput() { $this->assertSame('', Binary::fromHumanReadable('')); @@ -42,8 +62,12 @@ public function testEmptyHumanReadableInput() /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\Util\Binary::getBinaryData() + * @param string $hex + * @return void */ - public function testHexCanConvertAndBackAgain($hex, $humanReadable) + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(BinaryDataProvider::class, 'getBinaryData')] + public function testHexCanConvertAndBackAgain($hex) { $converted = Binary::fromHex($hex); $this->assertSame(strtolower($hex), Binary::toHex($converted)); @@ -52,7 +76,12 @@ public function testHexCanConvertAndBackAgain($hex, $humanReadable) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\Util\Binary::getBinaryData() + * @param string $hex + * @param string $humanReadable + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(BinaryDataProvider::class, 'getBinaryData')] public function testHumanReadableCanConvertAndBackAgain($hex, $humanReadable) { $converted = Binary::fromHumanReadable($humanReadable); @@ -62,7 +91,12 @@ public function testHumanReadableCanConvertAndBackAgain($hex, $humanReadable) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\Util\Binary::getBinaryData() + * @param string $hex + * @param string $humanReadable + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(BinaryDataProvider::class, 'getBinaryData')] public function testHexCanConvertToHumanReadable($hex, $humanReadable) { $converted = Binary::fromHex($hex); @@ -72,7 +106,12 @@ public function testHexCanConvertToHumanReadable($hex, $humanReadable) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\Util\Binary::getBinaryData() + * @param string $hex + * @param string $humanReadable + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(BinaryDataProvider::class, 'getBinaryData')] public function testHumanReadableCanConvertToHex($hex, $humanReadable) { $converted = Binary::fromHumanReadable($humanReadable); diff --git a/tests/Util/MbStringTest.php b/tests/Util/MbStringTest.php index 6de5528..743c65f 100644 --- a/tests/Util/MbStringTest.php +++ b/tests/Util/MbStringTest.php @@ -4,6 +4,7 @@ use Darsyn\IP\Util\Binary; use Darsyn\IP\Util\MbString; +use PHPUnit\Framework\Attributes as PHPUnit; use PHPUnit\Framework\TestCase; class MbStringTest extends TestCase @@ -14,25 +15,41 @@ class MbStringTest extends TestCase const GRAPHEME_CLUSTER = '🧙‍♀️'; const GRAPHEME_CLUSTER_BYTES = 13; - /** @test */ + /** + * @test + * @return void + */ + #[PHPUnit\Test] public function testGetLengthAscii() { $this->assertSame(13, MbString::getLength('Hello, World!')); } - /** @test */ + /** + * @test + * @return void + */ + #[PHPUnit\Test] public function testGetLengthUnicodeCharacter() { $this->assertSame(7 + self::EMOJI_BYTES, MbString::getLength('Hello! ' . self::EMOJI)); } - /** @test */ + /** + * @test + * @return void + */ + #[PHPUnit\Test] public function testGetLengthGraphemeCluster() { $this->assertSame(15 + self::GRAPHEME_CLUSTER_BYTES, MbString::getLength('Harriet Potter ' . self::GRAPHEME_CLUSTER)); } - /** @test */ + /** + * @test + * @return void + */ + #[PHPUnit\Test] public function testSubStringAscii() { $text = 'Hello, World!'; @@ -41,7 +58,11 @@ public function testSubStringAscii() $this->assertSame('lo, World!', $substring); } - /** @test */ + /** + * @test + * @return void + */ + #[PHPUnit\Test] public function testSubStringUnicodeCharacter() { $text = 'Hello! ' . self::EMOJI; @@ -50,7 +71,11 @@ public function testSubStringUnicodeCharacter() $this->assertSame('! ' . Binary::fromHex('f09f'), $substring); } - /** @test */ + /** + * @test + * @return void + */ + #[PHPUnit\Test] public function testSubStringGraphemeCluster() { $text = 'Harriet Potter ' . self::GRAPHEME_CLUSTER; @@ -59,7 +84,11 @@ public function testSubStringGraphemeCluster() $this->assertSame('ter ' . Binary::fromHex('f09fa799e280'), $substring); } - /** @test */ + /** + * @test + * @return void + */ + #[PHPUnit\Test] public function testPadStringAscii() { $this->assertSame('-0--Hello', $result = MbString::padString('Hello', 9, '-0-', STR_PAD_LEFT)); @@ -67,7 +96,11 @@ public function testPadStringAscii() $this->assertSame('-0Hello-0', $result = MbString::padString('Hello', 9, '-0-', STR_PAD_BOTH)); } - /** @test */ + /** + * @test + * @return void + */ + #[PHPUnit\Test] public function testPadStringUnicodeCharacter() { $this->assertSame('---' . self::EMOJI, MbString::padString(self::EMOJI, 3 + self::EMOJI_BYTES, '-', STR_PAD_LEFT)); @@ -75,7 +108,11 @@ public function testPadStringUnicodeCharacter() $this->assertSame('-' . self::EMOJI . '--', MbString::padString(self::EMOJI, 3 + self::EMOJI_BYTES, '-', STR_PAD_BOTH)); } - /** @test */ + /** + * @test + * @return void + */ + #[PHPUnit\Test] public function testPadStringGraphemeCluster() { $this->assertSame('--' . self::GRAPHEME_CLUSTER, MbString::padString(self::GRAPHEME_CLUSTER, 2 + self::GRAPHEME_CLUSTER_BYTES, '-', STR_PAD_LEFT)); diff --git a/tests/Version/IPv4Test.php b/tests/Version/IPv4Test.php index 1aa0162..eb59681 100644 --- a/tests/Version/IPv4Test.php +++ b/tests/Version/IPv4Test.php @@ -6,9 +6,11 @@ use Darsyn\IP\Exception\InvalidIpAddressException; use Darsyn\IP\Exception\WrongVersionException; use Darsyn\IP\IpInterface; +use Darsyn\IP\Tests\DataProvider\IPv4 as IPv4DataProvider; use Darsyn\IP\Version\IPv4 as IP; use Darsyn\IP\Version\IPv6; use Darsyn\IP\Version\Version4Interface; +use PHPUnit\Framework\Attributes as PHPUnit; use PHPUnit\Framework\TestCase; class IPv4Test extends TestCase @@ -16,7 +18,11 @@ class IPv4Test extends TestCase /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv4::getValidIpAddresses() + * @param string $value + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv4DataProvider::class, 'getValidIpAddresses')] public function testInstantiationWithValidAddresses($value) { $ip = IP::factory($value); @@ -27,7 +33,11 @@ public function testInstantiationWithValidAddresses($value) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv4::getValidBinarySequences() + * @param string $value + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv4DataProvider::class, 'getValidBinarySequences')] public function testBinarySequenceIsTheSameOnceInstantiated($value) { $ip = IP::factory($value); @@ -37,22 +47,33 @@ public function testBinarySequenceIsTheSameOnceInstantiated($value) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv4::getValidProtocolIpAddresses() + * @param string $value + * @param string $expectedHex + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv4DataProvider::class, 'getValidProtocolIpAddresses')] public function testProtocolNotationConvertsToCorrectBinarySequence($value, $expectedHex) { $ip = IP::factory($value); - $this->assertSame($expectedHex, unpack('H*hex', $ip->getBinary())['hex']); + $actualHex = unpack('H*hex', $ip->getBinary()); + $this->assertSame($expectedHex, is_array($actualHex) ? $actualHex['hex'] : null); } /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv4::getInvalidIpAddresses() + * @param mixed $value + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv4DataProvider::class, 'getInvalidIpAddresses')] public function testExceptionIsThrownOnInstantiationWithInvalidAddresses($value) { $this->expectException(\Darsyn\IP\Exception\InvalidIpAddressException::class); $this->expectExceptionMessage('The IP address supplied is not valid.'); try { + /** @phpstan-ignore-next-line (@phpstan-ignore argument.type) */ IP::factory($value); } catch (InvalidIpAddressException $e) { $this->assertSame($value, $e->getSuppliedIp()); @@ -64,7 +85,11 @@ public function testExceptionIsThrownOnInstantiationWithInvalidAddresses($value) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv4::getValidIpAddresses() + * @param string $value + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv4DataProvider::class, 'getValidIpAddresses')] public function testGetBinaryAlwaysReturnsA4ByteString($value) { $ip = IP::factory($value); @@ -74,7 +99,13 @@ public function testGetBinaryAlwaysReturnsA4ByteString($value) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv4::getValidIpAddresses() + * @param string $value + * @param string $expectedHex + * @param string $expectedDot + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv4DataProvider::class, 'getValidIpAddresses')] public function testDotAddressReturnsCorrectString($value, $expectedHex, $expectedDot) { $ip = IP::factory($value); @@ -84,7 +115,11 @@ public function testDotAddressReturnsCorrectString($value, $expectedHex, $expect /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv4::getValidIpAddresses() + * @param string $value + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv4DataProvider::class, 'getValidIpAddresses')] public function testGetVersionAlwaysReturns4($value) { $ip = IP::factory($value); @@ -94,7 +129,11 @@ public function testGetVersionAlwaysReturns4($value) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv4::getValidIpAddresses() + * @param string $value + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv4DataProvider::class, 'getValidIpAddresses')] public function testIsVersionOnlyReturnsTrueFor4($value) { $ip = IP::factory($value); @@ -104,7 +143,11 @@ public function testIsVersionOnlyReturnsTrueFor4($value) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv4::getValidIpAddresses() + * @param string $value + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv4DataProvider::class, 'getValidIpAddresses')] public function testIsVersionOnlyReturnsFalseFor6($value) { $ip = IP::factory($value); @@ -114,7 +157,11 @@ public function testIsVersionOnlyReturnsFalseFor6($value) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv4::getValidIpAddresses() + * @param string $value + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv4DataProvider::class, 'getValidIpAddresses')] public function testIsVersion4AlwaysReturnsTrue($value) { $ip = IP::factory($value); @@ -124,7 +171,11 @@ public function testIsVersion4AlwaysReturnsTrue($value) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv4::getValidIpAddresses() + * @param string $value + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv4DataProvider::class, 'getValidIpAddresses')] public function testIsVersion6AlwaysReturnsFalse($value) { $ip = IP::factory($value); @@ -134,20 +185,31 @@ public function testIsVersion6AlwaysReturnsFalse($value) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv4::getValidCidrValues() + * @param int $cidr + * @param string $expectedMaskHex + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv4DataProvider::class, 'getValidCidrValues')] public function testCidrMasks($cidr, $expectedMaskHex) { $ip = IP::factory('12.34.56.78'); $reflect = new \ReflectionClass($ip); $method = $reflect->getMethod('generateBinaryMask'); $method->setAccessible(true); - $this->assertSame($expectedMaskHex, unpack('H*hex', $method->invoke($ip, $cidr, 4))['hex']); + /** @phpstan-ignore-next-line (@phpstan-ignore argument.type) */ + $actualMask = unpack('H*hex', $method->invoke($ip, $cidr, 4)); + $this->assertSame($expectedMaskHex, is_array($actualMask) ? $actualMask['hex'] : null); } /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv4::getInvalidCidrValues() + * @param mixed $cidr + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv4DataProvider::class, 'getInvalidCidrValues')] public function testExceptionIsThrownFromInvalidCidrValues($cidr) { $this->expectException(\Darsyn\IP\Exception\InvalidCidrException::class); @@ -158,6 +220,7 @@ public function testExceptionIsThrownFromInvalidCidrValues($cidr) $method->setAccessible(true); try { $method->invoke($ip, $cidr, 4); + /** @phpstan-ignore-next-line (@phpstan-ignore catch.neverThrown) */ } catch (InvalidCidrException $e) { $this->assertSame($cidr, $e->getSuppliedCidr()); throw $e; @@ -167,8 +230,13 @@ public function testExceptionIsThrownFromInvalidCidrValues($cidr) /** * @test - * @dataProvider \Darsyn\IP\Tests\DataProvider\Ipv4::getNetworkIpAddresses() + * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv4::getNetworkIpAddresses() + * @param string $expected + * @param int $cidr + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv4DataProvider::class, 'getNetworkIpAddresses')] public function testNetworkIp($expected, $cidr) { $ip = IP::factory('12.34.56.78'); @@ -177,8 +245,13 @@ public function testNetworkIp($expected, $cidr) /** * @test - * @dataProvider \Darsyn\IP\Tests\DataProvider\Ipv4::getBroadcastIpAddresses() + * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv4::getBroadcastIpAddresses() + * @param string $expected + * @param int $cidr + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv4DataProvider::class, 'getBroadcastIpAddresses')] public function testBroadcastIp($expected, $cidr) { $ip = IP::factory('12.34.56.78'); @@ -188,7 +261,13 @@ public function testBroadcastIp($expected, $cidr) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv4::getValidInRangeIpAddresses() + * @param string $first + * @param string $second + * @param int $cidr + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv4DataProvider::class, 'getValidInRangeIpAddresses')] public function testInRange($first, $second, $cidr) { $first = IP::factory($first); @@ -199,18 +278,25 @@ public function testInRange($first, $second, $cidr) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv4::getInvalidCidrValues() + * @param mixed $cidr + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv4DataProvider::class, 'getInvalidCidrValues')] public function testInRangeThrowsExceptionOnInvalidCidr($cidr) { $first = IP::factory('12.34.56.78'); $second = IP::factory('12.34.56.78'); $this->expectException(InvalidCidrException::class); + /** @phpstan-ignore-next-line (@phpstan-ignore argument.type) */ $first->inRange($second, $cidr); } /** * @test + * @return void */ + #[PHPUnit\Test] public function testDifferentVersionsAreNotInRange() { $ip = IP::factory('12.34.56.78'); @@ -222,7 +308,13 @@ public function testDifferentVersionsAreNotInRange() /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv4::getCommonCidrValues() + * @param string $first + * @param string $second + * @param int $expectedCidr + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv4DataProvider::class, 'getCommonCidrValues')] public function testCommonCidr($first, $second, $expectedCidr) { $first = IP::factory($first); @@ -230,7 +322,11 @@ public function testCommonCidr($first, $second, $expectedCidr) $this->assertSame($expectedCidr, $first->getCommonCidr($second)); } - /** @test */ + /** + * @test + * @return void + */ + #[PHPUnit\Test] public function testCommonCidrThrowsException() { $first = IP::factory('12.34.56.78'); @@ -242,7 +338,11 @@ public function testCommonCidrThrowsException() /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv4::getValidIpAddresses() + * @param string $value + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv4DataProvider::class, 'getValidIpAddresses')] public function testIsMappedAlwaysReturnsFalse($value) { $ip = IP::factory($value); @@ -252,7 +352,11 @@ public function testIsMappedAlwaysReturnsFalse($value) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv4::getValidIpAddresses() + * @param string $value + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv4DataProvider::class, 'getValidIpAddresses')] public function testIsDerivedAlwaysReturnsFalse($value) { $ip = IP::factory($value); @@ -262,7 +366,11 @@ public function testIsDerivedAlwaysReturnsFalse($value) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv4::getValidIpAddresses() + * @param string $value + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv4DataProvider::class, 'getValidIpAddresses')] public function testIsCompatibleAlwaysReturnsFalse($value) { $ip = IP::factory($value); @@ -272,7 +380,11 @@ public function testIsCompatibleAlwaysReturnsFalse($value) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv4::getValidIpAddresses() + * @param string $value + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv4DataProvider::class, 'getValidIpAddresses')] public function testIsEmbeddedAlwaysReturnsFalse($value) { $ip = IP::factory($value); @@ -282,7 +394,12 @@ public function testIsEmbeddedAlwaysReturnsFalse($value) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv4::getLinkLocalIpAddresses() + * @param string $value + * @param bool $isLinkLocal + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv4DataProvider::class, 'getLinkLocalIpAddresses')] public function testIsLinkLocal($value, $isLinkLocal) { $ip = IP::factory($value); @@ -292,7 +409,12 @@ public function testIsLinkLocal($value, $isLinkLocal) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv4::getLoopbackIpAddresses() + * @param string $value + * @param bool $isLoopback + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv4DataProvider::class, 'getLoopbackIpAddresses')] public function testIsLoopback($value, $isLoopback) { $ip = IP::factory($value); @@ -302,7 +424,12 @@ public function testIsLoopback($value, $isLoopback) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv4::getMulticastIpAddresses() + * @param string $value + * @param bool $isMulticast + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv4DataProvider::class, 'getMulticastIpAddresses')] public function testIsMulticast($value, $isMulticast) { $ip = IP::factory($value); @@ -313,7 +440,12 @@ public function testIsMulticast($value, $isMulticast) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv4::getPrivateUseIpAddresses() + * @param string $value + * @param bool $isPrivateUse + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv4DataProvider::class, 'getPrivateUseIpAddresses')] public function testIsPrivateUse($value, $isPrivateUse) { $ip = IP::factory($value); @@ -323,7 +455,12 @@ public function testIsPrivateUse($value, $isPrivateUse) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv4::getUnspecifiedIpAddresses() + * @param string $value + * @param bool $isUnspecified + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv4DataProvider::class, 'getUnspecifiedIpAddresses')] public function testIsUnspecified($value, $isUnspecified) { $ip = IP::factory($value); @@ -333,7 +470,12 @@ public function testIsUnspecified($value, $isUnspecified) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv4::getBenchmarkingIpAddresses() + * @param string $value + * @param bool $isBenchmarking + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv4DataProvider::class, 'getBenchmarkingIpAddresses')] public function testIsBenchmarking($value, $isBenchmarking) { $ip = IP::factory($value); @@ -343,7 +485,12 @@ public function testIsBenchmarking($value, $isBenchmarking) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv4::getDocumentationIpAddresses() + * @param string $value + * @param bool $isDocumentation + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv4DataProvider::class, 'getDocumentationIpAddresses')] public function testIsDocumentation($value, $isDocumentation) { $ip = IP::factory($value); @@ -353,7 +500,12 @@ public function testIsDocumentation($value, $isDocumentation) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv4::getPublicUseIpAddresses() + * @param string $value + * @param bool $isPublicUse + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv4DataProvider::class, 'getPublicUseIpAddresses')] public function testIsPublicUse($value, $isPublicUse) { $ip = IP::factory($value); @@ -363,7 +515,12 @@ public function testIsPublicUse($value, $isPublicUse) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv4::getIsBroadcastIpAddresses() + * @param string $value + * @param bool $isBroadcast + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv4DataProvider::class, 'getIsBroadcastIpAddresses')] public function testIsBroadcast($value, $isBroadcast) { $ip = IP::factory($value); @@ -373,7 +530,12 @@ public function testIsBroadcast($value, $isBroadcast) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv4::getSharedIpAddresses() + * @param string $value + * @param bool $isShared + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv4DataProvider::class, 'getSharedIpAddresses')] public function testIsShared($value, $isShared) { $ip = IP::factory($value); @@ -383,7 +545,12 @@ public function testIsShared($value, $isShared) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv4::getFutureReservedIpAddresses() + * @param string $value + * @param bool $isFutureReserved + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv4DataProvider::class, 'getFutureReservedIpAddresses')] public function testIsFutureReserved($value, $isFutureReserved) { $ip = IP::factory($value); @@ -393,7 +560,13 @@ public function testIsFutureReserved($value, $isFutureReserved) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv4::getValidIpAddresses() + * @param string $value + * @param string $expectedHex + * @param string $expectedDot + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv4DataProvider::class, 'getValidIpAddresses')] public function testStringCasting($value, $expectedHex, $expectedDot) { $ip = IP::factory($value); diff --git a/tests/Version/IPv6Test.php b/tests/Version/IPv6Test.php index 9fd7a80..e2aee60 100644 --- a/tests/Version/IPv6Test.php +++ b/tests/Version/IPv6Test.php @@ -7,10 +7,13 @@ use Darsyn\IP\Exception\WrongVersionException; use Darsyn\IP\IpInterface; use Darsyn\IP\Strategy\Mapped; +use Darsyn\IP\Tests\DataProvider\IPv4 as IPv4DataProvider; +use Darsyn\IP\Tests\DataProvider\IPv6 as IPv6DataProvider; use Darsyn\IP\Version\IPv4; use Darsyn\IP\Version\IPv6 as IP; use Darsyn\IP\Version\Multi; use Darsyn\IP\Version\Version6Interface; +use PHPUnit\Framework\Attributes as PHPUnit; use PHPUnit\Framework\TestCase; class IPv6Test extends TestCase @@ -18,7 +21,11 @@ class IPv6Test extends TestCase /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv6::getValidIpAddresses() + * @param string $value + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv6DataProvider::class, 'getValidIpAddresses')] public function testInstantiationWithValidAddresses($value) { $ip = IP::factory($value); @@ -29,7 +36,11 @@ public function testInstantiationWithValidAddresses($value) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv6::getValidBinarySequences() + * @param string $value + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv6DataProvider::class, 'getValidBinarySequences')] public function testBinarySequenceIsTheSameOnceInstantiated($value) { $ip = IP::factory($value); @@ -39,22 +50,33 @@ public function testBinarySequenceIsTheSameOnceInstantiated($value) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv6::getValidProtocolIpAddresses() + * @param string $value + * @param string $hex + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv6DataProvider::class, 'getValidProtocolIpAddresses')] public function testProtocolNotationConvertsToCorrectBinarySequence($value, $hex) { $ip = IP::factory($value); - $this->assertSame($hex, unpack('H*hex', $ip->getBinary())['hex']); + $actualHex = unpack('H*hex', $ip->getBinary()); + $this->assertSame($hex, is_array($actualHex) ? $actualHex['hex'] : null); } /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv6::getInvalidIpAddresses() + * @param mixed $value + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv6DataProvider::class, 'getInvalidIpAddresses')] public function testExceptionIsThrownOnInstantiationWithInvalidAddresses($value) { $this->expectException(\Darsyn\IP\Exception\InvalidIpAddressException::class); $this->expectExceptionMessage('The IP address supplied is not valid.'); try { + /** @phpstan-ignore-next-line (@phpstan-ignore argument.type) */ $ip = IP::factory($value); } catch (InvalidIpAddressException $e) { $this->assertSame($value, $e->getSuppliedIp()); @@ -68,7 +90,9 @@ public function testExceptionIsThrownOnInstantiationWithInvalidAddresses($value) * @covers \Darsyn\IP\Version\IPv6::fromEmbedded() * @covers \Darsyn\IP\Version\Multi::factory() * @covers \Darsyn\IP\Version\Multi::getBinary() + * @return void */ + #[PHPUnit\Test] public function testInstantiationFromEmbeddedIpAddress() { try { @@ -93,7 +117,11 @@ public function testInstantiationFromEmbeddedIpAddress() /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv6::getValidIpAddresses() + * @param string $value + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv6DataProvider::class, 'getValidIpAddresses')] public function testGetBinaryAlwaysReturnsA16ByteString($value) { $ip = IP::factory($value); @@ -103,7 +131,14 @@ public function testGetBinaryAlwaysReturnsA16ByteString($value) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv6::getValidIpAddresses() - */ + * @param string $value + * @param string $hex + * @param string $expanded + * @param string $compacted + * @return void + */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv6DataProvider::class, 'getValidIpAddresses')] public function testGetCompactedAddressReturnsCorrectString($value, $hex, $expanded, $compacted) { $ip = IP::factory($value); @@ -113,7 +148,13 @@ public function testGetCompactedAddressReturnsCorrectString($value, $hex, $expan /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv6::getValidProtocolIpAddresses() + * @param string $value + * @param string $hex + * @param string $expanded + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv6DataProvider::class, 'getValidProtocolIpAddresses')] public function testGetExpandedAddressReturnsCorrectString($value, $hex, $expanded) { $ip = IP::factory($value); @@ -123,7 +164,11 @@ public function testGetExpandedAddressReturnsCorrectString($value, $hex, $expand /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv6::getValidIpAddresses() + * @param string $value + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv6DataProvider::class, 'getValidIpAddresses')] public function testGetVersionAlwaysReturns6($value) { $ip = IP::factory($value); @@ -133,7 +178,11 @@ public function testGetVersionAlwaysReturns6($value) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv6::getValidIpAddresses() + * @param string $value + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv6DataProvider::class, 'getValidIpAddresses')] public function testIsVersionOnlyReturnsTrueFor6($value) { $ip = IP::factory($value); @@ -143,7 +192,11 @@ public function testIsVersionOnlyReturnsTrueFor6($value) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv6::getValidIpAddresses() + * @param string $value + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv6DataProvider::class, 'getValidIpAddresses')] public function testIsVersionOnlyReturnsFalseFor4($value) { $ip = IP::factory($value); @@ -153,7 +206,11 @@ public function testIsVersionOnlyReturnsFalseFor4($value) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv6::getValidIpAddresses() + * @param string $value + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv6DataProvider::class, 'getValidIpAddresses')] public function testIsVersion6AlwaysReturnsTrue($value) { $ip = IP::factory($value); @@ -163,7 +220,11 @@ public function testIsVersion6AlwaysReturnsTrue($value) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv6::getValidIpAddresses() + * @param string $value + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv6DataProvider::class, 'getValidIpAddresses')] public function testIsVersion4AlwaysReturnsFalse($value) { $ip = IP::factory($value); @@ -173,20 +234,31 @@ public function testIsVersion4AlwaysReturnsFalse($value) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv6::getValidCidrValues() + * @param int $cidr + * @param string $expectedMaskHex + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv6DataProvider::class, 'getValidCidrValues')] public function testCidrMasks($cidr, $expectedMaskHex) { $ip = IP::factory('::1'); $reflect = new \ReflectionClass($ip); $method = $reflect->getMethod('generateBinaryMask'); $method->setAccessible(true); - $this->assertSame($expectedMaskHex, unpack('H*hex', $method->invoke($ip, $cidr, 16))['hex']); + /** @phpstan-ignore-next-line (@phpstan-ignore argument.type) */ + $actualMask = unpack('H*hex', $method->invoke($ip, $cidr, 16)); + $this->assertSame($expectedMaskHex, is_array($actualMask) ? $actualMask['hex'] : null); } /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv6::getInvalidCidrValues() + * @param mixed $cidr + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv6DataProvider::class, 'getInvalidCidrValues')] public function testExceptionIsThrownFromInvalidCidrValues($cidr) { $this->expectException(\Darsyn\IP\Exception\InvalidCidrException::class); @@ -197,6 +269,7 @@ public function testExceptionIsThrownFromInvalidCidrValues($cidr) $method->setAccessible(true); try { $method->invoke($ip, $cidr, 16); + /** @phpstan-ignore-next-line (@phpstan-ignore catch.neverThrown) */ } catch (InvalidCidrException $e) { $this->assertSame($cidr, $e->getSuppliedCidr()); throw $e; @@ -207,7 +280,12 @@ public function testExceptionIsThrownFromInvalidCidrValues($cidr) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv6::getNetworkIpAddresses() + * @param string $expected + * @param int $cidr + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv6DataProvider::class, 'getNetworkIpAddresses')] public function testNetworkIp($expected, $cidr) { $ip = IP::factory('2001:db8::a60:8a2e:370:7334'); @@ -217,7 +295,12 @@ public function testNetworkIp($expected, $cidr) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv6::getBroadcastIpAddresses() + * @param string $expected + * @param int $cidr + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv6DataProvider::class, 'getBroadcastIpAddresses')] public function testBroadcastIp($expected, $cidr) { $ip = IP::factory('2001:db8::a60:8a2e:370:7334'); @@ -227,7 +310,13 @@ public function testBroadcastIp($expected, $cidr) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv6::getValidInRangeIpAddresses() + * @param string $first + * @param string $second + * @param int $cidr + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv6DataProvider::class, 'getValidInRangeIpAddresses')] public function testInRange($first, $second, $cidr) { $first = IP::factory($first); @@ -237,7 +326,9 @@ public function testInRange($first, $second, $cidr) /** * @test + * @return void */ + #[PHPUnit\Test] public function testDifferentVersionsAreNotInRange() { $ip = IP::factory('::12.34.56.78'); @@ -249,7 +340,13 @@ public function testDifferentVersionsAreNotInRange() /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv6::getCommonCidrValues() + * @param string $first + * @param string $second + * @param int $expectedCidr + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv6DataProvider::class, 'getCommonCidrValues')] public function testCommonCidr($first, $second, $expectedCidr) { $first = IP::factory($first); @@ -260,7 +357,13 @@ public function testCommonCidr($first, $second, $expectedCidr) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv4::getCommonCidrValues() + * @param string $first + * @param string $second + * @param int $expectedCidr + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv4DataProvider::class, 'getCommonCidrValues')] public function testEmbeddedCommonCidr($first, $second, $expectedCidr) { $first = IP::fromEmbedded($first); @@ -268,7 +371,11 @@ public function testEmbeddedCommonCidr($first, $second, $expectedCidr) $this->assertSame(96 + $expectedCidr, $first->getCommonCidr($second)); } - /** @test */ + /** + * @test + * @return void + */ + #[PHPUnit\Test] public function testCommonCidrThrowsException() { $first = IP::factory('2001:db8::a60:8a2e:370:7334'); @@ -280,7 +387,12 @@ public function testCommonCidrThrowsException() /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv6::getMappedIpAddresses() + * @param string $value + * @param bool $isMapped + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv6DataProvider::class, 'getMappedIpAddresses')] public function testIsMapped($value, $isMapped) { $ip = IP::factory($value); @@ -290,7 +402,12 @@ public function testIsMapped($value, $isMapped) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv6::getDerivedIpAddresses() + * @param string $value + * @param bool $isDerived + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv6DataProvider::class, 'getDerivedIpAddresses')] public function testIsDerived($value, $isDerived) { $ip = IP::factory($value); @@ -300,7 +417,12 @@ public function testIsDerived($value, $isDerived) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv6::getCompatibleIpAddresses() + * @param string $value + * @param bool $isCompatible + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv6DataProvider::class, 'getCompatibleIpAddresses')] public function testIsCompatible($value, $isCompatible) { $ip = IP::factory($value); @@ -310,7 +432,11 @@ public function testIsCompatible($value, $isCompatible) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv6::getValidIpAddresses() + * @param string $value + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv6DataProvider::class, 'getValidIpAddresses')] public function testIsEmbeddedAlwaysReturnsFalse($value) { $ip = IP::factory($value); @@ -320,7 +446,12 @@ public function testIsEmbeddedAlwaysReturnsFalse($value) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv6::getLinkLocalIpAddresses() + * @param string $value + * @param bool $isLinkLocal + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv6DataProvider::class, 'getLinkLocalIpAddresses')] public function testIsLinkLocal($value, $isLinkLocal) { $ip = IP::factory($value); @@ -330,7 +461,12 @@ public function testIsLinkLocal($value, $isLinkLocal) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv6::getLoopbackIpAddresses() + * @param string $value + * @param bool $isLoopback + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv6DataProvider::class, 'getLoopbackIpAddresses')] public function testIsLoopback($value, $isLoopback) { $ip = IP::factory($value); @@ -340,7 +476,12 @@ public function testIsLoopback($value, $isLoopback) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv6::getMulticastIpAddresses() + * @param string $value + * @param bool $isMulticast + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv6DataProvider::class, 'getMulticastIpAddresses')] public function testIsMulticast($value, $isMulticast) { $ip = IP::factory($value); @@ -351,7 +492,12 @@ public function testIsMulticast($value, $isMulticast) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv6::getPrivateUseIpAddresses() + * @param string $value + * @param bool $isPrivateUse + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv6DataProvider::class, 'getPrivateUseIpAddresses')] public function testIsPrivateUse($value, $isPrivateUse) { $ip = IP::factory($value); @@ -361,7 +507,12 @@ public function testIsPrivateUse($value, $isPrivateUse) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv6::getUnspecifiedIpAddresses() + * @param string $value + * @param bool $isUnspecified + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv6DataProvider::class, 'getUnspecifiedIpAddresses')] public function testIsUnspecified($value, $isUnspecified) { $ip = IP::factory($value); @@ -371,7 +522,12 @@ public function testIsUnspecified($value, $isUnspecified) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv6::getBenchmarkingIpAddresses() + * @param string $value + * @param bool $isBenchmarking + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv6DataProvider::class, 'getBenchmarkingIpAddresses')] public function testIsBenchmarking($value, $isBenchmarking) { $ip = IP::factory($value); @@ -381,7 +537,12 @@ public function testIsBenchmarking($value, $isBenchmarking) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv6::getDocumentationIpAddresses() + * @param string $value + * @param bool $isDocumentation + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv6DataProvider::class, 'getDocumentationIpAddresses')] public function testIsDocumentation($value, $isDocumentation) { $ip = IP::factory($value); @@ -391,7 +552,12 @@ public function testIsDocumentation($value, $isDocumentation) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv6::getPublicUseIpAddresses() + * @param string $value + * @param bool $isPublicUse + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv6DataProvider::class, 'getPublicUseIpAddresses')] public function testIsPublicUse($value, $isPublicUse) { $ip = IP::factory($value); @@ -401,7 +567,12 @@ public function testIsPublicUse($value, $isPublicUse) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv6::getUniqueLocalIpAddresses() + * @param string $value + * @param bool $isUniqueLocal + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv6DataProvider::class, 'getUniqueLocalIpAddresses')] public function testIsUniqueLocal($value, $isUniqueLocal) { $ip = IP::factory($value); @@ -411,7 +582,12 @@ public function testIsUniqueLocal($value, $isUniqueLocal) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv6::getUnicastIpAddresses() + * @param string $value + * @param bool $isUnicast + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv6DataProvider::class, 'getUnicastIpAddresses')] public function testIsUnicast($value, $isUnicast) { $ip = IP::factory($value); @@ -421,7 +597,12 @@ public function testIsUnicast($value, $isUnicast) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv6::getUnicastGlobalIpAddresses() + * @param string $value + * @param bool $isUnicastGlobal + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv6DataProvider::class, 'getUnicastGlobalIpAddresses')] public function testIsUnicastGlobal($value, $isUnicastGlobal) { $ip = IP::factory($value); @@ -431,7 +612,14 @@ public function testIsUnicastGlobal($value, $isUnicastGlobal) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\IPv6::getValidIpAddresses() - */ + * @param string $value + * @param string $hex + * @param string $expanded + * @param string $compacted + * @return void + */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(IPv6DataProvider::class, 'getValidIpAddresses')] public function testStringCasting($value, $hex, $expanded, $compacted) { $ip = IP::factory($value); diff --git a/tests/Version/MultiTest.php b/tests/Version/MultiTest.php index c690d36..ee2074e 100644 --- a/tests/Version/MultiTest.php +++ b/tests/Version/MultiTest.php @@ -6,17 +6,23 @@ use Darsyn\IP\Exception\WrongVersionException; use Darsyn\IP\IpInterface; use Darsyn\IP\Strategy; +use Darsyn\IP\Tests\DataProvider\Multi as MultiDataProvider; use Darsyn\IP\Version\IPv4; use Darsyn\IP\Version\IPv6; use Darsyn\IP\Version\Multi as IP; use Darsyn\IP\Version\MultiVersionInterface; use Darsyn\IP\Version\Version4Interface; use Darsyn\IP\Version\Version6Interface; +use PHPUnit\Framework\Attributes as PHPUnit; use PHPUnit\Framework\TestCase; class MultiTest extends TestCase { - /** @before */ + /** + * @before + * @return void + */ + #[PHPUnit\Before] public function resetDefaultEmbeddingStrategy() { IP::setDefaultEmbeddingStrategy(new Strategy\Mapped); @@ -25,7 +31,11 @@ public function resetDefaultEmbeddingStrategy() /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\Multi::getValidIpAddresses() + * @param string $value + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(MultiDataProvider::class, 'getValidIpAddresses')] public function testInstantiationWithValidAddresses($value) { $ip = IP::factory($value); @@ -38,7 +48,13 @@ public function testInstantiationWithValidAddresses($value) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\Multi::getEmbeddingStrategyIpAddresses() + * @param class-string $strategyClass + * @param string $expandedAddress + * @param string $v4address + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(MultiDataProvider::class, 'getEmbeddingStrategyIpAddresses')] public function testEmbeddingStrategy($strategyClass, $expandedAddress, $v4address) { $ip = IP::factory($v4address, new $strategyClass); @@ -48,7 +64,13 @@ public function testEmbeddingStrategy($strategyClass, $expandedAddress, $v4addre /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\Multi::getEmbeddingStrategyIpAddresses() + * @param class-string $strategyClass + * @param string $expandedAddress + * @param string $v4address + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(MultiDataProvider::class, 'getEmbeddingStrategyIpAddresses')] public function testDefaufltEmbeddingStrategy($strategyClass, $expandedAddress, $v4address) { IP::setDefaultEmbeddingStrategy(new $strategyClass); @@ -59,7 +81,11 @@ public function testDefaufltEmbeddingStrategy($strategyClass, $expandedAddress, /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\Multi::getValidBinarySequences() + * @param string $value + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(MultiDataProvider::class, 'getValidBinarySequences')] public function testBinarySequenceIsTheSameOnceInstantiated($value) { $ip = IP::factory($value); @@ -69,22 +95,33 @@ public function testBinarySequenceIsTheSameOnceInstantiated($value) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\Multi::getValidProtocolIpAddresses() + * @param string $value + * @param string $hex + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(MultiDataProvider::class, 'getValidProtocolIpAddresses')] public function testProtocolNotationConvertsToCorrectBinarySequence($value, $hex) { $ip = IP::factory($value); - $this->assertSame($hex, unpack('H*hex', $ip->getBinary())['hex']); + $actualHex = unpack('H*hex', $ip->getBinary()); + $this->assertSame($hex, is_array($actualHex) ? $actualHex['hex'] : null); } /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\Multi::getInvalidIpAddresses() + * @param mixed $value + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(MultiDataProvider::class, 'getInvalidIpAddresses')] public function testExceptionIsThrownOnInstantiationWithInvalidAddresses($value) { $this->expectException(InvalidIpAddressException::class); $this->expectExceptionMessage('The IP address supplied is not valid.'); try { + /** @phpstan-ignore-next-line (@phpstan-ignore argument.type) */ $ip = IP::factory($value); } catch (InvalidIpAddressException $e) { $this->assertSame($value, $e->getSuppliedIp()); @@ -95,7 +132,11 @@ public function testExceptionIsThrownOnInstantiationWithInvalidAddresses($value) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\Multi::getValidIpAddresses() + * @param string $value + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(MultiDataProvider::class, 'getValidIpAddresses')] public function testGetBinaryAlwaysReturnsA16ByteString($value) { $ip = IP::factory($value); @@ -105,7 +146,14 @@ public function testGetBinaryAlwaysReturnsA16ByteString($value) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\Multi::getValidIpAddresses() - */ + * @param string $value + * @param string $hex + * @param string $expanded + * @param string $compacted + * @return void + */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(MultiDataProvider::class, 'getValidIpAddresses')] public function testGetCompactedAddressReturnsCorrectString($value, $hex, $expanded, $compacted) { $ip = IP::factory($value); @@ -115,7 +163,13 @@ public function testGetCompactedAddressReturnsCorrectString($value, $hex, $expan /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\Multi::getValidProtocolIpAddresses() + * @param string $value + * @param string $hex + * @param string $expanded + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(MultiDataProvider::class, 'getValidProtocolIpAddresses')] public function testGetExpandedAddressReturnsCorrectString($value, $hex, $expanded) { $ip = IP::factory($value); @@ -125,7 +179,15 @@ public function testGetExpandedAddressReturnsCorrectString($value, $hex, $expand /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\Multi::getValidIpVersion4Addresses() - */ + * @param string $value + * @param string $hex + * @param string $expanded + * @param string $compacted + * @param string $dot + * @return void + */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(MultiDataProvider::class, 'getValidIpVersion4Addresses')] public function testDotAddressReturnsCorrectString($value, $hex, $expanded, $compacted, $dot) { $ip = IP::factory($value); @@ -135,7 +197,11 @@ public function testDotAddressReturnsCorrectString($value, $hex, $expanded, $com /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\Multi::getValidIpVersion6Addresses() + * @param string $value + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(MultiDataProvider::class, 'getValidIpVersion6Addresses')] public function testDotAddressThrowsExceptionForNonVersion4Addresses($value) { $this->expectException(\Darsyn\IP\Exception\WrongVersionException::class); @@ -143,6 +209,7 @@ public function testDotAddressThrowsExceptionForNonVersion4Addresses($value) $ip = IP::factory($value); $ip->getDotAddress(); } catch (WrongVersionException $e) { + $this->assertTrue(isset($ip)); $this->assertSame((string) $ip, $e->getSuppliedIp()); $this->assertSame(4, $e->getExpectedVersion()); $this->assertSame(6, $e->getActualVersion()); @@ -153,7 +220,12 @@ public function testDotAddressThrowsExceptionForNonVersion4Addresses($value) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\Multi::getIpAddressVersions() + * @param string $value + * @param int $version + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(MultiDataProvider::class, 'getIpAddressVersions')] public function testVersion($value, $version) { $ip = IP::factory($value); @@ -163,7 +235,13 @@ public function testVersion($value, $version) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\Multi::getNetworkIpAddresses() + * @param string $initial + * @param string $expected + * @param int $cidr + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(MultiDataProvider::class, 'getNetworkIpAddresses')] public function testNetworkIp($initial, $expected, $cidr) { $ip = IP::factory($initial); @@ -173,7 +251,13 @@ public function testNetworkIp($initial, $expected, $cidr) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\Multi::getBroadcastIpAddresses() + * @param string $initial + * @param string $expected + * @param int $cidr + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(MultiDataProvider::class, 'getBroadcastIpAddresses')] public function testBroadcastIp($initial, $expected, $cidr) { $ip = IP::factory($initial); @@ -183,7 +267,13 @@ public function testBroadcastIp($initial, $expected, $cidr) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\Multi::getValidInRangeIpAddresses() + * @param string $first + * @param string $second + * @param int $cidr + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(MultiDataProvider::class, 'getValidInRangeIpAddresses')] public function testInRange($first, $second, $cidr) { $first = IP::factory($first); @@ -191,7 +281,11 @@ public function testInRange($first, $second, $cidr) $this->assertTrue($first->inRange($second, $cidr)); } - /** @test */ + /** + * @test + * @return void + */ + #[PHPUnit\Test] public function testDifferentVersionsAreInRange() { $first = IP::factory('127.0.0.1', new Strategy\Mapped); @@ -199,7 +293,11 @@ public function testDifferentVersionsAreInRange() $this->assertTrue($first->inRange($second, 0)); } - /** @test */ + /** + * @test + * @return void + */ + #[PHPUnit\Test] public function testDifferentByteLengthsAreNotInRange() { $first = IP::factory('127.0.0.1'); @@ -211,7 +309,13 @@ public function testDifferentByteLengthsAreNotInRange() /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\Multi::getCommonCidrValues() + * @param string $first + * @param string $second + * @param int $expectedCidr + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(MultiDataProvider::class, 'getCommonCidrValues')] public function testCommonCidr($first, $second, $expectedCidr) { $first = IP::factory($first); @@ -219,7 +323,11 @@ public function testCommonCidr($first, $second, $expectedCidr) $this->assertSame($expectedCidr, $first->getCommonCidr($second)); } - /** @test */ + /** + * @test + * @return void + */ + #[PHPUnit\Test] public function testCommonCidrThrowsException() { $first = IP::factory('12.34.56.78'); @@ -231,7 +339,12 @@ public function testCommonCidrThrowsException() /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\Multi::getLinkLocalIpAddresses() + * @param string $value + * @param bool $isLinkLocal + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(MultiDataProvider::class, 'getLinkLocalIpAddresses')] public function testIsLinkLocal($value, $isLinkLocal) { $ip = IP::factory($value); @@ -241,7 +354,12 @@ public function testIsLinkLocal($value, $isLinkLocal) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\Multi::getMappedLoopbackIpAddresses() + * @param string $value + * @param bool $isLoopback + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(MultiDataProvider::class, 'getMappedLoopbackIpAddresses')] public function testIsLoopbackMapped($value, $isLoopback) { $ip = IP::factory($value, new Strategy\Mapped); @@ -251,7 +369,12 @@ public function testIsLoopbackMapped($value, $isLoopback) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\Multi::getCompatibleLoopbackIpAddresses() + * @param string $value + * @param bool $isLoopback + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(MultiDataProvider::class, 'getCompatibleLoopbackIpAddresses')] public function testIsLoopbackCompatible($value, $isLoopback) { $ip = IP::factory($value, new Strategy\Compatible); @@ -268,7 +391,12 @@ public function testIsLoopbackCompatible($value, $isLoopback) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\Multi::getDerivedLoopbackIpAddresses() + * @param string $value + * @param bool $isLoopback + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(MultiDataProvider::class, 'getDerivedLoopbackIpAddresses')] public function testIsLoopbackDerived($value, $isLoopback) { $ip = IP::factory($value, new Strategy\Derived); @@ -278,7 +406,12 @@ public function testIsLoopbackDerived($value, $isLoopback) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\Multi::getMulticastIpAddresses() + * @param string $value + * @param bool $isMulticast + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(MultiDataProvider::class, 'getMulticastIpAddresses')] public function testIsMulticast($value, $isMulticast) { $ip = IP::factory($value); @@ -289,7 +422,12 @@ public function testIsMulticast($value, $isMulticast) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\Multi::getPrivateUseIpAddresses() + * @param string $value + * @param bool $isPrivateUse + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(MultiDataProvider::class, 'getPrivateUseIpAddresses')] public function testIsPrivateUse($value, $isPrivateUse) { $ip = IP::factory($value); @@ -299,7 +437,12 @@ public function testIsPrivateUse($value, $isPrivateUse) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\Multi::getUnspecifiedIpAddresses() + * @param string $value + * @param bool $isUnspecified + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(MultiDataProvider::class, 'getUnspecifiedIpAddresses')] public function testIsUnspecified($value, $isUnspecified) { $ip = IP::factory($value); @@ -309,7 +452,12 @@ public function testIsUnspecified($value, $isUnspecified) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\Multi::getBenchmarkingIpAddresses() + * @param string $value + * @param bool $isBenchmarking + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(MultiDataProvider::class, 'getBenchmarkingIpAddresses')] public function testIsBenchmarking($value, $isBenchmarking) { $ip = IP::factory($value); @@ -319,7 +467,12 @@ public function testIsBenchmarking($value, $isBenchmarking) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\Multi::getDocumentationIpAddresses() + * @param string $value + * @param bool $isDocumentation + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(MultiDataProvider::class, 'getDocumentationIpAddresses')] public function testIsDocumentation($value, $isDocumentation) { $ip = IP::factory($value); @@ -329,7 +482,12 @@ public function testIsDocumentation($value, $isDocumentation) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\Multi::getPublicUseIpAddresses() + * @param string $value + * @param bool $isPublicUse + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(MultiDataProvider::class, 'getPublicUseIpAddresses')] public function testIsPublicUse($value, $isPublicUse) { $ip = IP::factory($value, new Strategy\Mapped); @@ -339,7 +497,13 @@ public function testIsPublicUse($value, $isPublicUse) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\Multi::getUniqueLocalIpAddresses() + * @param string $value + * @param bool $isUniqueLocal + * @param bool $willThrowException + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(MultiDataProvider::class, 'getUniqueLocalIpAddresses')] public function testIsUniqueLocal($value, $isUniqueLocal, $willThrowException) { $ip = IP::factory($value, new Strategy\Mapped); @@ -350,7 +514,13 @@ public function testIsUniqueLocal($value, $isUniqueLocal, $willThrowException) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\Multi::getUnicastIpAddresses() + * @param string $value + * @param bool $isUnicast + * @param bool $willThrowException + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(MultiDataProvider::class, 'getUnicastIpAddresses')] public function testIsUnicast($value, $isUnicast, $willThrowException) { $ip = IP::factory($value, new Strategy\Mapped); @@ -361,7 +531,13 @@ public function testIsUnicast($value, $isUnicast, $willThrowException) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\Multi::getUnicastGlobalIpAddresses() + * @param string $value + * @param bool $isUnicastGlobal + * @param bool $willThrowException + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(MultiDataProvider::class, 'getUnicastGlobalIpAddresses')] public function testIsUnicastGlobal($value, $isUnicastGlobal, $willThrowException) { $ip = IP::factory($value, new Strategy\Mapped); @@ -372,7 +548,13 @@ public function testIsUnicastGlobal($value, $isUnicastGlobal, $willThrowExceptio /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\Multi::getIsBroadcastIpAddresses() + * @param string $value + * @param bool $isBroadcast + * @param bool $willThrowException + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(MultiDataProvider::class, 'getIsBroadcastIpAddresses')] public function testIsBroadcast($value, $isBroadcast, $willThrowException) { $ip = IP::factory($value); @@ -383,7 +565,13 @@ public function testIsBroadcast($value, $isBroadcast, $willThrowException) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\Multi::getSharedIpAddresses() + * @param string $value + * @param bool $isShared + * @param bool $willThrowException + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(MultiDataProvider::class, 'getSharedIpAddresses')] public function testIsShared($value, $isShared, $willThrowException) { $ip = IP::factory($value); @@ -394,7 +582,13 @@ public function testIsShared($value, $isShared, $willThrowException) /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\Multi::getFutureReservedIpAddresses() + * @param string $value + * @param bool $isFutureReserved + * @param bool $willThrowException + * @return void */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(MultiDataProvider::class, 'getFutureReservedIpAddresses')] public function testIsFutureReserved($value, $isFutureReserved, $willThrowException) { $ip = IP::factory($value); @@ -405,7 +599,15 @@ public function testIsFutureReserved($value, $isFutureReserved, $willThrowExcept /** * @test * @dataProvider \Darsyn\IP\Tests\DataProvider\Multi::getValidIpAddresses() - */ + * @param string $value + * @param string $hex + * @param string $expanded + * @param string $compacted + * @param string|null $dot + * @return void + */ + #[PHPUnit\Test] + #[PHPUnit\DataProviderExternal(MultiDataProvider::class, 'getValidIpAddresses')] public function testStringCasting($value, $hex, $expanded, $compacted, $dot) { $ip = IP::factory($value); diff --git a/tests/bootstrap.php b/tests/bootstrap.php index 6bd50ed..07bf4dd 100644 --- a/tests/bootstrap.php +++ b/tests/bootstrap.php @@ -5,6 +5,6 @@ require_once __DIR__ . '/../vendor/autoload.php'; -if (!class_exists(TestCasePsr4::class)) { +if (!class_exists(TestCasePsr4::class) && class_exists(TestCasePsr1::class)) { class_alias(TestCasePsr1::class, TestCasePsr4::class); } diff --git a/tests/psalm.xml b/tests/psalm.xml deleted file mode 100644 index e956ae6..0000000 --- a/tests/psalm.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - -