Re-enable AutoPrereq
[gitmo/MooseX-Getopt.git] / t / 008_configfromfile.t
index affcd7e..ea3f9b5 100644 (file)
@@ -3,17 +3,13 @@
 use strict;
 use warnings;
 
+use Test::More tests => 37;
 use Test::Exception;
-use Test::More;
+use File::Spec;
 
-if ( !eval { require MooseX::ConfigFromFile } )
-{
-    plan skip_all => 'Test requires MooseX::ConfigFromFile';
-}
-else
-{
-    plan tests => 24;
-}
+use Test::Requires 0.05 {
+    'MooseX::ConfigFromFile' => 0.01, # skip all if not installed
+};
 
 {
     package App;
@@ -55,7 +51,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 +67,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 +96,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 +136,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' );
     }
 }
@@ -150,6 +186,27 @@ 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
+{
+    lives_ok { DerivedApp::Getopt->new_with_options } 'Can create DerivedApp';
+}
+
 sub app_ok {
     my $app = shift;