| # please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*- |
| package TestModperl::dir_config; |
| |
| use strict; |
| use warnings FATAL => 'all'; |
| |
| use Apache2::ServerRec (); |
| use Apache2::ServerUtil (); |
| use Apache2::RequestUtil (); |
| use APR::Table (); |
| |
| use Apache::Test; |
| use Apache::TestUtil; |
| |
| use Apache2::Const -compile => 'OK'; |
| |
| sub handler { |
| my $r = shift; |
| |
| plan $r, tests => 15; |
| |
| #Apache2::RequestRec::dir_config tests |
| |
| # this test doesn't test all $r->dir_config->*(), since |
| # dir_config() returns a generic APR::Table which is tested in |
| # apr/table.t. |
| |
| # object test |
| my $dir_config = $r->dir_config; |
| ok defined $dir_config && ref($dir_config) eq 'APR::Table'; |
| |
| # make sure trying to get something that's not defined |
| # doesn't blow up |
| my $undef = $r->dir_config('EDOESNOTEXIST'); |
| |
| ok t_cmp($undef, undef, |
| 'no PerlSetVar to get data from'); |
| |
| # PerlAddVar ITERATE2 test |
| { |
| my $key = make_key('1'); |
| my @received = $dir_config->get($key); |
| my @expected = qw(1_SetValue 2_AddValue 3_AddValue 4_AddValue); |
| |
| ok t_cmp(\@received, \@expected, |
| 'PerlAddVar ITERATE2'); |
| } |
| |
| # sub-section inherits from super-section if it doesn't override it |
| { |
| my $key = make_key('_set_in_Base'); |
| ok t_cmp($r->dir_config($key), |
| 'BaseValue', |
| "sub-section inherits from super-section " . |
| "if it doesn't override it"); |
| } |
| |
| # sub-section overrides super-section for the same key |
| { |
| my $key = 'TestModperl__server_rec_Key_set_in_Base'; |
| ok t_cmp($r->dir_config->get($key), 'SubSecValue', |
| "sub-section overrides super-section for the same key"); |
| } |
| |
| { |
| my $key = make_key('0'); |
| |
| # object interface test in a scalar context (for a single |
| # PerlSetVar key) |
| ok t_cmp($dir_config->get($key), |
| 'SetValue0', |
| "table get() in a scalar context"); |
| |
| # direct fetch test in a scalar context (for a single |
| # PerlSetVar key) |
| ok t_cmp($r->dir_config($key), |
| 'SetValue0', |
| "direct value fetch in a scalar context"); |
| } |
| |
| # make sure 0 comes through as 0 and not undef |
| { |
| my $key = 'TestModperl__request_rec_ZeroKey'; |
| |
| ok t_cmp($r->dir_config($key), |
| 0, |
| 'table value 0 is not undef'); |
| } |
| |
| # test non-existent key |
| { |
| my $key = make_key(); |
| |
| ok t_cmp($r->dir_config($key), |
| undef, |
| "non-existent key"); |
| } |
| |
| # test set interface |
| { |
| my $key = make_key(); |
| my $val = "DirConfig"; |
| |
| $r->dir_config($key => $val); |
| |
| ok t_cmp($r->dir_config($key), |
| $val, |
| "set && get"); |
| } |
| |
| # test unset interface |
| { |
| my $key = make_key(); |
| |
| $r->dir_config($key => 'whatever'); |
| $r->dir_config($key => undef); |
| |
| ok t_cmp(undef, |
| $r->dir_config($key), |
| "unset"); |
| } |
| |
| |
| #Apache2::ServerUtil::dir_config tests |
| |
| my $s = $r->server; |
| |
| # this test doesn't test all $s->dir_config->*(), since |
| # dir_config() returns a generic APR::Table which is tested in |
| # apr/table.t. |
| |
| # object test |
| $dir_config = $s->dir_config; |
| ok defined $dir_config && ref($dir_config) eq 'APR::Table'; |
| |
| # PerlAddVar ITERATE2 test |
| { |
| my $key = 'TestModperl__server_rec_Key_set_in_Base'; |
| my @received = $dir_config->get($key); |
| my @expected = qw(1_SetValue 2_AddValue 3_AddValue); |
| |
| ok t_cmp(\@received, \@expected, |
| "testing PerlAddVar ITERATE2 in \$s"); |
| } |
| |
| { |
| # base server test |
| my $bs = Apache2::ServerUtil->server; |
| ok t_cmp(($bs && ref($bs)), |
| 'Apache2::ServerRec', |
| "base server's object retrieval"); |
| |
| my $key = 'TestModperl__server_rec_Key_set_in_Base'; |
| ok t_cmp(scalar ($bs->dir_config->get($key)), |
| '1_SetValue', |
| "read dir_config of the base server"); |
| } |
| |
| Apache2::Const::OK; |
| } |
| |
| my $key_base = "TestModperl__request_rec_Key"; |
| my $counter = 0; |
| |
| sub make_key { |
| return $key_base . |
| (defined $_[0] |
| ? $_[0] |
| : unpack "H*", pack "n", ++$counter . rand(100)); |
| } |
| 1; |
| __END__ |
| <Base> |
| PerlSetVar TestModperl__request_rec_Key_set_in_Base BaseValue |
| |
| PerlSetVar TestModperl__server_rec_Key_set_in_Base 1_SetValue |
| PerlAddVar TestModperl__server_rec_Key_set_in_Base 2_AddValue 3_AddValue |
| </Base> |
| |
| PerlSetVar TestModperl__request_rec_ZeroKey 0 |
| |
| PerlSetVar TestModperl__request_rec_Key0 SetValue0 |
| |
| PerlSetVar TestModperl__request_rec_Key1 ToBeLost |
| PerlSetVar TestModperl__request_rec_Key1 1_SetValue |
| PerlAddVar TestModperl__request_rec_Key1 2_AddValue |
| PerlAddVar TestModperl__request_rec_Key1 3_AddValue 4_AddValue |
| |
| PerlSetVar TestModperl__server_rec_Key_set_in_Base SubSecValue |