-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathAsDateTimeZoneTest.php
More file actions
67 lines (53 loc) · 1.85 KB
/
AsDateTimeZoneTest.php
File metadata and controls
67 lines (53 loc) · 1.85 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
<?php
declare(strict_types=1);
namespace Plook\Tests\TypeGuard;
use DateTimeZone;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\CoversFunction;
use PHPUnit\Framework\TestCase;
use Plook\Tests\TypeGuard\Helper\StringableString;
use Plook\TypeGuard\NotConvertable;
use Plook\TypeGuard\TypeGuard;
use function basename;
use function Plook\TypeGuard\asDateTimeZone;
use function sprintf;
#[CoversClass(TypeGuard::class)]
#[CoversClass(NotConvertable::class)]
#[CoversFunction('Plook\TypeGuard\asDateTimeZone')]
final class AsDateTimeZoneTest extends TestCase
{
public function testConvertsStrings(): void
{
$dateTimeZone = asDateTimeZone('Europe/Berlin');
self::assertInstanceOf(DateTimeZone::class, $dateTimeZone);
self::assertSame('Europe/Berlin', $dateTimeZone->getName());
}
public function testConvertsStringables(): void
{
$dateTimeZone = asDateTimeZone(new StringableString('Australia/Adelaide'));
self::assertInstanceOf(DateTimeZone::class, $dateTimeZone);
self::assertSame('Australia/Adelaide', $dateTimeZone->getName());
}
public function testReturnsSameDateTimeZone(): void
{
$dateTimeZone = new DateTimeZone('Europe/Berlin');
$result = asDateTimeZone($dateTimeZone);
self::assertSame($dateTimeZone, $result);
}
public function testDoesNotTouchNull(): void
{
self::assertNull(asDateTimeZone(null));
}
public function testOnlyStringsAreConvertable(): void
{
$this->expectException(NotConvertable::class);
$this->expectExceptionMessageMatches(
sprintf(
'/Closure is not convertable to date time zone in %s:%s/',
basename(__FILE__),
__LINE__ + 4,
),
);
asDateTimeZone(static fn (): null => null);
}
}