make all warnings fatal in tests
[gitmo/MooseX-Getopt.git] / t / 008_configfromfile.t
index cb54a1c..39798a2 100644 (file)
@@ -1,12 +1,15 @@
 use strict;
-use warnings;
+use warnings FATAL => 'all';
 
-use Test::Requires { 'MooseX::ConfigFromFile' => '0.06' };    # skip all if not installed
-use Test::More tests => 50;
+use Test::Requires 'MooseX::ConfigFromFile';    # skip all if not installed
+use Test::More tests => 56;
 use Test::Fatal;
+use Test::Deep '!blessed';
 use Path::Tiny;
+use Scalar::Util 'blessed';
 use Test::NoWarnings 1.04 ':early';
 
+my %constructor_args;
 {
     package App;
 
@@ -53,6 +56,13 @@ use Test::NoWarnings 1.04 ':early';
 
         return \%config;
     }
+
+    around BUILDARGS => sub
+    {
+        my ($orig, $class) = (shift, shift);
+        my $args = $class->$orig(@_);
+        $constructor_args{$class} = $args;
+    };
 }
 
 {
@@ -73,7 +83,7 @@ use Test::NoWarnings 1.04 ':early';
     extends 'App';
 
     has '+configfile' => (
-        default => sub { return Path::Tiny::path('/notused/default') },
+        default => sub { return Path::Tiny::path('/notused/default')->stringify },
     );
 }
 
@@ -83,7 +93,7 @@ use Test::NoWarnings 1.04 ':early';
     use Moose;
     extends 'App';
 
-    around configfile => sub { '/notused/default' };
+    sub _get_default_configfile { '/notused/default' }
 }
 
 
@@ -106,6 +116,14 @@ use Test::NoWarnings 1.04 ':early';
 
         is( $app->configfile, path('/notused/default'),
             '... configfile is /notused/default as expected' );
+
+        cmp_deeply(
+            $constructor_args{blessed($app)},
+            superhashof({
+                configfile => str(path('/notused/default')),
+            }),
+            'correct constructor args passed',
+        );
     }
 
     {
@@ -118,9 +136,21 @@ use Test::NoWarnings 1.04 ':early';
 
         is( $app->configfile, path('/notused/default'),
             '... configfile is /notused/default as expected' );
+
+        cmp_deeply(
+            $constructor_args{blessed $app},
+            superhashof({
+                configfile => str(path('/notused/default')),
+            }),
+            'correct constructor args passed',
+        );
     }
 
-    {
+    SKIP: {
+        eval "use MooseX::ConfigFromFile 0.08 (); 1;";
+        diag("MooseX::ConfigFromFile 0.08 needed to test this use of configfile defaults"),
+        skip "MooseX::ConfigFromFile 0.08 needed to test this use of configfile defaults", 7 if $@;
+
         my $app = App::ConfigFileWrapped->new_with_options;
         isa_ok( $app, 'App::ConfigFileWrapped' );
         app_ok( $app );
@@ -130,6 +160,14 @@ use Test::NoWarnings 1.04 ':early';
 
         is( $app->configfile, path('/notused/default'),
             '... configfile is /notused/default as expected' );
+
+        cmp_deeply(
+            $constructor_args{blessed $app},
+            superhashof({
+                configfile => str(path('/notused/default')),
+            }),
+            'correct constructor args passed',
+        );
     }
 }
 
@@ -153,6 +191,14 @@ use Test::NoWarnings 1.04 ':early';
 
         is( $app->configfile, path('/notused/override'),
             '... configfile is /notused/override as expected' );
+
+        cmp_deeply(
+            $constructor_args{blessed $app},
+            superhashof({
+                configfile => str(path('/notused/override')),
+            }),
+            'correct constructor args passed',
+        );
     }
     {
         my $app = App::DefaultConfigFileCodeRef->new_with_options;
@@ -164,8 +210,16 @@ use Test::NoWarnings 1.04 ':early';
 
         is( $app->configfile, path('/notused/override'),
             '... configfile is /notused/override as expected' );
+
+        cmp_deeply(
+            $constructor_args{blessed $app},
+            superhashof({
+                configfile => str(path('/notused/override')),
+            }),
+            'correct constructor args passed',
+        );
     }
-    TODO: {
+    {
         my $app = App::ConfigFileWrapped->new_with_options;
         isa_ok( $app, 'App::ConfigFileWrapped' );
         app_ok( $app );
@@ -173,12 +227,16 @@ use Test::NoWarnings 1.04 ':early';
         ok( $app->config_from_override,
              '... config_from_override true as expected' );
 
-# FIXME - in order for this to work, we need to fix CFF so the
-# configfile method always returns the actual value of the attribute,
-# not the default sub thingy.
-        local $TODO = 'MooseX::ConfigFromFile needs fixes';
         is( $app->configfile, path('/notused/override'),
             '... configfile is /notused as expected' );
+
+        cmp_deeply(
+            $constructor_args{blessed $app},
+            superhashof({
+                configfile => str(path('/notused/override')),
+            }),
+            'correct constructor args passed',
+        );
     }
 }