Вход Регистрация
Файл: system/vendor/symfony/service-contracts/Test/ServiceLocatorTest.php
Строк: 102
<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace SymfonyContractsServiceTest;

use 
PHPUnitFrameworkTestCase;
use 
PsrContainerContainerInterface;
use 
SymfonyContractsServiceServiceLocatorTrait;

abstract class 
ServiceLocatorTest extends TestCase
{
    protected function 
getServiceLocator(array $factories)
    {
        return new class(
$factories) implements ContainerInterface {
            use 
ServiceLocatorTrait;
        };
    }

    public function 
testHas()
    {
        
$locator $this->getServiceLocator([
            
'foo' => function () { return 'bar'; },
            
'bar' => function () { return 'baz'; },
            function () { return 
'dummy'; },
        ]);

        
$this->assertTrue($locator->has('foo'));
        
$this->assertTrue($locator->has('bar'));
        
$this->assertFalse($locator->has('dummy'));
    }

    public function 
testGet()
    {
        
$locator $this->getServiceLocator([
            
'foo' => function () { return 'bar'; },
            
'bar' => function () { return 'baz'; },
        ]);

        
$this->assertSame('bar'$locator->get('foo'));
        
$this->assertSame('baz'$locator->get('bar'));
    }

    public function 
testGetDoesNotMemoize()
    {
        
$i 0;
        
$locator $this->getServiceLocator([
            
'foo' => function () use (&$i) {
                ++
$i;

                return 
'bar';
            },
        ]);

        
$this->assertSame('bar'$locator->get('foo'));
        
$this->assertSame('bar'$locator->get('foo'));
        
$this->assertSame(2$i);
    }

    public function 
testThrowsOnUndefinedInternalService()
    {
        if (!
$this->getExpectedException()) {
            
$this->expectException('PsrContainerNotFoundExceptionInterface');
            
$this->expectExceptionMessage('The service "foo" has a dependency on a non-existent service "bar". This locator only knows about the "foo" service.');
        }
        
$locator $this->getServiceLocator([
            
'foo' => function () use (&$locator) { return $locator->get('bar'); },
        ]);

        
$locator->get('foo');
    }

    public function 
testThrowsOnCircularReference()
    {
        
$this->expectException('PsrContainerContainerExceptionInterface');
        
$this->expectExceptionMessage('Circular reference detected for service "bar", path: "bar -> baz -> bar".');
        
$locator $this->getServiceLocator([
            
'foo' => function () use (&$locator) { return $locator->get('bar'); },
            
'bar' => function () use (&$locator) { return $locator->get('baz'); },
            
'baz' => function () use (&$locator) { return $locator->get('bar'); },
        ]);

        
$locator->get('foo');
    }
}
Онлайн: 1
Реклама