Add Message\Header\HeaderCollection

This commit is contained in:
PJ Dietz 2015-03-22 09:38:18 -04:00
parent ba26379fdc
commit 3ab7c55257
2 changed files with 116 additions and 0 deletions

View File

@ -0,0 +1,39 @@
<?php
namespace WellRESTed\Message\Header;
class HeaderCollection implements \ArrayAccess
{
private $headers;
public function __construct()
{
$this->headers = [];
}
public function offsetExists($offset)
{
return isset($this->headers[strtolower($offset)]);
}
public function offsetGet($offset)
{
return $this->headers[strtolower($offset)];
}
public function offsetSet($offset, $value)
{
$header = new Header($offset, $value);
$normalized = strtolower($offset);
if (isset($this->headers[$normalized])) {
$this->headers[$normalized][] = $header;
} else {
$this->headers[$normalized] = [$header];
}
}
public function offsetUnset($offset)
{
unset($this->headers[strtolower($offset)]);
}
}

View File

@ -0,0 +1,77 @@
<?php
namespace pjdietz\WellRESTed\Test\Message\Header;
use WellRESTed\Message\Header\HeaderCollection;
class HeaderCollectionTest extends \PHPUnit_Framework_TestCase
{
/**
* @covers WellRESTed\Message\Header\HeaderCollection::__construct
*/
public function testCreatesInstance()
{
$collection = new HeaderCollection();
$this->assertNotNull($collection);
}
/**
* @covers WellRESTed\Message\Header\HeaderCollection::offsetSet
* @covers WellRESTed\Message\Header\HeaderCollection::offsetExists
* @uses WellRESTed\Message\Header\HeaderCollection::__construct
* @uses WellRESTed\Message\Header\Header
*/
public function testAddsSingleHeaderAndIndicatesCaseInsensitiveIsset()
{
$collection = new HeaderCollection();
$collection["Content-Type"] = "application/json";
$this->assertTrue(isset($collection["content-type"]));
}
/**
* @covers WellRESTed\Message\Header\HeaderCollection::offsetSet
* @covers WellRESTed\Message\Header\HeaderCollection::offsetExists
* @uses WellRESTed\Message\Header\HeaderCollection::__construct
* @uses WellRESTed\Message\Header\Header
*/
public function testAddsMultipleHeadersAndIndicatesCaseInsensitiveIsset()
{
$collection = new HeaderCollection();
$collection["Set-Cookie"] = "cat=Molly";
$collection["SET-COOKIE"] = "dog=Bear";
$this->assertTrue(isset($collection["set-cookie"]));
}
/**
* @covers WellRESTed\Message\Header\HeaderCollection::offsetGet
* @uses WellRESTed\Message\Header\HeaderCollection::offsetSet
* @uses WellRESTed\Message\Header\HeaderCollection::__construct
* @uses WellRESTed\Message\Header\Header
*/
public function testReturnsHeadersWithCaseInsensitiveHeaderName()
{
$collection = new HeaderCollection();
$collection["Set-Cookie"] = "cat=Molly";
$collection["SET-COOKIE"] = "dog=Bear";
$headers = $collection["set-cookie"];
$this->assertContains("Set-Cookie: cat=Molly", $headers);
$this->assertContains("SET-COOKIE: dog=Bear", $headers);
}
/**
* @covers WellRESTed\Message\Header\HeaderCollection::offsetUnset
* @uses WellRESTed\Message\Header\HeaderCollection::__construct
* @uses WellRESTed\Message\Header\HeaderCollection::offsetSet
* @uses WellRESTed\Message\Header\HeaderCollection::offsetExists
* @uses WellRESTed\Message\Header\Header
*/
public function testRemovesHeadersWithCaseInsensitiveHeaderName()
{
$collection = new HeaderCollection();
$collection["Set-Cookie"] = "cat=Molly";
$collection["SET-COOKIE"] = "dog=Bear";
unset($collection["set-cookie"]);
$this->assertFalse(isset($collection["set-cookie"]));
}
}