Add extra tests and changes for config_from file.
[gitmo/MooseX-Getopt.git] / t / 008_configfromfile.t
index 62e6ed9..864d3e3 100644 (file)
@@ -11,10 +11,6 @@ if ( !eval { require MooseX::ConfigFromFile } )
 {
     plan skip_all => 'Test requires MooseX::ConfigFromFile';
 }
-else
-{
-    plan tests => 37;
-}
 
 {
     package App;
@@ -87,11 +83,33 @@ else
     );
 }
 
+{
+    package App::ConfigFileFromProjectOption;
+
+    use Moose;
+    extends 'App';
+
+    has 'project' => (
+        is        => 'rw',
+        isa       => 'Str',
+        required  => 1,
+    );
+    has '+configfile' => ();
+
+    around _get_configfile_from_cli => sub {
+        my ($orig, $self) = @_;
+        my $project;
+        my $opt_parser = Getopt::Long::Parser->new( config => [ qw( pass_through ) ] );
+        $opt_parser->getoptions( "project=s" => \$project );
+        return "/notused/specific/$project/config";
+    };
+}
+
 # No config specified
 {
     local @ARGV = qw( --required_from_argv 1 );
 
-    throws_ok { App->new_with_options } qr/Required option missing: required_from_config/;
+    throws_ok { App->new_with_options } qr/(Required option missing: required_from_config|Attribute \(required_from_config\) is required)/;
 
     {
         my $app = App::DefaultConfigFile->new_with_options;
@@ -157,10 +175,50 @@ else
     }
 }
 
+# No config specified
+{
+    local @ARGV = qw( --required_from_argv 1 --project quux );
+
+    {
+        my $app = App::ConfigFileFromProjectOption->new_with_options;
+        isa_ok( $app, 'App::ConfigFileFromProjectOption' );
+        app_ok( $app );
+
+        ok( $app->config_from_override,
+            '... config_from_override true as expected' );
+
+        is( $app->project, 'quux',
+            '... project is quux as expected' );
+
+        is( $app->configfile, File::Spec->canonpath('/notused/specific/quux/config'),
+            '... configfile is /notused/specific/quux/config as expected' );
+    }
+}
+
+# Config specified
+{
+    local @ARGV = qw( --configfile /notused --required_from_argv 1 --project quux );
+
+    {
+        my $app = App::ConfigFileFromProjectOption->new_with_options;
+        isa_ok( $app, 'App::ConfigFileFromProjectOption' );
+        app_ok( $app );
+
+        ok( $app->config_from_override,
+             '... config_from_override true as expected' );
+
+        is( $app->project, 'quux',
+            '... project is quux 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/;
+    throws_ok { App->new_with_options } qr/(Required option missing: required_from_argv|Attribute \(required_from_argv\) is required)/;
 }
 
 # Config file value overriden from cmdline
@@ -224,3 +282,6 @@ sub app_ok {
     is( $app->required_from_argv, '1',
         '... required_from_argv is 1 as expected' );
 }
+
+done_testing;
+