AppConfig

 view release on metacpan or  search on metacpan

t/state.t  view on Meta::CPAN

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 )