use strict;
use warnings;
-use Test::Exception;
-use Test::More;
+use Test::More tests => 37;
+use Test::Fatal;
use File::Spec;
-if ( !eval { require MooseX::ConfigFromFile } )
-{
- plan skip_all => 'Test requires MooseX::ConfigFromFile';
-}
-else
-{
- plan tests => 25;
-}
+use Test::Requires {
+ 'MooseX::ConfigFromFile' => 0.01, # skip all if not installed
+};
{
package App;
);
}
+{
+ package App::DefaultConfigFileCodeRef;
+
+ use Moose;
+ extends 'App';
+
+ has '+configfile' => (
+ default => sub { return File::Spec->canonpath('/notused/default') },
+ );
+}
+
# No config specified
{
local @ARGV = qw( --required_from_argv 1 );
- throws_ok { App->new_with_options } qr/Required option missing: required_from_config/;
+ if ($Getopt::Long::Descriptive::VERSION >= 0.091) {
+ like exception { App->new_with_options }, qr/Mandatory parameter 'required_from_config' missing/;
+ }
+ else {
+ like exception { App->new_with_options }, qr/Required option missing: required_from_config/;
+ }
{
my $app = App::DefaultConfigFile->new_with_options;
}
}
+# No config specified
+{
+ local @ARGV = qw( --required_from_argv 1 );
+
+ {
+ my $app = App::DefaultConfigFileCodeRef->new_with_options;
+ isa_ok( $app, 'App::DefaultConfigFileCodeRef' );
+ app_ok( $app );
+
+ ok( !$app->config_from_override,
+ '... config_from_override false as expected' );
+
+ is( $app->configfile, File::Spec->canonpath('/notused/default'),
+ '... configfile is /notused/default as expected' );
+ }
+}
+
# Config specified
{
local @ARGV = qw( --configfile /notused --required_from_argv 1 );
is( $app->configfile, File::Spec->canonpath('/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, File::Spec->canonpath('/notused'),
+ '... configfile is /notused as expected' );
+ }
}
# Required arg not supplied from cmdline
{
local @ARGV = qw( --configfile /notused );
- throws_ok { App->new_with_options } qr/Required option missing: required_from_argv/;
+ if ($Getopt::Long::Descriptive::VERSION >= 0.091) {
+ like exception { App->new_with_options }, qr/Mandatory parameter 'required_from_argv' missing/;
+ }
+ else {
+ like exception { App->new_with_options }, qr/Required option missing: required_from_argv/;
+ }
}
# Config file value overriden from cmdline
# With DerivedApp, the Getopt role was applied at a different level
# than the ConfigFromFile role
{
- lives_ok { DerivedApp::Getopt->new_with_options } 'Can create DerivedApp';
+ ok ! exception { DerivedApp::Getopt->new_with_options }, 'Can create DerivedApp';
}
sub app_ok {