summaryrefslogtreecommitdiff
path: root/server/vendor/guzzlehttp/psr7/tests/FunctionsTest.php
diff options
context:
space:
mode:
authorEole <josselin.35@live.fr>2016-01-21 10:29:26 +0100
committerEole <josselin.35@live.fr>2016-01-21 10:29:26 +0100
commita44cc1d2e3c0f147e91a5c052ac7fd879e34e706 (patch)
treebdd6f72e0ba732c4fcc0479d1cfcf4d0baa5885d /server/vendor/guzzlehttp/psr7/tests/FunctionsTest.php
parent35db27b0e62b4cdcb03b0d21bceb4efc769e6161 (diff)
Init Server Composer Components
Diffstat (limited to 'server/vendor/guzzlehttp/psr7/tests/FunctionsTest.php')
-rw-r--r--server/vendor/guzzlehttp/psr7/tests/FunctionsTest.php586
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());
+ }
+}