aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/test/dispatch/request/url_encoded_params_parsing_test.rb
diff options
context:
space:
mode:
authorwycats <wycats@gmail.com>2010-06-27 21:12:10 -0700
committerwycats <wycats@gmail.com>2010-06-27 21:13:55 -0700
commit25215d7285db10e2c04d903f251b791342e4dd6a (patch)
treedd9e3f755aaef1e328d142967db216183f7db610 /actionpack/test/dispatch/request/url_encoded_params_parsing_test.rb
parent06b0d6e5cdcfab8d49bcf559008f1753f3e7853c (diff)
downloadrails-25215d7285db10e2c04d903f251b791342e4dd6a.tar.gz
rails-25215d7285db10e2c04d903f251b791342e4dd6a.tar.bz2
rails-25215d7285db10e2c04d903f251b791342e4dd6a.zip
Fix several known web encoding issues:
* Specify accept-charset on all forms. All recent browsers, as well as IE5+, will use the encoding specified for form parameters * Unfortunately, IE5+ will not look at accept-charset unless at least one character in the form's values is not in the page's charset. Since the user can override the default charset (which Rails sets to UTF-8), we provide a hidden input containing a unicode character, forcing IE to look at the accept-charset. * Now that the vast majority of web input is UTF-8, we set the inbound parameters to UTF-8. This will eliminate many cases of incompatible encodings between ASCII-8BIT and UTF-8. * You can safely ignore params[:_snowman_] TODO: * Validate inbound text to confirm it is UTF-8 * Combine the whole_form implementations in form_helper_test and form_tag_helper_test
Diffstat (limited to 'actionpack/test/dispatch/request/url_encoded_params_parsing_test.rb')
-rw-r--r--actionpack/test/dispatch/request/url_encoded_params_parsing_test.rb23
1 files changed, 23 insertions, 0 deletions
diff --git a/actionpack/test/dispatch/request/url_encoded_params_parsing_test.rb b/actionpack/test/dispatch/request/url_encoded_params_parsing_test.rb
index 69dbd7f528..0bcef81534 100644
--- a/actionpack/test/dispatch/request/url_encoded_params_parsing_test.rb
+++ b/actionpack/test/dispatch/request/url_encoded_params_parsing_test.rb
@@ -141,6 +141,29 @@ class UrlEncodedParamsParsingTest < ActionController::IntegrationTest
post "/parse", actual
assert_response :ok
assert_equal(expected, TestController.last_request_parameters)
+ assert_utf8(TestController.last_request_parameters)
+ end
+ end
+
+ def assert_utf8(object)
+ return unless "ruby".encoding_aware?
+
+ correct_encoding = Encoding.default_internal
+
+ unless object.is_a?(Hash)
+ assert_equal correct_encoding, object.encoding, "#{object.inspect} should have been UTF-8"
+ return
+ end
+
+ object.each do |k,v|
+ case v
+ when Hash
+ assert_utf8(v)
+ when Array
+ v.each {|el| assert_utf8(el) }
+ else
+ assert_utf8(v)
+ end
end
end
end