Handle "0" as a path
Brian Cassidy [Wed, 21 Mar 2007 17:09:06 +0000 (17:09 +0000)]
lib/Catalyst.pm
t/unit_core_uri_for.t

index ea7117a..c290789 100644 (file)
@@ -932,7 +932,7 @@ sub uri_for {
     # massage namespace, empty if absolute path
     $namespace =~ s/^\/// if $namespace;
     $namespace .= '/' if $namespace;
-    $path ||= '';
+    $path = '' if !defined $path;
     $namespace = '' if $path =~ /^\//;
     $path =~ s/^\///;
     $path =~ s/\?/%3F/g;
@@ -956,7 +956,7 @@ sub uri_for {
             }
             s/\?/%3F/g; $_
         } @args ) : '' );
-    $args =~ s/^\/// unless $path;
+    $args =~ s/^\/// unless length $path;
     my $res =
       URI->new_abs( URI->new_abs( "$path$args", "$basepath$namespace" ), $base )
       ->canonical;
index 612d0b0..0c61435 100644 (file)
@@ -1,7 +1,7 @@
 use strict;
 use warnings;
 
-use Test::More tests => 13;
+use Test::More tests => 14;
 use URI;
 
 use_ok('Catalyst');
@@ -81,6 +81,12 @@ is(
 
     is( Catalyst::uri_for( $context, '/bar/baz' )->as_string,
         'http://127.0.0.1/bar/baz', 'URI with no base or match' );
+
+    # test "0" as the path
+    is( Catalyst::uri_for( $context, qw/0 foo/ )->as_string,
+        'http://127.0.0.1/0/foo', '0 as path is ok'
+    );
+
 }
 
 # test with undef -- no warnings should be thrown