use warnings tester with fewer dependencies, issues
[gitmo/MooseX-Getopt.git] / t / 002_custom_option_type.t
index 881b0f6..80417fe 100644 (file)
@@ -1,9 +1,9 @@
-#!/usr/bin/perl
-
 use strict;
-use warnings;
+use warnings FATAL => 'all';
 
-use Test::More tests => 5;
+use Test::More tests => 7;
+use Test::Warnings;
+use Test::Fatal;
 
 BEGIN {
     use_ok('MooseX::Getopt');
@@ -13,25 +13,24 @@ BEGIN {
     package App;
     use Moose;
     use Moose::Util::TypeConstraints;
-    
+
     use Scalar::Util 'looks_like_number';
-    
+
     with 'MooseX::Getopt';
 
     subtype 'ArrayOfInts'
         => as 'ArrayRef'
         => where { scalar (grep { looks_like_number($_) } @$_)  };
-    
+
     MooseX::Getopt::OptionTypeMap->add_option_type_to_map(
         'ArrayOfInts' => '=i@'
     );
-       
+
     has 'nums' => (
         is      => 'ro',
         isa     => 'ArrayOfInts',
         default => sub { [0] }
-    ); 
-  
+    );
 }
 
 {
@@ -39,8 +38,8 @@ BEGIN {
 
     my $app = App->new_with_options;
     isa_ok($app, 'App');
-        
-    is_deeply($app->nums, [0], '... nums is [0] as expected');       
+
+    is_deeply($app->nums, [0], '... nums is [0] as expected');
 }
 
 {
@@ -48,7 +47,18 @@ BEGIN {
 
     my $app = App->new_with_options;
     isa_ok($app, 'App');
-        
-    is_deeply($app->nums, [3, 5], '... nums is [3, 5] as expected');       
+
+    is_deeply($app->nums, [3, 5], '... nums is [3, 5] as expected');
 }
 
+# Make sure it really used our =i@, instead of falling back
+#  to =s@ via the type system, and test that exceptions work
+#  while we're at it.
+like(
+    exception {
+        local @ARGV = ('--nums', 3, '--nums', 'foo');
+        my $app = App->new_with_options;
+    },
+    qr/Value "foo" invalid/,
+    'Numeric constraint enforced',
+);