summaryrefslogtreecommitdiff
path: root/vendor/guzzle/guzzle/tests/Guzzle/Tests/Parser
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/guzzle/guzzle/tests/Guzzle/Tests/Parser')
-rw-r--r--vendor/guzzle/guzzle/tests/Guzzle/Tests/Parser/Cookie/CookieParserProvider.php381
-rw-r--r--vendor/guzzle/guzzle/tests/Guzzle/Tests/Parser/Cookie/CookieParserTest.php22
-rw-r--r--vendor/guzzle/guzzle/tests/Guzzle/Tests/Parser/Message/MessageParserProvider.php225
-rw-r--r--vendor/guzzle/guzzle/tests/Guzzle/Tests/Parser/Message/MessageParserTest.php58
-rw-r--r--vendor/guzzle/guzzle/tests/Guzzle/Tests/Parser/Message/PeclHttpMessageParserTest.php36
-rw-r--r--vendor/guzzle/guzzle/tests/Guzzle/Tests/Parser/ParserRegistryTest.php33
-rw-r--r--vendor/guzzle/guzzle/tests/Guzzle/Tests/Parser/UriTemplate/AbstractUriTemplateTest.php113
-rw-r--r--vendor/guzzle/guzzle/tests/Guzzle/Tests/Parser/UriTemplate/PeclUriTemplateTest.php27
-rw-r--r--vendor/guzzle/guzzle/tests/Guzzle/Tests/Parser/UriTemplate/UriTemplateTest.php106
9 files changed, 1001 insertions, 0 deletions
diff --git a/vendor/guzzle/guzzle/tests/Guzzle/Tests/Parser/Cookie/CookieParserProvider.php b/vendor/guzzle/guzzle/tests/Guzzle/Tests/Parser/Cookie/CookieParserProvider.php
new file mode 100644
index 0000000..86d43c0
--- /dev/null
+++ b/vendor/guzzle/guzzle/tests/Guzzle/Tests/Parser/Cookie/CookieParserProvider.php
@@ -0,0 +1,381 @@
+<?php
+
+namespace Guzzle\Tests\Parser\Cookie;
+
+use Guzzle\Http\Url;
+
+/**
+ * @covers Guzzle\Parser\Cookie\CookieParser
+ */
+class CookieParserProvider extends \Guzzle\Tests\GuzzleTestCase
+{
+ /**
+ * Provides the parsed information from a cookie
+ *
+ * @return array
+ */
+ public function cookieParserDataProvider()
+ {
+ return array(
+ array(
+ 'ASIHTTPRequestTestCookie=This+is+the+value; expires=Sat, 26-Jul-2008 17:00:42 GMT; path=/tests; domain=allseeing-i.com; PHPSESSID=6c951590e7a9359bcedde25cda73e43c; path=/";',
+ array(
+ 'domain' => 'allseeing-i.com',
+ 'path' => '/',
+ 'data' => array(
+ 'PHPSESSID' => '6c951590e7a9359bcedde25cda73e43c'
+ ),
+ 'max_age' => NULL,
+ 'expires' => 'Sat, 26-Jul-2008 17:00:42 GMT',
+ 'version' => NULL,
+ 'secure' => NULL,
+ 'discard' => NULL,
+ 'port' => NULL,
+ 'cookies' => array(
+ 'ASIHTTPRequestTestCookie' => 'This+is+the+value'
+ ),
+ 'comment' => null,
+ 'comment_url' => null,
+ 'http_only' => false
+ )
+ ),
+ array('', false),
+ array('foo', false),
+ // Test setting a blank value for a cookie
+ array(array(
+ 'foo=', 'foo =', 'foo =;', 'foo= ;', 'foo =', 'foo= '),
+ array(
+ 'cookies' => array(
+ 'foo' => ''
+ ),
+ 'data' => array(),
+ 'discard' => null,
+ 'domain' => null,
+ 'expires' => null,
+ 'max_age' => null,
+ 'path' => '/',
+ 'port' => null,
+ 'secure' => null,
+ 'version' => null,
+ 'comment' => null,
+ 'comment_url' => null,
+ 'http_only' => false
+ )
+ ),
+ // Test setting a value and removing quotes
+ array(array(
+ 'foo=1', 'foo =1', 'foo =1;', 'foo=1 ;', 'foo =1', 'foo= 1', 'foo = 1 ;', 'foo="1"', 'foo="1";', 'foo= "1";'),
+ array(
+ 'cookies' => array(
+ 'foo' => '1'
+ ),
+ 'data' => array(),
+ 'discard' => null,
+ 'domain' => null,
+ 'expires' => null,
+ 'max_age' => null,
+ 'path' => '/',
+ 'port' => null,
+ 'secure' => null,
+ 'version' => null,
+ 'comment' => null,
+ 'comment_url' => null,
+ 'http_only' => false
+ )
+ ),
+ // Test setting multiple values
+ array(array(
+ 'foo=1; bar=2;', 'foo =1; bar = "2"', 'foo=1; bar=2'),
+ array(
+ 'cookies' => array(
+ 'foo' => '1',
+ 'bar' => '2',
+ ),
+ 'data' => array(),
+ 'discard' => null,
+ 'domain' => null,
+ 'expires' => null,
+ 'max_age' => null,
+ 'path' => '/',
+ 'port' => null,
+ 'secure' => null,
+ 'version' => null,
+ 'comment' => null,
+ 'comment_url' => null,
+ 'http_only' => false
+ )
+ ),
+ // Tests getting the domain and path from a reference request
+ array(array(
+ 'foo=1; port="80,8081"; httponly', 'foo=1; port="80,8081"; domain=www.test.com; HttpOnly;', 'foo=1; ; domain=www.test.com; path=/path; port="80,8081"; HttpOnly;'),
+ array(
+ 'cookies' => array(
+ 'foo' => 1
+ ),
+ 'data' => array(),
+ 'discard' => null,
+ 'domain' => 'www.test.com',
+ 'expires' => null,
+ 'max_age' => null,
+ 'path' => '/path',
+ 'port' => array('80', '8081'),
+ 'secure' => null,
+ 'version' => null,
+ 'comment' => null,
+ 'comment_url' => null,
+ 'http_only' => true
+ ),
+ 'http://www.test.com/path/'
+ ),
+ // Some of the following tests are based on http://framework.zend.com/svn/framework/standard/trunk/tests/Zend/Http/CookieTest.php
+ array(
+ 'justacookie=foo; domain=example.com',
+ array(
+ 'cookies' => array(
+ 'justacookie' => 'foo'
+ ),
+ 'domain' => 'example.com',
+ 'data' => array(),
+ 'discard' => null,
+ 'expires' => null,
+ 'max_age' => null,
+ 'path' => '/',
+ 'port' => null,
+ 'secure' => null,
+ 'version' => null,
+ 'comment' => null,
+ 'comment_url' => null,
+ 'http_only' => false
+ )
+ ),
+ array(
+ 'expires=tomorrow; secure; path=/Space Out/; expires=Tue, 21-Nov-2006 08:33:44 GMT; domain=.example.com',
+ array(
+ 'cookies' => array(
+ 'expires' => 'tomorrow'
+ ),
+ 'domain' => '.example.com',
+ 'path' => '/Space Out/',
+ 'expires' => 'Tue, 21-Nov-2006 08:33:44 GMT',
+ 'data' => array(),
+ 'discard' => null,
+ 'port' => null,
+ 'secure' => true,
+ 'version' => null,
+ 'max_age' => null,
+ 'comment' => null,
+ 'comment_url' => null,
+ 'http_only' => false
+ )
+ ),
+ array(
+ 'domain=unittests; expires=Tue, 21-Nov-2006 08:33:44 GMT; domain=example.com; path=/some value/',
+ array(
+ 'cookies' => array(
+ 'domain' => 'unittests'
+ ),
+ 'domain' => 'example.com',
+ 'path' => '/some value/',
+ 'expires' => 'Tue, 21-Nov-2006 08:33:44 GMT',
+ 'secure' => false,
+ 'data' => array(),
+ 'discard' => null,
+ 'max_age' => null,
+ 'port' => null,
+ 'version' => null,
+ 'comment' => null,
+ 'comment_url' => null,
+ 'http_only' => false
+ )
+ ),
+ array(
+ 'path=indexAction; path=/; domain=.foo.com; expires=Tue, 21-Nov-2006 08:33:44 GMT',
+ array(
+ 'cookies' => array(
+ 'path' => 'indexAction'
+ ),
+ 'domain' => '.foo.com',
+ 'path' => '/',
+ 'expires' => 'Tue, 21-Nov-2006 08:33:44 GMT',
+ 'secure' => false,
+ 'data' => array(),
+ 'discard' => null,
+ 'max_age' => null,
+ 'port' => null,
+ 'version' => null,
+ 'comment' => null,
+ 'comment_url' => null,
+ 'http_only' => false
+ )
+ ),
+ array(
+ 'secure=sha1; secure; SECURE; domain=some.really.deep.domain.com; version=1; Max-Age=86400',
+ array(
+ 'cookies' => array(
+ 'secure' => 'sha1'
+ ),
+ 'domain' => 'some.really.deep.domain.com',
+ 'path' => '/',
+ 'secure' => true,
+ 'data' => array(),
+ 'discard' => null,
+ 'expires' => time() + 86400,
+ 'max_age' => 86400,
+ 'port' => null,
+ 'version' => 1,
+ 'comment' => null,
+ 'comment_url' => null,
+ 'http_only' => false
+ )
+ ),
+ array(
+ 'PHPSESSID=123456789+abcd%2Cef; secure; discard; domain=.localdomain; path=/foo/baz; expires=Tue, 21-Nov-2006 08:33:44 GMT;',
+ array(
+ 'cookies' => array(
+ 'PHPSESSID' => '123456789+abcd%2Cef'
+ ),
+ 'domain' => '.localdomain',
+ 'path' => '/foo/baz',
+ 'expires' => 'Tue, 21-Nov-2006 08:33:44 GMT',
+ 'secure' => true,
+ 'data' => array(),
+ 'discard' => true,
+ 'max_age' => null,
+ 'port' => null,
+ 'version' => null,
+ 'comment' => null,
+ 'comment_url' => null,
+ 'http_only' => false
+ )
+ ),
+ // rfc6265#section-5.1.4
+ array(
+ 'cookie=value',
+ array(
+ 'cookies' => array(
+ 'cookie' => 'value'
+ ),
+ 'domain' => 'example.com',
+ 'data' => array(),
+ 'discard' => null,
+ 'expires' => null,
+ 'max_age' => null,
+ 'path' => '/some/path',
+ 'port' => null,
+ 'secure' => null,
+ 'version' => null,
+ 'comment' => null,
+ 'comment_url' => null,
+ 'http_only' => false
+ ),
+ 'http://example.com/some/path/test.html'
+ ),
+ array(
+ 'empty=path',
+ array(
+ 'cookies' => array(
+ 'empty' => 'path'
+ ),
+ 'domain' => 'example.com',
+ 'data' => array(),
+ 'discard' => null,
+ 'expires' => null,
+ 'max_age' => null,
+ 'path' => '/',
+ 'port' => null,
+ 'secure' => null,
+ 'version' => null,
+ 'comment' => null,
+ 'comment_url' => null,
+ 'http_only' => false
+ ),
+ 'http://example.com/test.html'
+ ),
+ array(
+ 'baz=qux',
+ array(
+ 'cookies' => array(
+ 'baz' => 'qux'
+ ),
+ 'domain' => 'example.com',
+ 'data' => array(),
+ 'discard' => null,
+ 'expires' => null,
+ 'max_age' => null,
+ 'path' => '/',
+ 'port' => null,
+ 'secure' => null,
+ 'version' => null,
+ 'comment' => null,
+ 'comment_url' => null,
+ 'http_only' => false
+ ),
+ 'http://example.com?query=here'
+ ),
+ array(
+ 'test=noSlashPath; path=someString',
+ array(
+ 'cookies' => array(
+ 'test' => 'noSlashPath'
+ ),
+ 'domain' => 'example.com',
+ 'data' => array(),
+ 'discard' => null,
+ 'expires' => null,
+ 'max_age' => null,
+ 'path' => '/real/path',
+ 'port' => null,
+ 'secure' => null,
+ 'version' => null,
+ 'comment' => null,
+ 'comment_url' => null,
+ 'http_only' => false
+ ),
+ 'http://example.com/real/path/'
+ ),
+ );
+ }
+
+ /**
+ * @dataProvider cookieParserDataProvider
+ */
+ public function testParseCookie($cookie, $parsed, $url = null)
+ {
+ $c = $this->cookieParserClass;
+ $parser = new $c();
+
+ $request = null;
+ if ($url) {
+ $url = Url::factory($url);
+ $host = $url->getHost();
+ $path = $url->getPath();
+ } else {
+ $host = '';
+ $path = '';
+ }
+
+ foreach ((array) $cookie as $c) {
+ $p = $parser->parseCookie($c, $host, $path);
+
+ // Remove expires values from the assertion if they are relatively equal by allowing a 5 minute difference
+ if ($p['expires'] != $parsed['expires']) {
+ if (abs($p['expires'] - $parsed['expires']) < 300) {
+ unset($p['expires']);
+ unset($parsed['expires']);
+ }
+ }
+
+ if (is_array($parsed)) {
+ foreach ($parsed as $key => $value) {
+ $this->assertEquals($parsed[$key], $p[$key], 'Comparing ' . $key . ' ' . var_export($value, true) . ' : ' . var_export($parsed, true) . ' | ' . var_export($p, true));
+ }
+
+ foreach ($p as $key => $value) {
+ $this->assertEquals($p[$key], $parsed[$key], 'Comparing ' . $key . ' ' . var_export($value, true) . ' : ' . var_export($parsed, true) . ' | ' . var_export($p, true));
+ }
+ } else {
+ $this->assertEquals($parsed, $p);
+ }
+ }
+ }
+}
diff --git a/vendor/guzzle/guzzle/tests/Guzzle/Tests/Parser/Cookie/CookieParserTest.php b/vendor/guzzle/guzzle/tests/Guzzle/Tests/Parser/Cookie/CookieParserTest.php
new file mode 100644
index 0000000..75d336f
--- /dev/null
+++ b/vendor/guzzle/guzzle/tests/Guzzle/Tests/Parser/Cookie/CookieParserTest.php
@@ -0,0 +1,22 @@
+<?php
+
+namespace Guzzle\Tests\Parser\Cookie;
+
+use Guzzle\Parser\Cookie\CookieParser;
+
+/**
+ * @covers Guzzle\Parser\Cookie\CookieParser
+ */
+class CookieParserTest extends CookieParserProvider
+{
+ protected $cookieParserClass = 'Guzzle\Parser\Cookie\CookieParser';
+
+ public function testUrlDecodesCookies()
+ {
+ $parser = new CookieParser();
+ $result = $parser->parseCookie('foo=baz+bar', null, null, true);
+ $this->assertEquals(array(
+ 'foo' => 'baz bar'
+ ), $result['cookies']);
+ }
+}
diff --git a/vendor/guzzle/guzzle/tests/Guzzle/Tests/Parser/Message/MessageParserProvider.php b/vendor/guzzle/guzzle/tests/Guzzle/Tests/Parser/Message/MessageParserProvider.php
new file mode 100644
index 0000000..da58bb4
--- /dev/null
+++ b/vendor/guzzle/guzzle/tests/Guzzle/Tests/Parser/Message/MessageParserProvider.php
@@ -0,0 +1,225 @@
+<?php
+
+namespace Guzzle\Tests\Parser\Message;
+
+class MessageParserProvider extends \Guzzle\Tests\GuzzleTestCase
+{
+ public function requestProvider()
+ {
+ $auth = base64_encode('michael:foo');
+
+ return array(
+
+ // Empty request
+ array('', false),
+
+ // Converts casing of request. Does not require host header.
+ array("GET / HTTP/1.1\r\n\r\n", array(
+ 'method' => 'GET',
+ 'protocol' => 'HTTP',
+ 'version' => '1.1',
+ 'request_url' => array(
+ 'scheme' => 'http',
+ 'host' => '',
+ 'port' => '',
+ 'path' => '/',
+ 'query' => ''
+ ),
+ 'headers' => array(),
+ 'body' => ''
+ )),
+ // Path and query string, multiple header values per header and case sensitive storage
+ array("HEAD /path?query=foo HTTP/1.0\r\nHost: example.com\r\nX-Foo: foo\r\nx-foo: Bar\r\nX-Foo: foo\r\nX-Foo: Baz\r\n\r\n", array(
+ 'method' => 'HEAD',
+ 'protocol' => 'HTTP',
+ 'version' => '1.0',
+ 'request_url' => array(
+ 'scheme' => 'http',
+ 'host' => 'example.com',
+ 'port' => '',
+ 'path' => '/path',
+ 'query' => 'query=foo'
+ ),
+ 'headers' => array(
+ 'Host' => 'example.com',
+ 'X-Foo' => array('foo', 'foo', 'Baz'),
+ 'x-foo' => 'Bar'
+ ),
+ 'body' => ''
+ )),
+ // Includes a body
+ array("PUT / HTTP/1.0\r\nhost: example.com:443\r\nContent-Length: 4\r\n\r\ntest", array(
+ 'method' => 'PUT',
+ 'protocol' => 'HTTP',
+ 'version' => '1.0',
+ 'request_url' => array(
+ 'scheme' => 'https',
+ 'host' => 'example.com',
+ 'port' => '443',
+ 'path' => '/',
+ 'query' => ''
+ ),
+ 'headers' => array(
+ 'host' => 'example.com:443',
+ 'Content-Length' => '4'
+ ),
+ 'body' => 'test'
+ )),
+ // Includes Authorization headers
+ array("GET / HTTP/1.1\r\nHost: example.com:8080\r\nAuthorization: Basic {$auth}\r\n\r\n", array(
+ 'method' => 'GET',
+ 'protocol' => 'HTTP',
+ 'version' => '1.1',
+ 'request_url' => array(
+ 'scheme' => 'http',
+ 'host' => 'example.com',
+ 'port' => '8080',
+ 'path' => '/',
+ 'query' => ''
+ ),
+ 'headers' => array(
+ 'Host' => 'example.com:8080',
+ 'Authorization' => "Basic {$auth}"
+ ),
+ 'body' => ''
+ )),
+ // Include authorization header
+ array("GET / HTTP/1.1\r\nHost: example.com:8080\r\nauthorization: Basic {$auth}\r\n\r\n", array(
+ 'method' => 'GET',
+ 'protocol' => 'HTTP',
+ 'version' => '1.1',
+ 'request_url' => array(
+ 'scheme' => 'http',
+ 'host' => 'example.com',
+ 'port' => '8080',
+ 'path' => '/',
+ 'query' => ''
+ ),
+ 'headers' => array(
+ 'Host' => 'example.com:8080',
+ 'authorization' => "Basic {$auth}"
+ ),
+ 'body' => ''
+ )),
+ );
+ }
+
+ public function responseProvider()
+ {
+ return array(
+ // Empty request
+ array('', false),
+
+ array("HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n", array(
+ 'protocol' => 'HTTP',
+ 'version' => '1.1',
+ 'code' => '200',
+ 'reason_phrase' => 'OK',
+ 'headers' => array(
+ 'Content-Length' => 0
+ ),
+ 'body' => ''
+ )),
+ array("HTTP/1.0 400 Bad Request\r\nContent-Length: 0\r\n\r\n", array(
+ 'protocol' => 'HTTP',
+ 'version' => '1.0',
+ 'code' => '400',
+ 'reason_phrase' => 'Bad Request',
+ 'headers' => array(
+ 'Content-Length' => 0
+ ),
+ 'body' => ''
+ )),
+ array("HTTP/1.0 100 Continue\r\n\r\n", array(
+ 'protocol' => 'HTTP',
+ 'version' => '1.0',
+ 'code' => '100',
+ 'reason_phrase' => 'Continue',
+ 'headers' => array(),
+ 'body' => ''
+ )),
+ array("HTTP/1.1 204 No Content\r\nX-Foo: foo\r\nx-foo: Bar\r\nX-Foo: foo\r\n\r\n", array(
+ 'protocol' => 'HTTP',
+ 'version' => '1.1',
+ 'code' => '204',
+ 'reason_phrase' => 'No Content',
+ 'headers' => array(
+ 'X-Foo' => array('foo', 'foo'),
+ 'x-foo' => 'Bar'
+ ),
+ 'body' => ''
+ )),
+ array("HTTP/1.1 200 Ok that is great!\r\nContent-Length: 4\r\n\r\nTest", array(
+ 'protocol' => 'HTTP',
+ 'version' => '1.1',
+ 'code' => '200',
+ 'reason_phrase' => 'Ok that is great!',
+ 'headers' => array(
+ 'Content-Length' => 4
+ ),
+ 'body' => 'Test'
+ )),
+ );
+ }
+
+ public function compareRequestResults($result, $expected)
+ {
+ if (!$result) {
+ $this->assertFalse($expected);
+ return;
+ }
+
+ $this->assertEquals($result['method'], $expected['method']);
+ $this->assertEquals($result['protocol'], $expected['protocol']);
+ $this->assertEquals($result['version'], $expected['version']);
+ $this->assertEquals($result['request_url'], $expected['request_url']);
+ $this->assertEquals($result['body'], $expected['body']);
+ $this->compareHttpHeaders($result['headers'], $expected['headers']);
+ }
+
+ public function compareResponseResults($result, $expected)
+ {
+ if (!$result) {
+ $this->assertFalse($expected);
+ return;
+ }
+
+ $this->assertEquals($result['protocol'], $expected['protocol']);
+ $this->assertEquals($result['version'], $expected['version']);
+ $this->assertEquals($result['code'], $expected['code']);
+ $this->assertEquals($result['reason_phrase'], $expected['reason_phrase']);
+ $this->assertEquals($result['body'], $expected['body']);
+ $this->compareHttpHeaders($result['headers'], $expected['headers']);
+ }
+
+ protected function normalizeHeaders($headers)
+ {
+ $normalized = array();
+ foreach ($headers as $key => $value) {
+ $key = strtolower($key);
+ if (!isset($normalized[$key])) {
+ $normalized[$key] = $value;
+ } elseif (!is_array($normalized[$key])) {
+ $normalized[$key] = array($value);
+ } else {
+ $normalized[$key][] = $value;
+ }
+ }
+
+ foreach ($normalized as $key => &$value) {
+ if (is_array($value)) {
+ sort($value);
+ }
+ }
+
+ return $normalized;
+ }
+
+ public function compareHttpHeaders($result, $expected)
+ {
+ // Aggregate all headers case-insensitively
+ $result = $this->normalizeHeaders($result);
+ $expected = $this->normalizeHeaders($expected);
+ $this->assertEquals($result, $expected);
+ }
+}
diff --git a/vendor/guzzle/guzzle/tests/Guzzle/Tests/Parser/Message/MessageParserTest.php b/vendor/guzzle/guzzle/tests/Guzzle/Tests/Parser/Message/MessageParserTest.php
new file mode 100644
index 0000000..2f52228
--- /dev/null
+++ b/vendor/guzzle/guzzle/tests/Guzzle/Tests/Parser/Message/MessageParserTest.php
@@ -0,0 +1,58 @@
+<?php
+
+namespace Guzzle\Tests\Parser\Message;
+
+use Guzzle\Parser\Message\MessageParser;
+
+/**
+ * @covers Guzzle\Parser\Message\AbstractMessageParser
+ * @covers Guzzle\Parser\Message\MessageParser
+ */
+class MessageParserTest extends MessageParserProvider
+{
+ /**
+ * @dataProvider requestProvider
+ */
+ public function testParsesRequests($message, $parts)
+ {
+ $parser = new MessageParser();
+ $this->compareRequestResults($parts, $parser->parseRequest($message));
+ }
+
+ /**
+ * @dataProvider responseProvider
+ */
+ public function testParsesResponses($message, $parts)
+ {
+ $parser = new MessageParser();
+ $this->compareResponseResults($parts, $parser->parseResponse($message));
+ }
+
+ public function testParsesRequestsWithMissingProtocol()
+ {
+ $parser = new MessageParser();
+ $parts = $parser->parseRequest("GET /\r\nHost: Foo.com\r\n\r\n");
+ $this->assertEquals('GET', $parts['method']);
+ $this->assertEquals('HTTP', $parts['protocol']);
+ $this->assertEquals('1.1', $parts['version']);
+ }
+
+ public function testParsesRequestsWithMissingVersion()
+ {
+ $parser = new MessageParser();
+ $parts = $parser->parseRequest("GET / HTTP\r\nHost: Foo.com\r\n\r\n");
+ $this->assertEquals('GET', $parts['method']);
+ $this->assertEquals('HTTP', $parts['protocol']);
+ $this->assertEquals('1.1', $parts['version']);
+ }
+
+ public function testParsesResponsesWithMissingReasonPhrase()
+ {
+ $parser = new MessageParser();
+ $parts = $parser->parseResponse("HTTP/1.1 200\r\n\r\n");
+ $this->assertEquals('200', $parts['code']);
+ $this->assertEquals('', $parts['reason_phrase']);
+ $this->assertEquals('HTTP', $parts['protocol']);
+ $this->assertEquals('1.1', $parts['version']);
+ }
+}
diff --git a/vendor/guzzle/guzzle/tests/Guzzle/Tests/Parser/Message/PeclHttpMessageParserTest.php b/vendor/guzzle/guzzle/tests/Guzzle/Tests/Parser/Message/PeclHttpMessageParserTest.php
new file mode 100644
index 0000000..6706e20
--- /dev/null
+++ b/vendor/guzzle/guzzle/tests/Guzzle/Tests/Parser/Message/PeclHttpMessageParserTest.php
@@ -0,0 +1,36 @@
+<?php
+
+namespace Guzzle\Tests\Parser\Message;
+
+use Guzzle\Parser\Message\PeclHttpMessageParser;
+
+/**
+ * @covers Guzzle\Parser\Message\PeclHttpMessageParser
+ */
+class PeclHttpMessageParserTest extends MessageParserProvider
+{
+ protected function setUp()
+ {
+ if (!function_exists('http_parse_message')) {
+ $this->markTestSkipped('pecl_http is not available.');
+ }
+ }
+
+ /**
+ * @dataProvider requestProvider
+ */
+ public function testParsesRequests($message, $parts)
+ {
+ $parser = new PeclHttpMessageParser();
+ $this->compareRequestResults($parts, $parser->parseRequest($message));
+ }
+
+ /**
+ * @dataProvider responseProvider
+ */
+ public function testParsesResponses($message, $parts)
+ {
+ $parser = new PeclHttpMessageParser();
+ $this->compareResponseResults($parts, $parser->parseResponse($message));
+ }
+}
diff --git a/vendor/guzzle/guzzle/tests/Guzzle/Tests/Parser/ParserRegistryTest.php b/vendor/guzzle/guzzle/tests/Guzzle/Tests/Parser/ParserRegistryTest.php
new file mode 100644
index 0000000..7675efb
--- /dev/null
+++ b/vendor/guzzle/guzzle/tests/Guzzle/Tests/Parser/ParserRegistryTest.php
@@ -0,0 +1,33 @@
+<?php
+
+namespace Guzzle\Tests\Parser;
+
+use Guzzle\Parser\ParserRegistry;
+
+/**
+ * @covers Guzzle\Parser\ParserRegistry
+ */
+class ParserRegistryTest extends \Guzzle\Tests\GuzzleTestCase
+{
+ public function testStoresObjects()
+ {
+ $r = new ParserRegistry();
+ $c = new \stdClass();
+ $r->registerParser('foo', $c);
+ $this->assertSame($c, $r->getParser('foo'));
+ }
+
+ public function testReturnsNullWhenNotFound()
+ {
+ $r = new ParserRegistry();
+ $this->assertNull($r->getParser('FOO'));
+ }
+
+ public function testReturnsLazyLoadedDefault()
+ {
+ $r = new ParserRegistry();
+ $c = $r->getParser('cookie');
+ $this->assertInstanceOf('Guzzle\Parser\Cookie\CookieParser', $c);
+ $this->assertSame($c, $r->getParser('cookie'));
+ }
+}
diff --git a/vendor/guzzle/guzzle/tests/Guzzle/Tests/Parser/UriTemplate/AbstractUriTemplateTest.php b/vendor/guzzle/guzzle/tests/Guzzle/Tests/Parser/UriTemplate/AbstractUriTemplateTest.php
new file mode 100644
index 0000000..a05fc2e
--- /dev/null
+++ b/vendor/guzzle/guzzle/tests/Guzzle/Tests/Parser/UriTemplate/AbstractUriTemplateTest.php
@@ -0,0 +1,113 @@
+<?php
+
+namespace Guzzle\Tests\Parsers\UriTemplate;
+
+abstract class AbstractUriTemplateTest extends \Guzzle\Tests\GuzzleTestCase
+{
+ /**
+ * @return array
+ */
+ public function templateProvider()
+ {
+ $t = array();
+ $params = array(
+ 'var' => 'value',
+ 'hello' => 'Hello World!',
+ 'empty' => '',
+ 'path' => '/foo/bar',
+ 'x' => '1024',
+ 'y' => '768',
+ 'null' => null,
+ 'list' => array('red', 'green', 'blue'),
+ 'keys' => array(
+ "semi" => ';',
+ "dot" => '.',
+ "comma" => ','
+ ),
+ 'empty_keys' => array(),
+ );
+
+ return array_map(function($t) use ($params) {
+ $t[] = $params;
+ return $t;
+ }, array(
+ array('foo', 'foo'),
+ array('{var}', 'value'),
+ array('{hello}', 'Hello%20World%21'),
+ array('{+var}', 'value'),
+ array('{+hello}', 'Hello%20World!'),
+ array('{+path}/here', '/foo/bar/here'),
+ array('here?ref={+path}', 'here?ref=/foo/bar'),
+ array('X{#var}', 'X#value'),
+ array('X{#hello}', 'X#Hello%20World!'),
+ array('map?{x,y}', 'map?1024,768'),
+ array('{x,hello,y}', '1024,Hello%20World%21,768'),
+ array('{+x,hello,y}', '1024,Hello%20World!,768'),
+ array('{+path,x}/here', '/foo/bar,1024/here'),
+ array('{#x,hello,y}', '#1024,Hello%20World!,768'),
+ array('{#path,x}/here', '#/foo/bar,1024/here'),
+ array('X{.var}', 'X.value'),
+ array('X{.x,y}', 'X.1024.768'),
+ array('{/var}', '/value'),
+ array('{/var,x}/here', '/value/1024/here'),
+ array('{;x,y}', ';x=1024;y=768'),
+ array('{;x,y,empty}', ';x=1024;y=768;empty'),
+ array('{?x,y}', '?x=1024&y=768'),
+ array('{?x,y,empty}', '?x=1024&y=768&empty='),
+ array('?fixed=yes{&x}', '?fixed=yes&x=1024'),
+ array('{&x,y,empty}', '&x=1024&y=768&empty='),
+ array('{var:3}', 'val'),
+ array('{var:30}', 'value'),
+ array('{list}', 'red,green,blue'),
+ array('{list*}', 'red,green,blue'),
+ array('{keys}', 'semi,%3B,dot,.,comma,%2C'),
+ array('{keys*}', 'semi=%3B,dot=.,comma=%2C'),
+ array('{+path:6}/here', '/foo/b/here'),
+ array('{+list}', 'red,green,blue'),
+ array('{+list*}', 'red,green,blue'),
+ array('{+keys}', 'semi,;,dot,.,comma,,'),
+ array('{+keys*}', 'semi=;,dot=.,comma=,'),
+ array('{#path:6}/here', '#/foo/b/here'),
+ array('{#list}', '#red,green,blue'),
+ array('{#list*}', '#red,green,blue'),
+ array('{#keys}', '#semi,;,dot,.,comma,,'),
+ array('{#keys*}', '#semi=;,dot=.,comma=,'),
+ array('X{.var:3}', 'X.val'),
+ array('X{.list}', 'X.red,green,blue'),
+ array('X{.list*}', 'X.red.green.blue'),
+ array('X{.keys}', 'X.semi,%3B,dot,.,comma,%2C'),
+ array('X{.keys*}', 'X.semi=%3B.dot=..comma=%2C'),
+ array('{/var:1,var}', '/v/value'),
+ array('{/list}', '/red,green,blue'),
+ array('{/list*}', '/red/green/blue'),
+ array('{/list*,path:4}', '/red/green/blue/%2Ffoo'),
+ array('{/keys}', '/semi,%3B,dot,.,comma,%2C'),
+ array('{/keys*}', '/semi=%3B/dot=./comma=%2C'),
+ array('{;hello:5}', ';hello=Hello'),
+ array('{;list}', ';list=red,green,blue'),
+ array('{;list*}', ';list=red;list=green;list=blue'),
+ array('{;keys}', ';keys=semi,%3B,dot,.,comma,%2C'),
+ array('{;keys*}', ';semi=%3B;dot=.;comma=%2C'),
+ array('{?var:3}', '?var=val'),
+ array('{?list}', '?list=red,green,blue'),
+ array('{?list*}', '?list=red&list=green&list=blue'),
+ array('{?keys}', '?keys=semi,%3B,dot,.,comma,%2C'),
+ array('{?keys*}', '?semi=%3B&dot=.&comma=%2C'),
+ array('{&var:3}', '&var=val'),
+ array('{&list}', '&list=red,green,blue'),
+ array('{&list*}', '&list=red&list=green&list=blue'),
+ array('{&keys}', '&keys=semi,%3B,dot,.,comma,%2C'),
+ array('{&keys*}', '&semi=%3B&dot=.&comma=%2C'),
+ array('{.null}', ''),
+ array('{.null,var}', '.value'),
+ array('X{.empty_keys*}', 'X'),
+ array('X{.empty_keys}', 'X'),
+ // Test that missing expansions are skipped
+ array('test{&missing*}', 'test'),
+ // Test that multiple expansions can be set
+ array('http://{var}/{var:2}{?keys*}', 'http://value/va?semi=%3B&dot=.&comma=%2C'),
+ // Test more complex query string stuff
+ array('http://www.test.com{+path}{?var,keys*}', 'http://www.test.com/foo/bar?var=value&semi=%3B&dot=.&comma=%2C')
+ ));
+ }
+}
diff --git a/vendor/guzzle/guzzle/tests/Guzzle/Tests/Parser/UriTemplate/PeclUriTemplateTest.php b/vendor/guzzle/guzzle/tests/Guzzle/Tests/Parser/UriTemplate/PeclUriTemplateTest.php
new file mode 100644
index 0000000..633c5d5
--- /dev/null
+++ b/vendor/guzzle/guzzle/tests/Guzzle/Tests/Parser/UriTemplate/PeclUriTemplateTest.php
@@ -0,0 +1,27 @@
+<?php
+
+namespace Guzzle\Tests\Parsers\UriTemplate;
+
+use Guzzle\Parser\UriTemplate\PeclUriTemplate;
+
+/**
+ * @covers Guzzle\Parser\UriTemplate\PeclUriTemplate
+ */
+class PeclUriTemplateTest extends AbstractUriTemplateTest
+{
+ protected function setUp()
+ {
+ if (!extension_loaded('uri_template')) {
+ $this->markTestSkipped('uri_template PECL extension must be installed to test PeclUriTemplate');
+ }
+ }
+
+ /**
+ * @dataProvider templateProvider
+ */
+ public function testExpandsUriTemplates($template, $expansion, $params)
+ {
+ $uri = new PeclUriTemplate($template);
+ $this->assertEquals($expansion, $uri->expand($template, $params));
+ }
+}
diff --git a/vendor/guzzle/guzzle/tests/Guzzle/Tests/Parser/UriTemplate/UriTemplateTest.php b/vendor/guzzle/guzzle/tests/Guzzle/Tests/Parser/UriTemplate/UriTemplateTest.php
new file mode 100644
index 0000000..5130d6f
--- /dev/null
+++ b/vendor/guzzle/guzzle/tests/Guzzle/Tests/Parser/UriTemplate/UriTemplateTest.php
@@ -0,0 +1,106 @@
+<?php
+
+namespace Guzzle\Tests\Parsers\UriTemplate;
+
+use Guzzle\Parser\UriTemplate\UriTemplate;
+
+/**
+ * @covers Guzzle\Parser\UriTemplate\UriTemplate
+ */
+class UriTemplateTest extends AbstractUriTemplateTest
+{
+ /**
+ * @dataProvider templateProvider
+ */
+ public function testExpandsUriTemplates($template, $expansion, $params)
+ {
+ $uri = new UriTemplate($template);
+ $this->assertEquals($expansion, $uri->expand($template, $params));
+ }
+
+ public function expressionProvider()
+ {
+ return array(
+ array(
+ '{+var*}', array(
+ 'operator' => '+',
+ 'values' => array(
+ array('value' => 'var', 'modifier' => '*')
+ )
+ ),
+ ),
+ array(
+ '{?keys,var,val}', array(
+ 'operator' => '?',
+ 'values' => array(
+ array('value' => 'keys', 'modifier' => ''),
+ array('value' => 'var', 'modifier' => ''),
+ array('value' => 'val', 'modifier' => '')
+ )
+ ),
+ ),
+ array(
+ '{+x,hello,y}', array(
+ 'operator' => '+',
+ 'values' => array(
+ array('value' => 'x', 'modifier' => ''),
+ array('value' => 'hello', 'modifier' => ''),
+ array('value' => 'y', 'modifier' => '')
+ )
+ )
+ )
+ );
+ }
+
+ /**
+ * @dataProvider expressionProvider
+ */
+ public function testParsesExpressions($exp, $data)
+ {
+ $template = new UriTemplate($exp);
+
+ // Access the config object
+ $class = new \ReflectionClass($template);
+ $method = $class->getMethod('parseExpression');
+ $method->setAccessible(true);
+
+ $exp = substr($exp, 1, -1);
+ $this->assertEquals($data, $method->invokeArgs($template, array($exp)));
+ }
+
+ /**
+ * @ticket https://github.com/guzzle/guzzle/issues/90
+ */
+ public function testAllowsNestedArrayExpansion()
+ {
+ $template = new UriTemplate();
+
+ $result = $template->expand('http://example.com{+path}{/segments}{?query,data*,foo*}', array(
+ 'path' => '/foo/bar',
+ 'segments' => array('one', 'two'),
+ 'query' => 'test',
+ 'data' => array(
+ 'more' => array('fun', 'ice cream')
+ ),
+ 'foo' => array(
+ 'baz' => array(
+ 'bar' => 'fizz',
+ 'test' => 'buzz'
+ ),
+ 'bam' => 'boo'
+ )
+ ));
+
+ $this->assertEquals('http://example.com/foo/bar/one,two?query=test&more%5B0%5D=fun&more%5B1%5D=ice%20cream&baz%5Bbar%5D=fizz&baz%5Btest%5D=buzz&bam=boo', $result);
+ }
+
+ /**
+ * @ticket https://github.com/guzzle/guzzle/issues/426
+ */
+ public function testSetRegex()
+ {
+ $template = new UriTemplate();
+ $template->setRegex('/\<\$(.+)\>/');
+ $this->assertSame('/foo', $template->expand('/<$a>', array('a' => 'foo')));
+ }
+}