Skip to content

Commit

Permalink
Merge branch '10.0'
Browse files Browse the repository at this point in the history
  • Loading branch information
sebastianbergmann committed Mar 18, 2023
2 parents 08c7e39 + 57de5fe commit 9b3cd0a
Show file tree
Hide file tree
Showing 15 changed files with 127 additions and 120 deletions.
40 changes: 4 additions & 36 deletions .psalm/baseline.xml
Original file line number Diff line number Diff line change
Expand Up @@ -541,18 +541,6 @@
<code><![CDATA[DefaultPrinter::from(
$configuration->logfileTeamcity()
)]]></code>
<code><![CDATA[EventFacade::registerTracer(
new EventLogger(
$configuration->logEventsText(),
false
)
)]]></code>
<code><![CDATA[EventFacade::registerTracer(
new EventLogger(
$configuration->logEventsVerboseText(),
true
)
)]]></code>
<code><![CDATA[OutputFacade::printerFor($configuration->logfileJunit())]]></code>
<code><![CDATA[OutputFacade::printerFor($configuration->logfileJunit())]]></code>
<code>atLeastVersion</code>
Expand All @@ -567,26 +555,6 @@
<code>logEventsVerboseText</code>
<code>logfileJunit</code>
<code>logfileTeamcity</code>
<code><![CDATA[new JunitXmlLogger(
OutputFacade::printerFor($configuration->logfileJunit()),
)]]></code>
<code><![CDATA[new JunitXmlLogger(
OutputFacade::printerFor($configuration->logfileJunit()),
)]]></code>
<code>new ResultCacheHandler($cache)</code>
<code>new ResultCacheHandler($cache)</code>
<code><![CDATA[new TeamCityLogger(
DefaultPrinter::from(
$configuration->logfileTeamcity()
)
)]]></code>
<code><![CDATA[new TeamCityLogger(
DefaultPrinter::from(
$configuration->logfileTeamcity()
)
)]]></code>
<code>new TestDoxResultCollector</code>
<code>new TestDoxResultCollector</code>
</MissingThrowsDocblock>
<UnresolvableInclude>
<code>include_once $filename</code>
Expand Down Expand Up @@ -802,15 +770,15 @@
<code><![CDATA[new DefaultProgressPrinter(
self::$printer,
$configuration->colors(),
$configuration->columns()
$configuration->columns(),
EventFacade::instance()
)]]></code>
<code><![CDATA[new DefaultProgressPrinter(
self::$printer,
$configuration->colors(),
$configuration->columns()
$configuration->columns(),
EventFacade::instance()
)]]></code>
<code>new TeamCityLogger(DefaultPrinter::standardOutput())</code>
<code>new TeamCityLogger(DefaultPrinter::standardOutput())</code>
</MissingThrowsDocblock>
<NullableReturnStatement>
<code>self::$printer</code>
Expand Down
105 changes: 58 additions & 47 deletions src/Event/Facade.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,138 +16,149 @@
*/
final class Facade
{
private static ?TypeMap $typeMap = null;
private static ?Emitter $emitter = null;
private static ?Emitter $suspended = null;
private static ?DeferringDispatcher $deferringDispatcher = null;
private static bool $sealed = false;
private static ?self $instance = null;
private Emitter $emitter;
private ?TypeMap $typeMap = null;
private ?Emitter $suspended = null;
private ?DeferringDispatcher $deferringDispatcher = null;
private bool $sealed = false;

public static function instance(): self
{
if (self::$instance === null) {
self::$instance = new self;
}

return self::$instance;
}

public static function emitter(): Emitter
{
return self::instance()->emitter;
}

public function __construct()
{
$this->emitter = $this->createDispatchingEmitter();
}

/**
* @throws EventFacadeIsSealedException
* @throws UnknownSubscriberTypeException
*/
public static function registerSubscribers(Subscriber ...$subscribers): void
public function registerSubscribers(Subscriber ...$subscribers): void
{
foreach ($subscribers as $subscriber) {
self::registerSubscriber($subscriber);
$this->registerSubscriber($subscriber);
}
}

/**
* @throws EventFacadeIsSealedException
* @throws UnknownSubscriberTypeException
*/
public static function registerSubscriber(Subscriber $subscriber): void
public function registerSubscriber(Subscriber $subscriber): void
{
if (self::$sealed) {
if ($this->sealed) {
throw new EventFacadeIsSealedException;
}

self::deferredDispatcher()->registerSubscriber($subscriber);
$this->deferredDispatcher()->registerSubscriber($subscriber);
}

/**
* @throws EventFacadeIsSealedException
*/
public static function registerTracer(Tracer\Tracer $tracer): void
public function registerTracer(Tracer\Tracer $tracer): void
{
if (self::$sealed) {
if ($this->sealed) {
throw new EventFacadeIsSealedException;
}

self::deferredDispatcher()->registerTracer($tracer);
}

public static function emitter(): Emitter
{
if (self::$emitter === null) {
self::$emitter = self::createDispatchingEmitter();
}

return self::$emitter;
$this->deferredDispatcher()->registerTracer($tracer);
}

/** @noinspection PhpUnused */
public static function initForIsolation(HRTime $offset): CollectingDispatcher
public function initForIsolation(HRTime $offset): CollectingDispatcher
{
$dispatcher = new CollectingDispatcher;

self::$emitter = new DispatchingEmitter(
$this->emitter = new DispatchingEmitter(
$dispatcher,
new Telemetry\System(
new Telemetry\SystemStopWatchWithOffset($offset),
new Telemetry\SystemMemoryMeter
)
);

self::$sealed = true;
$this->sealed = true;

return $dispatcher;
}

public static function forward(EventCollection $events): void
public function forward(EventCollection $events): void
{
if (self::$suspended !== null) {
if ($this->suspended !== null) {
return;
}

$dispatcher = self::deferredDispatcher();
$dispatcher = $this->deferredDispatcher();

foreach ($events as $event) {
$dispatcher->dispatch($event);
}
}

public static function seal(): void
public function seal(): void
{
self::deferredDispatcher()->flush();
$this->deferredDispatcher()->flush();

self::$sealed = true;
$this->sealed = true;

self::emitter()->testRunnerEventFacadeSealed();
$this->emitter->testRunnerEventFacadeSealed();
}

private static function createDispatchingEmitter(): DispatchingEmitter
private function createDispatchingEmitter(): DispatchingEmitter
{
return new DispatchingEmitter(
self::deferredDispatcher(),
self::createTelemetrySystem()
$this->deferredDispatcher(),
$this->createTelemetrySystem()
);
}

private static function createTelemetrySystem(): Telemetry\System
private function createTelemetrySystem(): Telemetry\System
{
return new Telemetry\System(
new Telemetry\SystemStopWatch,
new Telemetry\SystemMemoryMeter
);
}

private static function deferredDispatcher(): DeferringDispatcher
private function deferredDispatcher(): DeferringDispatcher
{
if (self::$deferringDispatcher === null) {
self::$deferringDispatcher = new DeferringDispatcher(
new DirectDispatcher(self::typeMap())
if ($this->deferringDispatcher === null) {
$this->deferringDispatcher = new DeferringDispatcher(
new DirectDispatcher($this->typeMap())
);
}

return self::$deferringDispatcher;
return $this->deferringDispatcher;
}

private static function typeMap(): TypeMap
private function typeMap(): TypeMap
{
if (self::$typeMap === null) {
if ($this->typeMap === null) {
$typeMap = new TypeMap;

self::registerDefaultTypes($typeMap);
$this->registerDefaultTypes($typeMap);

self::$typeMap = $typeMap;
$this->typeMap = $typeMap;
}

return self::$typeMap;
return $this->typeMap;
}

private static function registerDefaultTypes(TypeMap $typeMap): void
private function registerDefaultTypes(TypeMap $typeMap): void
{
$defaultEvents = [
Application\Started::class,
Expand Down
8 changes: 4 additions & 4 deletions src/Logging/JUnit/JunitXmlLogger.php
Original file line number Diff line number Diff line change
Expand Up @@ -88,11 +88,11 @@ final class JunitXmlLogger
* @throws EventFacadeIsSealedException
* @throws UnknownSubscriberTypeException
*/
public function __construct(Printer $printer)
public function __construct(Printer $printer, Facade $facade)
{
$this->printer = $printer;

$this->registerSubscribers();
$this->registerSubscribers($facade);
$this->createDocument();
}

Expand Down Expand Up @@ -268,9 +268,9 @@ private function handleFinish(Info $telemetryInfo, int $numberOfAssertionsPerfor
* @throws EventFacadeIsSealedException
* @throws UnknownSubscriberTypeException
*/
private function registerSubscribers(): void
private function registerSubscribers(Facade $facade): void
{
Facade::registerSubscribers(
$facade->registerSubscribers(
new TestSuiteStartedSubscriber($this),
new TestSuiteFinishedSubscriber($this),
new TestPreparedSubscriber($this),
Expand Down
8 changes: 4 additions & 4 deletions src/Logging/TeamCity/TeamCityLogger.php
Original file line number Diff line number Diff line change
Expand Up @@ -53,11 +53,11 @@ final class TeamCityLogger
* @throws EventFacadeIsSealedException
* @throws UnknownSubscriberTypeException
*/
public function __construct(Printer $printer)
public function __construct(Printer $printer, Facade $facade)
{
$this->printer = $printer;

$this->registerSubscribers();
$this->registerSubscribers($facade);
$this->setFlowId();
}

Expand Down Expand Up @@ -275,9 +275,9 @@ public function flush(): void
* @throws EventFacadeIsSealedException
* @throws UnknownSubscriberTypeException
*/
private function registerSubscribers(): void
private function registerSubscribers(Facade $facade): void
{
Facade::registerSubscribers(
$facade->registerSubscribers(
new TestSuiteStartedSubscriber($this),
new TestSuiteFinishedSubscriber($this),
new TestPreparedSubscriber($this),
Expand Down
8 changes: 4 additions & 4 deletions src/Logging/TestDox/TestMethod/TestResultCollector.php
Original file line number Diff line number Diff line change
Expand Up @@ -58,9 +58,9 @@ final class TestResultCollector
* @throws EventFacadeIsSealedException
* @throws UnknownSubscriberTypeException
*/
public function __construct()
public function __construct(Facade $facade)
{
$this->registerSubscribers();
$this->registerSubscribers($facade);
}

/**
Expand Down Expand Up @@ -186,9 +186,9 @@ public function testFinished(Finished $event): void
* @throws EventFacadeIsSealedException
* @throws UnknownSubscriberTypeException
*/
private function registerSubscribers(): void
private function registerSubscribers(Facade $facade): void
{
Facade::registerSubscribers(
$facade->registerSubscribers(
new TestConsideredRiskySubscriber($this),
new TestCreatedMockObjectForAbstractClassSubscriber($this),
new TestCreatedMockObjectForTraitSubscriber($this),
Expand Down
6 changes: 3 additions & 3 deletions src/Runner/Extension/Facade.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ final class Facade
*/
public function registerSubscribers(Subscriber ...$subscribers): void
{
EventFacade::registerSubscribers(...$subscribers);
EventFacade::instance()->registerSubscribers(...$subscribers);
}

/**
Expand All @@ -35,14 +35,14 @@ public function registerSubscribers(Subscriber ...$subscribers): void
*/
public function registerSubscriber(Subscriber $subscriber): void
{
EventFacade::registerSubscriber($subscriber);
EventFacade::instance()->registerSubscriber($subscriber);
}

/**
* @throws EventFacadeIsSealedException
*/
public function registerTracer(Tracer $tracer): void
{
EventFacade::registerTracer($tracer);
EventFacade::instance()->registerTracer($tracer);
}
}
8 changes: 4 additions & 4 deletions src/Runner/ResultCache/ResultCacheHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -38,11 +38,11 @@ final class ResultCacheHandler
* @throws EventFacadeIsSealedException
* @throws UnknownSubscriberTypeException
*/
public function __construct(ResultCache $cache)
public function __construct(ResultCache $cache, Facade $facade)
{
$this->cache = $cache;

$this->registerSubscribers();
$this->registerSubscribers($facade);
}

public function testSuiteStarted(): void
Expand Down Expand Up @@ -138,9 +138,9 @@ private function duration(Event $event): float
* @throws EventFacadeIsSealedException
* @throws UnknownSubscriberTypeException
*/
private function registerSubscribers(): void
private function registerSubscribers(Facade $facade): void
{
Facade::registerSubscribers(
$facade->registerSubscribers(
new TestSuiteStartedSubscriber($this),
new TestSuiteFinishedSubscriber($this),
new TestPreparedSubscriber($this),
Expand Down
Loading

0 comments on commit 9b3cd0a

Please sign in to comment.