diff --git a/CHANGELOG.md b/CHANGELOG.md
index 56b10c6b..72848ac6 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -11,6 +11,7 @@ For a full diff see [`2.3.2...main`][2.3.2...main].
### Changed
- Extracted `Duration` ([#351]), by [@localheinz]
+- Merged `MaximumDuration` into `Duration` ([#352]), by [@localheinz]
### Fixed
@@ -174,5 +175,6 @@ For a full diff see [`7afa59c...1.0.0`][7afa59c...1.0.0].
[#343]: https://github.com/ergebnis/phpunit-slow-test-detector/pull/343
[#350]: https://github.com/ergebnis/phpunit-slow-test-detector/pull/350
[#351]: https://github.com/ergebnis/phpunit-slow-test-detector/pull/351
+[#352]: https://github.com/ergebnis/phpunit-slow-test-detector/pull/352
[@localheinz]: https://github.com/localheinz
diff --git a/psalm-baseline.xml b/psalm-baseline.xml
index 81881ebb..3c62e3e1 100644
--- a/psalm-baseline.xml
+++ b/psalm-baseline.xml
@@ -71,14 +71,14 @@
provideMillisecondsGreaterThanDefaultMaximumDuration
-
+
- provideDurationAndFormattedDuration
+ provideMillisecondsSecondsAndNanoseconds
-
+
- provideMillisecondsAndDuration
+ provideDurationAndFormattedDuration
diff --git a/src/Duration.php b/src/Duration.php
index a7460f6d..6ef6bd6d 100644
--- a/src/Duration.php
+++ b/src/Duration.php
@@ -50,6 +50,28 @@ public static function fromSecondsAndNanoseconds(
);
}
+ /**
+ * @throws Exception\InvalidMilliseconds
+ */
+ public static function fromMilliseconds(int $milliseconds): self
+ {
+ if (0 >= $milliseconds) {
+ throw Exception\InvalidMilliseconds::notGreaterThanZero($milliseconds);
+ }
+
+ $seconds = \intdiv(
+ $milliseconds,
+ 1_000,
+ );
+
+ $nanoseconds = ($milliseconds - $seconds * 1_000) * 1_000_000;
+
+ return new self(
+ $seconds,
+ $nanoseconds,
+ );
+ }
+
public function seconds(): int
{
return $this->seconds;
diff --git a/src/Extension.php b/src/Extension.php
index 9e125929..6fc36fbb 100644
--- a/src/Extension.php
+++ b/src/Extension.php
@@ -33,10 +33,10 @@ public function bootstrap(
$maximumCount = MaximumCount::fromInt((int) $parameters->get('maximum-count'));
}
- $maximumDuration = MaximumDuration::fromMilliseconds(500);
+ $maximumDuration = Duration::fromMilliseconds(500);
if ($parameters->has('maximum-duration')) {
- $maximumDuration = MaximumDuration::fromMilliseconds((int) $parameters->get('maximum-duration'));
+ $maximumDuration = Duration::fromMilliseconds((int) $parameters->get('maximum-duration'));
}
$collector = new Collector\DefaultCollector();
diff --git a/src/MaximumDuration.php b/src/MaximumDuration.php
deleted file mode 100644
index bfd94fdf..00000000
--- a/src/MaximumDuration.php
+++ /dev/null
@@ -1,66 +0,0 @@
-= $seconds) {
- throw Exception\InvalidSeconds::notGreaterThanZero($seconds);
- }
-
- return new self(Duration::fromSecondsAndNanoseconds(
- $seconds,
- 0,
- ));
- }
-
- /**
- * @throws Exception\InvalidMilliseconds
- */
- public static function fromMilliseconds(int $milliseconds): self
- {
- if (0 >= $milliseconds) {
- throw Exception\InvalidMilliseconds::notGreaterThanZero($milliseconds);
- }
-
- $seconds = \intdiv(
- $milliseconds,
- 1_000,
- );
-
- $nanoseconds = ($milliseconds - $seconds * 1_000) * 1_000_000;
-
- return new self(Duration::fromSecondsAndNanoseconds(
- $seconds,
- $nanoseconds,
- ));
- }
-
- public function toDuration(): Duration
- {
- return $this->duration;
- }
-}
diff --git a/src/Reporter/DefaultReporter.php b/src/Reporter/DefaultReporter.php
index 833c3c2f..34d41e38 100644
--- a/src/Reporter/DefaultReporter.php
+++ b/src/Reporter/DefaultReporter.php
@@ -17,7 +17,6 @@
use Ergebnis\PHPUnit\SlowTestDetector\Duration;
use Ergebnis\PHPUnit\SlowTestDetector\Formatter;
use Ergebnis\PHPUnit\SlowTestDetector\MaximumCount;
-use Ergebnis\PHPUnit\SlowTestDetector\MaximumDuration;
use Ergebnis\PHPUnit\SlowTestDetector\SlowTest;
/**
@@ -29,7 +28,7 @@ final class DefaultReporter implements Reporter
public function __construct(
private readonly Formatter\DurationFormatter $durationFormatter,
- private readonly MaximumDuration $maximumDuration,
+ private readonly Duration $maximumDuration,
private readonly MaximumCount $maximumCount,
) {
$this->durationComparator = new Comparator\DurationComparator();
@@ -105,7 +104,7 @@ static function (Duration $maximumDuration, SlowTest $slowTest): Duration {
return $maximumDuration;
},
- $this->maximumDuration->toDuration(),
+ $this->maximumDuration,
);
$durationFormatter = $this->durationFormatter;
diff --git a/src/Subscriber/TestPassedSubscriber.php b/src/Subscriber/TestPassedSubscriber.php
index 28ad3db7..9049b39e 100644
--- a/src/Subscriber/TestPassedSubscriber.php
+++ b/src/Subscriber/TestPassedSubscriber.php
@@ -15,7 +15,6 @@
use Ergebnis\PHPUnit\SlowTestDetector\Collector;
use Ergebnis\PHPUnit\SlowTestDetector\Duration;
-use Ergebnis\PHPUnit\SlowTestDetector\MaximumDuration;
use Ergebnis\PHPUnit\SlowTestDetector\SlowTest;
use Ergebnis\PHPUnit\SlowTestDetector\TimeKeeper;
use PHPUnit\Event;
@@ -27,7 +26,7 @@
final class TestPassedSubscriber implements Event\Test\PassedSubscriber
{
public function __construct(
- private readonly MaximumDuration $maximumDuration,
+ private readonly Duration $maximumDuration,
private readonly TimeKeeper $timeKeeper,
private readonly Collector\Collector $collector,
) {
@@ -85,9 +84,9 @@ private function resolveMaximumDuration(Event\Code\Test $test): Duration
continue;
}
- return MaximumDuration::fromMilliseconds((int) $maximumDuration)->toDuration();
+ return Duration::fromMilliseconds((int) $maximumDuration);
}
- return $this->maximumDuration->toDuration();
+ return $this->maximumDuration;
}
}
diff --git a/test/Unit/DurationTest.php b/test/Unit/DurationTest.php
index 3e760c2c..af10e7d6 100644
--- a/test/Unit/DurationTest.php
+++ b/test/Unit/DurationTest.php
@@ -80,6 +80,60 @@ public function testFromSecondsAndNanosecondsReturnsDuration(): void
self::assertSame($nanoseconds, $duration->nanoseconds());
}
+ #[Framework\Attributes\DataProviderExternal(DataProvider\IntProvider::class, 'lessThanZero')]
+ #[Framework\Attributes\DataProviderExternal(DataProvider\IntProvider::class, 'zero')]
+ public function testFromMillisecondsRejectsInvalidValue(int $milliseconds): void
+ {
+ $this->expectException(Exception\InvalidMilliseconds::class);
+
+ Duration::fromMilliseconds($milliseconds);
+ }
+
+ #[Framework\Attributes\DataProvider('provideMillisecondsSecondsAndNanoseconds')]
+ public function testFromMillisecondsReturnsDuration(
+ int $milliseconds,
+ int $seconds,
+ int $nanoseconds,
+ ): void {
+ $duration = Duration::fromMilliseconds($milliseconds);
+
+ self::assertSame($seconds, $duration->seconds());
+ self::assertSame($nanoseconds, $duration->nanoseconds());
+ }
+
+ /**
+ * @return \Generator
+ */
+ public static function provideMillisecondsSecondsAndNanoseconds(): \Generator
+ {
+ $values = [
+ 1 => [
+ 0,
+ 1_000_000,
+ ],
+ 999 => [
+ 0,
+ 999_000_000,
+ ],
+ 1_000 => [
+ 1,
+ 0,
+ ],
+ 1_234 => [
+ 1,
+ 234_000_000,
+ ],
+ ];
+
+ foreach ($values as $milliseconds => [$seconds, $nanoseconds]) {
+ yield $milliseconds => [
+ $milliseconds,
+ $seconds,
+ $nanoseconds,
+ ];
+ }
+ }
+
public function testIsLessThanReturnsFalseWhenSecondsAreGreater(): void
{
$one = Duration::fromSecondsAndNanoseconds(123, 456);
diff --git a/test/Unit/MaximumDurationTest.php b/test/Unit/MaximumDurationTest.php
deleted file mode 100644
index 41f82a23..00000000
--- a/test/Unit/MaximumDurationTest.php
+++ /dev/null
@@ -1,89 +0,0 @@
-expectException(Exception\InvalidMilliseconds::class);
-
- MaximumDuration::fromMilliseconds($milliseconds);
- }
-
- #[Framework\Attributes\DataProvider('provideMillisecondsAndDuration')]
- public function testFromMillisecondsReturnsMaximumDuration(
- int $milliseconds,
- Duration $duration,
- ): void {
- $maximumDuration = MaximumDuration::fromMilliseconds($milliseconds);
-
- self::assertEquals($duration, $maximumDuration->toDuration());
- }
-
- /**
- * @return \Generator
- */
- public static function provideMillisecondsAndDuration(): \Generator
- {
- $values = [
- 1 => Duration::fromSecondsAndNanoseconds(0, 1_000_000),
- 999 => Duration::fromSecondsAndNanoseconds(0, 999_000_000),
- 1_000 => Duration::fromSecondsAndNanoseconds(1, 0),
- 1_234 => Duration::fromSecondsAndNanoseconds(1, 234_000_000),
- ];
-
- foreach ($values as $milliseconds => $duration) {
- yield $milliseconds => [
- $milliseconds,
- $duration,
- ];
- }
- }
-
- #[Framework\Attributes\DataProviderExternal(DataProvider\IntProvider::class, 'lessThanZero')]
- #[Framework\Attributes\DataProviderExternal(DataProvider\IntProvider::class, 'zero')]
- public function testFromSecondsRejectsInvalidValue(int $seconds): void
- {
- $this->expectException(Exception\InvalidSeconds::class);
-
- MaximumDuration::fromSeconds($seconds);
- }
-
- #[Framework\Attributes\DataProviderExternal(DataProvider\IntProvider::class, 'greaterThanZero')]
- public function testFromSecondsReturnsMaximumDuration(int $seconds): void
- {
- $maximumDuration = MaximumDuration::fromSeconds($seconds);
-
- $expected = Duration::fromSecondsAndNanoseconds(
- $seconds,
- 0,
- );
-
- self::assertEquals($expected, $maximumDuration->toDuration());
- }
-}