1
0
mirror of https://github.com/guzzle/guzzle.git synced 2025-02-24 18:13:00 +01:00
guzzle/tests/HandlerStackTest.php

177 lines
5.9 KiB
PHP
Raw Normal View History

2015-02-24 22:50:52 -08:00
<?php
namespace GuzzleHttp\Tests;
2015-03-22 10:43:34 -07:00
use GuzzleHttp\HandlerStack;
2015-02-24 22:50:52 -08:00
2015-03-22 10:43:34 -07:00
class HandlerStackTest extends \PHPUnit_Framework_TestCase
2015-02-24 22:50:52 -08:00
{
2015-03-22 10:43:34 -07:00
public function testSetsHandlerInCtor()
2015-02-24 22:50:52 -08:00
{
$f = function () {};
$m1 = function () {};
2015-03-22 10:43:34 -07:00
$h = new HandlerStack($f, [$m1]);
2015-02-24 22:50:52 -08:00
$this->assertTrue($h->hasHandler());
}
public function testCanSetDifferentHandlerAfterConstruction()
{
$f = function () {};
2015-03-22 10:43:34 -07:00
$h = new HandlerStack();
2015-02-24 22:50:52 -08:00
$h->setHandler($f);
$h->resolve();
}
/**
* @expectedException \LogicException
*/
public function testEnsuresHandlerIsSet()
{
2015-03-22 10:43:34 -07:00
$h = new HandlerStack();
2015-02-24 22:50:52 -08:00
$h->resolve();
}
2015-02-25 22:49:50 -08:00
public function testPushInOrder()
2015-02-25 22:49:50 -08:00
{
$meths = $this->getFunctions();
2015-03-22 10:43:34 -07:00
$builder = new HandlerStack();
2015-02-25 22:49:50 -08:00
$builder->setHandler($meths[1]);
$builder->push($meths[2]);
$builder->push($meths[3]);
$builder->push($meths[4]);
2015-02-25 22:49:50 -08:00
$composed = $builder->resolve();
$this->assertEquals('Hello - test123', $composed('test'));
$this->assertEquals(
[['a', 'test'], ['b', 'test1'], ['c', 'test12']],
$meths[0]
);
}
public function testUnshiftsInReverseOrder()
2015-02-25 22:49:50 -08:00
{
$meths = $this->getFunctions();
2015-03-22 10:43:34 -07:00
$builder = new HandlerStack();
2015-02-25 22:49:50 -08:00
$builder->setHandler($meths[1]);
$builder->unshift($meths[2]);
$builder->unshift($meths[3]);
$builder->unshift($meths[4]);
2015-02-25 22:49:50 -08:00
$composed = $builder->resolve();
$this->assertEquals('Hello - test321', $composed('test'));
$this->assertEquals(
[['c', 'test'], ['b', 'test3'], ['a', 'test32']],
$meths[0]
);
}
2015-03-22 10:43:34 -07:00
public function testCanRemoveMiddlewareByInstance()
2015-02-25 22:49:50 -08:00
{
$meths = $this->getFunctions();
2015-03-22 10:43:34 -07:00
$builder = new HandlerStack();
2015-02-25 22:49:50 -08:00
$builder->setHandler($meths[1]);
$builder->push($meths[2]);
$builder->push($meths[2]);
$builder->push($meths[3]);
$builder->push($meths[4]);
$builder->push($meths[2]);
2015-03-22 10:43:34 -07:00
$builder->remove($meths[3]);
2015-02-25 22:49:50 -08:00
$composed = $builder->resolve();
$this->assertEquals('Hello - test1131', $composed('test'));
2015-02-25 22:49:50 -08:00
}
2015-03-22 10:43:34 -07:00
public function testCanPrintMiddleware()
2015-02-25 22:49:50 -08:00
{
$meths = $this->getFunctions();
2015-03-22 10:43:34 -07:00
$builder = new HandlerStack();
2015-02-25 22:49:50 -08:00
$builder->setHandler($meths[1]);
$builder->push($meths[2], 'a');
$builder->push([__CLASS__, 'foo']);
$builder->push([$this, 'bar']);
$builder->push(__CLASS__ . '::' . 'foo');
2015-03-22 10:43:34 -07:00
$lines = explode("\n", (string) $builder);
$this->assertContains("> 4) Name: 'a', Function: callable(", $lines[0]);
$this->assertContains("> 3) Name: '', Function: callable(GuzzleHttp\\Tests\\HandlerStackTest::foo)", $lines[1]);
$this->assertContains("> 2) Name: '', Function: callable(['GuzzleHttp\\Tests\\HandlerStackTest', 'bar'])", $lines[2]);
$this->assertContains("> 1) Name: '', Function: callable(GuzzleHttp\\Tests\\HandlerStackTest::foo)", $lines[3]);
$this->assertContains("< 0) Handler: callable(", $lines[4]);
$this->assertContains("< 1) Name: '', Function: callable(GuzzleHttp\\Tests\\HandlerStackTest::foo)", $lines[5]);
$this->assertContains("< 2) Name: '', Function: callable(['GuzzleHttp\\Tests\\HandlerStackTest', 'bar'])", $lines[6]);
$this->assertContains("< 3) Name: '', Function: callable(GuzzleHttp\\Tests\\HandlerStackTest::foo)", $lines[7]);
$this->assertContains("< 4) Name: 'a', Function: callable(", $lines[8]);
2015-02-25 22:49:50 -08:00
}
2015-03-22 10:43:34 -07:00
public function testCanAddBeforeByName()
2015-02-25 22:49:50 -08:00
{
$meths = $this->getFunctions();
2015-03-22 10:43:34 -07:00
$builder = new HandlerStack();
2015-02-25 22:49:50 -08:00
$builder->setHandler($meths[1]);
$builder->push($meths[2], 'foo');
$builder->before('foo', $meths[3], 'baz');
$builder->before('baz', $meths[4], 'bar');
$builder->before('baz', $meths[4], 'qux');
2015-03-22 10:43:34 -07:00
$lines = explode("\n", (string) $builder);
$this->assertContains('> 4) Name: \'bar\'', $lines[0]);
$this->assertContains('> 3) Name: \'qux\'', $lines[1]);
$this->assertContains('> 2) Name: \'baz\'', $lines[2]);
$this->assertContains('> 1) Name: \'foo\'', $lines[3]);
2015-03-22 10:43:34 -07:00
}
/**
* @expectedException \InvalidArgumentException
*/
public function testEnsuresHandlerExistsByName()
{
$builder = new HandlerStack();
$builder->before('foo', function () {});
}
public function testCanAddAfterByName()
{
$meths = $this->getFunctions();
$builder = new HandlerStack();
$builder->setHandler($meths[1]);
$builder->push($meths[2], 'a');
$builder->push($meths[3], 'b');
2015-03-22 10:43:34 -07:00
$builder->after('a', $meths[4], 'c');
2015-03-22 16:50:32 -07:00
$builder->after('b', $meths[4], 'd');
2015-03-22 10:43:34 -07:00
$lines = explode("\n", (string) $builder);
2015-03-22 16:50:32 -07:00
$this->assertContains('4) Name: \'a\'', $lines[0]);
$this->assertContains('3) Name: \'c\'', $lines[1]);
$this->assertContains('2) Name: \'b\'', $lines[2]);
$this->assertContains('1) Name: \'d\'', $lines[3]);
2015-02-25 22:49:50 -08:00
}
private function getFunctions()
{
$calls = [];
$a = function (callable $next) use (&$calls) {
return function ($v) use ($next, &$calls) {
$calls[] = ['a', $v];
return $next($v . '1');
};
};
$b = function (callable $next) use (&$calls) {
return function ($v) use ($next, &$calls) {
$calls[] = ['b', $v];
return $next($v . '2');
};
};
$c = function (callable $next) use (&$calls) {
return function ($v) use ($next, &$calls) {
$calls[] = ['c', $v];
return $next($v . '3');
};
};
$handler = function ($v) {
return 'Hello - ' . $v;
};
return [&$calls, $handler, $a, $b, $c];
}
2015-03-22 10:43:34 -07:00
public static function foo() {}
public function bar () {}
2015-02-24 22:50:52 -08:00
}