124 lines
3.2 KiB
PHP
124 lines
3.2 KiB
PHP
<?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 Symfony\Component\Routing\Tests\Loader;
|
|
|
|
use PHPUnit\Framework\TestCase;
|
|
use Symfony\Component\Routing\Loader\ObjectRouteLoader;
|
|
use Symfony\Component\Routing\Route;
|
|
use Symfony\Component\Routing\RouteCollection;
|
|
|
|
class ObjectRouteLoaderTest extends TestCase
|
|
{
|
|
public function testLoadCallsServiceAndReturnsCollection()
|
|
{
|
|
$loader = new ObjectRouteLoaderForTest();
|
|
|
|
// create a basic collection that will be returned
|
|
$collection = new RouteCollection();
|
|
$collection->add('foo', new Route('/foo'));
|
|
|
|
$loader->loaderMap = array(
|
|
'my_route_provider_service' => new RouteService($collection),
|
|
);
|
|
|
|
$actualRoutes = $loader->load(
|
|
'my_route_provider_service:loadRoutes',
|
|
'service'
|
|
);
|
|
|
|
$this->assertSame($collection, $actualRoutes);
|
|
// the service file should be listed as a resource
|
|
$this->assertNotEmpty($actualRoutes->getResources());
|
|
}
|
|
|
|
/**
|
|
* @expectedException \InvalidArgumentException
|
|
* @dataProvider getBadResourceStrings
|
|
*/
|
|
public function testExceptionWithoutSyntax($resourceString)
|
|
{
|
|
$loader = new ObjectRouteLoaderForTest();
|
|
$loader->load($resourceString);
|
|
}
|
|
|
|
public function getBadResourceStrings()
|
|
{
|
|
return array(
|
|
array('Foo'),
|
|
array('Bar::baz'),
|
|
array('Foo:Bar:baz'),
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @expectedException \LogicException
|
|
*/
|
|
public function testExceptionOnNoObjectReturned()
|
|
{
|
|
$loader = new ObjectRouteLoaderForTest();
|
|
$loader->loaderMap = array('my_service' => 'NOT_AN_OBJECT');
|
|
$loader->load('my_service:method');
|
|
}
|
|
|
|
/**
|
|
* @expectedException \BadMethodCallException
|
|
*/
|
|
public function testExceptionOnBadMethod()
|
|
{
|
|
$loader = new ObjectRouteLoaderForTest();
|
|
$loader->loaderMap = array('my_service' => new \stdClass());
|
|
$loader->load('my_service:method');
|
|
}
|
|
|
|
/**
|
|
* @expectedException \LogicException
|
|
*/
|
|
public function testExceptionOnMethodNotReturningCollection()
|
|
{
|
|
$service = $this->getMockBuilder('stdClass')
|
|
->setMethods(array('loadRoutes'))
|
|
->getMock();
|
|
$service->expects($this->once())
|
|
->method('loadRoutes')
|
|
->will($this->returnValue('NOT_A_COLLECTION'));
|
|
|
|
$loader = new ObjectRouteLoaderForTest();
|
|
$loader->loaderMap = array('my_service' => $service);
|
|
$loader->load('my_service:loadRoutes');
|
|
}
|
|
}
|
|
|
|
class ObjectRouteLoaderForTest extends ObjectRouteLoader
|
|
{
|
|
public $loaderMap = array();
|
|
|
|
protected function getServiceObject($id)
|
|
{
|
|
return isset($this->loaderMap[$id]) ? $this->loaderMap[$id] : null;
|
|
}
|
|
}
|
|
|
|
class RouteService
|
|
{
|
|
private $collection;
|
|
|
|
public function __construct($collection)
|
|
{
|
|
$this->collection = $collection;
|
|
}
|
|
|
|
public function loadRoutes()
|
|
{
|
|
return $this->collection;
|
|
}
|
|
}
|