mirror of
https://github.com/pestphp/pest.git
synced 2026-04-21 22:47:27 +02:00
feat(time-based-sharding): updates plugin
This commit is contained in:
22
src/Subscribers/EnsureShardTimingFinished.php
Normal file
22
src/Subscribers/EnsureShardTimingFinished.php
Normal file
@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Pest\Subscribers;
|
||||
|
||||
use PHPUnit\Event\TestSuite\Finished;
|
||||
use PHPUnit\Event\TestSuite\FinishedSubscriber;
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
final class EnsureShardTimingFinished implements FinishedSubscriber
|
||||
{
|
||||
/**
|
||||
* Runs the subscriber.
|
||||
*/
|
||||
public function notify(Finished $event): void
|
||||
{
|
||||
EnsureShardTimingsAreCollected::finished($event);
|
||||
}
|
||||
}
|
||||
22
src/Subscribers/EnsureShardTimingStarted.php
Normal file
22
src/Subscribers/EnsureShardTimingStarted.php
Normal file
@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Pest\Subscribers;
|
||||
|
||||
use PHPUnit\Event\TestSuite\Started;
|
||||
use PHPUnit\Event\TestSuite\StartedSubscriber;
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
final class EnsureShardTimingStarted implements StartedSubscriber
|
||||
{
|
||||
/**
|
||||
* Runs the subscriber.
|
||||
*/
|
||||
public function notify(Started $event): void
|
||||
{
|
||||
EnsureShardTimingsAreCollected::started($event);
|
||||
}
|
||||
}
|
||||
75
src/Subscribers/EnsureShardTimingsAreCollected.php
Normal file
75
src/Subscribers/EnsureShardTimingsAreCollected.php
Normal file
@ -0,0 +1,75 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Pest\Subscribers;
|
||||
|
||||
use PHPUnit\Event\Telemetry\HRTime;
|
||||
use PHPUnit\Event\TestSuite\Finished;
|
||||
use PHPUnit\Event\TestSuite\Started;
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
final class EnsureShardTimingsAreCollected
|
||||
{
|
||||
/**
|
||||
* The start times for each test class.
|
||||
*
|
||||
* @var array<string, HRTime>
|
||||
*/
|
||||
private static array $startTimes = [];
|
||||
|
||||
/**
|
||||
* The collected timings for each test class.
|
||||
*
|
||||
* @var array<string, float>
|
||||
*/
|
||||
private static array $timings = [];
|
||||
|
||||
/**
|
||||
* Records the start time for a test suite.
|
||||
*/
|
||||
public static function started(Started $event): void
|
||||
{
|
||||
if (! $event->testSuite()->isForTestClass()) {
|
||||
return;
|
||||
}
|
||||
|
||||
$name = preg_replace('/^P\\\\/', '', $event->testSuite()->name());
|
||||
|
||||
if (is_string($name)) {
|
||||
self::$startTimes[$name] = $event->telemetryInfo()->time();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Records the duration for a test suite.
|
||||
*/
|
||||
public static function finished(Finished $event): void
|
||||
{
|
||||
if (! $event->testSuite()->isForTestClass()) {
|
||||
return;
|
||||
}
|
||||
|
||||
$name = preg_replace('/^P\\\\/', '', $event->testSuite()->name());
|
||||
|
||||
if (! is_string($name) || ! isset(self::$startTimes[$name])) {
|
||||
return;
|
||||
}
|
||||
|
||||
$duration = $event->telemetryInfo()->time()->duration(self::$startTimes[$name]);
|
||||
|
||||
self::$timings[$name] = round($duration->asFloat(), 4);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the collected timings.
|
||||
*
|
||||
* @return array<string, float>
|
||||
*/
|
||||
public static function timings(): array
|
||||
{
|
||||
return self::$timings;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user