AppConfig
view release on metacpan or search on metacpan
my $state = AppConfig::State->new({
ERROR => \&error,
GLOBAL => {
DEFAULT => $default,
ARGCOUNT => ARGCOUNT_ONE,
},
},
'verbose', {
DEFAULT => 0,
ACTION => \&verbose,
ARGCOUNT => ARGCOUNT_NONE,
},
'user', {
ALIAS => 'name|uid',
VALIDATE => \&check_user,
DEFAULT => $none,
},
'age', {
VALIDATE => '\d+',
});
# $state->_dump();
#------------------------------------------------------------------------
# check and manipulate variables
#
#2: check state got defined
ok( defined $state );
#3 - #5: check default values
ok( $state->verbose() == 0 );
ok( $state->user() eq $none );
ok( $state->age() eq $default );
#6 - #8: check ARGCOUNT got set explicitly or by default
ok( $state->_argcount('verbose') == 0 );
ok( $state->_argcount('user') == 1 );
ok( $state->_argcount('age') == 1 );
#9 - #11: set values
ok( $state->verbose(1) );
ok( $state->user($user) );
ok( $state->age($age) );
#12 - #14: read them back to check values got set correctly
ok( $state->verbose() == 1 );
ok( $state->user() eq $user );
ok( $state->age() == $age );
#15: test that the verbose ACTION was called and $verbose set
ok( $verbose == 1 );
#16 - #19: test the VALIDATE patterns/subs by attempting to set invalid values
ok( ! $state->age('old') );
ok( $state->age() == $age );
ok( ! $state->user('dud') );
ok( $state->user() eq $user );
#20: check that the error handler correctly updated $errors
ok( $errors == 2 );
#21 - #22: access variables via alias
ok( $state->name() eq $user );
ok( $state->uid() eq $user );
#23 - #25: test case insensitivity
ok( $state->USER() eq $user );
ok( $state->NAME() eq $user );
ok( $state->UID() eq $user );
#26 - #27: explicitly test get() and set() methods
ok( $state->set('verbose', 100) );
ok( $state->get('verbose') == 100 );
#------------------------------------------------------------------------
# define a different AppConfig::State object
#
my $newstate = AppConfig::State->new({
CASE => 1,
CREATE => '^define_',
PEDANTIC => 1,
ERROR => \&error,
});
#28: check state got defined
ok( defined $newstate );
#29 - #30: test CASE sensitivity
$errors = 0;
ok( ! $newstate->Foo() );
ok( $errors );
#31 - #32: test PEDANTIC mode is/isn't set in states
ok( ! $state->_pedantic() );
ok( $newstate->_pedantic() );
#33 - #34: test auto-creation of define_ variable
ok( $newstate->define_user($user) );
ok( $newstate->define_user() eq $user );
#------------------------------------------------------------------------
# define a third AppConfig::State object to test compact format
#
my $thirdstate = AppConfig::State->new("foo|bar|baz=s");
#35: check state got defined
ok( defined $thirdstate );
$thirdstate->define("tom|dick|harry=i@");
$thirdstate->define("red|green|blue=s");
#36 - #42: check set()/get() for foo and aliases
ok( $thirdstate->foo(5) );
ok( $thirdstate->foo() == 5 );
( run in 0.474 second using v1.01-cache-2.11-cpan-39bf76dae61 )