X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Faggregate%2Funit_core_uri_for.t;h=d7fdbea0ae238faf77b76c856be48044e9335fca;hb=950282bc140f3044f59fc3a70f6f63857f963d7b;hp=dad5a1ce6e9f37b7c8cd5344c56981855521c4b7;hpb=5a8e2ba0c3ec3c666760f09411ff56c8d13a4482;p=catagits%2FCatalyst-Runtime.git diff --git a/t/aggregate/unit_core_uri_for.t b/t/aggregate/unit_core_uri_for.t index dad5a1c..d7fdbea 100644 --- a/t/aggregate/unit_core_uri_for.t +++ b/t/aggregate/unit_core_uri_for.t @@ -8,6 +8,7 @@ use URI; use_ok('TestApp'); my $request = Catalyst::Request->new( { + _log => Catalyst::Log->new, base => URI->new('http://127.0.0.1/foo') } ); my $dispatcher = TestApp->dispatcher; @@ -58,6 +59,50 @@ is( 'Plus is not encoded' ); +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' +); + TODO: { local $TODO = 'broken by 5.7008'; is( @@ -180,5 +225,16 @@ TODO: { ); } -done_testing; +{ + package MyStringThing; + use overload '""' => sub { $_[0]->{string} }, fallback => 1; +} + +is( + Catalyst::uri_for( $context, bless( { string => 'test' }, 'MyStringThing' ) ), + 'http://127.0.0.1/test', + 'overloaded object handled correctly' +); + +done_testing;