/** * @expectedException CM_Exception_Invalid * @expectedExceptionMessage Unmatched arguments: `bar, 0` */ public function testMatchNamedArgsTooMany() { $function = function ($foo) { }; $namedArgs = new CM_Util_NamedArgs(); $namedArgs->matchNamedArgs($function, ['foo' => 'foo', 'bar' => 'bar', 'numeric']); }
public function testMatchNamedArgsTooMany() { $function = function ($foo) { }; $namedArgs = new CM_Util_NamedArgs(); $exception = $this->catchException(function () use($namedArgs, $function) { $namedArgs->matchNamedArgs($function, ['foo' => 'foo', 'bar' => 'bar', 'numeric']); }); $this->assertInstanceOf('CM_Exception_Invalid', $exception); /** @var CM_Exception_Invalid $exception */ $this->assertSame('Unmatched arguments', $exception->getMessage()); $this->assertSame(['argNames' => 'bar, 0'], $exception->getMetaInfo()); }
/** * @param string $key * @param string $className * @param mixed|null $default * @param Closure|null $getter * @throws CM_Exception_InvalidParam * @return object */ public function getObject($key, $className, $default = null, Closure $getter = null) { if (!$getter) { $getter = function ($className, $param) { $arguments = (array) $param; $reflectionClass = new ReflectionClass($className); $constructor = $reflectionClass->getConstructor(); if ($constructor->getNumberOfRequiredParameters() > 1) { $namedArgs = new CM_Util_NamedArgs(); try { $arguments = $namedArgs->matchNamedArgs($constructor, $arguments); } catch (CM_Exception_Invalid $ex) { throw new CM_Exception_InvalidParam('Not enough parameters', null, ['parameters' => $param, 'className' => $className]); } } return $reflectionClass->newInstanceArgs($arguments); }; } $param = $this->_get($key, $default); if (!$param instanceof $className) { if (is_object($param)) { throw new CM_Exception_InvalidParam(get_class($param) . ' is not a ' . $className); } return $getter($className, $param); } return $param; }
/** * @param string $serviceName * @param ReflectionMethod $method * @param array $arguments * @throws CM_Exception_Invalid * @return array */ protected function _matchNamedArgs($serviceName, ReflectionMethod $method, array $arguments) { $namedArgs = new CM_Util_NamedArgs(); try { return $namedArgs->matchNamedArgs($method, $arguments); } catch (CM_Exception_Invalid $e) { throw new CM_Exception_Invalid("Cannot match arguments for `{$serviceName}`: {$e->getMessage()}"); } }
/** * @param string $serviceName * @param ReflectionMethod $method * @param array $arguments * @throws CM_Exception_Invalid * @return array */ protected function _matchNamedArgs($serviceName, ReflectionMethod $method, array $arguments) { $namedArgs = new CM_Util_NamedArgs(); try { return $namedArgs->matchNamedArgs($method, $arguments); } catch (CM_Exception_Invalid $e) { throw new CM_Exception_Invalid('Cannot match arguments for service', null, ['serviceName' => $serviceName, 'originalExceptionMessage' => $e->getMessage()]); } }