Exemple #1
0
 /**
  * @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']);
 }
Exemple #2
0
 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());
 }
Exemple #3
0
 /**
  * @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;
 }
Exemple #4
0
 /**
  * @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()}");
     }
 }
Exemple #5
0
 /**
  * @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()]);
     }
 }