use strict; use warnings; use Test::More tests => 24; do "t/lib/helpers.pl"; BEGIN { use_ok('YAML::AppConfig') } # TEST: config and config_keys { my $app = YAML::AppConfig->new( file => 't/data/config.yaml' ); ok( $app, "Object created." ); is_deeply( $app->config, { foo => 1, bar => 2, eep => '$foo' }, "config() method." ); is_deeply( [ $app->config_keys ], [qw(bar eep foo)], "config_keys() method." ); } # TEST: merge { my $app = YAML::AppConfig->new( file => 't/data/basic.yaml' ); ok( $app, "Object created." ); is( $app->get_foo, 1, "Checking foo before merge()." ); is( $app->get_bar, 2, "Checking bar before merge()." ); $app->merge( file => 't/data/merge.yaml' ); is( $app->get_foo, 2, "Checking foo after merge()." ); is( $app->get_bar, 2, "Checking bar after merge()." ); is( $app->get_baz, 3, "Checking bar after merge()." ); } # TEST: resolve { my $yaml = <<'YAML'; --- foo: hello bar: $foo world circ1: $circ2 circ2: $circ1 cows: - are - wonderful - $bar YAML my $app = YAML::AppConfig->new( string => $yaml ); ok($app, "Object loaded"); is( $app->resolve('I like $bar a lot'), 'I like hello world a lot', 'Testing our resolve()' ); is_deeply( $app->resolve('$cows'), [qw(are wonderful), "hello world"], 'Testing our resolve() with references', ); eval { $app->resolve('$circ1 is a loop!') }; like( $@, qr/Circular reference/, 'Testing our resolve() with circular refs' ); my $template = { qux => '$foo is good', baz => [ '$foo', '$cows' ] }; my $new = $app->resolve($template); isnt( $new, $template, "Testing we did not smash our old object" ); is_deeply( $new, { qux => 'hello is good', baz => [ 'hello', [ qw(are wonderful), "hello world" ], ], }, "Testing our resolve() with nested structures." ); } # TEST: dump { my $yaml = "---\nfoo: 1\nbar: 2\n"; my $app = YAML::AppConfig->new( string => $yaml ); ok( $app, "Object created." ); $app->set_foo(42); my $dump = $app->dump(); like( $dump, qr/foo:\s*42/, "Testing dump()" ); like( $dump, qr/bar:\s*2/, "Testing dump()" ); my $file = 't/data/dump.yaml'; $app->dump($file); ok( ( -f $file ), "Testing dump() with file: $file" ); ok( open( FILE, $file ), "Opening file: $file" ); my $text = join( "", ); like( $text, qr/foo:\s*42/, "Testing dump() with file: $file" ); like( $text, qr/bar:\s*2/, "Testing dump() with file: $file" ); is( $text, $dump, "Testing that dump() and dump() to file are same" ); }