315 lines
12 KiB
PHP
315 lines
12 KiB
PHP
|
|
<?php
|
||
|
|
|
||
|
|
declare(strict_types=1);
|
||
|
|
|
||
|
|
namespace NunoMaduro\Collision\Adapters\Phpunit\Subscribers;
|
||
|
|
|
||
|
|
use NunoMaduro\Collision\Adapters\Phpunit\Printers\DefaultPrinter;
|
||
|
|
use NunoMaduro\Collision\Adapters\Phpunit\Printers\ReportablePrinter;
|
||
|
|
use PHPUnit\Event\Application\Started;
|
||
|
|
use PHPUnit\Event\Application\StartedSubscriber;
|
||
|
|
use PHPUnit\Event\Facade;
|
||
|
|
use PHPUnit\Event\Test\BeforeFirstTestMethodErrored;
|
||
|
|
use PHPUnit\Event\Test\BeforeFirstTestMethodErroredSubscriber;
|
||
|
|
use PHPUnit\Event\Test\ConsideredRisky;
|
||
|
|
use PHPUnit\Event\Test\ConsideredRiskySubscriber;
|
||
|
|
use PHPUnit\Event\Test\DeprecationTriggered;
|
||
|
|
use PHPUnit\Event\Test\DeprecationTriggeredSubscriber;
|
||
|
|
use PHPUnit\Event\Test\Errored;
|
||
|
|
use PHPUnit\Event\Test\ErroredSubscriber;
|
||
|
|
use PHPUnit\Event\Test\Failed;
|
||
|
|
use PHPUnit\Event\Test\FailedSubscriber;
|
||
|
|
use PHPUnit\Event\Test\Finished;
|
||
|
|
use PHPUnit\Event\Test\FinishedSubscriber;
|
||
|
|
use PHPUnit\Event\Test\MarkedIncomplete;
|
||
|
|
use PHPUnit\Event\Test\MarkedIncompleteSubscriber;
|
||
|
|
use PHPUnit\Event\Test\NoticeTriggered;
|
||
|
|
use PHPUnit\Event\Test\NoticeTriggeredSubscriber;
|
||
|
|
use PHPUnit\Event\Test\Passed;
|
||
|
|
use PHPUnit\Event\Test\PassedSubscriber;
|
||
|
|
use PHPUnit\Event\Test\PhpDeprecationTriggered;
|
||
|
|
use PHPUnit\Event\Test\PhpDeprecationTriggeredSubscriber;
|
||
|
|
use PHPUnit\Event\Test\PhpNoticeTriggered;
|
||
|
|
use PHPUnit\Event\Test\PhpNoticeTriggeredSubscriber;
|
||
|
|
use PHPUnit\Event\Test\PhpunitDeprecationTriggered;
|
||
|
|
use PHPUnit\Event\Test\PhpunitDeprecationTriggeredSubscriber;
|
||
|
|
use PHPUnit\Event\Test\PhpunitErrorTriggered;
|
||
|
|
use PHPUnit\Event\Test\PhpunitErrorTriggeredSubscriber;
|
||
|
|
use PHPUnit\Event\Test\PhpunitWarningTriggered;
|
||
|
|
use PHPUnit\Event\Test\PhpunitWarningTriggeredSubscriber;
|
||
|
|
use PHPUnit\Event\Test\PhpWarningTriggered;
|
||
|
|
use PHPUnit\Event\Test\PhpWarningTriggeredSubscriber;
|
||
|
|
use PHPUnit\Event\Test\PreparationStarted;
|
||
|
|
use PHPUnit\Event\Test\PreparationStartedSubscriber;
|
||
|
|
use PHPUnit\Event\Test\PrintedUnexpectedOutput;
|
||
|
|
use PHPUnit\Event\Test\PrintedUnexpectedOutputSubscriber;
|
||
|
|
use PHPUnit\Event\Test\Skipped;
|
||
|
|
use PHPUnit\Event\Test\SkippedSubscriber;
|
||
|
|
use PHPUnit\Event\Test\WarningTriggered;
|
||
|
|
use PHPUnit\Event\Test\WarningTriggeredSubscriber;
|
||
|
|
use PHPUnit\Event\TestRunner\Configured;
|
||
|
|
use PHPUnit\Event\TestRunner\ConfiguredSubscriber;
|
||
|
|
use PHPUnit\Event\TestRunner\DeprecationTriggered as TestRunnerDeprecationTriggered;
|
||
|
|
use PHPUnit\Event\TestRunner\DeprecationTriggeredSubscriber as TestRunnerDeprecationTriggeredSubscriber;
|
||
|
|
use PHPUnit\Event\TestRunner\ExecutionFinished;
|
||
|
|
use PHPUnit\Event\TestRunner\ExecutionFinishedSubscriber;
|
||
|
|
use PHPUnit\Event\TestRunner\ExecutionStarted;
|
||
|
|
use PHPUnit\Event\TestRunner\ExecutionStartedSubscriber;
|
||
|
|
use PHPUnit\Event\TestRunner\WarningTriggered as TestRunnerWarningTriggered;
|
||
|
|
use PHPUnit\Event\TestRunner\WarningTriggeredSubscriber as TestRunnerWarningTriggeredSubscriber;
|
||
|
|
use PHPUnit\Runner\Version;
|
||
|
|
|
||
|
|
if (class_exists(Version::class) && (int) Version::series() >= 10) {
|
||
|
|
/**
|
||
|
|
* @internal
|
||
|
|
*/
|
||
|
|
final class EnsurePrinterIsRegisteredSubscriber implements StartedSubscriber
|
||
|
|
{
|
||
|
|
/**
|
||
|
|
* If this subscriber has been registered on PHPUnit's facade.
|
||
|
|
*/
|
||
|
|
private static bool $registered = false;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Runs the subscriber.
|
||
|
|
*/
|
||
|
|
public function notify(Started $event): void
|
||
|
|
{
|
||
|
|
if (! isset($_SERVER['COLLISION_PRINTER'])) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
$printer = new ReportablePrinter(new DefaultPrinter(true));
|
||
|
|
|
||
|
|
if (isset($_SERVER['COLLISION_PRINTER_COMPACT'])) {
|
||
|
|
DefaultPrinter::compact(true);
|
||
|
|
}
|
||
|
|
|
||
|
|
if (isset($_SERVER['COLLISION_PRINTER_PROFILE'])) {
|
||
|
|
DefaultPrinter::profile(true);
|
||
|
|
}
|
||
|
|
|
||
|
|
$subscribers = [
|
||
|
|
// Configured
|
||
|
|
new class($printer) extends Subscriber implements ConfiguredSubscriber
|
||
|
|
{
|
||
|
|
public function notify(Configured $event): void
|
||
|
|
{
|
||
|
|
$this->printer()->setDecorated(
|
||
|
|
$event->configuration()->colors()
|
||
|
|
);
|
||
|
|
}
|
||
|
|
},
|
||
|
|
|
||
|
|
// Test
|
||
|
|
new class($printer) extends Subscriber implements PrintedUnexpectedOutputSubscriber
|
||
|
|
{
|
||
|
|
public function notify(PrintedUnexpectedOutput $event): void
|
||
|
|
{
|
||
|
|
$this->printer()->testPrintedUnexpectedOutput($event);
|
||
|
|
}
|
||
|
|
},
|
||
|
|
|
||
|
|
// Test Runner
|
||
|
|
new class($printer) extends Subscriber implements ExecutionStartedSubscriber
|
||
|
|
{
|
||
|
|
public function notify(ExecutionStarted $event): void
|
||
|
|
{
|
||
|
|
$this->printer()->testRunnerExecutionStarted($event);
|
||
|
|
}
|
||
|
|
},
|
||
|
|
|
||
|
|
new class($printer) extends Subscriber implements ExecutionFinishedSubscriber
|
||
|
|
{
|
||
|
|
public function notify(ExecutionFinished $event): void
|
||
|
|
{
|
||
|
|
$this->printer()->testRunnerExecutionFinished($event);
|
||
|
|
}
|
||
|
|
},
|
||
|
|
|
||
|
|
// Test > Hook Methods
|
||
|
|
|
||
|
|
new class($printer) extends Subscriber implements BeforeFirstTestMethodErroredSubscriber
|
||
|
|
{
|
||
|
|
public function notify(BeforeFirstTestMethodErrored $event): void
|
||
|
|
{
|
||
|
|
$this->printer()->testBeforeFirstTestMethodErrored($event);
|
||
|
|
}
|
||
|
|
},
|
||
|
|
|
||
|
|
// Test > Lifecycle ...
|
||
|
|
|
||
|
|
new class($printer) extends Subscriber implements FinishedSubscriber
|
||
|
|
{
|
||
|
|
public function notify(Finished $event): void
|
||
|
|
{
|
||
|
|
$this->printer()->testFinished($event);
|
||
|
|
}
|
||
|
|
},
|
||
|
|
|
||
|
|
new class($printer) extends Subscriber implements PreparationStartedSubscriber
|
||
|
|
{
|
||
|
|
public function notify(PreparationStarted $event): void
|
||
|
|
{
|
||
|
|
$this->printer()->testPreparationStarted($event);
|
||
|
|
}
|
||
|
|
},
|
||
|
|
|
||
|
|
// Test > Issues ...
|
||
|
|
|
||
|
|
new class($printer) extends Subscriber implements ConsideredRiskySubscriber
|
||
|
|
{
|
||
|
|
public function notify(ConsideredRisky $event): void
|
||
|
|
{
|
||
|
|
$this->printer()->testConsideredRisky($event);
|
||
|
|
}
|
||
|
|
},
|
||
|
|
|
||
|
|
new class($printer) extends Subscriber implements DeprecationTriggeredSubscriber
|
||
|
|
{
|
||
|
|
public function notify(DeprecationTriggered $event): void
|
||
|
|
{
|
||
|
|
$this->printer()->testDeprecationTriggered($event);
|
||
|
|
}
|
||
|
|
},
|
||
|
|
|
||
|
|
new class($printer) extends Subscriber implements TestRunnerDeprecationTriggeredSubscriber
|
||
|
|
{
|
||
|
|
public function notify(TestRunnerDeprecationTriggered $event): void
|
||
|
|
{
|
||
|
|
$this->printer()->testRunnerDeprecationTriggered($event);
|
||
|
|
}
|
||
|
|
},
|
||
|
|
|
||
|
|
new class($printer) extends Subscriber implements TestRunnerWarningTriggeredSubscriber
|
||
|
|
{
|
||
|
|
public function notify(TestRunnerWarningTriggered $event): void
|
||
|
|
{
|
||
|
|
$this->printer()->testRunnerWarningTriggered($event);
|
||
|
|
}
|
||
|
|
},
|
||
|
|
|
||
|
|
new class($printer) extends Subscriber implements PhpDeprecationTriggeredSubscriber
|
||
|
|
{
|
||
|
|
public function notify(PhpDeprecationTriggered $event): void
|
||
|
|
{
|
||
|
|
$this->printer()->testPhpDeprecationTriggered($event);
|
||
|
|
}
|
||
|
|
},
|
||
|
|
|
||
|
|
new class($printer) extends Subscriber implements PhpunitDeprecationTriggeredSubscriber
|
||
|
|
{
|
||
|
|
public function notify(PhpunitDeprecationTriggered $event): void
|
||
|
|
{
|
||
|
|
$this->printer()->testPhpunitDeprecationTriggered($event);
|
||
|
|
}
|
||
|
|
},
|
||
|
|
|
||
|
|
new class($printer) extends Subscriber implements PhpNoticeTriggeredSubscriber
|
||
|
|
{
|
||
|
|
public function notify(PhpNoticeTriggered $event): void
|
||
|
|
{
|
||
|
|
$this->printer()->testPhpNoticeTriggered($event);
|
||
|
|
}
|
||
|
|
},
|
||
|
|
|
||
|
|
new class($printer) extends Subscriber implements PhpWarningTriggeredSubscriber
|
||
|
|
{
|
||
|
|
public function notify(PhpWarningTriggered $event): void
|
||
|
|
{
|
||
|
|
$this->printer()->testPhpWarningTriggered($event);
|
||
|
|
}
|
||
|
|
},
|
||
|
|
|
||
|
|
new class($printer) extends Subscriber implements PhpunitWarningTriggeredSubscriber
|
||
|
|
{
|
||
|
|
public function notify(PhpunitWarningTriggered $event): void
|
||
|
|
{
|
||
|
|
$this->printer()->testPhpunitWarningTriggered($event);
|
||
|
|
}
|
||
|
|
},
|
||
|
|
|
||
|
|
new class($printer) extends Subscriber implements PhpunitErrorTriggeredSubscriber
|
||
|
|
{
|
||
|
|
public function notify(PhpunitErrorTriggered $event): void
|
||
|
|
{
|
||
|
|
$this->printer()->testPhpunitErrorTriggered($event);
|
||
|
|
}
|
||
|
|
},
|
||
|
|
|
||
|
|
// Test > Outcome ...
|
||
|
|
|
||
|
|
new class($printer) extends Subscriber implements ErroredSubscriber
|
||
|
|
{
|
||
|
|
public function notify(Errored $event): void
|
||
|
|
{
|
||
|
|
$this->printer()->testErrored($event);
|
||
|
|
}
|
||
|
|
},
|
||
|
|
new class($printer) extends Subscriber implements FailedSubscriber
|
||
|
|
{
|
||
|
|
public function notify(Failed $event): void
|
||
|
|
{
|
||
|
|
$this->printer()->testFailed($event);
|
||
|
|
}
|
||
|
|
},
|
||
|
|
new class($printer) extends Subscriber implements MarkedIncompleteSubscriber
|
||
|
|
{
|
||
|
|
public function notify(MarkedIncomplete $event): void
|
||
|
|
{
|
||
|
|
$this->printer()->testMarkedIncomplete($event);
|
||
|
|
}
|
||
|
|
},
|
||
|
|
|
||
|
|
new class($printer) extends Subscriber implements NoticeTriggeredSubscriber
|
||
|
|
{
|
||
|
|
public function notify(NoticeTriggered $event): void
|
||
|
|
{
|
||
|
|
$this->printer()->testNoticeTriggered($event);
|
||
|
|
}
|
||
|
|
},
|
||
|
|
|
||
|
|
new class($printer) extends Subscriber implements PassedSubscriber
|
||
|
|
{
|
||
|
|
public function notify(Passed $event): void
|
||
|
|
{
|
||
|
|
$this->printer()->testPassed($event);
|
||
|
|
}
|
||
|
|
},
|
||
|
|
new class($printer) extends Subscriber implements SkippedSubscriber
|
||
|
|
{
|
||
|
|
public function notify(Skipped $event): void
|
||
|
|
{
|
||
|
|
$this->printer()->testSkipped($event);
|
||
|
|
}
|
||
|
|
},
|
||
|
|
|
||
|
|
new class($printer) extends Subscriber implements WarningTriggeredSubscriber
|
||
|
|
{
|
||
|
|
public function notify(WarningTriggered $event): void
|
||
|
|
{
|
||
|
|
$this->printer()->testWarningTriggered($event);
|
||
|
|
}
|
||
|
|
},
|
||
|
|
];
|
||
|
|
|
||
|
|
Facade::instance()->registerSubscribers(...$subscribers);
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Registers the subscriber on PHPUnit's facade.
|
||
|
|
*/
|
||
|
|
public static function register(): void
|
||
|
|
{
|
||
|
|
$shouldRegister = self::$registered === false
|
||
|
|
&& isset($_SERVER['COLLISION_PRINTER']);
|
||
|
|
|
||
|
|
if ($shouldRegister) {
|
||
|
|
self::$registered = true;
|
||
|
|
|
||
|
|
Facade::instance()->registerSubscriber(new self);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|