mirror of
https://github.com/ramsey/uuid.git
synced 2026-06-26 17:46:38 +03:00
Add fromDateTime() to create version 1 UUIDs from DateTime instances
Fixes #28
This commit is contained in:
@@ -4,16 +4,22 @@ declare(strict_types=1);
|
||||
|
||||
namespace Ramsey\Uuid\Test;
|
||||
|
||||
use DateTime;
|
||||
use DateTimeImmutable;
|
||||
use DateTimeInterface;
|
||||
use Mockery;
|
||||
use PHPUnit\Framework\MockObject\MockObject;
|
||||
use Ramsey\Uuid\Builder\UuidBuilderInterface;
|
||||
use Ramsey\Uuid\Codec\CodecInterface;
|
||||
use Ramsey\Uuid\Converter\NumberConverterInterface;
|
||||
use Ramsey\Uuid\Converter\TimeConverterInterface;
|
||||
use Ramsey\Uuid\FeatureSet;
|
||||
use Ramsey\Uuid\Generator\DceSecurityGeneratorInterface;
|
||||
use Ramsey\Uuid\Generator\RandomGeneratorInterface;
|
||||
use Ramsey\Uuid\Generator\TimeGeneratorInterface;
|
||||
use Ramsey\Uuid\Provider\NodeProviderInterface;
|
||||
use Ramsey\Uuid\Rfc4122\UuidV1;
|
||||
use Ramsey\Uuid\Type\Hexadecimal;
|
||||
use Ramsey\Uuid\UuidFactory;
|
||||
use Ramsey\Uuid\Validator\ValidatorInterface;
|
||||
|
||||
@@ -55,6 +61,7 @@ class UuidFactoryTest extends TestCase
|
||||
$codec = Mockery::mock(CodecInterface::class);
|
||||
$nodeProvider = Mockery::mock(NodeProviderInterface::class);
|
||||
$randomGenerator = Mockery::mock(RandomGeneratorInterface::class);
|
||||
$timeConverter = Mockery::mock(TimeConverterInterface::class);
|
||||
$timeGenerator = Mockery::mock(TimeGeneratorInterface::class);
|
||||
$dceSecurityGenerator = Mockery::mock(DceSecurityGeneratorInterface::class);
|
||||
$numberConverter = Mockery::mock(NumberConverterInterface::class);
|
||||
@@ -65,6 +72,7 @@ class UuidFactoryTest extends TestCase
|
||||
'getCodec' => $codec,
|
||||
'getNodeProvider' => $nodeProvider,
|
||||
'getRandomGenerator' => $randomGenerator,
|
||||
'getTimeConverter' => $timeConverter,
|
||||
'getTimeGenerator' => $timeGenerator,
|
||||
'getDceSecurityGenerator' => $dceSecurityGenerator,
|
||||
'getNumberConverter' => $numberConverter,
|
||||
@@ -122,4 +130,75 @@ class UuidFactoryTest extends TestCase
|
||||
$uuidFactory->setUuidBuilder($uuidBuilder);
|
||||
$this->assertEquals($uuidBuilder, $uuidFactory->getUuidBuilder());
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider provideDateTime
|
||||
*/
|
||||
public function testFromDateTime(
|
||||
DateTimeInterface $dateTime,
|
||||
?Hexadecimal $node,
|
||||
?int $clockSeq,
|
||||
string $expectedUuidFormat,
|
||||
string $expectedTime
|
||||
): void {
|
||||
$factory = new UuidFactory();
|
||||
|
||||
/** @var UuidV1 $uuid */
|
||||
$uuid = $factory->fromDateTime($dateTime, $node, $clockSeq);
|
||||
|
||||
$this->assertInstanceOf(UuidV1::class, $uuid);
|
||||
$this->assertStringMatchesFormat($expectedUuidFormat, $uuid->toString());
|
||||
$this->assertSame($expectedTime, $uuid->getDateTime()->format('U.u'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingTraversableTypeHintSpecification
|
||||
*/
|
||||
public function provideDateTime(): array
|
||||
{
|
||||
return [
|
||||
[
|
||||
new DateTimeImmutable('2012-07-04 02:14:34.491000'),
|
||||
null,
|
||||
null,
|
||||
'ff6f8cb0-c57d-11e1-%s',
|
||||
'1341368074.491000',
|
||||
],
|
||||
[
|
||||
new DateTimeImmutable('1582-10-16 16:34:04'),
|
||||
new Hexadecimal('0800200c9a66'),
|
||||
15137,
|
||||
'0901e600-0154-1000-%cb21-0800200c9a66',
|
||||
'-12219146756.000000',
|
||||
],
|
||||
[
|
||||
new DateTime('5236-03-31 21:20:59.999999'),
|
||||
new Hexadecimal('00007ffffffe'),
|
||||
1641,
|
||||
'ff9785f6-ffff-1fff-%c669-00007ffffffe',
|
||||
'103072857659.999999',
|
||||
],
|
||||
[
|
||||
new DateTime('1582-10-15 00:00:00'),
|
||||
new Hexadecimal('00007ffffffe'),
|
||||
1641,
|
||||
'00000000-0000-1000-%c669-00007ffffffe',
|
||||
'-12219292800.000000',
|
||||
],
|
||||
[
|
||||
new DateTimeImmutable('@103072857660.684697'),
|
||||
new Hexadecimal('0'),
|
||||
0,
|
||||
'fffffffa-ffff-1fff-%c000-000000000000',
|
||||
'103072857660.684697',
|
||||
],
|
||||
[
|
||||
new DateTimeImmutable('5236-03-31 21:21:00.684697'),
|
||||
null,
|
||||
null,
|
||||
'fffffffa-ffff-1fff-%s',
|
||||
'103072857660.684697',
|
||||
],
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user