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

Breadcrumb

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

class ExecutionOrderDependency

@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\Framework\ExecutionOrderDependency implements \Stringable

Expanded class hierarchy of ExecutionOrderDependency

2 files declare their use of ExecutionOrderDependency
Dependencies.php in vendor/phpunit/phpunit/src/Metadata/Api/Dependencies.php
PhptTestCase.php in vendor/phpunit/phpunit/src/Runner/PhptTestCase.php

File

vendor/phpunit/phpunit/src/Framework/ExecutionOrderDependency.php, line 27

Namespace

PHPUnit\Framework
View source
final class ExecutionOrderDependency implements Stringable {
    private string $className = '';
    private string $methodName = '';
    private readonly bool $shallowClone;
    private readonly bool $deepClone;
    public static function invalid() : self {
        return new self('', '', false, false);
    }
    public static function forClass(DependsOnClass $metadata) : self {
        return new self($metadata->className(), 'class', $metadata->deepClone(), $metadata->shallowClone());
    }
    public static function forMethod(DependsOnMethod $metadata) : self {
        return new self($metadata->className(), $metadata->methodName(), $metadata->deepClone(), $metadata->shallowClone());
    }
    
    /**
     * @psalm-param list<ExecutionOrderDependency> $dependencies
     *
     * @psalm-return list<ExecutionOrderDependency>
     */
    public static function filterInvalid(array $dependencies) : array {
        return array_values(array_filter($dependencies, static fn(self $d) => $d->isValid()));
    }
    
    /**
     * @psalm-param list<ExecutionOrderDependency> $existing
     * @psalm-param list<ExecutionOrderDependency> $additional
     *
     * @psalm-return list<ExecutionOrderDependency>
     */
    public static function mergeUnique(array $existing, array $additional) : array {
        $existingTargets = array_map(static fn($dependency) => $dependency->getTarget(), $existing);
        foreach ($additional as $dependency) {
            $additionalTarget = $dependency->getTarget();
            if (in_array($additionalTarget, $existingTargets, true)) {
                continue;
            }
            $existingTargets[] = $additionalTarget;
            $existing[] = $dependency;
        }
        return $existing;
    }
    
    /**
     * @psalm-param list<ExecutionOrderDependency> $left
     * @psalm-param list<ExecutionOrderDependency> $right
     *
     * @psalm-return list<ExecutionOrderDependency>
     */
    public static function diff(array $left, array $right) : array {
        if ($right === []) {
            return $left;
        }
        if ($left === []) {
            return [];
        }
        $diff = [];
        $rightTargets = array_map(static fn($dependency) => $dependency->getTarget(), $right);
        foreach ($left as $dependency) {
            if (in_array($dependency->getTarget(), $rightTargets, true)) {
                continue;
            }
            $diff[] = $dependency;
        }
        return $diff;
    }
    public function __construct(string $classOrCallableName, ?string $methodName = null, bool $deepClone = false, bool $shallowClone = false) {
        $this->deepClone = $deepClone;
        $this->shallowClone = $shallowClone;
        if ($classOrCallableName === '') {
            return;
        }
        if (str_contains($classOrCallableName, '::')) {
            [
                $this->className,
                $this->methodName,
            ] = explode('::', $classOrCallableName);
        }
        else {
            $this->className = $classOrCallableName;
            $this->methodName = !empty($methodName) ? $methodName : 'class';
        }
    }
    public function __toString() : string {
        return $this->getTarget();
    }
    public function isValid() : bool {
        // Invalid dependencies can be declared and are skipped by the runner
        return $this->className !== '' && $this->methodName !== '';
    }
    public function shallowClone() : bool {
        return $this->shallowClone;
    }
    public function deepClone() : bool {
        return $this->deepClone;
    }
    public function targetIsClass() : bool {
        return $this->methodName === 'class';
    }
    public function getTarget() : string {
        return $this->isValid() ? $this->className . '::' . $this->methodName : '';
    }
    public function getTargetClassName() : string {
        return $this->className;
    }

}

Members

Title Sort descending Modifiers Object type Summary
ExecutionOrderDependency::$className private property
ExecutionOrderDependency::$deepClone private property
ExecutionOrderDependency::$methodName private property
ExecutionOrderDependency::$shallowClone private property
ExecutionOrderDependency::deepClone public function
ExecutionOrderDependency::diff public static function @psalm-param list&lt;ExecutionOrderDependency&gt; $left
@psalm-param list&lt;ExecutionOrderDependency&gt; $right
ExecutionOrderDependency::filterInvalid public static function @psalm-param list&lt;ExecutionOrderDependency&gt; $dependencies
ExecutionOrderDependency::forClass public static function
ExecutionOrderDependency::forMethod public static function
ExecutionOrderDependency::getTarget public function
ExecutionOrderDependency::getTargetClassName public function
ExecutionOrderDependency::invalid public static function
ExecutionOrderDependency::isValid public function
ExecutionOrderDependency::mergeUnique public static function @psalm-param list&lt;ExecutionOrderDependency&gt; $existing
@psalm-param list&lt;ExecutionOrderDependency&gt; $additional
ExecutionOrderDependency::shallowClone public function
ExecutionOrderDependency::targetIsClass public function
ExecutionOrderDependency::__construct public function
ExecutionOrderDependency::__toString public function
RSS feed
Powered by Drupal