Commit: b4c416e55a6172612f7ee0b61a466fd182d188d5

Author: Nate Abele | Date: 2011-03-29 08:35:41 -0400
Correcting issue in `\action\Request::_parseAccept()` where the `Accept` header only contains a single value. Fixes #322.
diff --git a/libraries/lithium/action/Request.php b/libraries/lithium/action/Request.php index 2ed35a7..387a427 100644 --- a/libraries/lithium/action/Request.php +++ b/libraries/lithium/action/Request.php @@ -344,7 +344,7 @@ class Request extends \lithium\net\http\Message { return $this->_acceptContent; } $accept = $this->env('HTTP_ACCEPT'); - $accept = (strpos($accept, ',') === false) ? array('text/html') : explode(',', $accept); + $accept = (preg_match('/[a-z,-]/i', $accept)) ? explode(',', $accept) : array('text/html'); foreach (array_reverse($accept) as $i => $type) { unset($accept[$i]); diff --git a/libraries/lithium/tests/cases/action/RequestTest.php b/libraries/lithium/tests/cases/action/RequestTest.php index fd00914..826a445 100644 --- a/libraries/lithium/tests/cases/action/RequestTest.php +++ b/libraries/lithium/tests/cases/action/RequestTest.php @@ -922,6 +922,24 @@ class RequestTest extends \lithium\test\Unit { $request = new Request(array('env' => array('HTTP_ACCEPT' => join(',', $android)))); $this->assertEqual('html', $request->accepts()); } + + /** + * Tests that `Accept` headers with only one listed content type are parsed property, and tests + * that `'* /*'` is still parsed as `'text/html'`. + */ + public function testAcceptSingleContentType() { + $request = new Request(array('env' => array('HTTP_ACCEPT' => 'application/json,text/xml'))); + $this->assertEqual(array('application/json', 'text/xml'), $request->accepts(true)); + $this->assertEqual('json', $request->accepts()); + + $request = new Request(array('env' => array('HTTP_ACCEPT' => 'application/json'))); + $this->assertEqual(array('application/json'), $request->accepts(true)); + $this->assertEqual('json', $request->accepts()); + + $request = new Request(array('env' => array('HTTP_ACCEPT' => '*/*'))); + $this->assertEqual(array('text/html'), $request->accepts(true)); + $this->assertEqual('html', $request->accepts()); + } } ?> \ No newline at end of file