From: John Napiorkowski Date: Thu, 29 Oct 2015 14:58:09 +0000 (-0500) Subject: Merge branch 'melmott push origin masterhx-warn-on-uri-for' X-Git-Tag: 5.90102~8 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=commitdiff_plain;h=570936615ba561bd5c2fb888c432bd4572369818;hp=a0b5065e3dd43fea2ca17f4f2ae7cbe1958057d4 Merge branch 'melmott push origin masterhx-warn-on-uri-for' --- diff --git a/lib/Catalyst.pm b/lib/Catalyst.pm index c290fff..be64ec4 100644 --- a/lib/Catalyst.pm +++ b/lib/Catalyst.pm @@ -1560,7 +1560,7 @@ sub uri_for { my $fragment = ((scalar(@args) && ref($args[-1]) eq 'SCALAR') ? pop @args : undef ); unless(blessed $path) { - if ($path =~ s/#(.+)$//) { + if (defined($path) and $path =~ s/#(.+)$//) { if(defined($1) and $fragment) { carp "Abiguious fragment declaration: You cannot define a fragment in '$path' and as an argument '$fragment'"; } diff --git a/t/aggregate/unit_core_uri_for.t b/t/aggregate/unit_core_uri_for.t index a541508..43f7d50 100644 --- a/t/aggregate/unit_core_uri_for.t +++ b/t/aggregate/unit_core_uri_for.t @@ -66,6 +66,12 @@ is( ); is( + Catalyst::uri_for( $context, '0#fragment', { param1 => 'value1' } )->as_string, + 'http://127.0.0.1/foo/yada/0?param1=value1#fragment', + 'URI for path 0 with fragment and query params 1' +); + +is( Catalyst::uri_for( $context, '/bar#fragment^%$', { param1 => 'value1' } )->as_string, 'http://127.0.0.1/foo/bar?param1=value1#fragment^%$', 'URI for path with fragment and query params 3' @@ -94,7 +100,26 @@ is( Catalyst::uri_for( $context, 'quux', { param1 => $request->base } )->as_string, 'http://127.0.0.1/foo/yada/quux?param1=http%3A%2F%2F127.0.0.1%2Ffoo', 'URI for undef action with query param as object' -); + ); + +# test with empty arg +{ + my @warnings; + local $SIG{__WARN__} = sub { push @warnings, @_ }; + is( + Catalyst::uri_for( $context )->as_string, + 'http://127.0.0.1/foo/yada', + 'URI with no action' + ); + + is( + Catalyst::uri_for( $context, 0 )->as_string, + 'http://127.0.0.1/foo/yada/0', + 'URI with 0 path' + ); + + is_deeply(\@warnings, [], "No warnings with no path argument"); +} $request->base( URI->new('http://localhost:3000/') ); $request->match( 'orderentry/contract' );