blob: 8c852885512f513bb22f87ff0a35e62956b1b6ad [file] [log] [blame]
# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
package TestDirective::perlloadmodule;
use strict;
use warnings FATAL => 'all';
use Apache::Test;
use Apache::TestUtil;
use Apache::TestTrace;
use Apache2::Const -compile => qw(OK OR_ALL RSRC_CONF TAKE1 TAKE23);
use Apache2::CmdParms ();
use Apache2::Module ();
my @directives = (
{
name => 'MyTest',
func => __PACKAGE__ . '::MyTest',
req_override => Apache2::Const::RSRC_CONF,
# req_override => 'RSRC_CONF', #test 1.x compat for strings
# args_how => Apache2::Const::TAKE23,
args_how => 'TAKE23', #test 1.x compat for strings
errmsg => 'A test',
},
{
name => 'MyOtherTest',
cmd_data => 'some info',
},
{
name => 'ServerTest',
req_override => Apache2::Const::RSRC_CONF,
}
);
Apache2::Module::add(__PACKAGE__, \@directives);
sub DIR_CREATE {
my ($class, $parms) = @_;
bless {
path => $parms->path || "/",
}, $class;
}
sub merge {
my ($base, $add) = @_;
my %new = ();
@new{keys %$base, keys %$add} =
(values %$base, values %$add);
return bless \%new, ref($base);
}
sub DIR_MERGE {
my $class = ref $_[0];
debug "$class->DIR_MERGE\n";
merge(@_);
}
#sub SERVER_MERGE {
# my $class = ref $_[0];
# debug "$class->SERVER_MERGE\n";
# merge(@_);
#}
sub SERVER_CREATE {
my ($class, $parms) = @_;
debug "$class->SERVER_CREATE\n";
return bless {
name => __PACKAGE__,
}, $class;
}
sub MyTest {
my ($self, $parms, @args) = @_;
$self->{MyTest} = \@args;
$self->{MyTestInfo} = $parms->info;
}
sub MyOtherTest {
my ($self, $parms, $arg) = @_;
$self->{MyOtherTest} = $arg;
$self->{MyOtherTestInfo} = $parms->info;
}
sub ServerTest {
my ($self, $parms, $arg) = @_;
my $srv_cfg = $self->get_config($parms->server);
$srv_cfg->{ServerTest} = $arg;
}
sub get_config {
my ($self, $s) = (shift, shift);
Apache2::Module::get_config($self, $s, @_);
}
sub handler : method {
my ($self, $r) = @_;
my $s = $r->server;
my $dir_cfg = $self->get_config($s, $r->per_dir_config);
my $srv_cfg = $self->get_config($s);
plan $r, tests => 9;
t_debug("per-dir config:", $dir_cfg);
t_debug("per-srv config:", $srv_cfg);
ok $dir_cfg->isa($self);
ok $srv_cfg->isa($self);
my $path = $dir_cfg->{path};
ok t_cmp($r->uri, qr{^$path},
'r->uri =~ parms->path');
ok t_cmp($srv_cfg->{name}, $self,
'$self eq $srv_cfg->{name}');
ok t_cmp($dir_cfg->{MyOtherTest}, 'value',
'MyOtherTest value');
ok t_cmp($dir_cfg->{MyOtherTestInfo}, 'some info',
'MyOtherTest cmd_data');
ok t_cmp($dir_cfg->{MyTest}, ['one', 'two'],
'MyTest one two');
ok ! $dir_cfg->{MyTestInfo};
ok t_cmp($srv_cfg->{ServerTest}, 'per-server');
Apache2::Const::OK;
}
1;
__END__
# APACHE_TEST_CONFIG_ORDER 950
<Base>
PerlLoadModule TestDirective::perlloadmodule
MyTest one two
ServerTest per-server
</Base>
MyOtherTest value