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

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions src/Contracts/Factory4Interface.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,11 @@ interface Factory4Interface extends FactoryInterface
* @return static
*/
public static function fromInteger(int $integer);

/**
* Create a New IP From an Integer, or Null on Failure
*
* @return static|null
*/
public static function tryFromInteger(int $integer);
}
8 changes: 8 additions & 0 deletions src/Contracts/FactoryInterface.php
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,14 @@ public static function tryFromHex(string $hex);
*/
public static function fromIntegerString(string $integer);

/**
* Create a New IP From an Integer Represented as a Decimal String, or
* Null on Failure
*
* @return static|null
*/
public static function tryFromIntegerString(string $integer);

/** Whether the supplied string is valid IP protocol notation. */
public static function isValid(string $ip): bool;
}
18 changes: 18 additions & 0 deletions src/Version/IPv4.php
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,15 @@ public static function fromInteger(int $integer)
);
}

public static function tryFromInteger(int $integer)
{
try {
return static::fromInteger($integer);
} catch (Exception\InvalidIpAddressException $e) {
return null;
}
}

public static function fromIntegerString(string $integer)
{
try {
Expand All @@ -137,6 +146,15 @@ public static function fromIntegerString(string $integer)
return static::fromBinary($binary);
}

public static function tryFromIntegerString(string $integer)
{
try {
return static::fromIntegerString($integer);
} catch (Exception\InvalidIpAddressException $e) {
return null;
}
}

public static function isValid(string $ip): bool
{
return null !== static::tryFromProtocol($ip);
Expand Down
9 changes: 9 additions & 0 deletions src/Version/IPv6.php
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,15 @@ public static function fromIntegerString(string $integer)
return static::fromBinary($binary);
}

public static function tryFromIntegerString(string $integer)
{
try {
return static::fromIntegerString($integer);
} catch (Exception\InvalidIpAddressException $e) {
return null;
}
}

public static function isValid(string $ip): bool
{
return null !== static::tryFromProtocol($ip);
Expand Down
18 changes: 18 additions & 0 deletions src/Version/Multi.php
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,15 @@ public static function fromInteger(int $integer, ?EmbeddingStrategyInterface $st
return static::fromBinary(IPv4::fromInteger($integer)->getBinary(), $strategy);
}

public static function tryFromInteger(int $integer, ?EmbeddingStrategyInterface $strategy = null)
{
try {
return static::fromInteger($integer, $strategy);
} catch (Exception\InvalidIpAddressException $e) {
return null;
}
}

public static function fromIntegerString(string $integer, ?EmbeddingStrategyInterface $strategy = null)
{
try {
Expand All @@ -183,6 +192,15 @@ public static function fromIntegerString(string $integer, ?EmbeddingStrategyInte
return static::fromBinary($binary, $strategy);
}

public static function tryFromIntegerString(string $integer, ?EmbeddingStrategyInterface $strategy = null)
{
try {
return static::fromIntegerString($integer, $strategy);
} catch (Exception\InvalidIpAddressException $e) {
return null;
}
}

public static function isValid(string $ip, ?EmbeddingStrategyInterface $strategy = null): bool
{
return null !== static::tryFromProtocol($ip, $strategy);
Expand Down
44 changes: 44 additions & 0 deletions tests/Version/IPv4Test.php
Original file line number Diff line number Diff line change
Expand Up @@ -902,6 +902,28 @@ public function testFromIntegerThrowsOnOutOfRange(int $integer): void
$this->fail();
}

/**
* @test
* @dataProvider \Darsyn\IP\Tests\DataProvider\IPv4::getIntegerAddresses()
*/
#[PHPUnit\Test]
#[PHPUnit\DataProviderExternal(IPv4DataProvider::class, 'getIntegerAddresses')]
public function testTryFromIntegerReturnsInstanceForValid(string $value, int $integer): void
{
$this->assertInstanceOf(Version4Interface::class, IP::tryFromInteger($integer));
}

/**
* @test
* @dataProvider \Darsyn\IP\Tests\DataProvider\IPv4::getInvalidIntegers()
*/
#[PHPUnit\Test]
#[PHPUnit\DataProviderExternal(IPv4DataProvider::class, 'getInvalidIntegers')]
public function testTryFromIntegerReturnsNullForOutOfRange(int $integer): void
{
$this->assertNull(IP::tryFromInteger($integer));
}

/**
* @test
* @dataProvider \Darsyn\IP\Tests\DataProvider\IPv4::getIntegerStringData()
Expand Down Expand Up @@ -955,6 +977,28 @@ public function testFromIntegerStringThrowsOnInvalidInput(string $value): void
$this->fail();
}

/**
* @test
* @dataProvider \Darsyn\IP\Tests\DataProvider\IPv4::getIntegerStringData()
*/
#[PHPUnit\Test]
#[PHPUnit\DataProviderExternal(IPv4DataProvider::class, 'getIntegerStringData')]
public function testTryFromIntegerStringReturnsInstanceForValid(string $value, string $decimal): void
{
$this->assertInstanceOf(Version4Interface::class, IP::tryFromIntegerString($decimal));
}

/**
* @test
* @dataProvider \Darsyn\IP\Tests\DataProvider\IPv4::getInvalidIntegerStrings()
*/
#[PHPUnit\Test]
#[PHPUnit\DataProviderExternal(IPv4DataProvider::class, 'getInvalidIntegerStrings')]
public function testTryFromIntegerStringReturnsNullForInvalid(string $value): void
{
$this->assertNull(IP::tryFromIntegerString($value));
}

/**
* @test
* @dataProvider \Darsyn\IP\Tests\DataProvider\IPv4::getHexStringData()
Expand Down
22 changes: 22 additions & 0 deletions tests/Version/IPv6Test.php
Original file line number Diff line number Diff line change
Expand Up @@ -971,6 +971,28 @@ public function testFromIntegerStringThrowsOnInvalidInput(string $value): void
$this->fail();
}

/**
* @test
* @dataProvider \Darsyn\IP\Tests\DataProvider\IPv6::getValidBinarySequences()
*/
#[PHPUnit\Test]
#[PHPUnit\DataProviderExternal(IPv6DataProvider::class, 'getValidBinarySequences')]
public function testTryFromIntegerStringReturnsInstanceForValid(string $value, string $hex, string $expanded, string $compacted): void
{
$this->assertInstanceOf(Version6Interface::class, IP::tryFromIntegerString(Binary::toDecimalString($value)));
}

/**
* @test
* @dataProvider \Darsyn\IP\Tests\DataProvider\IPv6::getInvalidIntegerStrings()
*/
#[PHPUnit\Test]
#[PHPUnit\DataProviderExternal(IPv6DataProvider::class, 'getInvalidIntegerStrings')]
public function testTryFromIntegerStringReturnsNullForInvalid(string $value): void
{
$this->assertNull(IP::tryFromIntegerString($value));
}

/**
* @test
* @dataProvider \Darsyn\IP\Tests\DataProvider\IPv6::getValidBinarySequences()
Expand Down
40 changes: 40 additions & 0 deletions tests/Version/MultiTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -1034,6 +1034,24 @@ public function testFromIntegerThrowsOnOutOfRange(int $integer): void
IP::fromInteger($integer);
}

/** @test */
#[PHPUnit\Test]
public function testTryFromIntegerReturnsInstanceForValid(): void
{
$this->assertInstanceOf(MultiVersionInterface::class, IP::tryFromInteger(203569230));
}

/**
* @test
* @dataProvider \Darsyn\IP\Tests\DataProvider\IPv4::getInvalidIntegers()
*/
#[PHPUnit\Test]
#[PHPUnit\DataProviderExternal(IPv4DataProvider::class, 'getInvalidIntegers')]
public function testTryFromIntegerReturnsNullForOutOfRange(int $integer): void
{
$this->assertNull(IP::tryFromInteger($integer));
}

/** @test */
#[PHPUnit\Test]
public function testToHexStringReturnsFullWidthWhenEmbedded(): void
Expand Down Expand Up @@ -1083,6 +1101,28 @@ public function testFromIntegerStringThrowsOnInvalidInput(string $value): void
IP::fromIntegerString($value);
}

/**
* @test
* @dataProvider \Darsyn\IP\Tests\DataProvider\Multi::getValidBinarySequences()
*/
#[PHPUnit\Test]
#[PHPUnit\DataProviderExternal(MultiDataProvider::class, 'getValidBinarySequences')]
public function testTryFromIntegerStringReturnsInstanceForValid(string $value, string $hex, string $expanded, string $compacted, ?string $dot): void
{
$this->assertInstanceOf(MultiVersionInterface::class, IP::tryFromIntegerString(Binary::toDecimalString($value)));
}

/**
* @test
* @dataProvider \Darsyn\IP\Tests\DataProvider\IPv6::getInvalidIntegerStrings()
*/
#[PHPUnit\Test]
#[PHPUnit\DataProviderExternal(IPv6DataProvider::class, 'getInvalidIntegerStrings')]
public function testTryFromIntegerStringReturnsNullForInvalid(string $value): void
{
$this->assertNull(IP::tryFromIntegerString($value));
}

/**
* @test
* @dataProvider \Darsyn\IP\Tests\DataProvider\Multi::getValidProtocolIpVersion4Addresses()
Expand Down