123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336 |
- <?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';
- }
- }
|