use strict; use warnings; use Test::Base; use YAML; use HTTPx::Dispatcher; use HTTPx::Dispatcher::Rule; use HTTP::Request; plan tests => 1*blocks; filters { dispatcher => [qw/_eval/], uri_for => [qw/eval/], expected => [qw//], }; run { my $block = shift; my $dispatcher = $block->dispatcher; is $dispatcher->uri_for( $block->uri_for ), $block->expected; } my $cnt = 1; sub _eval { my ($input, ) = @_; my $pkg = "t::Dispatcher::" . ++$cnt; eval <<"..."; package $pkg; use HTTPx::Dispatcher; $input; ... return $pkg; } __END__ === --- dispatcher: connect ':controller/:action/:id'; --- uri_for: {controller => 'blog', action => 'show', id => 3} --- expected: /blog/show/3 === --- dispatcher: connect 'blog/:action/:id'; --- uri_for: {action => 'show', id => 3} --- expected: /blog/show/3 === --- dispatcher connect 'blog/:action/:id'; connect ':controller/:action/:id'; --- uri_for: {controller => 'entry', action => 'show', id => 3} --- expected: /entry/show/3 === --- dispatcher connect 'content/:id' => { controller => 'Content', action => 'show' }; --- uri_for: { controller => 'Content', action => 'show', 'id' => 3 } --- expected: /content/3 === --- dispatcher connect '' => { controller => 'Root', action => 'index' }; --- uri_for: { controller => 'Root', action => 'index' } --- expected: /