The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl
use warnings;
use strict;

use Jifty::Test::Dist tests => 32;
use Jifty::Test::WWW::Mechanize;

my $server = Jifty::Test->make_server;
ok($server, 'got a server');

isa_ok($server, 'Jifty::TestServer');

my $url     = $server->started_ok;
my $mech    = Jifty::Test::WWW::Mechanize->new();

sub get_ok($) {
    my $path = shift;
    local $Test::Builder::Level = $Test::Builder::Level + 1;
    $mech->get_ok($url.$path, "got $path");
}

sub get_nok($) {
    my $path = shift;
    local $Test::Builder::Level = $Test::Builder::Level + 1;
    $mech->get($url.$path);
    is $mech->status, 404, "no $path (404)";
}

for(qw(some another some/deep)) {
    get_ok("/under_any/$_");
    $mech->content_contains("woot");
}

for(qw(some another some/deep)) {
    get_ok("/under/some_any/$_");
    $mech->content_contains("woot");
}

for(qw(some another some/deep)) {
    get_ok("/under_re/$_");
    $mech->content_contains("woot: $_");
}

get_ok("/under_run_array_on/woot");
$mech->content_contains("woot");

get_ok("/under_run_on_re/woot");
$mech->content_contains("woot");

{
    get_ok("/under_run_on_exist_run/exist");
    $mech->content_contains("woot: exist");
    {
        local $TODO = "Nested under and on rules fail";
        get_nok("/under_run_on_exist_run/not_exist");
    }
}

diag('test caching of compiled regular expressions') if $ENV{TEST_VERBOSE};
{
    get_ok("/under_run_on_special/some_special");
    $mech->content_contains("woot: under");
    get_ok("/some_special");
    $mech->content_contains("woot: top");
}