[Catalyst-commits] r14141 - in Catalyst-Plugin-Unicode-Encoding/trunk: lib/Catalyst/Plugin/Unicode t t/lib t/lib/TestApp2 t/lib/TestApp2/Controller

dpetrov at dev.catalyst.perl.org dpetrov at dev.catalyst.perl.org
Fri Oct 28 14:45:50 GMT 2011


Author: dpetrov
Date: 2011-10-28 14:45:50 +0000 (Fri, 28 Oct 2011)
New Revision: 14141

Added:
   Catalyst-Plugin-Unicode-Encoding/trunk/t/07nested_params.t
   Catalyst-Plugin-Unicode-Encoding/trunk/t/lib/TestApp2.pm
   Catalyst-Plugin-Unicode-Encoding/trunk/t/lib/TestApp2/
   Catalyst-Plugin-Unicode-Encoding/trunk/t/lib/TestApp2/Controller/
   Catalyst-Plugin-Unicode-Encoding/trunk/t/lib/TestApp2/Controller/Root.pm
Modified:
   Catalyst-Plugin-Unicode-Encoding/trunk/lib/Catalyst/Plugin/Unicode/Encoding.pm
Log:
fix Params::Nested ARRAY support

Modified: Catalyst-Plugin-Unicode-Encoding/trunk/lib/Catalyst/Plugin/Unicode/Encoding.pm
===================================================================
--- Catalyst-Plugin-Unicode-Encoding/trunk/lib/Catalyst/Plugin/Unicode/Encoding.pm	2011-10-25 03:28:54 UTC (rev 14140)
+++ Catalyst-Plugin-Unicode-Encoding/trunk/lib/Catalyst/Plugin/Unicode/Encoding.pm	2011-10-28 14:45:50 UTC (rev 14141)
@@ -95,6 +95,7 @@
                 #      this avoids exception if we have already decoded content, and is _not_ the
                 #      same as not encoding on output which is bad news (as it does the wrong thing
                 #      for latin1 chars for example)..
+                next unless defined $_;
                 $_ = $c->_handle_param_unicode_decoding($_);
             }
         }

Added: Catalyst-Plugin-Unicode-Encoding/trunk/t/07nested_params.t
===================================================================
--- Catalyst-Plugin-Unicode-Encoding/trunk/t/07nested_params.t	                        (rev 0)
+++ Catalyst-Plugin-Unicode-Encoding/trunk/t/07nested_params.t	2011-10-28 14:45:50 UTC (rev 14141)
@@ -0,0 +1,64 @@
+#!/usr/bin/env perl
+
+use strict;
+use warnings;
+use Test::More;
+use utf8;
+
+# setup library path
+use FindBin qw($Bin);
+use lib "$Bin/lib";
+use Catalyst::Test 'TestApp2';
+use Encode;
+use HTTP::Request::Common;
+use URI::Escape qw/uri_escape_utf8/;
+use HTTP::Status 'is_server_error';
+
+my $encode_str = "\x{e3}\x{81}\x{82}"; # e38182 is japanese 'あ'
+my $decode_str = Encode::decode('utf-8' => $encode_str);
+my $escape_str = uri_escape_utf8($decode_str);
+
+BEGIN {
+    eval 'require Catalyst::Plugin::Params::Nested';
+    plan skip_all => 'Catalyst::Plugin::Params::Nested is required' if $@;
+}
+
+{
+    my ($res, $c) = ctx_request("/?foo.1=bar&foo.2=$escape_str");
+    is( $c->res->output, '<h1>It works</h1>', 'Content displayed' );
+    
+    my $got = $c->request->parameters;
+    my $expected = {
+        'foo.1' => 'bar',
+        'foo.2' => $decode_str,
+        'foo'   => [undef, 'bar', $decode_str],
+    };
+    
+    is( $got->{foo}->[0], undef, '{foo}->[0] is undef' );
+    is( $got->{foo}->[1], 'bar', '{foo}->[1] is bar' );
+    ok( utf8::is_utf8( $got->{'foo.2'}       ), '{foo.2} is utf8' );
+    ok( utf8::is_utf8( $got->{foo}->[2]      ), '{foo}->[2] is utf8' );
+    is_deeply($got, $expected, 'nested params' );
+}
+
+TODO: {
+    local $TODO = 'HASH support is broken';
+
+    my ($res, $c) = ctx_request("/?foo.1=bar&foo.2=$escape_str&bar.baz=$escape_str&baz.bar.foo=$escape_str&&arr.0.1=test");
+    
+    my $got = $c->request->parameters;
+    my $expected = {
+        'foo.1' => 'bar',
+        'foo.2' => $decode_str,
+        'foo'   => [undef, 'bar', $decode_str],
+        'bar'   => { baz => $decode_str },
+        'baz'   => { bar => { foo => $decode_str } },
+    };
+    
+    is( ref $got->{arr}->[0], 'ARRAY', '{arr}->[0] is ARRAY' );
+    ok( utf8::is_utf8( $got->{bar}{baz}      ), '{bar}{baz} is utf8' );
+    ok( utf8::is_utf8( $got->{baz}{bar}{foo} ), '{baz}{bar}{foo} is utf8' );
+    is_deeply($got, $expected, 'nested params' );
+}
+
+done_testing();

Added: Catalyst-Plugin-Unicode-Encoding/trunk/t/lib/TestApp2/Controller/Root.pm
===================================================================
--- Catalyst-Plugin-Unicode-Encoding/trunk/t/lib/TestApp2/Controller/Root.pm	                        (rev 0)
+++ Catalyst-Plugin-Unicode-Encoding/trunk/t/lib/TestApp2/Controller/Root.pm	2011-10-28 14:45:50 UTC (rev 14141)
@@ -0,0 +1,16 @@
+package TestApp2::Controller::Root;
+use strict;
+use warnings;
+use utf8;
+
+__PACKAGE__->config(namespace => q{});
+
+use base 'Catalyst::Controller';
+
+# your actions replace this one
+sub main :Path('') { 
+    $_[1]->res->body('<h1>It works</h1>');
+    $_[1]->res->content_type('text/html');
+}
+
+1;

Added: Catalyst-Plugin-Unicode-Encoding/trunk/t/lib/TestApp2.pm
===================================================================
--- Catalyst-Plugin-Unicode-Encoding/trunk/t/lib/TestApp2.pm	                        (rev 0)
+++ Catalyst-Plugin-Unicode-Encoding/trunk/t/lib/TestApp2.pm	2011-10-28 14:45:50 UTC (rev 14141)
@@ -0,0 +1,20 @@
+package TestApp2;
+use strict;
+use warnings;
+use base qw/Catalyst/;
+use Catalyst qw/Params::Nested Unicode::Encoding/;
+
+__PACKAGE__->config(
+  encoding => $ENV{TESTAPP_ENCODING}
+) if $ENV{TESTAPP_ENCODING};
+
+__PACKAGE__->config('name' => 'TestApp2');
+
+__PACKAGE__->setup;
+
+sub handle_unicode_encoding_exception {
+  my ( $self, $param_value, $error_msg ) = @_;
+  return $param_value;
+}
+
+1;




More information about the Catalyst-commits mailing list