/**
  * Test the getByMethod action - expect 0 results
  */
 public function testGetByMethodWithoutResults()
 {
     $this->router->add('/', 'GET', function () {
     });
     $routes = $this->router->getRoutesByMethod('POST');
     $this->assertEquals(0, count($routes));
 }
 /**
  * Resolve the given url and call the method that belongs to the route
  *
  * @param  array $request [contains the uri and the request method]
  *
  * @return mixed
  */
 public function resolve($request)
 {
     // get all register routes with the same request method
     $routes = $this->router->getRoutesByMethod($request['method']);
     // remove trailing and leading slash
     $requestedUri = trim(preg_replace('/\\?.*/', '', $request['uri']), '/');
     // loop trough the posible routes
     foreach ($routes as $route) {
         $matches = array();
         // if the requested route matches one of the defined routes
         if ($route->getUrl() === $requestedUri || preg_match('~^' . $route->getUrl() . '$~', $requestedUri, $matches)) {
             $arguments = $this->getArguments($matches);
             if (is_object($route->getAction()) && $route->getAction() instanceof \Closure) {
                 return call_user_func_array($route->getAction(), $arguments);
             }
             $className = $route->getNamespace() . substr($route->getAction(), 0, strpos($route->getAction(), '::'));
             $functionName = substr($route->getAction(), strpos($route->getAction(), '::') + 2);
             return call_user_func_array(array(new $className(), $functionName), $arguments);
         }
     }
     // if no route is found throw an RouteNotFoundException
     throw new RouteNotFoundException($request['method'] . ' ' . $request['uri'] . ' not found');
 }