Вход Регистрация
Файл: symfony-2.7/src/Symfony/Bundle/FrameworkBundle/Tests/Routing/RouterTest.php
Строк: 204
<?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 SymfonyBundleFrameworkBundleTestsRouting;

use 
SymfonyBundleFrameworkBundleRoutingRouter;
use 
SymfonyComponentRoutingRoute;
use 
SymfonyComponentRoutingRouteCollection;

class 
RouterTest extends PHPUnit_Framework_TestCase
{
    public function 
testGenerateWithServiceParam()
    {
        
$routes = new RouteCollection();

        
$routes->add('foo', new Route(
            
' /{_locale}',
            array(
                
'_locale' => '%locale%',
            ),
            array(
                
'_locale' => 'en|es',
            ), array(), 
'', array(), array(), '"%foo%" == "bar"'
        
));

        
$sc $this->getServiceContainer($routes);
        
$sc->setParameter('locale''es');
        
$sc->setParameter('foo''bar');

        
$router = new Router($sc'foo');

        
$this->assertSame('/en'$router->generate('foo', array('_locale' => 'en')));
        
$this->assertSame('/'$router->generate('foo', array('_locale' => 'es')));
        
$this->assertSame('"bar" == "bar"'$router->getRouteCollection()->get('foo')->getCondition());
    }

    public function 
testDefaultsPlaceholders()
    {
        
$routes = new RouteCollection();

        
$routes->add('foo', new Route(
            
'/foo',
            array(
                
'foo' => 'before_%parameter.foo%',
                
'bar' => '%parameter.bar%_after',
                
'baz' => '%%escaped%%',
                
'boo' => array('%parameter%''%%escaped_parameter%%', array('%bee_parameter%''bee')),
                
'bee' => array('bee''bee'),
            ),
            array(
            )
        ));

        
$sc $this->getServiceContainer($routes);

        
$sc->setParameter('parameter.foo''foo');
        
$sc->setParameter('parameter.bar''bar');
        
$sc->setParameter('parameter''boo');
        
$sc->setParameter('bee_parameter''foo_bee');

        
$router = new Router($sc'foo');
        
$route $router->getRouteCollection()->get('foo');

        
$this->assertEquals(
            array(
                
'foo' => 'before_foo',
                
'bar' => 'bar_after',
                
'baz' => '%escaped%',
                
'boo' => array('boo''%escaped_parameter%', array('foo_bee''bee')),
                
'bee' => array('bee''bee'),
            ),
            
$route->getDefaults()
        );
    }

    public function 
testRequirementsPlaceholders()
    {
        
$routes = new RouteCollection();

        
$routes->add('foo', new Route(
            
'/foo',
            array(
            ),
            array(
                
'foo' => 'before_%parameter.foo%',
                
'bar' => '%parameter.bar%_after',
                
'baz' => '%%escaped%%',
            )
        ));

        
$sc $this->getServiceContainer($routes);
        
$sc->setParameter('parameter.foo''foo');
        
$sc->setParameter('parameter.bar''bar');

        
$router = new Router($sc'foo');
        
$route $router->getRouteCollection()->get('foo');

        
$this->assertEquals(
            array(
                
'foo' => 'before_foo',
                
'bar' => 'bar_after',
                
'baz' => '%escaped%',
            ),
            
$route->getRequirements()
        );
    }

    public function 
testPatternPlaceholders()
    {
        
$routes = new RouteCollection();

        
$routes->add('foo', new Route('/before/%parameter.foo%/after/%%escaped%%'));

        
$sc $this->getServiceContainer($routes);
        
$sc->setParameter('parameter.foo''foo');

        
$router = new Router($sc'foo');
        
$route $router->getRouteCollection()->get('foo');

        
$this->assertEquals(
            
'/before/foo/after/%escaped%',
            
$route->getPath()
        );
    }

    public function 
testHostPlaceholders()
    {
        
$routes = new RouteCollection();

        
$route = new Route('foo');
        
$route->setHost('/before/%parameter.foo%/after/%%escaped%%');

        
$routes->add('foo'$route);

        
$sc $this->getServiceContainer($routes);
        
$sc->setParameter('parameter.foo''foo');

        
$router = new Router($sc'foo');
        
$route $router->getRouteCollection()->get('foo');

        
$this->assertEquals(
            
'/before/foo/after/%escaped%',
            
$route->getHost()
        );
    }

    
/**
     * @expectedException SymfonyComponentDependencyInjectionExceptionParameterNotFoundException
     * @expectedExceptionMessage You have requested a non-existent parameter "nope".
     */
    
public function testExceptionOnNonExistentParameter()
    {
        
$routes = new RouteCollection();

        
$routes->add('foo', new Route('/%nope%'));

        
$sc $this->getServiceContainer($routes);

        
$router = new Router($sc'foo');
        
$router->getRouteCollection()->get('foo');
    }

    
/**
     * @expectedException SymfonyComponentDependencyInjectionExceptionRuntimeException
     * @expectedExceptionMessage The container parameter "object", used in the route configuration value "/%object%", must be a string or numeric, but it is of type object.
     */
    
public function testExceptionOnNonStringParameter()
    {
        
$routes = new RouteCollection();

        
$routes->add('foo', new Route('/%object%'));

        
$sc $this->getServiceContainer($routes);
        
$sc->setParameter('object', new stdClass());

        
$router = new Router($sc'foo');
        
$router->getRouteCollection()->get('foo');
    }

    
/**
     * @dataProvider getNonStringValues
     */
    
public function testDefaultValuesAsNonStrings($value)
    {
        
$routes = new RouteCollection();
        
$routes->add('foo', new Route('foo', array('foo' => $value), array('foo' => 'd+')));

        
$sc $this->getServiceContainer($routes);

        
$router = new Router($sc'foo');

        
$route $router->getRouteCollection()->get('foo');

        
$this->assertSame($value$route->getDefault('foo'));
    }

    public function 
getNonStringValues()
    {
        return array(array(
null), array(false), array(true), array(new stdClass()), array(array('foo''bar')), array(array(array())));
    }

    
/**
     * @param RouteCollection $routes
     *
     * @return SymfonyComponentDependencyInjectionContainer
     */
    
private function getServiceContainer(RouteCollection $routes)
    {
        
$loader $this->getMock('SymfonyComponentConfigLoaderLoaderInterface');

        
$loader
            
->expects($this->any())
            ->
method('load')
            ->
will($this->returnValue($routes))
        ;

        
$sc $this->getMock('Symfony\Component\DependencyInjection\Container', array('get'));

        
$sc
            
->expects($this->once())
            ->
method('get')
            ->
will($this->returnValue($loader))
        ;

        return 
$sc;
    }
}
Онлайн: 0
Реклама