use strict; use warnings; use Test::More tests => 9; do "t/lib/helpers.pl"; use Storable qw(dclone); BEGIN { use_ok('YAML::AppConfig') } # TEST: Testing dynamically scoped variables { my $app = YAML::AppConfig->new( file => 't/data/scoping.yaml' ); ok( $app, "Created object." ); is( $app->get_foo, "top scope", "Testing foo's value" ); is_deeply( $app->get_bar, { qux => "top scope" }, "Testing top scope." ); is_deeply( $app->get_baz, { foo => 'baz scope', qux => 'baz scope qux', test => 'world', quxx => [ { food => { burger => 'baz scope', test => 'world' }, fries => 'baz scope qux', test => 'world', }, { foo => 'inner scope', food => { burger => 'inner scope', test => 'world' }, fries => 'inner scope qux', test => 'world', }, ], }, "Testing big baz structure." ); is_deeply( $app->get_blah, { blah => "self ref test", ego => "self ref test" }, "Dynamic scoping handles self-refs right." ); eval {$app->get_simple_circ}; like( $@, qr/Circular reference in simple_circ/, "Checking circular dynamic variables." ); eval {$app->get_circ}; like( $@, qr/Circular reference in prolog/, "Checking circular dynamic variables." ); eval {$app->get_bigcirc}; like( $@, qr/Circular reference in thing/, "Checking circular dynamic variables." ); }