<?php
/**
* Alloy Router generic tests
*/
class Test_Router extends \PHPUnit_Framework_TestCase
{
public function setUp()
{
parent::setUp();
$this->router = \Kernel()->router();
if($this->router instanceof \Alloy\Router) {
$this->router->reset();
}
}
public function testInstance()
{
$this->assertTrue($this->router instanceof \Alloy\Router);
}
public function testReset()
{
$this->assertEquals(0, count($this->router->routes()));
$this->router->route('test', '/<:test>');
$this->assertEquals(1, count($this->router->routes()));
$this->router->reset();
$this->assertEquals(0, count($this->router->routes()));
}
public function testRouteSingleAlpha()
{
$this->router->route('module', '/<:module>');
$params = $this->router->match("GET", "test");
$this->assertEquals('test', $params['module']);
// With beginning slash
$params = $this->router->match("GET", "/test");
$this->assertEquals('test', $params['module']);
}
public function testRouteMVCAction()
{
$router = $this->router;
$route = $router->route('mvc', '/<:controller>/<:action>.<:format>');
$params = $router->match("GET", "/user/profile.html");
$this->assertEquals('user', $params['controller']);
$this->assertEquals('profile', $params['action']);
$this->assertEquals('html', $params['format']);
}
public function testRouteMVCItem()
{
$router = $this->router;
$router->route('mvc_item', '/<:controller>/<:action>/<#id>.<:format>');
$params = $router->match("GET", "/blog/show/55.json");
$this->assertEquals('blog', $params['controller']);
$this->assertEquals('show', $params['action']);
$this->assertEquals('55', $params['id']);
$this->assertEquals('json', $params['format']);
}
public function testRouteBlogPost()
{
$router = $this->router;
$router->route('blog_post', '/<:dir>/<#year>/<#month>/<:slug>');
$params = $router->match("GET", "/blog/2009/10/blog-post-title");
$this->assertEquals('blog', $params['dir']);
$this->assertEquals('2009', $params['year']);
$this->assertEquals('10', $params['month']);
$this->assertEquals('blog-post-title', $params['slug']);
}
public function testRouteWildcard()
{
$router = $this->router;
$route = $router->route('url', '<*url>');
$params = $router->match("GET", "/blog/2009/10/27/my-post-title");
$this->assertEquals('blog/2009/10/27/my-post-title', $params['url']);
}
public function testRouteWildcard2()
{
$router = $this->router;
$router->route('url2', '/<:dir>/<*url>');
$params = $router->match("GET", "/blog/2009/10/27/my-post-title");
$this->assertEquals('blog', $params['dir']);
$this->assertEquals('2009/10/27/my-post-title', $params['url']);
}
/**
* Static route - no matched parameters
*/
public function testRouteStatic()
{
$this->router->route('login_route', '/user/login')
->defaults(array('controller' => 'user', 'action' => 'login'));
// Attempt to match URL
$params = $this->router->match("GET", "/user/login");
$route = $this->router->matchedRoute();
// Match route name?
$this->assertEquals("login_route", $route->name());
// Match resulting URL?
$this->assertEquals("user", $params['controller']);
$this->assertEquals("login", $params['action']);
}
public function testRouteWithSpaces()
{
$this->router->route('module', '/<:module>');
$params = $this->router->match("GET", "test ing");
$this->assertEquals('test ing', $params['module']);
}
public function testRouteWithUrlEncodingIsDecoded()
{
$this->router->route('module', '/<:module>');
$params = $this->router->match("GET", "test+ing");
$this->assertEquals('test ing', $params['module']);
}
public function testRouteWithUrlEncodingPercentSignIsDecoded()
{
$this->router->route('module', '/<:module>');
$params = $this->router->match("GET", "test%20ing");
$this->assertEquals('test ing', $params['module']);
}
}