587 lines
20 KiB
PHP
587 lines
20 KiB
PHP
<?php
|
|
namespace GuzzleHttp\Tests\Psr7;
|
|
|
|
use GuzzleHttp\Psr7;
|
|
use GuzzleHttp\Psr7\FnStream;
|
|
use GuzzleHttp\Psr7\NoSeekStream;
|
|
|
|
class FunctionsTest extends \PHPUnit_Framework_TestCase
|
|
{
|
|
public function testCopiesToString()
|
|
{
|
|
$s = Psr7\stream_for('foobaz');
|
|
$this->assertEquals('foobaz', Psr7\copy_to_string($s));
|
|
$s->seek(0);
|
|
$this->assertEquals('foo', Psr7\copy_to_string($s, 3));
|
|
$this->assertEquals('baz', Psr7\copy_to_string($s, 3));
|
|
$this->assertEquals('', Psr7\copy_to_string($s));
|
|
}
|
|
|
|
public function testCopiesToStringStopsWhenReadFails()
|
|
{
|
|
$s1 = Psr7\stream_for('foobaz');
|
|
$s1 = FnStream::decorate($s1, [
|
|
'read' => function () { return ''; }
|
|
]);
|
|
$result = Psr7\copy_to_string($s1);
|
|
$this->assertEquals('', $result);
|
|
}
|
|
|
|
public function testCopiesToStream()
|
|
{
|
|
$s1 = Psr7\stream_for('foobaz');
|
|
$s2 = Psr7\stream_for('');
|
|
Psr7\copy_to_stream($s1, $s2);
|
|
$this->assertEquals('foobaz', (string) $s2);
|
|
$s2 = Psr7\stream_for('');
|
|
$s1->seek(0);
|
|
Psr7\copy_to_stream($s1, $s2, 3);
|
|
$this->assertEquals('foo', (string) $s2);
|
|
Psr7\copy_to_stream($s1, $s2, 3);
|
|
$this->assertEquals('foobaz', (string) $s2);
|
|
}
|
|
|
|
public function testStopsCopyToStreamWhenWriteFails()
|
|
{
|
|
$s1 = Psr7\stream_for('foobaz');
|
|
$s2 = Psr7\stream_for('');
|
|
$s2 = FnStream::decorate($s2, ['write' => function () { return 0; }]);
|
|
Psr7\copy_to_stream($s1, $s2);
|
|
$this->assertEquals('', (string) $s2);
|
|
}
|
|
|
|
public function testStopsCopyToSteamWhenWriteFailsWithMaxLen()
|
|
{
|
|
$s1 = Psr7\stream_for('foobaz');
|
|
$s2 = Psr7\stream_for('');
|
|
$s2 = FnStream::decorate($s2, ['write' => function () { return 0; }]);
|
|
Psr7\copy_to_stream($s1, $s2, 10);
|
|
$this->assertEquals('', (string) $s2);
|
|
}
|
|
|
|
public function testStopsCopyToSteamWhenReadFailsWithMaxLen()
|
|
{
|
|
$s1 = Psr7\stream_for('foobaz');
|
|
$s1 = FnStream::decorate($s1, ['read' => function () { return ''; }]);
|
|
$s2 = Psr7\stream_for('');
|
|
Psr7\copy_to_stream($s1, $s2, 10);
|
|
$this->assertEquals('', (string) $s2);
|
|
}
|
|
|
|
public function testReadsLines()
|
|
{
|
|
$s = Psr7\stream_for("foo\nbaz\nbar");
|
|
$this->assertEquals("foo\n", Psr7\readline($s));
|
|
$this->assertEquals("baz\n", Psr7\readline($s));
|
|
$this->assertEquals("bar", Psr7\readline($s));
|
|
}
|
|
|
|
public function testReadsLinesUpToMaxLength()
|
|
{
|
|
$s = Psr7\stream_for("12345\n");
|
|
$this->assertEquals("123", Psr7\readline($s, 4));
|
|
$this->assertEquals("45\n", Psr7\readline($s));
|
|
}
|
|
|
|
public function testReadsLineUntilFalseReturnedFromRead()
|
|
{
|
|
$s = $this->getMockBuilder('GuzzleHttp\Psr7\Stream')
|
|
->setMethods(['read', 'eof'])
|
|
->disableOriginalConstructor()
|
|
->getMock();
|
|
$s->expects($this->exactly(2))
|
|
->method('read')
|
|
->will($this->returnCallback(function () {
|
|
static $c = false;
|
|
if ($c) {
|
|
return false;
|
|
}
|
|
$c = true;
|
|
return 'h';
|
|
}));
|
|
$s->expects($this->exactly(2))
|
|
->method('eof')
|
|
->will($this->returnValue(false));
|
|
$this->assertEquals("h", Psr7\readline($s));
|
|
}
|
|
|
|
public function testCalculatesHash()
|
|
{
|
|
$s = Psr7\stream_for('foobazbar');
|
|
$this->assertEquals(md5('foobazbar'), Psr7\hash($s, 'md5'));
|
|
}
|
|
|
|
/**
|
|
* @expectedException \RuntimeException
|
|
*/
|
|
public function testCalculatesHashThrowsWhenSeekFails()
|
|
{
|
|
$s = new NoSeekStream(Psr7\stream_for('foobazbar'));
|
|
$s->read(2);
|
|
Psr7\hash($s, 'md5');
|
|
}
|
|
|
|
public function testCalculatesHashSeeksToOriginalPosition()
|
|
{
|
|
$s = Psr7\stream_for('foobazbar');
|
|
$s->seek(4);
|
|
$this->assertEquals(md5('foobazbar'), Psr7\hash($s, 'md5'));
|
|
$this->assertEquals(4, $s->tell());
|
|
}
|
|
|
|
public function testOpensFilesSuccessfully()
|
|
{
|
|
$r = Psr7\try_fopen(__FILE__, 'r');
|
|
$this->assertInternalType('resource', $r);
|
|
fclose($r);
|
|
}
|
|
|
|
/**
|
|
* @expectedException \RuntimeException
|
|
* @expectedExceptionMessage Unable to open /path/to/does/not/exist using mode r
|
|
*/
|
|
public function testThrowsExceptionNotWarning()
|
|
{
|
|
Psr7\try_fopen('/path/to/does/not/exist', 'r');
|
|
}
|
|
|
|
public function parseQueryProvider()
|
|
{
|
|
return [
|
|
// Does not need to parse when the string is empty
|
|
['', []],
|
|
// Can parse mult-values items
|
|
['q=a&q=b', ['q' => ['a', 'b']]],
|
|
// Can parse multi-valued items that use numeric indices
|
|
['q[0]=a&q[1]=b', ['q[0]' => 'a', 'q[1]' => 'b']],
|
|
// Can parse duplicates and does not include numeric indices
|
|
['q[]=a&q[]=b', ['q[]' => ['a', 'b']]],
|
|
// Ensures that the value of "q" is an array even though one value
|
|
['q[]=a', ['q[]' => 'a']],
|
|
// Does not modify "." to "_" like PHP's parse_str()
|
|
['q.a=a&q.b=b', ['q.a' => 'a', 'q.b' => 'b']],
|
|
// Can decode %20 to " "
|
|
['q%20a=a%20b', ['q a' => 'a b']],
|
|
// Can parse funky strings with no values by assigning each to null
|
|
['q&a', ['q' => null, 'a' => null]],
|
|
// Does not strip trailing equal signs
|
|
['data=abc=', ['data' => 'abc=']],
|
|
// Can store duplicates without affecting other values
|
|
['foo=a&foo=b&?µ=c', ['foo' => ['a', 'b'], '?µ' => 'c']],
|
|
// Sets value to null when no "=" is present
|
|
['foo', ['foo' => null]],
|
|
// Preserves "0" keys.
|
|
['0', ['0' => null]],
|
|
// Sets the value to an empty string when "=" is present
|
|
['0=', ['0' => '']],
|
|
// Preserves falsey keys
|
|
['var=0', ['var' => '0']],
|
|
['a[b][c]=1&a[b][c]=2', ['a[b][c]' => ['1', '2']]],
|
|
['a[b]=c&a[d]=e', ['a[b]' => 'c', 'a[d]' => 'e']],
|
|
// Ensure it doesn't leave things behind with repeated values
|
|
// Can parse mult-values items
|
|
['q=a&q=b&q=c', ['q' => ['a', 'b', 'c']]],
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @dataProvider parseQueryProvider
|
|
*/
|
|
public function testParsesQueries($input, $output)
|
|
{
|
|
$result = Psr7\parse_query($input);
|
|
$this->assertSame($output, $result);
|
|
}
|
|
|
|
public function testDoesNotDecode()
|
|
{
|
|
$str = 'foo%20=bar';
|
|
$data = Psr7\parse_query($str, false);
|
|
$this->assertEquals(['foo%20' => 'bar'], $data);
|
|
}
|
|
|
|
/**
|
|
* @dataProvider parseQueryProvider
|
|
*/
|
|
public function testParsesAndBuildsQueries($input, $output)
|
|
{
|
|
$result = Psr7\parse_query($input, false);
|
|
$this->assertSame($input, Psr7\build_query($result, false));
|
|
}
|
|
|
|
public function testEncodesWithRfc1738()
|
|
{
|
|
$str = Psr7\build_query(['foo bar' => 'baz+'], PHP_QUERY_RFC1738);
|
|
$this->assertEquals('foo+bar=baz%2B', $str);
|
|
}
|
|
|
|
public function testEncodesWithRfc3986()
|
|
{
|
|
$str = Psr7\build_query(['foo bar' => 'baz+'], PHP_QUERY_RFC3986);
|
|
$this->assertEquals('foo%20bar=baz%2B', $str);
|
|
}
|
|
|
|
public function testDoesNotEncode()
|
|
{
|
|
$str = Psr7\build_query(['foo bar' => 'baz+'], false);
|
|
$this->assertEquals('foo bar=baz+', $str);
|
|
}
|
|
|
|
public function testCanControlDecodingType()
|
|
{
|
|
$result = Psr7\parse_query('var=foo+bar', PHP_QUERY_RFC3986);
|
|
$this->assertEquals('foo+bar', $result['var']);
|
|
$result = Psr7\parse_query('var=foo+bar', PHP_QUERY_RFC1738);
|
|
$this->assertEquals('foo bar', $result['var']);
|
|
}
|
|
|
|
public function testParsesRequestMessages()
|
|
{
|
|
$req = "GET /abc HTTP/1.0\r\nHost: foo.com\r\nFoo: Bar\r\nBaz: Bam\r\nBaz: Qux\r\n\r\nTest";
|
|
$request = Psr7\parse_request($req);
|
|
$this->assertEquals('GET', $request->getMethod());
|
|
$this->assertEquals('/abc', $request->getRequestTarget());
|
|
$this->assertEquals('1.0', $request->getProtocolVersion());
|
|
$this->assertEquals('foo.com', $request->getHeaderLine('Host'));
|
|
$this->assertEquals('Bar', $request->getHeaderLine('Foo'));
|
|
$this->assertEquals('Bam, Qux', $request->getHeaderLine('Baz'));
|
|
$this->assertEquals('Test', (string) $request->getBody());
|
|
$this->assertEquals('http://foo.com/abc', (string) $request->getUri());
|
|
}
|
|
|
|
public function testParsesRequestMessagesWithHttpsScheme()
|
|
{
|
|
$req = "PUT /abc?baz=bar HTTP/1.1\r\nHost: foo.com:443\r\n\r\n";
|
|
$request = Psr7\parse_request($req);
|
|
$this->assertEquals('PUT', $request->getMethod());
|
|
$this->assertEquals('/abc?baz=bar', $request->getRequestTarget());
|
|
$this->assertEquals('1.1', $request->getProtocolVersion());
|
|
$this->assertEquals('foo.com:443', $request->getHeaderLine('Host'));
|
|
$this->assertEquals('', (string) $request->getBody());
|
|
$this->assertEquals('https://foo.com/abc?baz=bar', (string) $request->getUri());
|
|
}
|
|
|
|
public function testParsesRequestMessagesWithUriWhenHostIsNotFirst()
|
|
{
|
|
$req = "PUT / HTTP/1.1\r\nFoo: Bar\r\nHost: foo.com\r\n\r\n";
|
|
$request = Psr7\parse_request($req);
|
|
$this->assertEquals('PUT', $request->getMethod());
|
|
$this->assertEquals('/', $request->getRequestTarget());
|
|
$this->assertEquals('http://foo.com/', (string) $request->getUri());
|
|
}
|
|
|
|
public function testParsesRequestMessagesWithFullUri()
|
|
{
|
|
$req = "GET https://www.google.com:443/search?q=foobar HTTP/1.1\r\nHost: www.google.com\r\n\r\n";
|
|
$request = Psr7\parse_request($req);
|
|
$this->assertEquals('GET', $request->getMethod());
|
|
$this->assertEquals('https://www.google.com:443/search?q=foobar', $request->getRequestTarget());
|
|
$this->assertEquals('1.1', $request->getProtocolVersion());
|
|
$this->assertEquals('www.google.com', $request->getHeaderLine('Host'));
|
|
$this->assertEquals('', (string) $request->getBody());
|
|
$this->assertEquals('https://www.google.com/search?q=foobar', (string) $request->getUri());
|
|
}
|
|
|
|
/**
|
|
* @expectedException \InvalidArgumentException
|
|
*/
|
|
public function testValidatesRequestMessages()
|
|
{
|
|
Psr7\parse_request("HTTP/1.1 200 OK\r\n\r\n");
|
|
}
|
|
|
|
public function testParsesResponseMessages()
|
|
{
|
|
$res = "HTTP/1.0 200 OK\r\nFoo: Bar\r\nBaz: Bam\r\nBaz: Qux\r\n\r\nTest";
|
|
$response = Psr7\parse_response($res);
|
|
$this->assertEquals(200, $response->getStatusCode());
|
|
$this->assertEquals('OK', $response->getReasonPhrase());
|
|
$this->assertEquals('1.0', $response->getProtocolVersion());
|
|
$this->assertEquals('Bar', $response->getHeaderLine('Foo'));
|
|
$this->assertEquals('Bam, Qux', $response->getHeaderLine('Baz'));
|
|
$this->assertEquals('Test', (string) $response->getBody());
|
|
}
|
|
|
|
/**
|
|
* @expectedException \InvalidArgumentException
|
|
*/
|
|
public function testValidatesResponseMessages()
|
|
{
|
|
Psr7\parse_response("GET / HTTP/1.1\r\n\r\n");
|
|
}
|
|
|
|
public function testDetermineMimetype()
|
|
{
|
|
$this->assertNull(Psr7\mimetype_from_extension('not-a-real-extension'));
|
|
$this->assertEquals(
|
|
'application/json',
|
|
Psr7\mimetype_from_extension('json')
|
|
);
|
|
$this->assertEquals(
|
|
'image/jpeg',
|
|
Psr7\mimetype_from_filename('/tmp/images/IMG034821.JPEG')
|
|
);
|
|
}
|
|
|
|
public function testCreatesUriForValue()
|
|
{
|
|
$this->assertInstanceOf('GuzzleHttp\Psr7\Uri', Psr7\uri_for('/foo'));
|
|
$this->assertInstanceOf(
|
|
'GuzzleHttp\Psr7\Uri',
|
|
Psr7\uri_for(new Psr7\Uri('/foo'))
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @expectedException \InvalidArgumentException
|
|
*/
|
|
public function testValidatesUri()
|
|
{
|
|
Psr7\uri_for([]);
|
|
}
|
|
|
|
public function testKeepsPositionOfResource()
|
|
{
|
|
$h = fopen(__FILE__, 'r');
|
|
fseek($h, 10);
|
|
$stream = Psr7\stream_for($h);
|
|
$this->assertEquals(10, $stream->tell());
|
|
$stream->close();
|
|
}
|
|
|
|
public function testCreatesWithFactory()
|
|
{
|
|
$stream = Psr7\stream_for('foo');
|
|
$this->assertInstanceOf('GuzzleHttp\Psr7\Stream', $stream);
|
|
$this->assertEquals('foo', $stream->getContents());
|
|
$stream->close();
|
|
}
|
|
|
|
public function testFactoryCreatesFromEmptyString()
|
|
{
|
|
$s = Psr7\stream_for();
|
|
$this->assertInstanceOf('GuzzleHttp\Psr7\Stream', $s);
|
|
}
|
|
|
|
public function testFactoryCreatesFromNull()
|
|
{
|
|
$s = Psr7\stream_for(null);
|
|
$this->assertInstanceOf('GuzzleHttp\Psr7\Stream', $s);
|
|
}
|
|
|
|
public function testFactoryCreatesFromResource()
|
|
{
|
|
$r = fopen(__FILE__, 'r');
|
|
$s = Psr7\stream_for($r);
|
|
$this->assertInstanceOf('GuzzleHttp\Psr7\Stream', $s);
|
|
$this->assertSame(file_get_contents(__FILE__), (string) $s);
|
|
}
|
|
|
|
public function testFactoryCreatesFromObjectWithToString()
|
|
{
|
|
$r = new HasToString();
|
|
$s = Psr7\stream_for($r);
|
|
$this->assertInstanceOf('GuzzleHttp\Psr7\Stream', $s);
|
|
$this->assertEquals('foo', (string) $s);
|
|
}
|
|
|
|
public function testCreatePassesThrough()
|
|
{
|
|
$s = Psr7\stream_for('foo');
|
|
$this->assertSame($s, Psr7\stream_for($s));
|
|
}
|
|
|
|
/**
|
|
* @expectedException \InvalidArgumentException
|
|
*/
|
|
public function testThrowsExceptionForUnknown()
|
|
{
|
|
Psr7\stream_for(new \stdClass());
|
|
}
|
|
|
|
public function testReturnsCustomMetadata()
|
|
{
|
|
$s = Psr7\stream_for('foo', ['metadata' => ['hwm' => 3]]);
|
|
$this->assertEquals(3, $s->getMetadata('hwm'));
|
|
$this->assertArrayHasKey('hwm', $s->getMetadata());
|
|
}
|
|
|
|
public function testCanSetSize()
|
|
{
|
|
$s = Psr7\stream_for('', ['size' => 10]);
|
|
$this->assertEquals(10, $s->getSize());
|
|
}
|
|
|
|
public function testCanCreateIteratorBasedStream()
|
|
{
|
|
$a = new \ArrayIterator(['foo', 'bar', '123']);
|
|
$p = Psr7\stream_for($a);
|
|
$this->assertInstanceOf('GuzzleHttp\Psr7\PumpStream', $p);
|
|
$this->assertEquals('foo', $p->read(3));
|
|
$this->assertFalse($p->eof());
|
|
$this->assertEquals('b', $p->read(1));
|
|
$this->assertEquals('a', $p->read(1));
|
|
$this->assertEquals('r12', $p->read(3));
|
|
$this->assertFalse($p->eof());
|
|
$this->assertEquals('3', $p->getContents());
|
|
$this->assertTrue($p->eof());
|
|
$this->assertEquals(9, $p->tell());
|
|
}
|
|
|
|
public function testConvertsRequestsToStrings()
|
|
{
|
|
$request = new Psr7\Request('PUT', 'http://foo.com/hi?123', [
|
|
'Baz' => 'bar',
|
|
'Qux' => ' ipsum'
|
|
], 'hello', '1.0');
|
|
$this->assertEquals(
|
|
"PUT /hi?123 HTTP/1.0\r\nHost: foo.com\r\nBaz: bar\r\nQux: ipsum\r\n\r\nhello",
|
|
Psr7\str($request)
|
|
);
|
|
}
|
|
|
|
public function testConvertsResponsesToStrings()
|
|
{
|
|
$response = new Psr7\Response(200, [
|
|
'Baz' => 'bar',
|
|
'Qux' => ' ipsum'
|
|
], 'hello', '1.0', 'FOO');
|
|
$this->assertEquals(
|
|
"HTTP/1.0 200 FOO\r\nBaz: bar\r\nQux: ipsum\r\n\r\nhello",
|
|
Psr7\str($response)
|
|
);
|
|
}
|
|
|
|
public function parseParamsProvider()
|
|
{
|
|
$res1 = array(
|
|
array(
|
|
'<http:/.../front.jpeg>',
|
|
'rel' => 'front',
|
|
'type' => 'image/jpeg',
|
|
),
|
|
array(
|
|
'<http://.../back.jpeg>',
|
|
'rel' => 'back',
|
|
'type' => 'image/jpeg',
|
|
),
|
|
);
|
|
return array(
|
|
array(
|
|
'<http:/.../front.jpeg>; rel="front"; type="image/jpeg", <http://.../back.jpeg>; rel=back; type="image/jpeg"',
|
|
$res1
|
|
),
|
|
array(
|
|
'<http:/.../front.jpeg>; rel="front"; type="image/jpeg",<http://.../back.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(
|
|
'<http://.../side.jpeg?test=1>; rel="side"; type="image/jpeg",<http://.../side.jpeg?test=2>; rel=side; type="image/jpeg"',
|
|
array(
|
|
array('<http://.../side.jpeg?test=1>', 'rel' => 'side', 'type' => 'image/jpeg'),
|
|
array('<http://.../side.jpeg?test=2>', 'rel' => 'side', 'type' => 'image/jpeg')
|
|
)
|
|
),
|
|
array(
|
|
'',
|
|
array()
|
|
)
|
|
);
|
|
}
|
|
/**
|
|
* @dataProvider parseParamsProvider
|
|
*/
|
|
public function testParseParams($header, $result)
|
|
{
|
|
$this->assertEquals($result, Psr7\parse_header($header));
|
|
}
|
|
|
|
public function testParsesArrayHeaders()
|
|
{
|
|
$header = ['a, b', 'c', 'd, e'];
|
|
$this->assertEquals(['a', 'b', 'c', 'd', 'e'], Psr7\normalize_header($header));
|
|
}
|
|
|
|
public function testRewindsBody()
|
|
{
|
|
$body = Psr7\stream_for('abc');
|
|
$res = new Psr7\Response(200, [], $body);
|
|
Psr7\rewind_body($res);
|
|
$this->assertEquals(0, $body->tell());
|
|
$body->rewind(1);
|
|
Psr7\rewind_body($res);
|
|
$this->assertEquals(0, $body->tell());
|
|
}
|
|
|
|
/**
|
|
* @expectedException \RuntimeException
|
|
*/
|
|
public function testThrowsWhenBodyCannotBeRewound()
|
|
{
|
|
$body = Psr7\stream_for('abc');
|
|
$body->read(1);
|
|
$body = FnStream::decorate($body, [
|
|
'rewind' => function () { throw new \RuntimeException('a'); }
|
|
]);
|
|
$res = new Psr7\Response(200, [], $body);
|
|
Psr7\rewind_body($res);
|
|
}
|
|
|
|
public function testCanModifyRequestWithUri()
|
|
{
|
|
$r1 = new Psr7\Request('GET', 'http://foo.com');
|
|
$r2 = Psr7\modify_request($r1, [
|
|
'uri' => new Psr7\Uri('http://www.foo.com')
|
|
]);
|
|
$this->assertEquals('http://www.foo.com', (string) $r2->getUri());
|
|
$this->assertEquals('www.foo.com', (string) $r2->getHeaderLine('host'));
|
|
}
|
|
|
|
public function testCanModifyRequestWithCaseInsensitiveHeader()
|
|
{
|
|
$r1 = new Psr7\Request('GET', 'http://foo.com', ['User-Agent' => 'foo']);
|
|
$r2 = Psr7\modify_request($r1, ['set_headers' => ['User-agent' => 'bar']]);
|
|
$this->assertEquals('bar', $r2->getHeaderLine('User-Agent'));
|
|
$this->assertEquals('bar', $r2->getHeaderLine('User-agent'));
|
|
}
|
|
|
|
public function testReturnsAsIsWhenNoChanges()
|
|
{
|
|
$request = new Psr7\Request('GET', 'http://foo.com');
|
|
$this->assertSame($request, Psr7\modify_request($request, []));
|
|
}
|
|
|
|
public function testReturnsUriAsIsWhenNoChanges()
|
|
{
|
|
$r1 = new Psr7\Request('GET', 'http://foo.com');
|
|
$r2 = Psr7\modify_request($r1, ['set_headers' => ['foo' => 'bar']]);
|
|
$this->assertNotSame($r1, $r2);
|
|
$this->assertEquals('bar', $r2->getHeaderLine('foo'));
|
|
}
|
|
|
|
public function testRemovesHeadersFromMessage()
|
|
{
|
|
$r1 = new Psr7\Request('GET', 'http://foo.com', ['foo' => 'bar']);
|
|
$r2 = Psr7\modify_request($r1, ['remove_headers' => ['foo']]);
|
|
$this->assertNotSame($r1, $r2);
|
|
$this->assertFalse($r2->hasHeader('foo'));
|
|
}
|
|
|
|
public function testAddsQueryToUri()
|
|
{
|
|
$r1 = new Psr7\Request('GET', 'http://foo.com');
|
|
$r2 = Psr7\modify_request($r1, ['query' => 'foo=bar']);
|
|
$this->assertNotSame($r1, $r2);
|
|
$this->assertEquals('foo=bar', $r2->getUri()->getQuery());
|
|
}
|
|
}
|