Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. Facade.php

class Facade

Same name in this branch
  1. 11.1.x vendor/phpunit/php-code-coverage/src/Report/Html/Facade.php \SebastianBergmann\CodeCoverage\Report\Html\Facade
  2. 11.1.x vendor/phpunit/php-code-coverage/src/Report/Xml/Facade.php \SebastianBergmann\CodeCoverage\Report\Xml\Facade
  3. 11.1.x vendor/phpunit/phpunit/src/TextUI/Output/Facade.php \PHPUnit\TextUI\Output\Facade
  4. 11.1.x vendor/phpunit/phpunit/src/Runner/Extension/Facade.php \PHPUnit\Runner\Extension\Facade
  5. 11.1.x vendor/phpunit/phpunit/src/Runner/TestResult/Facade.php \PHPUnit\TestRunner\TestResult\Facade
  6. 11.1.x vendor/phpunit/php-file-iterator/src/Facade.php \SebastianBergmann\FileIterator\Facade

@no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit

@internal This class is not covered by the backward compatibility promise for PHPUnit

Hierarchy

  • class \PHPUnit\Event\Facade

Expanded class hierarchy of Facade

23 files declare their use of Facade
AbstractPhpProcess.php in vendor/phpunit/phpunit/src/Util/PHP/AbstractPhpProcess.php
AnnotationParser.php in vendor/phpunit/phpunit/src/Metadata/Parser/AnnotationParser.php
Application.php in vendor/phpunit/phpunit/src/TextUI/Application.php
Builder.php in vendor/phpunit/phpunit/src/TextUI/Configuration/Cli/Builder.php
CodeCoverage.php in vendor/phpunit/phpunit/src/Runner/CodeCoverage.php

... See full list

File

vendor/phpunit/phpunit/src/Event/Facade.php, line 22

Namespace

PHPUnit\Event
View source
final class Facade {
    private static ?self $instance = null;
    private Emitter $emitter;
    private ?TypeMap $typeMap = 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 function registerSubscribers(Subscriber ...$subscribers) : void {
        foreach ($subscribers as $subscriber) {
            $this->registerSubscriber($subscriber);
        }
    }
    
    /**
     * @throws EventFacadeIsSealedException
     * @throws UnknownSubscriberTypeException
     */
    public function registerSubscriber(Subscriber $subscriber) : void {
        if ($this->sealed) {
            throw new EventFacadeIsSealedException();
        }
        $this->deferredDispatcher()
            ->registerSubscriber($subscriber);
    }
    
    /**
     * @throws EventFacadeIsSealedException
     */
    public function registerTracer(Tracer\Tracer $tracer) : void {
        if ($this->sealed) {
            throw new EventFacadeIsSealedException();
        }
        $this->deferredDispatcher()
            ->registerTracer($tracer);
    }
    
    /**
     * @codeCoverageIgnore
     *
     * @noinspection PhpUnused
     */
    public function initForIsolation(HRTime $offset, bool $exportObjects) : CollectingDispatcher {
        $dispatcher = new CollectingDispatcher();
        $this->emitter = new DispatchingEmitter($dispatcher, new Telemetry\System(new Telemetry\SystemStopWatchWithOffset($offset), new Telemetry\SystemMemoryMeter(), $this->garbageCollectorStatusProvider()));
        if ($exportObjects) {
            $this->emitter
                ->exportObjects();
        }
        $this->sealed = true;
        return $dispatcher;
    }
    public function forward(EventCollection $events) : void {
        $dispatcher = $this->deferredDispatcher();
        foreach ($events as $event) {
            $dispatcher->dispatch($event);
        }
    }
    public function seal() : void {
        $this->deferredDispatcher()
            ->flush();
        $this->sealed = true;
        $this->emitter
            ->testRunnerEventFacadeSealed();
    }
    private function createDispatchingEmitter() : DispatchingEmitter {
        return new DispatchingEmitter($this->deferredDispatcher(), $this->createTelemetrySystem());
    }
    private function createTelemetrySystem() : Telemetry\System {
        return new Telemetry\System(new Telemetry\SystemStopWatch(), new Telemetry\SystemMemoryMeter(), $this->garbageCollectorStatusProvider());
    }
    private function deferredDispatcher() : DeferringDispatcher {
        if ($this->deferringDispatcher === null) {
            $this->deferringDispatcher = new DeferringDispatcher(new DirectDispatcher($this->typeMap()));
        }
        return $this->deferringDispatcher;
    }
    private function typeMap() : TypeMap {
        if ($this->typeMap === null) {
            $typeMap = new TypeMap();
            $this->registerDefaultTypes($typeMap);
            $this->typeMap = $typeMap;
        }
        return $this->typeMap;
    }
    private function registerDefaultTypes(TypeMap $typeMap) : void {
        $defaultEvents = [
            Application\Started::class,
            Application\Finished::class,
            Test\DataProviderMethodCalled::class,
            Test\DataProviderMethodFinished::class,
            Test\MarkedIncomplete::class,
            Test\AfterLastTestMethodCalled::class,
            Test\AfterLastTestMethodFinished::class,
            Test\AfterTestMethodCalled::class,
            Test\AfterTestMethodFinished::class,
            Test\AssertionSucceeded::class,
            Test\AssertionFailed::class,
            Test\BeforeFirstTestMethodCalled::class,
            Test\BeforeFirstTestMethodErrored::class,
            Test\BeforeFirstTestMethodFinished::class,
            Test\BeforeTestMethodCalled::class,
            Test\BeforeTestMethodFinished::class,
            Test\ComparatorRegistered::class,
            Test\ConsideredRisky::class,
            Test\DeprecationTriggered::class,
            Test\Errored::class,
            Test\ErrorTriggered::class,
            Test\Failed::class,
            Test\Finished::class,
            Test\NoticeTriggered::class,
            Test\Passed::class,
            Test\PhpDeprecationTriggered::class,
            Test\PhpNoticeTriggered::class,
            Test\PhpunitDeprecationTriggered::class,
            Test\PhpunitErrorTriggered::class,
            Test\PhpunitWarningTriggered::class,
            Test\PhpWarningTriggered::class,
            Test\PostConditionCalled::class,
            Test\PostConditionFinished::class,
            Test\PreConditionCalled::class,
            Test\PreConditionFinished::class,
            Test\PreparationStarted::class,
            Test\Prepared::class,
            Test\PreparationFailed::class,
            Test\PrintedUnexpectedOutput::class,
            Test\Skipped::class,
            Test\WarningTriggered::class,
            Test\MockObjectCreated::class,
            Test\MockObjectForAbstractClassCreated::class,
            Test\MockObjectForIntersectionOfInterfacesCreated::class,
            Test\MockObjectForTraitCreated::class,
            Test\MockObjectFromWsdlCreated::class,
            Test\PartialMockObjectCreated::class,
            Test\TestProxyCreated::class,
            Test\TestStubCreated::class,
            Test\TestStubForIntersectionOfInterfacesCreated::class,
            TestRunner\BootstrapFinished::class,
            TestRunner\Configured::class,
            TestRunner\EventFacadeSealed::class,
            TestRunner\ExecutionAborted::class,
            TestRunner\ExecutionFinished::class,
            TestRunner\ExecutionStarted::class,
            TestRunner\ExtensionLoadedFromPhar::class,
            TestRunner\ExtensionBootstrapped::class,
            TestRunner\Finished::class,
            TestRunner\Started::class,
            TestRunner\DeprecationTriggered::class,
            TestRunner\WarningTriggered::class,
            TestRunner\GarbageCollectionDisabled::class,
            TestRunner\GarbageCollectionTriggered::class,
            TestRunner\GarbageCollectionEnabled::class,
            TestSuite\Filtered::class,
            TestSuite\Finished::class,
            TestSuite\Loaded::class,
            TestSuite\Skipped::class,
            TestSuite\Sorted::class,
            TestSuite\Started::class,
        ];
        foreach ($defaultEvents as $eventClass) {
            $typeMap->addMapping($eventClass . 'Subscriber', $eventClass);
        }
    }
    private function garbageCollectorStatusProvider() : Telemetry\GarbageCollectorStatusProvider {
        if (!isset(gc_status()['running'])) {
            // @codeCoverageIgnoreStart
            return new Php81GarbageCollectorStatusProvider();
            // @codeCoverageIgnoreEnd
        }
        return new Php83GarbageCollectorStatusProvider();
    }

}

Members

Title Sort descending Modifiers Object type Summary
Facade::$deferringDispatcher private property
Facade::$emitter private property
Facade::$instance private static property
Facade::$sealed private property
Facade::$typeMap private property
Facade::createDispatchingEmitter private function
Facade::createTelemetrySystem private function
Facade::deferredDispatcher private function
Facade::emitter public static function
Facade::forward public function
Facade::garbageCollectorStatusProvider private function
Facade::initForIsolation public function @codeCoverageIgnore
Facade::instance public static function
Facade::registerDefaultTypes private function
Facade::registerSubscriber public function
Facade::registerSubscribers public function
Facade::registerTracer public function
Facade::seal public function
Facade::typeMap private function
Facade::__construct public function

API Navigation

  • Drupal Core 11.1.x
  • Topics
  • Classes
  • Functions
  • Constants
  • Globals
  • Files
  • Namespaces
  • Deprecated
  • Services
RSS feed
Powered by Drupal