X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=blobdiff_plain;f=t%2Faggregate%2Funit_core_uri_for.t;h=887aa4ad54a7a344fe7c40bd5e97856863621a4d;hp=8886656446ed1d8a30e8a3831cf505744a50ac42;hb=82010ea176741c7a4f2baf3f6f27377b1d9f6b15;hpb=a8020c62d2a52f96f14d288f5b81c6940be858b4 diff --git a/t/aggregate/unit_core_uri_for.t b/t/aggregate/unit_core_uri_for.t index 8886656..887aa4a 100644 --- a/t/aggregate/unit_core_uri_for.t +++ b/t/aggregate/unit_core_uri_for.t @@ -60,12 +60,24 @@ is( ); is( + Catalyst::uri_for( $context, '/bar', 'with space', { 'also with' => 'space here' })->as_string, + 'http://127.0.0.1/foo/bar/with%20space?also+with=space+here', + 'Spaces encoded correctly' +); + +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 1' ); 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' @@ -77,6 +89,65 @@ is( 'URI for path with fragment and query params 3' ); +is( + Catalyst::uri_for( 'TestApp', '/bar/baz' )->as_string, + '/bar/baz', + 'URI for absolute path, called with only class name' +); + +## relative action (or path) doesn't make sense when calling as class method +# is( +# Catalyst::uri_for( 'TestApp', 'bar/baz' )->as_string, +# '/yada/bar/baz', +# 'URI for relative path, called with only class name' +# ); + +is( + Catalyst::uri_for( 'TestApp', '/', 'arg1', 'arg2' )->as_string, + '/arg1/arg2', + 'URI for root action with args, called with only class name' +); + +## relative action (or path) doesn't make sense when calling as class method +# is( Catalyst::uri_for( 'TestApp', '../quux' )->as_string, +# '/quux', 'URI for relative dot path, called with only class name' ); + +is( + Catalyst::uri_for( 'TestApp', '/quux', { param1 => 'value1' } )->as_string, + '/quux?param1=value1', + 'URI for quux action with query params, called with only class name' +); + +is (Catalyst::uri_for( 'TestApp', '/bar/wibble?' )->as_string, + '/bar/wibble%3F', 'Question Mark gets encoded, called with only class name' +); + +## relative action (or path) doesn't make sense when calling as class method +# is( Catalyst::uri_for( 'TestApp', qw/bar wibble?/, 'with space' )->as_string, +# '/yada/bar/wibble%3F/with%20space', 'Space gets encoded, called with only class name' +# ); + +is( + Catalyst::uri_for( 'TestApp', '/bar', 'with+plus', { 'also' => 'with+plus' })->as_string, + '/bar/with+plus?also=with%2Bplus', + 'Plus is not encoded, called with only class name' +); + +is( + Catalyst::uri_for( 'TestApp', '/bar', 'with space', { 'also with' => 'space here' })->as_string, + '/bar/with%20space?also+with=space+here', + 'Spaces encoded correctly, called with only class name' +); + +TODO: { + local $TODO = 'broken by 5.7008'; + 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' + ); +} + # test with utf-8 is( Catalyst::uri_for( $context, 'quux', { param1 => "\x{2620}" } )->as_string, @@ -105,6 +176,13 @@ is( '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"); }