* @license http://www.apache.org/licenses/LICENSE-2.0 * @link http://phpsx.org */ class ExceptionTest extends TestCase { public function testBadRequestException() { $this->assertRedirection(301, 'PSX\Http\Exception\MovedPermanentlyException', array('http://google.com')); $this->assertRedirection(302, 'PSX\Http\Exception\FoundException', array('http://google.com')); $this->assertRedirection(303, 'PSX\Http\Exception\SeeOtherException', array('http://google.com')); $this->assertRedirection(304, 'PSX\Http\Exception\NotModifiedException'); $this->assertClientError(400, 'PSX\Http\Exception\BadRequestException', array('foo')); $this->assertClientError(401, 'PSX\Http\Exception\UnauthorizedException', array('foo', 'Basic', array('realm' => 'psx'))); $this->assertClientError(403, 'PSX\Http\Exception\ForbiddenException', array('foo')); $this->assertClientError(404, 'PSX\Http\Exception\NotFoundException', array('foo')); $this->assertClientError(405, 'PSX\Http\Exception\MethodNotAllowedException', array('foo', array('GET', 'POST'))); $this->assertClientError(406, 'PSX\Http\Exception\NotAcceptableException', array('foo')); $this->assertClientError(409, 'PSX\Http\Exception\ConflictException', array('foo')); $this->assertClientError(410, 'PSX\Http\Exception\GoneException', array('foo')); $this->assertClientError(415, 'PSX\Http\Exception\UnsupportedMediaTypeException', array('foo')); $this->assertServerError(500, 'PSX\Http\Exception\InternalServerErrorException', array('foo')); $this->assertServerError(501, 'PSX\Http\Exception\NotImplementedException', array('foo')); $this->assertServerError(503, 'PSX\Http\Exception\ServiceUnavailableException', array('foo')); } protected function assertRedirection($statusCode, $className, array $arguments = array()) { $e = $this->getException($className, $arguments); $this->assertInstanceOf('PSX\Http\Exception\RedirectionException', $e); $this->assertGreaterThanOrEqual(300, $e->getStatusCode()); $this->assertLessThan(400, $e->getStatusCode()); $this->assertEquals($statusCode, $e->getStatusCode()); if ($statusCode != 304) { $this->assertEquals('http://google.com', $e->getLocation()); } } protected function assertClientError($statusCode, $className, array $arguments = array()) { $e = $this->getException($className, $arguments); $this->assertInstanceOf('PSX\Http\Exception\ClientErrorException', $e); $this->assertGreaterThanOrEqual(400, $e->getStatusCode()); $this->assertLessThan(500, $e->getStatusCode()); $this->assertEquals($statusCode, $e->getStatusCode()); if ($statusCode == 401) { $this->assertEquals('Basic', $e->getType()); $this->assertEquals(array('realm' => 'psx'), $e->getParameters()); } elseif ($statusCode == 405) { $this->assertEquals(array('GET', 'POST'), $e->getAllowedMethods()); } } protected function assertServerError($statusCode, $className, array $arguments = array()) { $e = $this->getException($className, $arguments); $this->assertInstanceOf('PSX\Http\Exception\ServerErrorException', $e); $this->assertGreaterThanOrEqual(500, $e->getStatusCode()); $this->assertLessThan(600, $e->getStatusCode()); $this->assertEquals($statusCode, $e->getStatusCode()); } protected function getException($className, array $arguments = array()) { $class = new \ReflectionClass($className); $exception = $class->newInstanceArgs($arguments); if (!$exception instanceof \Exception) { $this->fail('Class must be an exception'); } try { throw $exception; } catch (\Exception $e) { return $e; } } } __halt_compiler();----SIGNATURE:----Z6NOn08rq8BQhgfZ8ZZZaqHWaUVIZ0ojxPcd+NWT0A8f3SaAFAitvhG35l28wdacbokFflQUMTvGBwzmr1uJJUWsYfsEVmzz5xz3zHYabIQQOxmvQ3lNMVm1S0pSncjtGXyE7dHnZJ4rEBVkrYoNgfXSVFaozSXEyKYHeGsmpN/QAFCOtZTirKV0KOwJXegFt3JnU8hShTztAJx4nJRYEjFpj0kT2gwtGnzdU5TKqC8xHLSWg6xsgk8nKm4RggGMCK6fCm6HjSh1kZ6EBFIFwQuMIrS/aTRbiKQgTY20pO4qhJrZEI0uTUXLDIUYFzr5jHN1duDZTIVSyhRS1RAzvjZut4Vs+muvjEIvWm50h7OjX3DLJ0FIqcNQBM17VipX0ehwwZQQ2/EC+4WQCoCqtQSQYxRlvtKyWh4rfb913pgN5GW7AUQWu5rgq2KjBmKZInGbjZFbf6t/I7RcyRRMeI10oYOsPn2OkZKLe6Wa81A32mt2RZudWK/M7lU5mYNw36IQtEF2LjWX79+SIx6EuQPn/0T7RUfq5nW01a3Ig+Kk16cLXWM2q4XScqfdCWIuAfsjyXAb/LYSgyD94WO4FiGYCs9l2qvKYMcUuQMfLIrYG5xVhEF3vpCItsOQg8CeBUkadcosuiAZklkEvXMZemI2q9qo853/1xTDfoI2pPs=----ATTACHMENT:----Mzk3NTk4NzY2MjgzOTUyIDE4OTg5MTIzNTI5NDIwMjUgNTYzNjUyOTYzMTcyNDAzNQ==