diff options
| author | Eole <josselin.35@live.fr> | 2016-01-21 10:29:26 +0100 |
|---|---|---|
| committer | Eole <josselin.35@live.fr> | 2016-01-21 10:29:26 +0100 |
| commit | a44cc1d2e3c0f147e91a5c052ac7fd879e34e706 (patch) | |
| tree | bdd6f72e0ba732c4fcc0479d1cfcf4d0baa5885d /server/vendor/guzzlehttp/psr7/tests/FunctionsTest.php | |
| parent | 35db27b0e62b4cdcb03b0d21bceb4efc769e6161 (diff) | |
Init Server Composer Components
Diffstat (limited to 'server/vendor/guzzlehttp/psr7/tests/FunctionsTest.php')
| -rw-r--r-- | server/vendor/guzzlehttp/psr7/tests/FunctionsTest.php | 586 |
1 files changed, 586 insertions, 0 deletions
diff --git a/server/vendor/guzzlehttp/psr7/tests/FunctionsTest.php b/server/vendor/guzzlehttp/psr7/tests/FunctionsTest.php new file mode 100644 index 0000000..de5b5cb --- /dev/null +++ b/server/vendor/guzzlehttp/psr7/tests/FunctionsTest.php @@ -0,0 +1,586 @@ +<?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()); + } +} |
