assertEquals(1.1, $m->getProtocolVersion()); } public function testHasHeaders() { $m = new Request('GET', 'http://foo.com'); $this->assertFalse($m->hasHeader('foo')); $m->addHeader('foo', 'bar'); $this->assertTrue($m->hasHeader('foo')); } public function testInitializesMessageWithProtocolVersionOption() { $m = new Request('GET', '/', [], null, [ 'protocol_version' => '10' ]); $this->assertEquals(10, $m->getProtocolVersion()); } public function testHasBody() { $m = new Request('GET', 'http://foo.com'); $this->assertNull($m->getBody()); $s = Stream::factory('test'); $m->setBody($s); $this->assertSame($s, $m->getBody()); $this->assertFalse($m->hasHeader('Content-Length')); } public function testCanRemoveBodyBySettingToNullAndRemovesCommonBodyHeaders() { $m = new Request('GET', 'http://foo.com'); $m->setBody(Stream::factory('foo')); $m->setHeader('Content-Length', 3); $m->setHeader('Transfer-Encoding', 'chunked'); $m->setBody(null); $this->assertNull($m->getBody()); $this->assertFalse($m->hasHeader('Content-Length')); $this->assertFalse($m->hasHeader('Transfer-Encoding')); } public function testCastsToString() { $m = new Request('GET', 'http://foo.com'); $m->setHeader('foo', 'bar'); $m->setBody(Stream::factory('baz')); $this->assertEquals("GET / HTTP/1.1\r\nHost: foo.com\r\nfoo: bar\r\n\r\nbaz", (string) $m); } public function parseParamsProvider() { $res1 = array( array( '', 'rel' => 'front', 'type' => 'image/jpeg', ), array( '', 'rel' => 'back', 'type' => 'image/jpeg', ), ); return array( array( '; rel="front"; type="image/jpeg", ; rel=back; type="image/jpeg"', $res1 ), array( '; rel="front"; type="image/jpeg",; rel=back; type="image/jpeg"', $res1 ), array( 'foo="baz"; bar=123, boo, test="123", foobar="foo;bar"', array( array('foo' => 'baz', 'bar' => '123'), array('boo'), array('test' => '123'), array('foobar' => 'foo;bar') ) ), array( '; rel="side"; type="image/jpeg",; rel=side; type="image/jpeg"', array( array('', 'rel' => 'side', 'type' => 'image/jpeg'), array('', 'rel' => 'side', 'type' => 'image/jpeg') ) ), array( '', array() ) ); } /** * @dataProvider parseParamsProvider */ public function testParseParams($header, $result) { $request = new Request('GET', '/', ['foo' => $header]); $this->assertEquals($result, Request::parseHeader($request, 'foo')); } public function testAddsHeadersWhenNotPresent() { $h = new Request('GET', 'http://foo.com'); $h->addHeader('foo', 'bar'); $this->assertInternalType('string', $h->getHeader('foo')); $this->assertEquals('bar', $h->getHeader('foo')); } public function testAddsHeadersWhenPresentSameCase() { $h = new Request('GET', 'http://foo.com'); $h->addHeader('foo', 'bar'); $h->addHeader('foo', 'baz'); $this->assertEquals('bar, baz', $h->getHeader('foo')); $this->assertEquals(['bar', 'baz'], $h->getHeaderAsArray('foo')); } public function testAddsMultipleHeaders() { $h = new Request('GET', 'http://foo.com'); $h->addHeaders([ 'foo' => ' bar', 'baz' => [' bam ', 'boo'] ]); $this->assertEquals([ 'foo' => ['bar'], 'baz' => ['bam', 'boo'], 'Host' => ['foo.com'] ], $h->getHeaders()); } public function testAddsHeadersWhenPresentDifferentCase() { $h = new Request('GET', 'http://foo.com'); $h->addHeader('Foo', 'bar'); $h->addHeader('fOO', 'baz'); $this->assertEquals('bar, baz', $h->getHeader('foo')); } public function testAddsHeadersWithArray() { $h = new Request('GET', 'http://foo.com'); $h->addHeader('Foo', ['bar', 'baz']); $this->assertEquals('bar, baz', $h->getHeader('foo')); } public function testGetHeadersReturnsAnArrayOfOverTheWireHeaderValues() { $h = new Request('GET', 'http://foo.com'); $h->addHeader('foo', 'bar'); $h->addHeader('Foo', 'baz'); $h->addHeader('boO', 'test'); $result = $h->getHeaders(); $this->assertInternalType('array', $result); $this->assertArrayHasKey('Foo', $result); $this->assertArrayNotHasKey('foo', $result); $this->assertArrayHasKey('boO', $result); $this->assertEquals(['bar', 'baz'], $result['Foo']); $this->assertEquals(['test'], $result['boO']); } public function testSetHeaderOverwritesExistingValues() { $h = new Request('GET', 'http://foo.com'); $h->setHeader('foo', 'bar'); $this->assertEquals('bar', $h->getHeader('foo')); $h->setHeader('Foo', 'baz'); $this->assertEquals('baz', $h->getHeader('foo')); $this->assertArrayHasKey('Foo', $h->getHeaders()); } public function testSetHeaderOverwritesExistingValuesUsingHeaderArray() { $h = new Request('GET', 'http://foo.com'); $h->setHeader('foo', ['bar']); $this->assertEquals('bar', $h->getHeader('foo')); } public function testSetHeaderOverwritesExistingValuesUsingArray() { $h = new Request('GET', 'http://foo.com'); $h->setHeader('foo', ['bar']); $this->assertEquals('bar', $h->getHeader('foo')); } public function testSetHeadersOverwritesAllHeaders() { $h = new Request('GET', 'http://foo.com'); $h->setHeader('foo', 'bar'); $h->setHeaders(['foo' => 'a', 'boo' => 'b']); $this->assertEquals(['foo' => ['a'], 'boo' => ['b']], $h->getHeaders()); } public function testChecksIfCaseInsensitiveHeaderIsPresent() { $h = new Request('GET', 'http://foo.com'); $h->setHeader('foo', 'bar'); $this->assertTrue($h->hasHeader('foo')); $this->assertTrue($h->hasHeader('Foo')); $h->setHeader('fOo', 'bar'); $this->assertTrue($h->hasHeader('Foo')); } public function testRemovesHeaders() { $h = new Request('GET', 'http://foo.com'); $h->setHeader('foo', 'bar'); $h->removeHeader('foo'); $this->assertFalse($h->hasHeader('foo')); $h->setHeader('Foo', 'bar'); $h->removeHeader('FOO'); $this->assertFalse($h->hasHeader('foo')); } public function testReturnsCorrectTypeWhenMissing() { $h = new Request('GET', 'http://foo.com'); $this->assertInternalType('string', $h->getHeader('foo')); $this->assertInternalType('array', $h->getHeaderAsArray('foo')); } public function testSetsIntegersAndFloatsAsHeaders() { $h = new Request('GET', 'http://foo.com'); $h->setHeader('foo', 10); $h->setHeader('bar', 10.5); $h->addHeader('foo', 10); $h->addHeader('bar', 10.5); $this->assertSame('10, 10', $h->getHeader('foo')); $this->assertSame('10.5, 10.5', $h->getHeader('bar')); } public function testGetsResponseStartLine() { $m = new Response(200); $this->assertEquals('HTTP/1.1 200 OK', Response::getStartLine($m)); } /** * @expectedException \InvalidArgumentException */ public function testThrowsWhenMessageIsUnknown() { $m = $this->getMockBuilder('GuzzleHttp\Message\AbstractMessage') ->getMockForAbstractClass(); AbstractMessage::getStartLine($m); } }