/**
  * register all error handler (not found, not allowed, and generic error handler).
  */
 public function registerErrorHandlers()
 {
     $this->container['notAllowedHandler'] = function ($c) {
         return function ($request, $response, $methods) use($c) {
             $result = new Renderer();
             $result->errors[] = ['code' => 405, 'message' => 'Method must be one of: ' . implode(', ', $methods)];
             return $result->render($response, 405);
         };
     };
     $this->container['notFoundHandler'] = function ($c) {
         return function ($request, $response) use($c) {
             $result = new Renderer();
             $result->errors[] = ['code' => 404, 'message' => 'Not Found'];
             return $result->render($response, 404);
         };
     };
     $this->container['errorHandler'] = function ($c) {
         return function ($request, $response, $exception) use($c) {
             $result = new Renderer();
             $error_code = $exception->getCode();
             if (is_numeric($error_code) && $error_code > 300 && $error_code < 600) {
                 $error_code = $exception->getCode();
             } else {
                 $error_code = 500;
             }
             if ($c->settings['displayErrorDetails'] === true) {
                 $result->errors[] = ['code' => $error_code, 'message' => $exception->getMessage(), 'file' => $exception->getFile(), 'line' => $exception->getLine(), 'trace' => explode("\n", $exception->getTraceAsString())];
             } else {
                 $result->errors[] = ['code' => $error_code, 'message' => $exception->getMessage()];
             }
             return $result->render($response, $error_code);
         };
     };
 }
 public function testValidResponse()
 {
     $body = ['status' => 'ok'];
     $jsonRenderer = new Renderer();
     $jsonRenderer->data = $body;
     $response = new Response();
     $response = $jsonRenderer->render($response);
     $this->assertEquals($response->getStatusCode(), 200);
     $this->assertEquals($response->getHeaderLine('Content-Type'), 'application/json;charset=utf-8');
     $this->assertEquals($response->getBody(), json_encode($jsonRenderer));
 }