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;
return \%config;
}
+
+ around BUILDARGS => sub
+ {
+ my ($orig, $class) = (shift, shift);
+ my $args = $class->$orig(@_);
+ $constructor_args{$class} = $args;
+ };
}
{
extends 'App';
has '+configfile' => (
- default => sub { return Path::Tiny::path('/notused/default') },
+ default => sub { return Path::Tiny::path('/notused/default')->stringify },
);
}
use Moose;
extends 'App';
- around configfile => sub { '/notused/default' };
+ sub _get_default_configfile { '/notused/default' }
}
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',
+ );
}
- {
+ 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 );
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;
isa_ok( $app, 'App::ConfigFileWrapped' );
app_ok( $app );
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',
+ );
}
}