2
namespace GuzzleHttp\Tests\Message;
4
use GuzzleHttp\Message\AbstractMessage;
5
use GuzzleHttp\Message\Request;
6
use GuzzleHttp\Message\Response;
7
use GuzzleHttp\Stream\Stream;
10
* @covers \GuzzleHttp\Message\AbstractMessage
12
class AbstractMessageTest extends \PHPUnit_Framework_TestCase
14
public function testHasProtocolVersion()
16
$m = new Request('GET', '/');
17
$this->assertEquals(1.1, $m->getProtocolVersion());
20
public function testHasHeaders()
22
$m = new Request('GET', 'http://foo.com');
23
$this->assertFalse($m->hasHeader('foo'));
24
$m->addHeader('foo', 'bar');
25
$this->assertTrue($m->hasHeader('foo'));
28
public function testInitializesMessageWithProtocolVersionOption()
30
$m = new Request('GET', '/', [], null, [
31
'protocol_version' => '10'
33
$this->assertEquals(10, $m->getProtocolVersion());
36
public function testHasBody()
38
$m = new Request('GET', 'http://foo.com');
39
$this->assertNull($m->getBody());
40
$s = Stream::factory('test');
42
$this->assertSame($s, $m->getBody());
43
$this->assertFalse($m->hasHeader('Content-Length'));
46
public function testCanRemoveBodyBySettingToNullAndRemovesCommonBodyHeaders()
48
$m = new Request('GET', 'http://foo.com');
49
$m->setBody(Stream::factory('foo'));
50
$m->setHeader('Content-Length', 3)->setHeader('Transfer-Encoding', 'chunked');
52
$this->assertNull($m->getBody());
53
$this->assertFalse($m->hasHeader('Content-Length'));
54
$this->assertFalse($m->hasHeader('Transfer-Encoding'));
57
public function testCastsToString()
59
$m = new Request('GET', 'http://foo.com');
60
$m->setHeader('foo', 'bar');
61
$m->setBody(Stream::factory('baz'));
62
$this->assertEquals("GET / HTTP/1.1\r\nHost: foo.com\r\nfoo: bar\r\n\r\nbaz", (string) $m);
65
public function parseParamsProvider()
69
'<http:/.../front.jpeg>',
71
'type' => 'image/jpeg',
74
'<http://.../back.jpeg>',
76
'type' => 'image/jpeg',
82
'<http:/.../front.jpeg>; rel="front"; type="image/jpeg", <http://.../back.jpeg>; rel=back; type="image/jpeg"',
86
'<http:/.../front.jpeg>; rel="front"; type="image/jpeg",<http://.../back.jpeg>; rel=back; type="image/jpeg"',
90
'foo="baz"; bar=123, boo, test="123", foobar="foo;bar"',
92
array('foo' => 'baz', 'bar' => '123'),
94
array('test' => '123'),
95
array('foobar' => 'foo;bar')
99
'<http://.../side.jpeg?test=1>; rel="side"; type="image/jpeg",<http://.../side.jpeg?test=2>; rel=side; type="image/jpeg"',
101
array('<http://.../side.jpeg?test=1>', 'rel' => 'side', 'type' => 'image/jpeg'),
102
array('<http://.../side.jpeg?test=2>', 'rel' => 'side', 'type' => 'image/jpeg')
113
* @dataProvider parseParamsProvider
115
public function testParseParams($header, $result)
117
$request = new Request('GET', '/', ['foo' => $header]);
118
$this->assertEquals($result, Request::parseHeader($request, 'foo'));
121
public function testAddsHeadersWhenNotPresent()
123
$h = new Request('GET', 'http://foo.com');
124
$h->addHeader('foo', 'bar');
125
$this->assertInternalType('string', $h->getHeader('foo'));
126
$this->assertEquals('bar', $h->getHeader('foo'));
129
public function testAddsHeadersWhenPresentSameCase()
131
$h = new Request('GET', 'http://foo.com');
132
$h->addHeader('foo', 'bar')->addHeader('foo', 'baz');
133
$this->assertEquals('bar, baz', $h->getHeader('foo'));
134
$this->assertEquals(['bar', 'baz'], $h->getHeader('foo', true));
137
public function testAddsMultipleHeaders()
139
$h = new Request('GET', 'http://foo.com');
142
'baz' => [' bam ', 'boo']
144
$this->assertEquals([
146
'baz' => ['bam', 'boo'],
147
'Host' => ['foo.com']
148
], $h->getHeaders());
151
public function testAddsHeadersWhenPresentDifferentCase()
153
$h = new Request('GET', 'http://foo.com');
154
$h->addHeader('Foo', 'bar')->addHeader('fOO', 'baz');
155
$this->assertEquals('bar, baz', $h->getHeader('foo'));
158
public function testAddsHeadersWithArray()
160
$h = new Request('GET', 'http://foo.com');
161
$h->addHeader('Foo', ['bar', 'baz']);
162
$this->assertEquals('bar, baz', $h->getHeader('foo'));
166
* @expectedException \InvalidArgumentException
168
public function testThrowsExceptionWhenInvalidValueProvidedToAddHeader()
170
(new Request('GET', 'http://foo.com'))->addHeader('foo', false);
173
public function testGetHeadersReturnsAnArrayOfOverTheWireHeaderValues()
175
$h = new Request('GET', 'http://foo.com');
176
$h->addHeader('foo', 'bar');
177
$h->addHeader('Foo', 'baz');
178
$h->addHeader('boO', 'test');
179
$result = $h->getHeaders();
180
$this->assertInternalType('array', $result);
181
$this->assertArrayHasKey('Foo', $result);
182
$this->assertArrayNotHasKey('foo', $result);
183
$this->assertArrayHasKey('boO', $result);
184
$this->assertEquals(['bar', 'baz'], $result['Foo']);
185
$this->assertEquals(['test'], $result['boO']);
188
public function testSetHeaderOverwritesExistingValues()
190
$h = new Request('GET', 'http://foo.com');
191
$h->setHeader('foo', 'bar');
192
$this->assertEquals('bar', $h->getHeader('foo'));
193
$h->setHeader('Foo', 'baz');
194
$this->assertEquals('baz', $h->getHeader('foo'));
195
$this->assertArrayHasKey('Foo', $h->getHeaders());
198
public function testSetHeaderOverwritesExistingValuesUsingHeaderArray()
200
$h = new Request('GET', 'http://foo.com');
201
$h->setHeader('foo', ['bar']);
202
$this->assertEquals('bar', $h->getHeader('foo'));
205
public function testSetHeaderOverwritesExistingValuesUsingArray()
207
$h = new Request('GET', 'http://foo.com');
208
$h->setHeader('foo', ['bar']);
209
$this->assertEquals('bar', $h->getHeader('foo'));
213
* @expectedException \InvalidArgumentException
215
public function testThrowsExceptionWhenInvalidValueProvidedToSetHeader()
217
(new Request('GET', 'http://foo.com'))->setHeader('foo', false);
220
public function testSetHeadersOverwritesAllHeaders()
222
$h = new Request('GET', 'http://foo.com');
223
$h->setHeader('foo', 'bar');
224
$h->setHeaders(['foo' => 'a', 'boo' => 'b']);
225
$this->assertEquals(['foo' => ['a'], 'boo' => ['b']], $h->getHeaders());
228
public function testChecksIfCaseInsensitiveHeaderIsPresent()
230
$h = new Request('GET', 'http://foo.com');
231
$h->setHeader('foo', 'bar');
232
$this->assertTrue($h->hasHeader('foo'));
233
$this->assertTrue($h->hasHeader('Foo'));
234
$h->setHeader('fOo', 'bar');
235
$this->assertTrue($h->hasHeader('Foo'));
238
public function testRemovesHeaders()
240
$h = new Request('GET', 'http://foo.com');
241
$h->setHeader('foo', 'bar');
242
$h->removeHeader('foo');
243
$this->assertFalse($h->hasHeader('foo'));
244
$h->setHeader('Foo', 'bar');
245
$h->removeHeader('FOO');
246
$this->assertFalse($h->hasHeader('foo'));
249
public function testReturnsCorrectTypeWhenMissing()
251
$h = new Request('GET', 'http://foo.com');
252
$this->assertInternalType('string', $h->getHeader('foo'));
253
$this->assertInternalType('array', $h->getHeader('foo', true));
256
public function testSetsIntegersAndFloatsAsHeaders()
258
$h = new Request('GET', 'http://foo.com');
259
$h->setHeader('foo', 10);
260
$h->setHeader('bar', 10.5);
261
$h->addHeader('foo', 10);
262
$h->addHeader('bar', 10.5);
263
$this->assertSame('10, 10', $h->getHeader('foo'));
264
$this->assertSame('10.5, 10.5', $h->getHeader('bar'));
267
public function testGetsResponseStartLine()
269
$m = new Response(200);
270
$this->assertEquals('HTTP/1.1 200 OK', Response::getStartLine($m));
274
* @expectedException \InvalidArgumentException
276
public function testThrowsWhenMessageIsUnknown()
278
$m = $this->getMockBuilder('GuzzleHttp\Message\AbstractMessage')
279
->getMockForAbstractClass();
280
AbstractMessage::getStartLine($m);