/**
  * @return RouterChainRule
  **/
 public function chain(RouterRule $route, $separator = '/')
 {
     $chain = new RouterChainRule();
     $chain->chain($this)->chain($route, $separator);
     return $chain;
 }
 public function testAssemblyWithHostnameAndTransparent()
 {
     $chain = new RouterChainRule();
     $host = RouterHostnameRule::create(':subdomain.example.com')->setDefaults(array('subdomain' => 'www'));
     $transparent = RouterTransparentRule::create(':bar/:area/:action')->setDefaults(array('bar' => 'barvalue', 'area' => 'controller', 'action' => 'create'));
     $chain->chain($host)->chain($transparent);
     $this->assertEquals('http://www.example.com/', $chain->assembly());
     $this->assertEquals('http://www.example.com/barvalue/controller/misc', $chain->assembly(array('action' => 'misc')));
     $this->assertEquals('http://www.example.com/barvalue/misc', $chain->assembly(array('area' => 'misc')));
     $this->assertEquals('http://www.example.com/misc', $chain->assembly(array('bar' => 'misc')));
 }
 public function testRouteWithHostnameMaskAndRegexpAndBaseUrlRuleChain()
 {
     $base = 'http://www.example.com/~user/public_html/www/';
     $request = $this->buildRequest('http://test123d.example.com/~user/public_html/www/test/123.html');
     $host = RouterHostnameRule::create(':subdomain.example.com')->setDefaults(array('module' => 'nope-bla', 'area' => 'test'))->setRequirements(array('subdomain' => '[\\da-z][\\da-z\\_]*[\\da-z]'));
     $transparent = RouterRegexpRule::create('test/(\\d+)\\.html')->setDefaults(array(1 => 345))->setMap(array(1 => 'testId'));
     $chain = new RouterChainRule();
     $chain->chain($host)->chain($transparent);
     $this->router->setBaseUrl(HttpUrl::create()->parse($base));
     $this->router->addRoute('HostnameMaskWithRegexp', $chain);
     $token = $this->router->route($request);
     $this->assertEquals(4, count($token->getAttached()));
     $this->assertEquals('test', $token->getAttachedVar('area'));
     $this->assertEquals(123, $token->getAttachedVar('testId'));
     $this->assertEquals('nope-bla', $token->getAttachedVar('module'));
     $this->assertEquals('test123d', $token->getAttachedVar('subdomain'));
 }