X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=blobdiff_plain;f=t%2Futf_incoming.t;h=04f724f11c7ffea50f164a522b2b62d493b79789;hp=b7438306911109b760f4f031f061a1e8e0f9db32;hb=b063a165c4247e0312f19ed90829a0e7161fa449;hpb=59e11cd702fecaabe37167918a79c4c62f935acb diff --git a/t/utf_incoming.t b/t/utf_incoming.t index b743830..04f724f 100644 --- a/t/utf_incoming.t +++ b/t/utf_incoming.t @@ -81,24 +81,37 @@ use File::Spec; $c->response->content_type('text/html'); my $writer = $c->res->write_fh; - - $writer->write(Encode::encode_utf8('

This is stream_write_fh action ♥

')); + $writer->write_encoded('

This is stream_write_fh action ♥

'); $writer->close; } + # Stream a file with utf8 chars directly, you don't need to decode sub stream_body_fh :Local { my ($self, $c) = @_; - my $path = File::Spec->catfile('t', 'utf8.txt'); open(my $fh, '<', $path) || die "trouble: $!"; $c->response->content_type('text/html'); $c->response->body($fh); } + # If you pull the file contents into a var, NOW you need to specify the + # IO encoding on the FH. Ultimately Plack at the end wants bytes... + sub stream_body_fh2 :Local { + my ($self, $c) = @_; + my $path = File::Spec->catfile('t', 'utf8.txt'); + open(my $fh, '<:encoding(UTF-8)', $path) || die "trouble: $!"; + my $contents = do { local $/; <$fh> }; + + $c->response->content_type('text/html'); + $c->response->body($contents); + } + + package MyApp; use Catalyst; - MyApp->config(encoding=>'UTF-8'); + # Default encoding is now UTF-8 + # MyApp->config(encoding=>'UTF-8'); Test::More::ok(MyApp->setup, 'setup app'); } @@ -113,6 +126,7 @@ use Catalyst::Test 'MyApp'; is $res->code, 200, 'OK'; is decode_utf8($res->content), '

This is path-heart action ♥

', 'correct body'; is $res->content_length, 36, 'correct length'; + is $res->content_charset, 'UTF-8'; } { @@ -121,6 +135,7 @@ use Catalyst::Test 'MyApp'; is $res->code, 200, 'OK'; is decode_utf8($res->content), '

This is path-heart-arg action ♥

', 'correct body'; is $res->content_length, 40, 'correct length'; + is $res->content_charset, 'UTF-8'; } { @@ -129,6 +144,7 @@ use Catalyst::Test 'MyApp'; is $res->code, 200, 'OK'; is decode_utf8($res->content), '

This is path-hat action ^

', 'correct body'; is $res->content_length, 32, 'correct length'; + is $res->content_charset, 'UTF-8'; } { @@ -137,6 +153,7 @@ use Catalyst::Test 'MyApp'; is $res->code, 200, 'OK'; is decode_utf8($res->content), '

This is base-link action ♥

', 'correct body'; is $res->content_length, 35, 'correct length'; + is $res->content_charset, 'UTF-8'; } { @@ -151,6 +168,7 @@ use Catalyst::Test 'MyApp'; is $c->req->parameters->{'♥'}[0], '♥'; is $c->req->parameters->{a}, 1; is $c->req->body_parameters->{a}, 1; + is $res->content_charset, 'UTF-8'; } { @@ -160,6 +178,7 @@ use Catalyst::Test 'MyApp'; is decode_utf8($res->content), '

This is base-link action ♥

', 'correct body'; is $res->content_length, 35, 'correct length'; is $c->req->query_keywords, '♥♥♥'; + is $res->content_charset, 'UTF-8'; } { @@ -168,6 +187,7 @@ use Catalyst::Test 'MyApp'; is $res->code, 200, 'OK'; is decode_utf8($res->content), '

This is base-link action ♥ ♥

', 'correct body'; is $res->content_length, 39, 'correct length'; + is $res->content_charset, 'UTF-8'; } { @@ -175,22 +195,26 @@ use Catalyst::Test 'MyApp'; is decode_utf8($res->content), '

This is base-link action ♥ ♥

', 'correct body'; is $res->content_length, 39, 'correct length'; + is $res->content_charset, 'UTF-8'; } { my ($res, $c) = ctx_request POST "/base/♥/♥/♥/♥?♥=♥♥", [a=>1, b=>'2', '♥'=>'♥♥']; ## Make sure that the urls we generate work the same - my $uri_for = $c->uri_for($c->controller('Root')->action_for('argend'), ['♥'], '♥', {'♥'=>'♥♥'}); + my $uri_for1 = $c->uri_for($c->controller('Root')->action_for('argend'), ['♥'], '♥', {'♥'=>'♥♥'}); + my $uri_for2 = $c->uri_for($c->controller('Root')->action_for('argend'), ['♥', '♥'], {'♥'=>'♥♥'}); my $uri = $c->req->uri; - is "$uri", "$uri_for"; + is "$uri_for1", "$uri_for2"; + is "$uri", "$uri_for1"; { - my ($res, $c) = ctx_request POST "$uri_for", [a=>1, b=>'2', '♥'=>'♥♥']; + my ($res, $c) = ctx_request POST "$uri_for1", [a=>1, b=>'2', '♥'=>'♥♥']; is $c->req->query_parameters->{'♥'}, '♥♥'; is $c->req->body_parameters->{'♥'}, '♥♥'; is $c->req->parameters->{'♥'}[0], '♥♥'; #combined with query and body + is $res->content_charset, 'UTF-8'; } } @@ -202,6 +226,17 @@ use Catalyst::Test 'MyApp'; is decode_utf8($res->content), "$url", 'correct body'; #should do nothing is $res->content, "$url", 'correct body'; is $res->content_length, 90, 'correct length'; + is $res->content_charset, 'UTF-8'; + + { + my $url = $c->uri_for($c->controller->action_for('heart_with_arg'), '♥'); + is "$url", 'http://localhost/root/a%E2%99%A5/%E2%99%A5'; + } + + { + my $url = $c->uri_for($c->controller->action_for('heart_with_arg'), ['♥']); + is "$url", 'http://localhost/root/a%E2%99%A5/%E2%99%A5'; + } } { @@ -209,6 +244,7 @@ use Catalyst::Test 'MyApp'; is $res->code, 200, 'OK'; is decode_utf8($res->content), '

This is stream_write action ♥

', 'correct body'; + is $res->content_charset, 'UTF-8'; } { @@ -216,16 +252,27 @@ use Catalyst::Test 'MyApp'; is $res->code, 200, 'OK'; is decode_utf8($res->content), "

This is stream_body_fh action ♥

\n", 'correct body'; + is $res->content_charset, 'UTF-8'; # Not sure why there is a trailing newline above... its not in catalyst code I can see. Not sure # if is a problem or just an artifact of the why the test stuff works - JNAP } { - my $res = request "/root/stream_write_fh"; + my $res = request "/root/stream_write_fh"; is $res->code, 200, 'OK'; is decode_utf8($res->content), '

This is stream_write_fh action ♥

', 'correct body'; + #is $res->content_length, 41, 'correct length'; + is $res->content_charset, 'UTF-8'; } +{ + my $res = request "/root/stream_body_fh2"; + + is $res->code, 200, 'OK'; + is decode_utf8($res->content), "

This is stream_body_fh action ♥

\n", 'correct body'; + is $res->content_length, 41, 'correct length'; + is $res->content_charset, 'UTF-8'; +} done_testing;