X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F008_configfromfile.t;h=521439f5e04f724818542e7c2a23f32973a611aa;hb=51c2f425232f357176197ac252662c594799ae2d;hp=4b78e512387bdaeba544754d9228d9a2c533adaf;hpb=62c4891a67e6c7f3a79eb48adec1bf3eca3ff4d1;p=gitmo%2FMooseX-Getopt.git diff --git a/t/008_configfromfile.t b/t/008_configfromfile.t index 4b78e51..521439f 100644 --- a/t/008_configfromfile.t +++ b/t/008_configfromfile.t @@ -1,19 +1,11 @@ -#!/usr/bin/env perl - use strict; use warnings; -use Test::Exception; -use Test::More; - -if ( !require MooseX::ConfigFromFile ) -{ - plan skip_all => 'Test requires MooseX::ConfigFromFile'; -} -else -{ - plan tests => 24; -} +use Test::Requires { 'MooseX::ConfigFromFile' => '0.06' }; # skip all if not installed +use Test::More tests => 38; +use Test::Fatal; +use Path::Tiny; +use Test::NoWarnings 1.04 ':early'; { package App; @@ -55,7 +47,8 @@ else optional_from_config => 'from_config_2', ); - if ( $file ne '/notused/default' ) { + my $cpath = Path::Tiny::path('/notused/default'); + if ( $file ne $cpath ) { $config{config_from_override} = 1; } @@ -70,7 +63,18 @@ else extends 'App'; has '+configfile' => ( - default => '/notused/default', + default => Path::Tiny::path('/notused/default')->stringify, + ); +} + +{ + package App::DefaultConfigFileCodeRef; + + use Moose; + extends 'App'; + + has '+configfile' => ( + default => sub { return Path::Tiny::path('/notused/default') }, ); } @@ -78,20 +82,32 @@ else { local @ARGV = qw( --required_from_argv 1 ); - throws_ok { App->new_with_options } qr/Required option missing: required_from_config/; + like exception { App->new_with_options }, + ($Getopt::Long::Descriptive::VERSION >= 0.091 + ? qr/Mandatory parameter 'required_from_config' missing/ + : qr/Required option missing: required_from_config/); + + { + my $app = App::DefaultConfigFile->new_with_options; + isa_ok( $app, 'App::DefaultConfigFile' ); + app_ok( $app ); + ok( !$app->config_from_override, + '... config_from_override false as expected' ); - TODO: { - local $TODO = 'Cannot supply required args from config'; + is( $app->configfile, path('/notused/default'), + '... configfile is /notused/default as expected' ); + } - my $app = eval { App::DefaultConfigFile->new_with_options }; - isa_ok( $app, 'App::DefaultConfigFile' ); + { + my $app = App::DefaultConfigFileCodeRef->new_with_options; + isa_ok( $app, 'App::DefaultConfigFileCodeRef' ); app_ok( $app ); - ok( $app && !$app->config_from_override, + ok( !$app->config_from_override, '... config_from_override false as expected' ); - is( $app && $app->configfile, '/notused/default', + is( $app->configfile, path('/notused/default'), '... configfile is /notused/default as expected' ); } } @@ -100,25 +116,32 @@ else { local @ARGV = qw( --configfile /notused --required_from_argv 1 ); - TODO: { - local $TODO = 'Cannot supply required args from config'; - - my $app = eval { App->new_with_options }; + { + my $app = App->new_with_options; isa_ok( $app, 'App' ); app_ok( $app ); } - TODO: { - local $TODO = 'Cannot supply required args from config'; - - my $app = eval { App::DefaultConfigFile->new_with_options }; + { + my $app = App::DefaultConfigFile->new_with_options; isa_ok( $app, 'App::DefaultConfigFile' ); app_ok( $app ); - is ( $app && $app->config_from_override, + ok( $app->config_from_override, '... config_from_override true as expected' ); - is( $app && $app->configfile, '/notused', + is( $app->configfile, path('/notused'), + '... configfile is /notused as expected' ); + } + { + my $app = App::DefaultConfigFileCodeRef->new_with_options; + isa_ok( $app, 'App::DefaultConfigFileCodeRef' ); + app_ok( $app ); + + ok( $app->config_from_override, + '... config_from_override true as expected' ); + + is( $app->configfile, path('/notused'), '... configfile is /notused as expected' ); } } @@ -126,7 +149,10 @@ else # Required arg not supplied from cmdline { local @ARGV = qw( --configfile /notused ); - throws_ok { App->new_with_options } qr/Required option missing: required_from_argv/; + like exception { App->new_with_options }, + ($Getopt::Long::Descriptive::VERSION >= 0.091 + ? qr/Mandatory parameter 'required_from_argv' missing/ + : qr/Required option missing: required_from_argv/); } # Config file value overriden from cmdline @@ -157,15 +183,36 @@ else '... optional_from_config is undef as expected' ); } +{ + package BaseApp::WithConfig; + use Moose; + with 'MooseX::ConfigFromFile'; + + sub get_config_from_file { return {}; } +} + +{ + package DerivedApp::Getopt; + use Moose; + extends 'BaseApp::WithConfig'; + with 'MooseX::Getopt'; +} + +# With DerivedApp, the Getopt role was applied at a different level +# than the ConfigFromFile role +{ + ok ! exception { DerivedApp::Getopt->new_with_options }, 'Can create DerivedApp'; +} + sub app_ok { my $app = shift; - is( $app && $app->required_from_config, 'from_config_1', + is( $app->required_from_config, 'from_config_1', '... required_from_config is from_config_1 as expected' ); - is( $app && $app->optional_from_config, 'from_config_2', + is( $app->optional_from_config, 'from_config_2', '... optional_from_config is from_config_2 as expected' ); - is( $app && $app->required_from_argv, '1', + is( $app->required_from_argv, '1', '... required_from_argv is 1 as expected' ); }