diff --git a/tests/CallableResolverTest.php b/tests/CallableResolverTest.php index 727164c48..ad6c087ac 100644 --- a/tests/CallableResolverTest.php +++ b/tests/CallableResolverTest.php @@ -61,6 +61,21 @@ public function testClosure() $this->assertEquals(true, $callableMiddleware()); } + public function testStaticClosure() + { + $test = static function () { + return true; + }; + $resolver = new CallableResolver(); // No container injected + $callable = $resolver->resolve($test); + $callableRoute = $resolver->resolveRoute($test); + $callableMiddleware = $resolver->resolveMiddleware($test); + + $this->assertEquals(true, $callable()); + $this->assertEquals(true, $callableRoute()); + $this->assertEquals(true, $callableMiddleware()); + } + public function testClosureContainer() { $this->containerProphecy->has('ultimateAnswer')->willReturn(true); @@ -86,6 +101,55 @@ public function testClosureContainer() $this->assertEquals(42, $callableMiddleware()); } + public function testClosureInNonObjectScopeContainer() + { + $this->containerProphecy->has('ultimateAnswer')->willReturn(true); + $this->containerProphecy->get('ultimateAnswer')->willReturn(42); + + $that = $this; + $nonObjectScopeFactory = static function () use ($that) { + return function () use ($that) { + $that->assertInstanceOf(ContainerInterface::class, $this); + + /** @var ContainerInterface $this */ + return $this->get('ultimateAnswer'); + }; + }; + + $test = $nonObjectScopeFactory(); + + /** @var ContainerInterface $container */ + $container = $this->containerProphecy->reveal(); + $resolver = new CallableResolver($container); + $callable = $resolver->resolve($test); + $callableRoute = $resolver->resolveRoute($test); + $callableMiddleware = $resolver->resolveMiddleware($test); + + $this->assertEquals(42, $callable()); + $this->assertEquals(42, $callableRoute()); + $this->assertEquals(42, $callableMiddleware()); + } + + public function testStaticClosureContainer() + { + $this->markTestIncomplete('Waiting for fixing error with PHP Warning'); + + $test = static function () { + return 42; + }; + + /** @var ContainerInterface $container */ + $container = $this->containerProphecy->reveal(); + $resolver = new CallableResolver($container); + $callable = $resolver->resolve($test); + $callableRoute = $resolver->resolveRoute($test); + $callableMiddleware = $resolver->resolveMiddleware($test); + + $this->assertEquals(42, $callable()); + $this->assertEquals(42, $callableRoute()); + $this->assertEquals(42, $callableMiddleware()); + } + public function testFunctionName() { $resolver = new CallableResolver(); // No container injected