public function testRouteParsingWithOptionalParams()
{
$route = new Route(array('template' => '/{:controller}/{:action}/{:id}', 'params' => array('id' => null)));
$request = new Request();
$request->url = '/posts';
$result = $route->parse($request);
$expected = array('controller' => 'posts', 'action' => 'index', 'id' => null);
$this->assertEqual($expected, $result->params);
$request->url = '/posts/index';
$result = $route->parse($request);
$this->assertEqual($expected, $result->params);
$request->url = '/posts/index/';
$result = $route->parse($request);
$this->assertEqual($expected, $result->params);
$request->url = '/posts/view/0';
$result = $route->parse($request);
$expected = array('controller' => 'posts', 'action' => 'view', 'id' => '0');
$this->assertEqual($expected, $result->params);
$request->url = '/posts/view/5';
$result = $route->parse($request);
$expected = array('controller' => 'posts', 'action' => 'view', 'id' => '5');
$this->assertEqual($expected, $result->params);
$request->url = '/';
$this->assertFalse($route->parse($request));
$request->url = '/posts/view/5/foo';
$this->assertFalse($route->parse($request));
}