package TestModperl::method;

use strict;
use warnings FATAL => 'all';

use Apache::Test;
use Apache::TestUtil;
use Apache::TestRequest;

use Apache2::Const -compile => 'OK';

sub new {
    my $class = shift;

    bless {
        perl_version => $],
    }, $class;
}

sub handler : method {
    my ($self, $r) = @_;

    my $tests = 3;

    my $is_obj = ref($self);

    if ($is_obj) {
        $tests += 1;
    }

    plan $r, tests => $tests;

    ok t_cmp(scalar @_, 2,
             '@_ == 2');

    my $class = ref($self) || $self;

    ok t_cmp($class, $class,
             'handler class');

    ok t_cmp(
        $r->uri,
        '/' . Apache::TestRequest::module2path($class), 
        '$r->uri eq $location');

    if ($is_obj) {
        ok t_cmp($self->{perl_version}, $],
                 'object handler data');
    }

    Apache2::Const::OK;
}

1;
__END__
