/api/vendor/guzzlehttp/ringphp/tests/CoreTest.php
PHP | 336 lines | 285 code | 41 blank | 10 comment | 0 complexity | 5f7dca3a73b8831f4465fe8dab669118 MD5 | raw file
- <?php
- namespace GuzzleHttp\Tests\Ring;
- use GuzzleHttp\Ring\Core;
- use GuzzleHttp\Ring\Future\CompletedFutureArray;
- use GuzzleHttp\Ring\Future\FutureArray;
- use GuzzleHttp\Stream\Stream;
- use React\Promise\Deferred;
- class CoreTest extends \PHPUnit_Framework_TestCase
- {
- public function testReturnsNullNoHeadersAreSet()
- {
- $this->assertNull(Core::header([], 'Foo'));
- $this->assertNull(Core::firstHeader([], 'Foo'));
- }
- public function testChecksIfHasHeader()
- {
- $message = [
- 'headers' => [
- 'Foo' => ['Bar', 'Baz'],
- 'foo' => ['hello'],
- 'bar' => ['1']
- ]
- ];
- $this->assertTrue(Core::hasHeader($message, 'Foo'));
- $this->assertTrue(Core::hasHeader($message, 'foo'));
- $this->assertTrue(Core::hasHeader($message, 'FoO'));
- $this->assertTrue(Core::hasHeader($message, 'bar'));
- $this->assertFalse(Core::hasHeader($message, 'barr'));
- }
- public function testReturnsFirstHeaderWhenSimple()
- {
- $this->assertEquals('Bar', Core::firstHeader([
- 'headers' => ['Foo' => ['Bar', 'Baz']],
- ], 'Foo'));
- }
- public function testReturnsFirstHeaderWhenMultiplePerLine()
- {
- $this->assertEquals('Bar', Core::firstHeader([
- 'headers' => ['Foo' => ['Bar, Baz']],
- ], 'Foo'));
- }
- public function testExtractsCaseInsensitiveHeader()
- {
- $this->assertEquals(
- 'hello',
- Core::header(['headers' => ['foo' => ['hello']]], 'FoO')
- );
- }
- public function testExtractsCaseInsensitiveHeaderLines()
- {
- $this->assertEquals(
- ['a', 'b', 'c', 'd'],
- Core::headerLines([
- 'headers' => [
- 'foo' => ['a', 'b'],
- 'Foo' => ['c', 'd']
- ]
- ], 'foo')
- );
- }
- public function testExtractsHeaderLines()
- {
- $this->assertEquals(
- ['bar', 'baz'],
- Core::headerLines([
- 'headers' => [
- 'Foo' => ['bar', 'baz'],
- ],
- ], 'Foo')
- );
- }
- public function testExtractsHeaderAsString()
- {
- $this->assertEquals(
- 'bar, baz',
- Core::header([
- 'headers' => [
- 'Foo' => ['bar', 'baz'],
- ],
- ], 'Foo', true)
- );
- }
- public function testReturnsNullWhenHeaderNotFound()
- {
- $this->assertNull(Core::header(['headers' => []], 'Foo'));
- }
- public function testRemovesHeaders()
- {
- $message = [
- 'headers' => [
- 'foo' => ['bar'],
- 'Foo' => ['bam'],
- 'baz' => ['123'],
- ],
- ];
- $this->assertSame($message, Core::removeHeader($message, 'bam'));
- $this->assertEquals([
- 'headers' => ['baz' => ['123']],
- ], Core::removeHeader($message, 'foo'));
- }
- public function testCreatesUrl()
- {
- $req = [
- 'scheme' => 'http',
- 'headers' => ['host' => ['foo.com']],
- 'uri' => '/',
- ];
- $this->assertEquals('http://foo.com/', Core::url($req));
- }
- /**
- * @expectedException \InvalidArgumentException
- * @expectedExceptionMessage No Host header was provided
- */
- public function testEnsuresHostIsAvailableWhenCreatingUrls()
- {
- Core::url([]);
- }
- public function testCreatesUrlWithQueryString()
- {
- $req = [
- 'scheme' => 'http',
- 'headers' => ['host' => ['foo.com']],
- 'uri' => '/',
- 'query_string' => 'foo=baz',
- ];
- $this->assertEquals('http://foo.com/?foo=baz', Core::url($req));
- }
- public function testUsesUrlIfSet()
- {
- $req = ['url' => 'http://foo.com'];
- $this->assertEquals('http://foo.com', Core::url($req));
- }
- public function testReturnsNullWhenNoBody()
- {
- $this->assertNull(Core::body([]));
- }
- public function testReturnsStreamAsString()
- {
- $this->assertEquals(
- 'foo',
- Core::body(['body' => Stream::factory('foo')])
- );
- }
- public function testReturnsString()
- {
- $this->assertEquals('foo', Core::body(['body' => 'foo']));
- }
- public function testReturnsResourceContent()
- {
- $r = fopen('php://memory', 'w+');
- fwrite($r, 'foo');
- rewind($r);
- $this->assertEquals('foo', Core::body(['body' => $r]));
- fclose($r);
- }
- public function testReturnsIteratorContent()
- {
- $a = new \ArrayIterator(['a', 'b', 'cd', '']);
- $this->assertEquals('abcd', Core::body(['body' => $a]));
- }
- public function testReturnsObjectToString()
- {
- $this->assertEquals('foo', Core::body(['body' => new StrClass]));
- }
- /**
- * @expectedException \InvalidArgumentException
- */
- public function testEnsuresBodyIsValid()
- {
- Core::body(['body' => false]);
- }
- public function testParsesHeadersFromLines()
- {
- $lines = ['Foo: bar', 'Foo: baz', 'Abc: 123', 'Def: a, b'];
- $this->assertEquals([
- 'Foo' => ['bar', 'baz'],
- 'Abc' => ['123'],
- 'Def' => ['a, b'],
- ], Core::headersFromLines($lines));
- }
- public function testParsesHeadersFromLinesWithMultipleLines()
- {
- $lines = ['Foo: bar', 'Foo: baz', 'Foo: 123'];
- $this->assertEquals([
- 'Foo' => ['bar', 'baz', '123'],
- ], Core::headersFromLines($lines));
- }
- public function testCreatesArrayCallFunctions()
- {
- $called = [];
- $a = function ($a, $b) use (&$called) {
- $called['a'] = func_get_args();
- };
- $b = function ($a, $b) use (&$called) {
- $called['b'] = func_get_args();
- };
- $c = Core::callArray([$a, $b]);
- $c(1, 2);
- $this->assertEquals([1, 2], $called['a']);
- $this->assertEquals([1, 2], $called['b']);
- }
- public function testRewindsGuzzleStreams()
- {
- $str = Stream::factory('foo');
- $this->assertTrue(Core::rewindBody(['body' => $str]));
- }
- public function testRewindsStreams()
- {
- $str = Stream::factory('foo')->detach();
- $this->assertTrue(Core::rewindBody(['body' => $str]));
- }
- public function testRewindsIterators()
- {
- $iter = new \ArrayIterator(['foo']);
- $this->assertTrue(Core::rewindBody(['body' => $iter]));
- }
- public function testRewindsStrings()
- {
- $this->assertTrue(Core::rewindBody(['body' => 'hi']));
- }
- public function testRewindsToStrings()
- {
- $this->assertTrue(Core::rewindBody(['body' => new StrClass()]));
- }
- public function typeProvider()
- {
- return [
- ['foo', 'string(3) "foo"'],
- [true, 'bool(true)'],
- [false, 'bool(false)'],
- [10, 'int(10)'],
- [1.0, 'float(1)'],
- [new StrClass(), 'object(GuzzleHttp\Tests\Ring\StrClass)'],
- [['foo'], 'array(1)']
- ];
- }
- /**
- * @dataProvider typeProvider
- */
- public function testDescribesType($input, $output)
- {
- $this->assertEquals($output, Core::describeType($input));
- }
- public function testDoesSleep()
- {
- $t = microtime(true);
- $expected = $t + (100 / 1000);
- Core::doSleep(['client' => ['delay' => 100]]);
- $this->assertGreaterThanOrEqual($expected, microtime(true));
- }
- public function testProxiesFuture()
- {
- $f = new CompletedFutureArray(['status' => 200]);
- $res = null;
- $proxied = Core::proxy($f, function ($value) use (&$res) {
- $value['foo'] = 'bar';
- $res = $value;
- return $value;
- });
- $this->assertNotSame($f, $proxied);
- $this->assertEquals(200, $f->wait()['status']);
- $this->assertArrayNotHasKey('foo', $f->wait());
- $this->assertEquals('bar', $proxied->wait()['foo']);
- $this->assertEquals(200, $proxied->wait()['status']);
- }
- public function testProxiesDeferredFuture()
- {
- $d = new Deferred();
- $f = new FutureArray($d->promise());
- $f2 = Core::proxy($f);
- $d->resolve(['foo' => 'bar']);
- $this->assertEquals('bar', $f['foo']);
- $this->assertEquals('bar', $f2['foo']);
- }
- public function testProxiesDeferredFutureFailure()
- {
- $d = new Deferred();
- $f = new FutureArray($d->promise());
- $f2 = Core::proxy($f);
- $d->reject(new \Exception('foo'));
- try {
- $f2['hello?'];
- $this->fail('did not throw');
- } catch (\Exception $e) {
- $this->assertEquals('foo', $e->getMessage());
- }
- }
- }
- final class StrClass
- {
- public function __toString()
- {
- return 'foo';
- }
- }