use Test::More tests => 15;
BEGIN {
use lib qw(lib);
use_ok('Data::Path')
};
my $hash=
{ scalar => 'scalar_value'
, array =>
[ qw( array_value0 array_value1 array_value2 array_value3)
]
, hash =>
{ hash1 => 'hash_value1'
, hash2 => 'hash_value2'
}
, complex =>
{ level2 =>
[ { level3_0 =>
[ 'level4_0'
, { level4_1 => { level5 => 'huhu' }
}
, 'level4_2'
]
}
]
}
};
my $a=Data::Path->new($hash);
ok ( $a );
my $v='';
$v=$a->get('/scalar');
ok ( $v eq 'scalar_value' , " value=$v");
$v=$a->get('/array[0]');
ok ( $v eq 'array_value0' , " value=$v");
$v=$a->get('/hash/hash1');
ok ( $v eq 'hash_value1' , " value=$v");
$v=$a->get('/complex/level2[0]/level3_0[0]');
ok ( $v eq 'level4_0' , " value=$v");
$v=$a->get('/complex/level2[0]/level3_0[2]');
ok ( $v eq 'level4_2' , " value=$v");
$v=$a->get('/complex/level2[0]/level3_0[1]/level4_1/level5');
ok ( $v eq 'huhu' ," value=$v");
eval {
$a->get('/complex/level2[99]/level3_0[1]/level4_1/level5');
};
ok ( $@ =~/does not exists/ ," check error_msg = $@");
eval {
$a->get('/complex/level2[0]/level3_1[1]/level4_1/level5');
};
ok ( $@ =~/does not exists/ ," check error_msg = $@");
$v=$a->get('/complex/level2[0]/level3_0[1]/level4_1/level5_not_exists') || 'UNDEF';
ok ( $v eq 'UNDEF' ," value=$v");
$v=$a->get('/complex/level2[0]/level3_0[99]') || 'UNDEF';
ok ( $v eq 'UNDEF' ," value=$v");
$v=$a->get('/complex/level2[0]/level3_0[2]') || 'UNDEF';
ok ( $v eq 'level4_2' ," value=$v");
my $b=Data::Path->new($hash,
{ 'key_does_not_exist'=>sub{ die 'callback_error_key' }
, 'index_does_not_exist'=>sub{ die 'callback_error_index' }
} );
eval {
$b->get('/complex/home/');
};
ok ( $@ =~/callback_error_key/ ," check error_msg = $@");
eval {
$b->get('/complex/level2[99]/level3_0');
};
ok ( $@ =~/callback_error_index/ ," check error_msg = $@");