Skip to content

Commit

Permalink
[HttpFoundation] Allow setting an unknown status code without specify…
Browse files Browse the repository at this point in the history
…ing a text
  • Loading branch information
vicb committed Jul 19, 2012
1 parent 50eb170 commit ed8823c
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 3 deletions.
21 changes: 18 additions & 3 deletions src/Symfony/Component/HttpFoundation/Response.php
Expand Up @@ -254,20 +254,35 @@ public function getProtocolVersion()
* Sets the response status code.
*
* @param integer $code HTTP status code
* @param string $text HTTP status text
* @param mixed $text HTTP status text
*
* If the status text is null it will be automatically populated for the known
* status codes and left empty otherwise.
*
* @throws \InvalidArgumentException When the HTTP status code is not valid
*
* @api
*/
public function setStatusCode($code, $text = null)
{
$this->statusCode = (int) $code;
$this->statusCode = $code = (int) $code;
if ($this->isInvalid()) {
throw new \InvalidArgumentException(sprintf('The HTTP status code "%s" is not valid.', $code));
}

$this->statusText = false === $text ? '' : (null === $text ? self::$statusTexts[$this->statusCode] : $text);
if (null === $text) {
$this->statusText = isset(self::$statusTexts[$code]) ? self::$statusTexts[$code] : '';

return;
}

if (false === $text) {
$this->statusText = '';

return;
}

$this->statusText = $text;
}

/**
Expand Down
27 changes: 27 additions & 0 deletions tests/Symfony/Tests/Component/HttpFoundation/ResponseTest.php
Expand Up @@ -323,6 +323,33 @@ public function testIsInvalid()
$this->assertFalse($response->isInvalid());
}

/**
* @dataProvider getStatusCodeFixtures
*/
public function testSetStatusCode($code, $text, $expectedText)
{
$response = new Response();

$response->setStatusCode($code, $text);

$statusText = new \ReflectionProperty($response, 'statusText');
$statusText->setAccessible(true);

$this->assertEquals($expectedText, $statusText->getValue($response));
}

public function getStatusCodeFixtures()
{
return array(
array('200', null, 'OK'),
array('200', false, ''),
array('200', 'foo', 'foo'),
array('199', null, ''),
array('199', false, ''),
array('199', 'foo', 'foo')
);
}

public function testIsInformational()
{
$response = new Response('', 100);
Expand Down

0 comments on commit ed8823c

Please sign in to comment.