/
home
/
sjslayjy
/
public_html
/
theweavenest
/
vendor
/
ramsey
/
uuid
/
tests
/
Rfc4122
/
Upload File
HOME
<?php declare(strict_types=1); namespace Ramsey\Uuid\Test\Rfc4122; use DateTimeImmutable; use Mockery; use Ramsey\Uuid\Codec\CodecInterface; use Ramsey\Uuid\Converter\NumberConverterInterface; use Ramsey\Uuid\Converter\TimeConverterInterface; use Ramsey\Uuid\Exception\DateTimeException; use Ramsey\Uuid\Exception\InvalidArgumentException; use Ramsey\Uuid\Rfc4122\FieldsInterface; use Ramsey\Uuid\Rfc4122\UuidV1; use Ramsey\Uuid\Test\TestCase; use Ramsey\Uuid\Type\Hexadecimal; use Ramsey\Uuid\Type\Time; use Ramsey\Uuid\Uuid; class UuidV1Test extends TestCase { /** * @dataProvider provideTestVersions */ public function testConstructorThrowsExceptionWhenFieldsAreNotValidForType(int $version): void { $fields = Mockery::mock(FieldsInterface::class, [ 'getVersion' => $version, ]); $numberConverter = Mockery::mock(NumberConverterInterface::class); $codec = Mockery::mock(CodecInterface::class); $timeConverter = Mockery::mock(TimeConverterInterface::class); $this->expectException(InvalidArgumentException::class); $this->expectExceptionMessage( 'Fields used to create a UuidV1 must represent a ' . 'version 1 (time-based) UUID' ); new UuidV1($fields, $numberConverter, $codec, $timeConverter); } /** * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingTraversableTypeHintSpecification */ public function provideTestVersions(): array { return [ ['version' => 0], ['version' => 2], ['version' => 3], ['version' => 4], ['version' => 5], ['version' => 6], ['version' => 7], ['version' => 8], ['version' => 9], ]; } /** * @param non-empty-string $uuid * * @dataProvider provideUuidV1WithOddMicroseconds */ public function testGetDateTimeProperlyHandlesLongMicroseconds(string $uuid, string $expected): void { /** @var UuidV1 $object */ $object = Uuid::fromString($uuid); $date = $object->getDateTime(); $this->assertInstanceOf(DateTimeImmutable::class, $date); $this->assertSame($expected, $date->format('U.u')); } /** * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingTraversableTypeHintSpecification */ public function provideUuidV1WithOddMicroseconds(): array { return [ [ 'uuid' => '14814000-1dd2-11b2-9669-00007ffffffe', 'expected' => '1.677722', ], [ 'uuid' => '13714000-1dd2-11b2-9669-00007ffffffe', 'expected' => '0.104858', ], [ 'uuid' => '13713000-1dd2-11b2-9669-00007ffffffe', 'expected' => '0.105267', ], [ 'uuid' => '12e8a980-1dd2-11b2-8d4f-acde48001122', 'expected' => '-1.000000', ], ]; } public function testGetDateTimeThrowsException(): void { $fields = Mockery::mock(FieldsInterface::class, [ 'getVersion' => 1, 'getTimestamp' => new Hexadecimal('0'), ]); $numberConverter = Mockery::mock(NumberConverterInterface::class); $codec = Mockery::mock(CodecInterface::class); $timeConverter = Mockery::mock(TimeConverterInterface::class, [ 'convertTime' => new Time('0', '1234567'), ]); $uuid = new UuidV1($fields, $numberConverter, $codec, $timeConverter); $this->expectException(DateTimeException::class); $uuid->getDateTime(); } }