The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;
use Router::Boom;
use Test::More;

my $r = Router::Boom->new();
$r->add('/' => {controller => 'Root', action => 'show', method => 'GET'});
$r->add('/blog/{year}/{month}', {controller => 'Blog', action => 'monthly', method => 'GET'});
$r->add('/blog/{year:\d{1,4}}/{month:\d{2}}/{day:\d\d}', {controller => 'Blog', action => 'daily'}, {method => 'GET'});
$r->add('/:controller/:action');
$r->add('/comment', {controller => 'Comment', 'action' => 'create'}, {method => 'POST'});
note $r->regexp;

is_deeply(
    [$r->match( '/' )],
    [{
        controller => 'Root',
        action     => 'show',
        method     => 'GET',
    }, {}]
);
is_deeply(
    [$r->match( '' )],
    [{
        controller => 'Root',
        action     => 'show',
        method     => 'GET',
    }, {
    }],
    'empty PATH_INFO is same as "/"'
);
is_deeply(
    [ $r->match('/blog/2010/03') ],
    [
        {
            controller => 'Blog',
            action     => 'monthly',
            method     => 'GET',
        }, {
            year       => 2010,
            month      => '03'
        }
    ],
    'blog monthly'
);
is_deeply(
    [ $r->match( '/blog/2010/03/04' ) ],
    [
        {
            controller => 'Blog',
            action     => 'daily',
        },
        {
            year => 2010, month => '03', day => '04',
        }
    ],
    'daily'
);
is_deeply(
    [$r->match( '/comment' ) ],
    [
        {
            controller => 'Comment',
            action     => 'create',
        }, { }
    ]
);
is_deeply(
    [$r->match( '/foo/bar' )],
    [undef, {
        controller => 'foo',
        action     => 'bar',
    }]
);

done_testing;