1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
|
<?php
/**
* Slim Framework (https://slimframework.com)
*
* @license https://github.com/slimphp/Slim/blob/3.x/LICENSE.md (MIT License)
*/
namespace Slim\Tests;
use PHPUnit\Framework\Attributes\RequiresPhpunit;
use PHPUnit;
use Slim\Container;
use Slim\DeferredCallable;
use Slim\Tests\Mocks\CallableTest;
class DeferredCallableTest extends PHPUnit\Framework\TestCase
{
public function testItResolvesCallable()
{
$container = new Container();
$container['CallableTest'] = new CallableTest;
$deferred = new DeferredCallable('CallableTest:toCall', $container);
$deferred();
$this->assertEquals(1, CallableTest::$CalledCount);
}
#[RequiresPhpunit('< 12')]
public function testItBindsClosuresToContainer()
{
$assertCalled = $this->getMockBuilder('StdClass')->addMethods(['foo'])->getMock();
$assertCalled
->expects($this->once())
->method('foo');
$container = new Container();
$test = $this;
$closure = function () use ($container, $test, $assertCalled) {
$assertCalled->foo();
$test->assertSame($container, $this);
};
$deferred = new DeferredCallable($closure, $container);
$deferred();
}
public function testItReturnsInvokedCallableResponse()
{
$container = new Container();
$test = $this;
$foo = 'foo';
$bar = 'bar';
$closure = function ($param) use ($test, $foo, $bar) {
$test->assertEquals($foo, $param);
return $bar;
};
$deferred = new DeferredCallable($closure, $container);
$response = $deferred($foo);
$this->assertEquals($bar, $response);
}
public function testGetCallable()
{
$container = new Container();
$closure = function () {
};
$deferred = new DeferredCallable($closure, $container);
$this->assertSame($closure, $deferred->getCallable());
}
}
|