include configfile=>$value to new()
Karen Etheridge [Fri, 8 Feb 2013 00:32:55 +0000 (16:32 -0800)]
Changes
lib/MooseX/Getopt/Basic.pm
t/008_configfromfile.t

diff --git a/Changes b/Changes
index 29a24f2..97dce7a 100644 (file)
--- a/Changes
+++ b/Changes
@@ -4,6 +4,8 @@ Revision history for Perl extension MooseX-Getopt
  - fix broken tests on win32 with file comparisons
  - allow configfiles called "0"
  - support more mechanisms for overriding default configfile
+ - when using in conjunction with MooseX::ConfigFromFile, configfile value now
+   properly passed to new()
 
 0.53      2013-02-05 09:59:00 PST-0800
  - properly indicate optional dependency in tests using
index 71de569..691f672 100644 (file)
@@ -31,12 +31,12 @@ sub process_argv {
         $opt_parser->getoptions( "configfile=s" => \$configfile );
 
         my $cfmeta = $class->meta->find_attribute_by_name('configfile');
+        my $init_arg = $cfmeta->init_arg;
 
         # was it passed to the constructor?
         if (!defined $configfile)
         {
-            my $key = $cfmeta->init_arg;
-            $configfile = $constructor_params->{$key} if defined $key;
+            $configfile = $constructor_params->{$init_arg} if defined $init_arg;
         }
 
         if(!defined $configfile) {
@@ -59,6 +59,9 @@ sub process_argv {
                     die $_ unless /Specified configfile '\Q$configfile\E' does not exist/;
                 };
             }
+
+            $constructor_params->{$init_arg} = $configfile
+                if defined $configfile and defined $init_arg;
         }
         else {
             $config_from_file = $class->get_config_from_file($configfile);
index cb54a1c..3e420ac 100644 (file)
@@ -2,11 +2,14 @@ use strict;
 use warnings;
 
 use Test::Requires { 'MooseX::ConfigFromFile' => '0.06' };    # skip all if not installed
-use Test::More tests => 50;
+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;
+    };
 }
 
 {
@@ -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,6 +136,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',
+        );
     }
 
     {
@@ -130,6 +156,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 +187,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,6 +206,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',
+        );
     }
     TODO: {
         my $app = App::ConfigFileWrapped->new_with_options;
@@ -179,6 +229,14 @@ use Test::NoWarnings 1.04 ':early';
         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',
+        );
     }
 }