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

Breadcrumb

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

class Matcher

@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\MockObject\Matcher

Expanded class hierarchy of Matcher

1 file declares its use of Matcher
InvocationMocker.php in vendor/phpunit/phpunit/src/Framework/MockObject/Runtime/Builder/InvocationMocker.php

File

vendor/phpunit/phpunit/src/Framework/MockObject/Runtime/Matcher.php, line 29

Namespace

PHPUnit\Framework\MockObject
View source
final class Matcher {
    private readonly InvocationOrder $invocationRule;
    private ?string $afterMatchBuilderId = null;
    private ?MethodName $methodNameRule = null;
    private ?ParametersRule $parametersRule = null;
    private ?Stub $stub = null;
    public function __construct(InvocationOrder $rule) {
        $this->invocationRule = $rule;
    }
    public function hasMatchers() : bool {
        return !$this->invocationRule instanceof AnyInvokedCount;
    }
    public function hasMethodNameRule() : bool {
        return $this->methodNameRule !== null;
    }
    public function methodNameRule() : MethodName {
        return $this->methodNameRule;
    }
    public function setMethodNameRule(MethodName $rule) : void {
        $this->methodNameRule = $rule;
    }
    public function hasParametersRule() : bool {
        return $this->parametersRule !== null;
    }
    public function setParametersRule(ParametersRule $rule) : void {
        $this->parametersRule = $rule;
    }
    public function setStub(Stub $stub) : void {
        $this->stub = $stub;
    }
    public function setAfterMatchBuilderId(string $id) : void {
        $this->afterMatchBuilderId = $id;
    }
    
    /**
     * @throws Exception
     * @throws ExpectationFailedException
     * @throws MatchBuilderNotFoundException
     * @throws MethodNameNotConfiguredException
     * @throws RuntimeException
     */
    public function invoked(Invocation $invocation) : mixed {
        if ($this->methodNameRule === null) {
            throw new MethodNameNotConfiguredException();
        }
        if ($this->afterMatchBuilderId !== null) {
            $matcher = $invocation->object()
                ->__phpunit_getInvocationHandler()
                ->lookupMatcher($this->afterMatchBuilderId);
            if (!$matcher) {
                throw new MatchBuilderNotFoundException($this->afterMatchBuilderId);
            }
        }
        $this->invocationRule
            ->invoked($invocation);
        try {
            $this->parametersRule?->apply($invocation);
        } catch (ExpectationFailedException $e) {
            throw new ExpectationFailedException(sprintf("Expectation failed for %s when %s\n%s", $this->methodNameRule
                ->toString(), $this->invocationRule
                ->toString(), $e->getMessage()), $e->getComparisonFailure());
        }
        if ($this->stub) {
            return $this->stub
                ->invoke($invocation);
        }
        return $invocation->generateReturnValue();
    }
    
    /**
     * @throws ExpectationFailedException
     * @throws MatchBuilderNotFoundException
     * @throws MethodNameNotConfiguredException
     * @throws RuntimeException
     */
    public function matches(Invocation $invocation) : bool {
        if ($this->afterMatchBuilderId !== null) {
            $matcher = $invocation->object()
                ->__phpunit_getInvocationHandler()
                ->lookupMatcher($this->afterMatchBuilderId);
            if (!$matcher) {
                throw new MatchBuilderNotFoundException($this->afterMatchBuilderId);
            }
            if (!$matcher->invocationRule
                ->hasBeenInvoked()) {
                return false;
            }
        }
        if ($this->methodNameRule === null) {
            throw new MethodNameNotConfiguredException();
        }
        if (!$this->invocationRule
            ->matches($invocation)) {
            return false;
        }
        try {
            if (!$this->methodNameRule
                ->matches($invocation)) {
                return false;
            }
        } catch (ExpectationFailedException $e) {
            throw new ExpectationFailedException(sprintf("Expectation failed for %s when %s\n%s", $this->methodNameRule
                ->toString(), $this->invocationRule
                ->toString(), $e->getMessage()), $e->getComparisonFailure());
        }
        return true;
    }
    
    /**
     * @throws ExpectationFailedException
     * @throws MethodNameNotConfiguredException
     */
    public function verify() : void {
        if ($this->methodNameRule === null) {
            throw new MethodNameNotConfiguredException();
        }
        try {
            $this->invocationRule
                ->verify();
            if ($this->parametersRule === null) {
                $this->parametersRule = new AnyParameters();
            }
            $invocationIsAny = $this->invocationRule instanceof AnyInvokedCount;
            $invocationIsNever = $this->invocationRule instanceof InvokedCount && $this->invocationRule
                ->isNever();
            $invocationIsAtMost = $this->invocationRule instanceof InvokedAtMostCount;
            if (!$invocationIsAny && !$invocationIsNever && !$invocationIsAtMost) {
                $this->parametersRule
                    ->verify();
            }
        } catch (ExpectationFailedException $e) {
            throw new ExpectationFailedException(sprintf("Expectation failed for %s when %s.\n%s", $this->methodNameRule
                ->toString(), $this->invocationRule
                ->toString(), ThrowableToStringMapper::map($e)));
        }
    }

}

Members

Title Sort descending Modifiers Object type Summary
Matcher::$afterMatchBuilderId private property
Matcher::$invocationRule private property
Matcher::$methodNameRule private property
Matcher::$parametersRule private property
Matcher::$stub private property
Matcher::hasMatchers public function
Matcher::hasMethodNameRule public function
Matcher::hasParametersRule public function
Matcher::invoked public function
Matcher::matches public function
Matcher::methodNameRule public function
Matcher::setAfterMatchBuilderId public function
Matcher::setMethodNameRule public function
Matcher::setParametersRule public function
Matcher::setStub public function
Matcher::verify public function
Matcher::__construct public function

API Navigation

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