From ae59d6d5a3c8e78c2391d2604cbd3108de0ff518 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20M=C3=B6ller?= Date: Tue, 26 Jan 2021 19:37:37 +0100 Subject: [PATCH] Enhancement: Add MaximumCount --- CHANGELOG.md | 2 + README.md | 4 +- ...erThanZero.php => InvalidMaximumCount.php} | 6 +-- src/MaximumCount.php | 41 ++++++++++++++++ src/Reporter/DefaultReporter.php | 21 +++----- test/Example/bootstrap.php | 6 +-- ...roTest.php => InvalidMaximumCountTest.php} | 12 ++--- test/Unit/MaximumCountTest.php | 49 +++++++++++++++++++ test/Unit/Reporter/DefaultReporterTest.php | 47 ++++++------------ 9 files changed, 127 insertions(+), 61 deletions(-) rename src/Exception/{MaximumNumberNotGreaterThanZero.php => InvalidMaximumCount.php} (67%) create mode 100644 src/MaximumCount.php rename test/Unit/Exception/{MaximumNumberNotGreaterThanZeroTest.php => InvalidMaximumCountTest.php} (59%) create mode 100644 test/Unit/MaximumCountTest.php diff --git a/CHANGELOG.md b/CHANGELOG.md index 97d6cd44..b6e7a354 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ For a full diff see [`7afa59c...main`][7afa59c...main]. * Extracted `Collector` ([#23]), by [@localheinz] * Added `Subscriber\TestSuiteFinishedSubscriber` ([#34]), by [@localheinz] * Added `MaximumDuration` ([#46]), by [@localheinz] +* Added `MaximumCount` ([#47]), by [@localheinz] ### Changed @@ -57,5 +58,6 @@ For a full diff see [`7afa59c...main`][7afa59c...main]. [#37]: https://github.com/ergebnis/phpunit-slow-test-detector/pull/37 [#38]: https://github.com/ergebnis/phpunit-slow-test-detector/pull/38 [#46]: https://github.com/ergebnis/phpunit-slow-test-detector/pull/46 +[#47]: https://github.com/ergebnis/phpunit-slow-test-detector/pull/47 [@localheinz]: https://github.com/localheinz diff --git a/README.md b/README.md index 86408d7b..79b60924 100644 --- a/README.md +++ b/README.md @@ -64,12 +64,12 @@ Event\Facade::registerSubscriber(new SlowTestDetector\Subscriber\TestPassedSubsc $collector )); -$maximumNumber = 10; +$maximumCount = SlowTestDetector\MaximumCount::fromInt(10); $reporter = new SlowTestDetector\Reporter\DefaultReporter( new SlowTestDetector\Formatter\ToMillisecondsDurationFormatter(), $maximumDuration, - $maximumNumber + $maximumCount ); Event\Facade::registerSubscriber(new SlowTestDetector\Subscriber\TestSuiteFinishedSubscriber( diff --git a/src/Exception/MaximumNumberNotGreaterThanZero.php b/src/Exception/InvalidMaximumCount.php similarity index 67% rename from src/Exception/MaximumNumberNotGreaterThanZero.php rename to src/Exception/InvalidMaximumCount.php index c5497769..62f206dd 100644 --- a/src/Exception/MaximumNumberNotGreaterThanZero.php +++ b/src/Exception/InvalidMaximumCount.php @@ -13,12 +13,12 @@ namespace Ergebnis\PHPUnit\SlowTestDetector\Exception; -final class MaximumNumberNotGreaterThanZero extends \InvalidArgumentException +final class InvalidMaximumCount extends \InvalidArgumentException { - public static function create(int $value): self + public static function notGreaterThanZero(int $value): self { return new self(\sprintf( - 'Maximum number should be greater than 0, but %d is not.', + 'Value should be greater than 0, but %d is not.', $value )); } diff --git a/src/MaximumCount.php b/src/MaximumCount.php new file mode 100644 index 00000000..f0830652 --- /dev/null +++ b/src/MaximumCount.php @@ -0,0 +1,41 @@ +value = $value; + } + + /** + * @throws Exception\InvalidMaximumCount + */ + public static function fromInt(int $value): self + { + if (0 >= $value) { + throw Exception\InvalidMaximumCount::notGreaterThanZero($value); + } + + return new self($value); + } + + public function toInt(): int + { + return $this->value; + } +} diff --git a/src/Reporter/DefaultReporter.php b/src/Reporter/DefaultReporter.php index 5ee1a46d..cf0adfe8 100644 --- a/src/Reporter/DefaultReporter.php +++ b/src/Reporter/DefaultReporter.php @@ -15,7 +15,7 @@ use Ergebnis\PHPUnit\SlowTestDetector\Comparator; use Ergebnis\PHPUnit\SlowTestDetector\Console; -use Ergebnis\PHPUnit\SlowTestDetector\Exception; +use Ergebnis\PHPUnit\SlowTestDetector\MaximumCount; use Ergebnis\PHPUnit\SlowTestDetector\MaximumDuration; use Ergebnis\PHPUnit\SlowTestDetector\SlowTest; use PHPUnit\Event; @@ -26,26 +26,19 @@ final class DefaultReporter implements Reporter private Event\Telemetry\DurationFormatter $durationFormatter; - private int $maximumNumber; - private MaximumDuration $maximumDuration; - /** - * @throws Exception\MaximumNumberNotGreaterThanZero - */ + private MaximumCount $maximumCount; + public function __construct( Event\Telemetry\DurationFormatter $durationFormatter, MaximumDuration $maximumDuration, - int $maximumNumber + MaximumCount $maximumCount ) { - if (0 >= $maximumNumber) { - throw Exception\MaximumNumberNotGreaterThanZero::create($maximumNumber); - } - $this->durationComparator = new Comparator\DurationComparator(); $this->durationFormatter = $durationFormatter; $this->maximumDuration = $maximumDuration; - $this->maximumNumber = $maximumNumber; + $this->maximumCount = $maximumCount; } public function report(SlowTest ...$slowTests): string @@ -103,7 +96,7 @@ private function list(SlowTest ...$slowTests): string $slowTestsToReport = \array_slice( $slowTests, 0, - $this->maximumNumber + $this->maximumCount->toInt() ); /** @var SlowTest $slowestTest */ @@ -166,7 +159,7 @@ static function (Event\Telemetry\Duration $maximumDuration, SlowTest $slowTest): private function footer(SlowTest ...$slowTests): string { $remainingCount = \max( - \count($slowTests) - $this->maximumNumber, + \count($slowTests) - $this->maximumCount->toInt(), 0 ); diff --git a/test/Example/bootstrap.php b/test/Example/bootstrap.php index dd633015..e863f886 100644 --- a/test/Example/bootstrap.php +++ b/test/Example/bootstrap.php @@ -16,10 +16,10 @@ use Ergebnis\PHPUnit\SlowTestDetector; use PHPUnit\Event; -$maximumNumber = 3; +$maximumCount = SlowTestDetector\MaximumCount::fromInt(3); if (\is_string(\getenv('MAXIMUM_NUMBER'))) { - $maximumNumber = (int) \getenv('MAXIMUM_NUMBER'); + $maximumCount = SlowTestDetector\MaximumCount::fromInt((int) \getenv('MAXIMUM_NUMBER')); } $maximumDuration = SlowTestDetector\MaximumDuration::fromMilliseconds(125); @@ -29,7 +29,7 @@ $reporter = new SlowTestDetector\Reporter\DefaultReporter( new SlowTestDetector\Formatter\ToMillisecondsDurationFormatter(), $maximumDuration, - $maximumNumber + $maximumCount ); $timeKeeper = new SlowTestDetector\TimeKeeper(); diff --git a/test/Unit/Exception/MaximumNumberNotGreaterThanZeroTest.php b/test/Unit/Exception/InvalidMaximumCountTest.php similarity index 59% rename from test/Unit/Exception/MaximumNumberNotGreaterThanZeroTest.php rename to test/Unit/Exception/InvalidMaximumCountTest.php index 613a6289..7ba97af9 100644 --- a/test/Unit/Exception/MaximumNumberNotGreaterThanZeroTest.php +++ b/test/Unit/Exception/InvalidMaximumCountTest.php @@ -13,27 +13,27 @@ namespace Ergebnis\PHPUnit\SlowTestDetector\Test\Unit\Exception; -use Ergebnis\PHPUnit\SlowTestDetector\Exception\MaximumNumberNotGreaterThanZero; +use Ergebnis\PHPUnit\SlowTestDetector\Exception\InvalidMaximumCount; use Ergebnis\Test\Util; use PHPUnit\Framework; /** * @internal * - * @covers \Ergebnis\PHPUnit\SlowTestDetector\Exception\MaximumNumberNotGreaterThanZero + * @covers \Ergebnis\PHPUnit\SlowTestDetector\Exception\InvalidMaximumCount */ -final class MaximumNumberNotGreaterThanZeroTest extends Framework\TestCase +final class InvalidMaximumCountTest extends Framework\TestCase { use Util\Helper; - public function testCreareReturnsException(): void + public function testNotGreaterThanZeroReturnsException(): void { $value = self::faker()->numberBetween(); - $exception = MaximumNumberNotGreaterThanZero::create($value); + $exception = InvalidMaximumCount::notGreaterThanZero($value); $message = \sprintf( - 'Maximum number should be greater than 0, but %d is not.', + 'Value should be greater than 0, but %d is not.', $value ); diff --git a/test/Unit/MaximumCountTest.php b/test/Unit/MaximumCountTest.php new file mode 100644 index 00000000..49505a05 --- /dev/null +++ b/test/Unit/MaximumCountTest.php @@ -0,0 +1,49 @@ +expectException(Exception\InvalidMaximumCount::class); + + MaximumCount::fromInt($value); + } + + /** + * @dataProvider \Ergebnis\Test\Util\DataProvider\IntProvider::greaterThanZero() + */ + public function testFromSecondsReturnsMaximumDuration(int $value): void + { + $maximumCount = MaximumCount::fromInt($value); + + self::assertSame($value, $maximumCount->toInt()); + } +} diff --git a/test/Unit/Reporter/DefaultReporterTest.php b/test/Unit/Reporter/DefaultReporterTest.php index b47718c4..9b15ee0b 100644 --- a/test/Unit/Reporter/DefaultReporterTest.php +++ b/test/Unit/Reporter/DefaultReporterTest.php @@ -13,8 +13,8 @@ namespace Ergebnis\PHPUnit\SlowTestDetector\Test\Unit\Reporter; -use Ergebnis\PHPUnit\SlowTestDetector\Exception; use Ergebnis\PHPUnit\SlowTestDetector\Formatter\ToMillisecondsDurationFormatter; +use Ergebnis\PHPUnit\SlowTestDetector\MaximumCount; use Ergebnis\PHPUnit\SlowTestDetector\MaximumDuration; use Ergebnis\PHPUnit\SlowTestDetector\Reporter\DefaultReporter; use Ergebnis\PHPUnit\SlowTestDetector\SlowTest; @@ -30,8 +30,9 @@ * * @uses \Ergebnis\PHPUnit\SlowTestDetector\Comparator\DurationComparator * @uses \Ergebnis\PHPUnit\SlowTestDetector\Console\Color - * @uses \Ergebnis\PHPUnit\SlowTestDetector\Exception\MaximumNumberNotGreaterThanZero + * @uses \Ergebnis\PHPUnit\SlowTestDetector\Exception\InvalidMaximumCount * @uses \Ergebnis\PHPUnit\SlowTestDetector\Formatter\ToMillisecondsDurationFormatter + * @uses \Ergebnis\PHPUnit\SlowTestDetector\MaximumCount * @uses \Ergebnis\PHPUnit\SlowTestDetector\MaximumDuration * @uses \Ergebnis\PHPUnit\SlowTestDetector\SlowTest */ @@ -39,33 +40,13 @@ final class DefaultReporterTest extends Framework\TestCase { use Util\Helper; - /** - * @dataProvider \Ergebnis\Test\Util\DataProvider\IntProvider::lessThanZero() - * @dataProvider \Ergebnis\Test\Util\DataProvider\IntProvider::zero() - */ - public function testConstructorRejectsMaximumCountLessThanOne(int $maximumCount): void - { - $faker = self::faker(); - - $durationFormatter = $this->createMock(Event\Telemetry\DurationFormatter::class); - $maximumDuration = MaximumDuration::fromMilliseconds($faker->numberBetween()); - - $this->expectException(Exception\MaximumNumberNotGreaterThanZero::class); - - new DefaultReporter( - $durationFormatter, - $maximumDuration, - $maximumCount - ); - } - public function testReportReturnsEmptyStringWhenNoSlowTestsHaveBeenSpecified(): void { $faker = self::faker(); $durationFormatter = $this->createMock(Event\Telemetry\DurationFormatter::class); $maximumDuration = MaximumDuration::fromMilliseconds($faker->numberBetween()); - $maximumCount = $faker->numberBetween(); + $maximumCount = MaximumCount::fromInt($faker->numberBetween(1)); $reporter = new DefaultReporter( $durationFormatter, @@ -102,12 +83,12 @@ public function testReportReturnsReportWhenTheNumberOfSlowTestsIsSmallerThanTheM $durationFormatter = new ToMillisecondsDurationFormatter(); - $maximumNumber = \count($slowTests); + $maximumCount = MaximumCount::fromInt(\count($slowTests)); $reporter = new DefaultReporter( $durationFormatter, $maximumDuration, - $maximumNumber + $maximumCount ); $report = $reporter->report(...$slowTests); @@ -195,12 +176,12 @@ public function testReportReturnsReportWhenTheNumberOfSlowTestsIsSmallerThanTheM $durationFormatter = new ToMillisecondsDurationFormatter(); - $maximumNumber = $faker->numberBetween(\count($slowTests) + 1); + $maximumCount = MaximumCount::fromInt($faker->numberBetween(\count($slowTests) + 1)); $reporter = new DefaultReporter( $durationFormatter, $maximumDuration, - $maximumNumber + $maximumCount ); $report = $reporter->report(...$slowTests); @@ -290,12 +271,12 @@ public function testReportReturnsReportWhenTheNumberOfSlowTestsIsEqualToTheMaxim $durationFormatter = new ToMillisecondsDurationFormatter(); - $maximumNumber = \count($slowTests); + $maximumCount = MaximumCount::fromInt(\count($slowTests)); $reporter = new DefaultReporter( $durationFormatter, $maximumDuration, - $maximumNumber + $maximumCount ); $report = $reporter->report(...$slowTests); @@ -385,12 +366,12 @@ public function testReportReturnsReportWhenTheNumberOfSlowTestsIsOneMoreThanTheM $durationFormatter = new ToMillisecondsDurationFormatter(); - $maximumNumber = \count($slowTests) - 1; + $maximumCount = MaximumCount::fromInt(\count($slowTests) - 1); $reporter = new DefaultReporter( $durationFormatter, $maximumDuration, - $maximumNumber + $maximumCount ); $report = $reporter->report(...$slowTests); @@ -481,12 +462,12 @@ public function testReportReturnsReportWhenTheNumberOfSlowTestsIsGreaterThanTheM $durationFormatter = new ToMillisecondsDurationFormatter(); - $maximumNumber = \count($slowTests) - 2; + $maximumCount = MaximumCount::fromInt(\count($slowTests) - 2); $reporter = new DefaultReporter( $durationFormatter, $maximumDuration, - $maximumNumber + $maximumCount ); $report = $reporter->report(...$slowTests);