use warnings;
use strict;
use HTTP::Request::Common;
+use utf8;
BEGIN {
use Test::More;
- eval "use Types::Standard; use Type::Utils; use Type::Library; 1;" || do {
- plan skip_all => "Trouble loading Types::Standard => $@";
+ eval "use Type::Tiny 1.000005; 1" || do {
+ plan skip_all => "Trouble loading Type::Tiny and friends => $@";
};
+}
+BEGIN {
package MyApp::Types;
$INC{'MyApp/Types.pm'} = __FILE__;
use Types::Standard -types;
use Type::Library
-base,
- -declare => qw( UserId User ContextLike );
+ -declare => qw( UserId Heart User ContextLike );
extends "Types::Standard";
as Int,
where { $_ < 5 };
+ declare Heart,
+ as Str,
+ where { $_ eq '♥' };
+
# Tests using this are skipped pending deeper thought
coerce User,
from ContextLike,
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';
$c->res->body("name: $user->{name}, age: $user->{age}");
}
+ sub stringy_enum :Local Args('Int',Int) {
+ my ($self, $c) = @_;
+ $c->res->body('enum');
+ }
+
sub an_int :Local Args(Int) {
my ($self, $c, $int) = @_;
$c->res->body('an_int');
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');
is $res->content, 'chained_zero2', "request POST '/chain_base2/capture'";
}
+{
+ my $res = request '/stringy_enum/1/2';
+ is $res->content, 'enum', "request '/stringy_enum/a'";
+}
+
+{
+ my $res = request '/stringy_enum/b/2';
+ is $res->content, 'default', "request '/stringy_enum/a'";
+}
+
+{
+ my $res = request '/stringy_enum/1/a';
+ is $res->content, 'default', "request '/stringy_enum/a'";
+}
+
=over
| /chain_base/*/*/*/*/*/* | /chain_base (1)
=cut
-
-done_testing;
-
-__END__
{
# 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';
+ }
+
+ {
+ 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]) };
+ }
+
+ {
+ 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;