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

my @calls;

my $dispatcher = Path::Dispatcher->new(
    rules => [
        Path::Dispatcher::Rule::Intersection->new(
            rules => [
                Path::Dispatcher::Rule::Tokens->new(
                    tokens => ['foo'],
                    block => sub { push @calls, 'tokens' },
                ),
                Path::Dispatcher::Rule::Regex->new(
                    regex => qr/^foo$/,
                    block => sub { push @calls, 'regex' },
                ),
            ],
            block => sub { push @calls, 'intersection' },
        ),
    ],
);

$dispatcher->run("foo");
is_deeply([splice @calls], ['intersection'], "the intersection matched; doesn't automatically run the subrules");

$dispatcher->run("food");
is_deeply([splice @calls], [], "each subrule of the intersection must match");

$dispatcher->run(" foo ");
is_deeply([splice @calls], [], "each subrule of the intersection must match");

# test empty intersection
$dispatcher = Path::Dispatcher->new(
    rules => [
        Path::Dispatcher::Rule::Intersection->new(
            rules => [ ],
            block => sub { push @calls, 'intersection' },
        ),
    ],
);

$dispatcher->run("foo");
is_deeply([splice @calls], [], "no subrules means no match");

done_testing;