added a flatten_to_hash option to return a simple key-value hashref instead of the...
[p5sagit/Config-Any.git] / t / 61-features.t
index b2d8467..62bd59e 100644 (file)
@@ -1,51 +1,83 @@
-package MockApp;\r
-use strict;\r
-use warnings;\r
-\r
-$|++;\r
-\r
-use Test::More tests => 10;\r
-use Scalar::Util qw(blessed reftype);\r
-\r
-use Config::Any;\r
-use Config::Any::INI;\r
-\r
-our $cfg_file = 't/conf/conf.foo';\r
-\r
-eval { Config::Any::INI->load($cfg_file); };\r
-SKIP: {\r
-    skip "File loading backend for INI not found", 9 if $@;\r
-\r
-    ok( my $c_arr = Config::Any->load_files({ \r
-            files           => [ $cfg_file ], \r
-            force_plugins   => [qw(Config::Any::INI)] \r
-        }), "load file with parser forced" );\r
-\r
-    ok(my $c = $c_arr->[0], "load_files returns an arrayref");\r
-    \r
-    ok(ref $c, "load_files arrayref contains a ref");\r
-    my $ref = blessed $c ? reftype $c : ref $c;\r
-    is(substr($ref,0,4), "HASH", "hashref");\r
-\r
-    my ($name, $cfg) = each %$c;\r
-    is($name, $cfg_file, "filename matches");\r
-    \r
-    my $cfgref = blessed $cfg ? reftype $cfg : ref $cfg;\r
-    is(substr($cfgref,0,4), "HASH", "hashref cfg");\r
-\r
-    is( $cfg->{name}, 'TestApp', "appname parses" );\r
-    is( $cfg->{Component}{ "Controller::Foo" }->{ foo }, 'bar',                  \r
-        "component->cntrlr->foo = bar" );\r
-    is( $cfg->{Model}{ "Model::Baz" }->{ qux },                 'xyzzy',                 \r
-        "model->model::baz->qux = xyzzy" );\r
-\r
-\r
-    ok( my $c_arr_2 = Config::Any->load_files({ \r
-            files           => [ $cfg_file ], \r
-            force_plugins   => [qw(Config::Any::INI)],\r
-            use_ext         => 1\r
-        }), "load file with parser forced" );\r
-}\r
-\r
-\r
-\r
+package MockApp;
+use strict;
+use warnings;
+
+$|++;
+
+use Test::More tests => 14;
+use Scalar::Util qw(blessed reftype);
+
+use Config::Any;
+use Config::Any::INI;
+
+our $cfg_file = 't/conf/conf.foo';
+
+eval { Config::Any::INI->load( $cfg_file ); };
+
+SKIP: {
+    skip "File loading backend for INI not found", 14 if $@;
+
+    my $struct; # used to make sure parsing works for arrays and hashes
+
+    # force_plugins
+    {
+        my $result = Config::Any->load_files(
+            {   files         => [ $cfg_file ],
+                force_plugins => [ qw(Config::Any::INI) ]
+            }
+        );
+
+        ok( $result, 'load file with parser forced' );
+
+        ok( my $first = $result->[ 0 ], 'load_files returns an arrayref' );
+        ok( ref $first, 'load_files arrayref contains a ref' );
+
+        my $ref = blessed $first ? reftype $first : ref $first;
+        is( substr( $ref, 0, 4 ), 'HASH', 'hashref' );
+
+        $struct = $first;
+
+        my ( $name, $cfg ) = %$first;
+        is( $name, $cfg_file, 'filenames match' );
+
+        my $cfgref = blessed $cfg ? reftype $cfg : ref $cfg;
+        is( substr( $cfgref, 0, 4 ), 'HASH', 'hashref cfg' );
+
+        is( $cfg->{ name }, 'TestApp', 'appname parses' );
+        is( $cfg->{ Component }{ "Controller::Foo" }->{ foo },
+            'bar', 'component->cntrlr->foo = bar' );
+        is( $cfg->{ Model }{ "Model::Baz" }->{ qux },
+            'xyzzy', 'model->model::baz->qux = xyzzy' );
+    }
+
+    # flatten_to_hash
+    {
+        my $result = Config::Any->load_files(
+            {   files           => [ $cfg_file ],
+                force_plugins   => [ qw(Config::Any::INI) ],
+                flatten_to_hash => 1
+            }
+        );
+
+        ok( $result, 'load file with parser forced, flatten to hash' );
+        ok( ref $result, 'load_files hashref contains a ref' );
+
+        my $ref = blessed $result ? reftype $result : ref $result;
+        is( substr( $ref, 0, 4 ), 'HASH', 'hashref' );
+
+        is_deeply( $result, $struct, 'load_files return an hashref (flatten_to_hash)' );
+    }
+     
+    # use_ext  
+    {
+        ok( my $result = Config::Any->load_files(
+                {   files         => [ $cfg_file ],
+                    force_plugins => [ qw(Config::Any::INI) ],
+                    use_ext       => 1
+                }
+            ),
+            "load file with parser forced"
+        );
+    }
+}
+