Commit | Line | Data |
fbcc39ad |
1 | use strict; |
2 | use warnings; |
3 | |
6a99f9e6 |
4 | use Test::More tests => 18; |
fbcc39ad |
5 | use URI; |
6 | |
fa32ac82 |
7 | use_ok('Catalyst'); |
fbcc39ad |
8 | |
fa32ac82 |
9 | my $request = Catalyst::Request->new( { |
10 | base => URI->new('http://127.0.0.1/foo') |
11 | } ); |
fbcc39ad |
12 | |
fa32ac82 |
13 | my $context = Catalyst->new( { |
14 | request => $request, |
15 | namespace => 'yada', |
16 | } ); |
fbcc39ad |
17 | |
18 | is( |
19 | Catalyst::uri_for( $context, '/bar/baz' )->as_string, |
20 | 'http://127.0.0.1/foo/bar/baz', |
21 | 'URI for absolute path' |
22 | ); |
23 | |
24 | is( |
25 | Catalyst::uri_for( $context, 'bar/baz' )->as_string, |
26 | 'http://127.0.0.1/foo/yada/bar/baz', |
27 | 'URI for relative path' |
28 | ); |
29 | |
d3e7a648 |
30 | is( |
31 | Catalyst::uri_for( $context, '', 'arg1', 'arg2' )->as_string, |
32 | 'http://127.0.0.1/foo/yada/arg1/arg2', |
33 | 'URI for undef action with args' |
34 | ); |
35 | |
36 | |
fbcc39ad |
37 | is( Catalyst::uri_for( $context, '../quux' )->as_string, |
38 | 'http://127.0.0.1/foo/quux', 'URI for relative dot path' ); |
fdba7a9d |
39 | |
8327e2e2 |
40 | is( |
41 | Catalyst::uri_for( $context, 'quux', { param1 => 'value1' } )->as_string, |
42 | 'http://127.0.0.1/foo/yada/quux?param1=value1', |
43 | 'URI for undef action with query params' |
44 | ); |
45 | |
57e74a1e |
46 | is (Catalyst::uri_for( $context, '/bar/wibble?' )->as_string, |
47 | 'http://127.0.0.1/foo/bar/wibble%3F', 'Question Mark gets encoded' |
48 | ); |
49 | |
50 | is( Catalyst::uri_for( $context, qw/bar wibble?/, 'with space' )->as_string, |
51 | 'http://127.0.0.1/foo/yada/bar/wibble%3F/with%20space', 'Space gets encoded' |
52 | ); |
53 | |
54 | |
5789a3d8 |
55 | # test with utf-8 |
56 | is( |
57 | Catalyst::uri_for( $context, 'quux', { param1 => "\x{2620}" } )->as_string, |
58 | 'http://127.0.0.1/foo/yada/quux?param1=%E2%98%A0', |
59 | 'URI for undef action with query params in unicode' |
60 | ); |
2f381252 |
61 | is( |
62 | Catalyst::uri_for( $context, 'quux', { 'param:1' => "foo" } )->as_string, |
63 | 'http://127.0.0.1/foo/yada/quux?param%3A1=foo', |
64 | 'URI for undef action with query params in unicode' |
65 | ); |
5789a3d8 |
66 | |
fbb513f7 |
67 | # test with object |
68 | is( |
69 | Catalyst::uri_for( $context, 'quux', { param1 => $request->base } )->as_string, |
70 | 'http://127.0.0.1/foo/yada/quux?param1=http%3A%2F%2F127.0.0.1%2Ffoo', |
71 | 'URI for undef action with query param as object' |
72 | ); |
73 | |
fa32ac82 |
74 | $request->base( URI->new('http://localhost:3000/') ); |
75 | $request->match( 'orderentry/contract' ); |
fdba7a9d |
76 | is( |
77 | Catalyst::uri_for( $context, '/Orderentry/saveContract' )->as_string, |
78 | 'http://localhost:3000/Orderentry/saveContract', |
79 | 'URI for absolute path' |
80 | ); |
bdcb95ef |
81 | |
82 | { |
fa32ac82 |
83 | $request->base( URI->new('http://127.0.0.1/') ); |
bdcb95ef |
84 | |
fa32ac82 |
85 | $context->namespace(''); |
bdcb95ef |
86 | |
87 | is( Catalyst::uri_for( $context, '/bar/baz' )->as_string, |
88 | 'http://127.0.0.1/bar/baz', 'URI with no base or match' ); |
fcea752e |
89 | |
90 | # test "0" as the path |
91 | is( Catalyst::uri_for( $context, qw/0 foo/ )->as_string, |
92 | 'http://127.0.0.1/0/foo', '0 as path is ok' |
93 | ); |
94 | |
bdcb95ef |
95 | } |
5789a3d8 |
96 | |
d0f0fcf6 |
97 | # test with undef -- no warnings should be thrown |
98 | { |
99 | my $warnings = 0; |
100 | local $SIG{__WARN__} = sub { $warnings++ }; |
101 | |
102 | Catalyst::uri_for( $context, '/bar/baz', { foo => undef } )->as_string, |
103 | is( $warnings, 0, "no warnings emitted" ); |
104 | } |
105 | |
7a2295bc |
106 | # Test with parameters '/', 'foo', 'bar' - should not generate a // |
107 | is( Catalyst::uri_for( $context, qw| / foo bar | )->as_string, |
108 | 'http://127.0.0.1/foo/bar', 'uri is /foo/bar, not //foo/bar' |
109 | ); |
110 | |
6a99f9e6 |
111 | TODO: { |
112 | local $TODO = 'RFCs are for people who, erm - fix this test..'; |
1b5227a1 |
113 | # Test rfc3986 reserved characters. These characters should all be escaped |
114 | # according to the RFC, but it is a very big feature change so I've removed it |
6a99f9e6 |
115 | no warnings; # Yes, everything in qw is sane |
116 | is( |
117 | Catalyst::uri_for( $context, qw|! * ' ( ) ; : @ & = $ / ? % # [ ] ,|, )->as_string, |
1b5227a1 |
118 | 'http://127.0.0.1/%21/%2A/%27/%2B/%29/%3B/%3A/%40/%26/%3D/%24/%2C/%2F/%3F/%25/%23/%5B/%5D', |
119 | 'rfc 3986 reserved characters' |
120 | ); |
121 | } |
122 | |
6a99f9e6 |
123 | # jshirley bug t0m fucked in r10097 |
124 | is( |
1b5227a1 |
125 | Catalyst::uri_for( $context, qw|{1} {2}| )->as_string, |
126 | 'http://127.0.0.1/{1}/{2}', |
127 | 'not-escaping unreserved characters' |
128 | ); |
6a99f9e6 |
129 | |