Commit: b4c416e55a6172612f7ee0b61a466fd182d188d5
Author: Nate Abele | Date: 2011-03-29 08:35:41 -0400
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