if configfile is a coderef call it and write some tests for it
[gitmo/MooseX-Getopt.git] / t / 008_configfromfile.t
index 93700b9..62e6ed9 100644 (file)
@@ -5,6 +5,7 @@ use warnings;
 
 use Test::Exception;
 use Test::More;
+use File::Spec;
 
 if ( !eval { require MooseX::ConfigFromFile } )
 {
@@ -12,7 +13,7 @@ if ( !eval { require MooseX::ConfigFromFile } )
 }
 else
 {
-    plan tests => 25;
+    plan tests => 37;
 }
 
 {
@@ -55,7 +56,8 @@ else
             optional_from_config => 'from_config_2',
         );
 
-        if ( $file ne '/notused/default' ) {
+        my $cpath = File::Spec->canonpath('/notused/default');
+        if ( $file ne $cpath ) {
             $config{config_from_override} = 1;
         }
 
@@ -70,7 +72,18 @@ else
     extends 'App';
 
     has '+configfile' => (
-        default => '/notused/default',
+        default => File::Spec->canonpath('/notused/default'),
+    );
+}
+
+{
+    package App::DefaultConfigFileCodeRef;
+
+    use Moose;
+    extends 'App';
+
+    has '+configfile' => (
+        default => sub { return File::Spec->canonpath('/notused/default') },
     );
 }
 
@@ -88,7 +101,24 @@ else
         ok(  !$app->config_from_override,
             '... config_from_override false as expected' );
 
-        is( $app->configfile, '/notused/default',
+        is( $app->configfile, File::Spec->canonpath('/notused/default'),
+            '... configfile is /notused/default as expected' );
+    }
+}
+
+# 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' );
     }
 }
@@ -111,7 +141,18 @@ else
         ok( $app->config_from_override,
              '... config_from_override true as expected' );
 
-        is( $app->configfile, '/notused',
+        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' );
     }
 }