specificy minimum typetiny version (might solve issue in testing
[catagits/Catalyst-Runtime.git] / t / arg_constraints.t
index fada01b..4c29a43 100644 (file)
@@ -1,10 +1,11 @@
 use warnings;
 use strict;
 use HTTP::Request::Common;
+use utf8;
 
 BEGIN {
   use Test::More;
-  eval "use Type::Tiny; 1" || do {
+  eval "use Type::Tiny 1.000005; 1" || do {
     plan skip_all => "Trouble loading Type::Tiny and friends => $@";
   };
 }
@@ -20,7 +21,7 @@ BEGIN {
   use Types::Standard -types;
   use Type::Library
    -base,
-   -declare => qw( UserId User ContextLike );
+   -declare => qw( UserId Heart User ContextLike );
 
   extends "Types::Standard"; 
 
@@ -31,6 +32,10 @@ BEGIN {
    as Int,
    where { $_ < 5 };
 
+  declare Heart,
+   as Str,
+   where { $_ eq '♥' };
+
   # Tests using this are skipped pending deeper thought
   coerce User,
    from ContextLike,
@@ -61,7 +66,7 @@ BEGIN {
 
   use Moose;
   use MooseX::MethodAttributes;
-  use MyApp::Types qw/Tuple Int Str StrMatch ArrayRef UserId User/;
+  use MyApp::Types qw/Tuple Int Str StrMatch ArrayRef UserId User Heart/;
 
   extends 'Catalyst::Controller';
 
@@ -151,6 +156,11 @@ BEGIN {
     sub chained_zero3      :     Chained(chain_base2) PathPart('') Args(1) { $_[1]->res->body('chained_zero3') }
 
 
+  sub heart :Local Args(Heart) { }
+
+  sub utf8_base :Chained(/) CaptureArgs(Heart) { }
+    sub utf8_end :Chained(utf8_base) PathPart('') Args(Heart) { }
+
   sub default :Default {
     my ($self, $c, $int) = @_;
     $c->res->body('default');
@@ -367,15 +377,66 @@ SKIP: {
 {
   # URI testing
   my ($res, $c) = ctx_request '/';
-  ok my $url1 = $c->uri_for($c->controller('Root')->action_for('finally'), [1,2,3,4,5],6);
-  warn $url1;
 
-  ok my $url2 = $c->uri_for($c->controller('Root')->action_for('finally'), [1,2,3,4,5,6]);
-  warn $url2;
-}
+  {
+    ok my $url = eval { $c->uri_for($c->controller('Root')->action_for('user'), 2) };
+    is $url, 'http://localhost/user/2';
+  }
 
-done_testing;
+  {
+    ok my $url = eval { $c->uri_for($c->controller('Root')->action_for('user'), [2]) };
+    is $url, 'http://localhost/user/2';
+  }
+
+  {
+    ok my $url = ! eval { $c->uri_for($c->controller('Root')->action_for('user'), [20]) };
+  }
+
+  {
+    ok my $url = eval { $c->uri_for($c->controller('Root')->action_for('finally'), [1,2,3,4,4],6) };
+    is $url, 'http://localhost/chain_base/1/2/3/4/4/6';
+  }
+
+  {
+    ok my $url = eval { $c->uri_for($c->controller('Root')->action_for('finally'), [1,2,3,4,4,6]) };
+    is $url, 'http://localhost/chain_base/1/2/3/4/4/6';
+  }
+
+  {
+    ok my $url = ! eval { $c->uri_for($c->controller('Root')->action_for('finally'), [1,2,3,4,5,6]) };
+  }
 
-__END__
+  {
+    ok my $url = eval { $c->uri_for($c->controller('Root')->action_for('finally'), ['a',2,3,4,4,6]) };
+    is $url, 'http://localhost/chain_base/a/2/3/4/4/6';
+  }
+
+  {
+    ok my $url = ! eval { $c->uri_for($c->controller('Root')->action_for('finally'), ['a','1',3,4,4,'a']) };
+  }
+
+  {
+    ok my $url = ! eval { $c->uri_for($c->controller('Root')->action_for('finally'), ['a','a',3,4,4,'6']) };
+  }
+
+  {
+    ok my $url = eval { $c->uri_for($c->controller('Root')->action_for('heart'), ['♥']) };
+    is $url, 'http://localhost/heart/%E2%99%A5';
+  }
 
+  {
+    ok my $url = ! eval { $c->uri_for($c->controller('Root')->action_for('heart'), ['1']) };
+  }
 
+  {
+    ok my $url = eval { $c->uri_for($c->controller('Root')->action_for('utf8_end'), ['♥','♥']) };
+    is $url, 'http://localhost/utf8_base/%E2%99%A5/%E2%99%A5';
+  }
+
+  {
+    ok my $url = ! eval { $c->uri_for($c->controller('Root')->action_for('utf8_end'), ['2','1']) };
+  }
+
+}
+
+done_testing;