class RouteTest

Hierarchy

  • class \Symfony\Component\Routing\Tests\RouteTest extends \Symfony\Component\Routing\Tests\PHPUnit_Framework_TestCase

Expanded class hierarchy of RouteTest

File

drupal/core/vendor/symfony/routing/Symfony/Component/Routing/Tests/RouteTest.php, line 16

Namespace

Symfony\Component\Routing\Tests
View source
class RouteTest extends \PHPUnit_Framework_TestCase {
  public function testConstructor() {
    $route = new Route('/{foo}', array(
      'foo' => 'bar',
    ), array(
      'foo' => '\\d+',
    ), array(
      'foo' => 'bar',
    ));
    $this
      ->assertEquals('/{foo}', $route
      ->getPattern(), '__construct() takes a pattern as its first argument');
    $this
      ->assertEquals(array(
      'foo' => 'bar',
    ), $route
      ->getDefaults(), '__construct() takes defaults as its second argument');
    $this
      ->assertEquals(array(
      'foo' => '\\d+',
    ), $route
      ->getRequirements(), '__construct() takes requirements as its third argument');
    $this
      ->assertEquals('bar', $route
      ->getOption('foo'), '__construct() takes options as its fourth argument');
  }
  public function testPattern() {
    $route = new Route('/{foo}');
    $route
      ->setPattern('/{bar}');
    $this
      ->assertEquals('/{bar}', $route
      ->getPattern(), '->setPattern() sets the pattern');
    $route
      ->setPattern('');
    $this
      ->assertEquals('/', $route
      ->getPattern(), '->setPattern() adds a / at the beginning of the pattern if needed');
    $route
      ->setPattern('bar');
    $this
      ->assertEquals('/bar', $route
      ->getPattern(), '->setPattern() adds a / at the beginning of the pattern if needed');
    $this
      ->assertEquals($route, $route
      ->setPattern(''), '->setPattern() implements a fluent interface');
  }
  public function testOptions() {
    $route = new Route('/{foo}');
    $route
      ->setOptions(array(
      'foo' => 'bar',
    ));
    $this
      ->assertEquals(array_merge(array(
      'compiler_class' => 'Symfony\\Component\\Routing\\RouteCompiler',
    ), array(
      'foo' => 'bar',
    )), $route
      ->getOptions(), '->setOptions() sets the options');
    $this
      ->assertEquals($route, $route
      ->setOptions(array()), '->setOptions() implements a fluent interface');
    $route
      ->setOptions(array(
      'foo' => 'foo',
    ));
    $route
      ->addOptions(array(
      'bar' => 'bar',
    ));
    $this
      ->assertEquals($route, $route
      ->addOptions(array()), '->addOptions() implements a fluent interface');
    $this
      ->assertEquals(array(
      'foo' => 'foo',
      'bar' => 'bar',
      'compiler_class' => 'Symfony\\Component\\Routing\\RouteCompiler',
    ), $route
      ->getOptions(), '->addDefaults() keep previous defaults');
  }
  public function testDefaults() {
    $route = new Route('/{foo}');
    $route
      ->setDefaults(array(
      'foo' => 'bar',
    ));
    $this
      ->assertEquals(array(
      'foo' => 'bar',
    ), $route
      ->getDefaults(), '->setDefaults() sets the defaults');
    $this
      ->assertEquals($route, $route
      ->setDefaults(array()), '->setDefaults() implements a fluent interface');
    $route
      ->setDefault('foo', 'bar');
    $this
      ->assertEquals('bar', $route
      ->getDefault('foo'), '->setDefault() sets a default value');
    $route
      ->setDefault('foo2', 'bar2');
    $this
      ->assertEquals('bar2', $route
      ->getDefault('foo2'), '->getDefault() return the default value');
    $this
      ->assertNull($route
      ->getDefault('not_defined'), '->getDefault() return null if default value is not setted');
    $route
      ->setDefault('_controller', $closure = function () {
      return 'Hello';
    });
    $this
      ->assertEquals($closure, $route
      ->getDefault('_controller'), '->setDefault() sets a default value');
    $route
      ->setDefaults(array(
      'foo' => 'foo',
    ));
    $route
      ->addDefaults(array(
      'bar' => 'bar',
    ));
    $this
      ->assertEquals($route, $route
      ->addDefaults(array()), '->addDefaults() implements a fluent interface');
    $this
      ->assertEquals(array(
      'foo' => 'foo',
      'bar' => 'bar',
    ), $route
      ->getDefaults(), '->addDefaults() keep previous defaults');
  }
  public function testRequirements() {
    $route = new Route('/{foo}');
    $route
      ->setRequirements(array(
      'foo' => '\\d+',
    ));
    $this
      ->assertEquals(array(
      'foo' => '\\d+',
    ), $route
      ->getRequirements(), '->setRequirements() sets the requirements');
    $this
      ->assertEquals('\\d+', $route
      ->getRequirement('foo'), '->getRequirement() returns a requirement');
    $this
      ->assertNull($route
      ->getRequirement('bar'), '->getRequirement() returns null if a requirement is not defined');
    $route
      ->setRequirements(array(
      'foo' => '^\\d+$',
    ));
    $this
      ->assertEquals('\\d+', $route
      ->getRequirement('foo'), '->getRequirement() removes ^ and $ from the pattern');
    $this
      ->assertEquals($route, $route
      ->setRequirements(array()), '->setRequirements() implements a fluent interface');
    $route
      ->setRequirements(array(
      'foo' => '\\d+',
    ));
    $route
      ->addRequirements(array(
      'bar' => '\\d+',
    ));
    $this
      ->assertEquals($route, $route
      ->addRequirements(array()), '->addRequirements() implements a fluent interface');
    $this
      ->assertEquals(array(
      'foo' => '\\d+',
      'bar' => '\\d+',
    ), $route
      ->getRequirements(), '->addRequirement() keep previous requirements');
  }
  public function testRequirement() {
    $route = new Route('/{foo}');
    $route
      ->setRequirement('foo', '^\\d+$');
    $this
      ->assertEquals('\\d+', $route
      ->getRequirement('foo'), '->setRequirement() removes ^ and $ from the pattern');
  }

  /**
   * @dataProvider getInvalidRequirements
   * @expectedException \InvalidArgumentException
   */
  public function testSetInvalidRequirement($req) {
    $route = new Route('/{foo}');
    $route
      ->setRequirement('foo', $req);
  }
  public function getInvalidRequirements() {
    return array(
      array(
        '',
      ),
      array(
        array(),
      ),
    );
  }
  public function testCompile() {
    $route = new Route('/{foo}');
    $this
      ->assertInstanceOf('Symfony\\Component\\Routing\\CompiledRoute', $compiled = $route
      ->compile(), '->compile() returns a compiled route');
    $this
      ->assertSame($compiled, $route
      ->compile(), '->compile() only compiled the route once if unchanged');
    $route
      ->setRequirement('foo', '.*');
    $this
      ->assertNotSame($compiled, $route
      ->compile(), '->compile() recompiles if the route was modified');
  }

}

Members

Namesort descending Modifiers Type Description Overrides
RouteTest::getInvalidRequirements public function
RouteTest::testCompile public function
RouteTest::testConstructor public function
RouteTest::testDefaults public function
RouteTest::testOptions public function
RouteTest::testPattern public function
RouteTest::testRequirement public function
RouteTest::testRequirements public function
RouteTest::testSetInvalidRequirement public function @dataProvider getInvalidRequirements @expectedException \InvalidArgumentException