$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) {
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);
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;
return \%config;
}
+
+ around BUILDARGS => sub
+ {
+ my ($orig, $class) = (shift, shift);
+ my $args = $class->$orig(@_);
+ $constructor_args{$class} = $args;
+ };
}
{
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',
+ );
}
{
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',
+ );
}
{
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',
+ );
}
}
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;
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;
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',
+ );
}
}