X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=gitmo%2FMooseX-Getopt.git;a=blobdiff_plain;f=t%2F008_configfromfile.t;h=92e083ba0f2be992697f8ed84c8c8e4e6ac81231;hp=cb54a1c9325bdda63a7c1ff9a7475be21a4f6b5e;hb=25eb430dc9dc0e223b0a8cddf555e0dc3bbd26aa;hpb=cd4283e8e3f9124e475e839847bcb9a1b185411e diff --git a/t/008_configfromfile.t b/t/008_configfromfile.t index cb54a1c..92e083b 100644 --- a/t/008_configfromfile.t +++ b/t/008_configfromfile.t @@ -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 Path::Tiny; -use Test::NoWarnings 1.04 ':early'; +use Test::Deep '!blessed'; +use Path::Tiny 0.009; +use Scalar::Util 'blessed'; +use Test::Warnings; +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' } } @@ -104,8 +114,16 @@ use Test::NoWarnings 1.04 ':early'; ok( !$app->config_from_override, '... config_from_override false as expected' ); - is( $app->configfile, path('/notused/default'), + is( path($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', + ); } { @@ -116,11 +134,23 @@ use Test::NoWarnings 1.04 ':early'; ok( !$app->config_from_override, '... config_from_override false as expected' ); - is( $app->configfile, path('/notused/default'), + is( path($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', + ); } } @@ -151,8 +189,16 @@ use Test::NoWarnings 1.04 ':early'; ok( $app->config_from_override, '... config_from_override true as expected' ); - is( $app->configfile, path('/notused/override'), + is( path($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; @@ -162,10 +208,18 @@ use Test::NoWarnings 1.04 ':early'; ok( $app->config_from_override, '... config_from_override true as expected' ); - is( $app->configfile, path('/notused/override'), + is( path($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'), + is( path($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', + ); } }