add parse error tests. ensure INI errors are trapped. bumped version.
Brian Cassidy [Tue, 5 Aug 2008 12:03:26 +0000 (12:03 +0000)]
17 files changed:
Changes
lib/Config/Any.pm
lib/Config/Any/INI.pm
t/50-general.t
t/51-ini.t
t/52-json.t
t/53-perl.t
t/54-xml.t
t/55-yaml.t
t/63-invalid.t [deleted file]
t/conf/conf_invalid.pl [deleted file]
t/invalid/conf.conf [new file with mode: 0644]
t/invalid/conf.ini [new file with mode: 0644]
t/invalid/conf.json [new file with mode: 0644]
t/invalid/conf.pl [new file with mode: 0644]
t/invalid/conf.xml [new file with mode: 0644]
t/invalid/conf.yml [new file with mode: 0644]

diff --git a/Changes b/Changes
index b61b057..939f975 100644 (file)
--- a/Changes
+++ b/Changes
@@ -1,6 +1,9 @@
 Revision history for Config-Any
 
-    - Show actual parse error when parse fails (Marcus Ramberg).
+0.13 XXX
+    - show actual parse error when parse fails (Marcus Ramberg)
+    - ensure Config::Tiny parse errors are trapped
+    - added tests for each format to ensure they throw parse errors
 
 0.12 Mon 07 Apr 2008
     - ensure Perl loader dies on a failed require() (RT #32995)
index d0d789c..1b056e1 100644 (file)
@@ -6,7 +6,7 @@ use warnings;
 use Carp;
 use Module::Pluggable::Object ();
 
-our $VERSION = '0.12';
+our $VERSION = '0.13';
 
 =head1 NAME
 
index 68e3f06..e0d7215 100644 (file)
@@ -45,6 +45,9 @@ sub load {
 
     require Config::Tiny;
     my $config = Config::Tiny->read( $file );
+
+    die $Config::Tiny::errstr if not defined $config;
+
     my $out = delete $config->{ _ } || {};
 
     for my $k ( keys %$config ) {
index ec0dc53..e173624 100644 (file)
@@ -8,7 +8,7 @@ if ( !Config::Any::General->is_supported ) {
     plan skip_all => 'Config::General format not supported';
 }
 else {
-    plan tests => 4;
+    plan tests => 6;
 }
 
 {
@@ -23,3 +23,12 @@ else {
         { -LowerCaseNames => 1 } );
     ok( exists $config->{ component } );
 }
+
+# test invalid config
+{
+    my $file   = 't/invalid/conf.conf';
+    my $config = eval { Config::Any::General->load( $file ) };
+
+    ok( !$config, 'config load failed' );
+    ok( $@, "error thrown ($@)" ); 
+}
index 8040d5b..6848004 100644 (file)
@@ -8,7 +8,7 @@ if ( !Config::Any::INI->is_supported ) {
     plan skip_all => 'INI format not supported';
 }
 else {
-    plan tests => 11;
+    plan tests => 13;
 }
 
 {
@@ -46,3 +46,12 @@ else {
     ok( $config, 'config loaded' );
     is_deeply( $config, \%expected, 'subsections parsed properly' );
 }
+
+# test invalid config
+{
+    my $file   = 't/invalid/conf.ini';
+    my $config = eval { Config::Any::INI->load( $file ) };
+
+    ok( !$config, 'config load failed' );
+    ok( $@, "error thrown ($@)" ); 
+}
index 5467ebe..23eb920 100644 (file)
@@ -8,7 +8,7 @@ if ( !Config::Any::JSON->is_supported ) {
     plan skip_all => 'JSON format not supported';
 }
 else {
-    plan tests => 2;
+    plan tests => 4;
 }
 
 {
@@ -16,3 +16,12 @@ else {
     ok( $config );
     is( $config->{ name }, 'TestApp' );
 }
+
+# test invalid config
+{
+    my $file   = 't/invalid/conf.json';
+    my $config = eval { Config::Any::JSON->load( $file ) };
+
+    ok( !$config, 'config load failed' );
+    ok( $@, "error thrown ($@)" ); 
+}
index 6d2d5ca..b11a60c 100644 (file)
@@ -1,7 +1,7 @@
 use strict;
 use warnings;
 
-use Test::More tests => 3;
+use Test::More tests => 5;
 
 use Config::Any::Perl;
 
@@ -16,3 +16,11 @@ use Config::Any::Perl;
     is_deeply( $config_load2, $config, 'multiple loads of the same file' );
 }
 
+# test invalid config
+{
+    my $file   = 't/invalid/conf.pl';
+    my $config = eval { Config::Any::Perl->load( $file ) };
+
+    ok( !$config, 'config load failed' );
+    ok( $@, "error thrown ($@)" ); 
+}
index fb52d51..02fd793 100644 (file)
@@ -8,7 +8,7 @@ if ( !Config::Any::XML->is_supported ) {
     plan skip_all => 'XML format not supported';
 }
 else {
-    plan tests => 2;
+    plan tests => 4;
 }
 
 {
@@ -16,3 +16,12 @@ else {
     ok( $config );
     is( $config->{ name }, 'TestApp' );
 }
+
+# test invalid config
+{
+    my $file   = 't/invalid/conf.xml';
+    my $config = eval { Config::Any::XML->load( $file ) };
+
+    ok( !$config, 'config load failed' );
+    ok( $@, "error thrown ($@)" ); 
+}
index 3c95831..d042cc4 100644 (file)
@@ -8,7 +8,7 @@ if ( !Config::Any::YAML->is_supported ) {
     plan skip_all => 'YAML format not supported';
 }
 else {
-    plan tests => 2;
+    plan tests => 4;
 }
 
 {
@@ -16,3 +16,12 @@ else {
     ok( $config );
     is( $config->{ name }, 'TestApp' );
 }
+
+# test invalid config
+{
+    my $file   = 't/invalid/conf.yml';
+    my $config = eval { Config::Any::YAML->load( $file ) };
+
+    ok( !$config, 'config load failed' );
+    ok( $@, "error thrown ($@)" ); 
+}
diff --git a/t/63-invalid.t b/t/63-invalid.t
deleted file mode 100644 (file)
index 932e93d..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-use strict;
-use warnings;
-
-use Test::More tests => 2;
-
-use Config::Any::Perl;
-
-{
-    my $file   = 't/conf/conf_invalid.pl';
-    my $config = eval { Config::Any::Perl->load( $file ) };
-
-    ok( !$config, 'config load failed' );
-    ok( $@, "error thrown ($@)" ); 
-}
diff --git a/t/conf/conf_invalid.pl b/t/conf/conf_invalid.pl
deleted file mode 100644 (file)
index fdbc936..0000000
+++ /dev/null
@@ -1 +0,0 @@
-this is not valid perl.
diff --git a/t/invalid/conf.conf b/t/invalid/conf.conf
new file mode 100644 (file)
index 0000000..f0f55b4
--- /dev/null
@@ -0,0 +1,7 @@
+name = TestApp\r
+<Component Controller::Foo\r
+    foo bar\r
+</Component>\r
+<Model Model::Baz>\r
+    qux xyzzy\r
+</Model>\r
diff --git a/t/invalid/conf.ini b/t/invalid/conf.ini
new file mode 100644 (file)
index 0000000..3323d75
--- /dev/null
@@ -0,0 +1,7 @@
+name=TestApp\r
+    \r
+[Component Controller::Foo\r
+foo=bar\r
+\r
+[Model Model::Baz]\r
+qux=xyzzy\r
diff --git a/t/invalid/conf.json b/t/invalid/conf.json
new file mode 100644 (file)
index 0000000..eb6497c
--- /dev/null
@@ -0,0 +1,13 @@
+{\r
+    "name": "TestApp",\r
+    "Component": {\r
+        "Controller::Foo": {\r
+            "foo": "bar"\r
+        }\r
+    },\r
+    "Model": {\r
+        "Model::Baz": {\r
+            "qux": "xyzzy"\r
+        }\r
+    }\r
+
diff --git a/t/invalid/conf.pl b/t/invalid/conf.pl
new file mode 100644 (file)
index 0000000..d7fcbf6
--- /dev/null
@@ -0,0 +1,4 @@
+{   name      => 'TestApp'
+    Component => { 'Controller::Foo' => { foo => 'bar' } },
+    Model     => { 'Model::Baz' => { qux => 'xyzzy' } }
+}
diff --git a/t/invalid/conf.xml b/t/invalid/conf.xml
new file mode 100644 (file)
index 0000000..8a6b109
--- /dev/null
@@ -0,0 +1,9 @@
+<config>
+    <name>TestApp</name
+    <Component name="Controller::Foo">
+        <foo>bar</foo>
+    </Component>
+    <Model name="Model::Baz">
+        <qux>xyzzy</qux>
+    </Model>
+</config>
diff --git a/t/invalid/conf.yml b/t/invalid/conf.yml
new file mode 100644 (file)
index 0000000..93db559
--- /dev/null
@@ -0,0 +1,8 @@
+---
+name: TestApp
+Component:
+       Controller::Foo:
+        foo: bar
+Model:
+    Model::Baz:
+        qux: xyzzy