schneespur/vendor/league/uri-interfaces/IPv6/ConverterTest.php
Michael ee3dbba6cc Initial release v1.0.0
Schneespur — Open-source winter service documentation software (PWA + Admin).
GPS tracking via OwnTracks, weather data, photo evidence, and legally
compliant service records for winter maintenance operators.

License: AGPL-3.0-or-later
2026-05-17 13:33:51 +00:00

103 lines
3 KiB
PHP

<?php
/**
* League.Uri (https://uri.thephpleague.com)
*
* (c) Ignace Nyamagana Butera <nyamsprod@gmail.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
declare(strict_types=1);
namespace League\Uri\IPv6;
use PHPUnit\Framework\Attributes\DataProvider;
use PHPUnit\Framework\TestCase;
use ValueError;
final class ConverterTest extends TestCase
{
#[DataProvider('ipv6NormalizationUriProvider')]
public function testItCanExpandOrCompressTheHost(
string $ipv6,
string $ipv6Compressed,
string $ipv6Expanded,
): void {
self::assertSame($ipv6Compressed, Converter::compress($ipv6));
self::assertSame($ipv6Expanded, Converter::expand($ipv6));
}
public static function ipv6NormalizationUriProvider(): iterable
{
yield 'no change happen with a non IP ipv6' => [
'ipv6' => 'example.com',
'ipv6Compressed' => 'example.com',
'ipv6Expanded' => 'example.com',
];
yield 'no change happen with a IPv4 ipv6' => [
'ipv6' => '127.0.0.1',
'ipv6Compressed' => '127.0.0.1',
'ipv6Expanded' => '127.0.0.1',
];
yield 'IPv6 gets expanded if needed' => [
'ipv6' => '[fe80::a%25en1]',
'ipv6Compressed' => '[fe80::a%25en1]',
'ipv6Expanded' => '[fe80:0000:0000:0000:0000:0000:0000:000a%25en1]',
];
yield 'IPv6 gets compressed if needed' => [
'ipv6' => '[0000:0000:0000:0000:0000:0000:0000:0001]',
'ipv6Compressed' => '[::1]',
'ipv6Expanded' => '[0000:0000:0000:0000:0000:0000:0000:0001]',
];
}
#[DataProvider('invalidIpv6')]
public function testItFailsToCompressANonIpv6(string $invalidIp): void
{
$this->expectException(ValueError::class);
Converter::compressIp($invalidIp);
}
#[DataProvider('invalidIpv6')]
public function testItFailsToExpandANonIpv6(string $invalidIp): void
{
$this->expectException(ValueError::class);
Converter::expandIp($invalidIp);
}
public static function invalidIpv6(): iterable
{
yield 'hostname' => ['invalidIp' => 'example.com'];
yield 'ip future' => ['invalidIp' => '[v42.fdfsffd]'];
yield 'IPv6 with zoneIdentifier' => ['invalidIp' => 'fe80::a%25en1'];
}
#[DataProvider('providerInvalidHost')]
public function testParseWithInvalidHost(?string $input): void
{
self::assertFalse(Converter::isIpv6($input));
}
public static function providerInvalidHost(): array
{
return [
'null host' => ['input' => null],
'empty host' => ['input' => ''],
'non ip host' => ['input' => 'ulb.ac.be'],
'invalid host (0)' => ['input' => '192.168.1.1'],
'invalid host (1)' => ['input' => '[192.168.1.1]'],
'invalid host (2)' => ['input' => 'v42.fdfsffd'],
'invalid host (3)' => ['input' => '::1'],
];
}
}