diff --git a/composer.json b/composer.json index 7d0d25b..60a70ac 100644 --- a/composer.json +++ b/composer.json @@ -19,7 +19,7 @@ "phpstan/phpstan": "^2.1", "phpstan/phpstan-phpunit": "^2.0", "phpstan/phpstan-strict-rules": "^2.0", - "phpunit/phpunit": "^9.6.20" + "phpunit/phpunit": "^12.5" }, "autoload": { "psr-4": { diff --git a/phpunit.xml.dist b/phpunit.xml.dist index 7d2165d..df633fd 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -1,9 +1,9 @@ - + @@ -12,10 +12,10 @@ - + - src/Clock + src - + diff --git a/tests/FrozenClockTest.php b/tests/FrozenClockTest.php index 7fdca08..e94212b 100644 --- a/tests/FrozenClockTest.php +++ b/tests/FrozenClockTest.php @@ -6,21 +6,18 @@ namespace Beste\Clock\Tests; use Beste\Clock\FrozenClock; use DateTimeImmutable; +use PHPUnit\Framework\Attributes\CoversClass; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use Psr\Clock\ClockInterface; /** * @internal - * @coversDefaultClass \Beste\Clock\FrozenClock */ +#[CoversClass(FrozenClock::class)] final class FrozenClockTest extends TestCase { - /** - * @test - * @covers ::__construct - * @covers ::at - * @covers ::now - */ + #[Test] public function itFreezesTime(): void { $now = new DateTimeImmutable('2021-03-21 22:16:00'); @@ -29,14 +26,7 @@ final class FrozenClockTest extends TestCase self::assertEquals($now, $clock->now()); } - /** - * @test - * - * @uses ::__construct - * @uses ::fromUTC - * - * @covers ::now - */ + #[Test] public function itReturnsAnEqualNowButNotTheSame(): void { $clock = FrozenClock::fromUTC(); @@ -48,14 +38,7 @@ final class FrozenClockTest extends TestCase self::assertNotSame($first, $second); } - /** - * @test - * - * @uses ::__construct - * @uses ::now - * - * @covers ::withNowFrom - */ + #[Test] public function itFreezesTimeFromAnotherClock(): void { $now = new DateTimeImmutable('now'); @@ -71,14 +54,7 @@ final class FrozenClockTest extends TestCase self::assertEquals($now, $frozenClock->now()); } - /** - * @test - * - * @uses ::__construct - * @uses ::now - * - * @covers ::fromUTC - */ + #[Test] public function itFreezesTheCurrentUTCTime(): void { $clock = FrozenClock::fromUTC(); @@ -87,15 +63,7 @@ final class FrozenClockTest extends TestCase self::assertEquals($clock->now(), $clock->now()); } - /** - * @test - * - * @uses ::__construct - * @uses ::at - * @uses ::now - * - * @covers ::setTo - */ + #[Test] public function itCanBeSet(): void { $now = new DateTimeImmutable('2021-03-21 18:18:18'); diff --git a/tests/LocalizedClockTest.php b/tests/LocalizedClockTest.php index 6e394be..1e02987 100644 --- a/tests/LocalizedClockTest.php +++ b/tests/LocalizedClockTest.php @@ -7,18 +7,17 @@ namespace Beste\Clock\Tests; use Beste\Clock\LocalizedClock; use DateTimeZone; use InvalidArgumentException; +use PHPUnit\Framework\Attributes\CoversClass; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; /** * @internal - * @coversDefaultClass \Beste\Clock\LocalizedClock */ +#[CoversClass(LocalizedClock::class)] final class LocalizedClockTest extends TestCase { - /** - * @test - * @covers ::in - */ + #[Test] public function itRejectsAnInvalidTimeZone(): void { $this->expectException(InvalidArgumentException::class); @@ -26,12 +25,7 @@ final class LocalizedClockTest extends TestCase LocalizedClock::in('invalid'); } - /** - * @test - * @covers ::__construct - * @covers ::in - * @covers ::now - */ + #[Test] public function itUsesTheGivenTimeZone(): void { $timeZone = new DateTimeZone('Asia/Bangkok'); @@ -41,12 +35,7 @@ final class LocalizedClockTest extends TestCase self::assertSame($timeZone->getName(), $now->getTimezone()->getName()); } - /** - * @test - * @covers ::__construct - * @covers ::in - * @covers ::now - */ + #[Test] public function itAcceptsTheTimeZoneAsAString(): void { $timeZone = 'Pacific/Guam'; diff --git a/tests/MinuteClockTest.php b/tests/MinuteClockTest.php index 729c0ac..d266e61 100644 --- a/tests/MinuteClockTest.php +++ b/tests/MinuteClockTest.php @@ -6,30 +6,23 @@ namespace Beste\Clock\Tests; use Beste\Clock\MinuteClock; use DateTimeImmutable; +use PHPUnit\Framework\Attributes\CoversClass; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use Psr\Clock\ClockInterface; /** * @internal - * @coversDefaultClass \Beste\Clock\MinuteClock */ +#[CoversClass(MinuteClock::class)] final class MinuteClockTest extends TestCase { - /** - * @test - * - * @covers ::__construct - * @covers ::wrapping - * @covers ::now - * @covers ::floor - * - * @uses \Beste\Clock\FrozenClock - * - * @dataProvider dateTimeStringProvider - */ + #[Test] + #[DataProvider('dateTimeStringProvider')] public function itDiscardsEverythingSmallerThanMinutes(string $format, string $input, string $expected): void { - $mockClock = $this->createMock(ClockInterface::class); + $mockClock = self::createStub(ClockInterface::class); $mockClock->method('now')->willReturn(new DateTimeImmutable($input)); // Just to be sure that the test input is valid ^^ @@ -43,7 +36,7 @@ final class MinuteClockTest extends TestCase /** * @return array */ - public function dateTimeStringProvider(): array + public static function dateTimeStringProvider(): array { return [ 'microseconds' => [ diff --git a/tests/SystemClockTest.php b/tests/SystemClockTest.php index f8fa9d8..334c576 100644 --- a/tests/SystemClockTest.php +++ b/tests/SystemClockTest.php @@ -5,12 +5,14 @@ declare(strict_types=1); namespace Beste\Clock\Tests; use Beste\Clock\SystemClock; +use PHPUnit\Framework\Attributes\CoversClass; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; /** * @internal - * @coversDefaultClass \Beste\Clock\SystemClock */ +#[CoversClass(SystemClock::class)] final class SystemClockTest extends TestCase { private string $defaultTimeZone; @@ -25,13 +27,7 @@ final class SystemClockTest extends TestCase date_default_timezone_set($this->defaultTimeZone); } - /** - * @test - * - * @covers ::__construct - * @covers ::create - * @covers ::now - */ + #[Test] public function itUsesTheSystemTimeZone(): void { $timeZone = 'Europe/Berlin'; diff --git a/tests/UTCClockTest.php b/tests/UTCClockTest.php index 6981907..bc7548a 100644 --- a/tests/UTCClockTest.php +++ b/tests/UTCClockTest.php @@ -5,12 +5,14 @@ declare(strict_types=1); namespace Beste\Clock\Tests; use Beste\Clock\UTCClock; +use PHPUnit\Framework\Attributes\CoversClass; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; /** * @internal - * @coversDefaultClass \Beste\Clock\UTCClock */ +#[CoversClass(UTCClock::class)] final class UTCClockTest extends TestCase { private string $defaultTimeZone; @@ -25,13 +27,7 @@ final class UTCClockTest extends TestCase date_default_timezone_set($this->defaultTimeZone); } - /** - * @test - * - * @covers ::__construct - * @covers ::create - * @covers ::now - */ + #[Test] public function itUsesUTCRegardlessOfTheSystemTimeZone(): void { date_default_timezone_set('Europe/Berlin'); diff --git a/tests/WrappingClockTest.php b/tests/WrappingClockTest.php index 442b33b..9146439 100644 --- a/tests/WrappingClockTest.php +++ b/tests/WrappingClockTest.php @@ -8,21 +8,19 @@ use Beste\Clock\FrozenClock; use Beste\Clock\WrappingClock; use DateTimeImmutable; use InvalidArgumentException; +use PHPUnit\Framework\Attributes\CoversClass; +use PHPUnit\Framework\Attributes\Test; +use PHPUnit\Framework\Attributes\UsesClass; use PHPUnit\Framework\TestCase; /** * @internal - * @coversDefaultClass \Beste\Clock\WrappingClock */ +#[CoversClass(WrappingClock::class)] +#[UsesClass(FrozenClock::class)] final class WrappingClockTest extends TestCase { - /** - * @test - * - * @covers ::__construct - * @covers ::wrapping - * @covers ::now - */ + #[Test] public function itWrapsAClockInterface(): void { $clock = FrozenClock::fromUTC(); @@ -35,11 +33,7 @@ final class WrappingClockTest extends TestCase ); } - /** - * @test - * - * @covers ::wrapping - */ + #[Test] public function itWrapsAnObjectWithANowMethod(): void { $now = FrozenClock::fromUTC()->now(); @@ -66,11 +60,7 @@ final class WrappingClockTest extends TestCase ); } - /** - * @test - * - * @covers ::wrapping - */ + #[Test] public function itRejectsObjectsWithANowMethodReturningANonDateTimeImmutable(): void { $clock = new class() {