diff options
| author | Andrew White <andyw@pixeltrix.co.uk> | 2011-08-23 11:07:37 +0100 | 
|---|---|---|
| committer | Andrew White <andyw@pixeltrix.co.uk> | 2011-08-23 11:07:37 +0100 | 
| commit | 14cf4b2e353f923155aab1ae0eaafed3c2924b12 (patch) | |
| tree | e7e89dcf22b2dd76a31beb0205fcbec0ace57295 | |
| parent | 7079701e5bfe3b8d6e8339f2cc4964e3608f1ffe (diff) | |
| download | rails-14cf4b2e353f923155aab1ae0eaafed3c2924b12.tar.gz rails-14cf4b2e353f923155aab1ae0eaafed3c2924b12.tar.bz2 rails-14cf4b2e353f923155aab1ae0eaafed3c2924b12.zip  | |
Don't modify params in place - fixes #2624
| -rw-r--r-- | actionpack/lib/action_controller/test_case.rb | 8 | ||||
| -rw-r--r-- | actionpack/test/controller/test_test.rb | 6 | 
2 files changed, 9 insertions, 5 deletions
diff --git a/actionpack/lib/action_controller/test_case.rb b/actionpack/lib/action_controller/test_case.rb index c8cf04bb69..a38e5a46da 100644 --- a/actionpack/lib/action_controller/test_case.rb +++ b/actionpack/lib/action_controller/test_case.rb @@ -401,9 +401,7 @@ module ActionController        def paramify_values(hash_or_array_or_value)          case hash_or_array_or_value          when Hash -          hash_or_array_or_value.each do |key, value| -            hash_or_array_or_value[key] = paramify_values(value) -          end +          Hash[hash_or_array_or_value.map{|key, value| [key, paramify_values(value)] }]          when Array            hash_or_array_or_value.map {|i| paramify_values(i)}          when Rack::Test::UploadedFile @@ -416,7 +414,7 @@ module ActionController        def process(action, parameters = nil, session = nil, flash = nil, http_method = 'GET')          # Ensure that numbers and symbols passed as params are converted to          # proper params, as is the case when engaging rack. -        paramify_values(parameters) +        parameters = paramify_values(parameters)          # Sanity check for required instance variables so we can give an          # understandable error message. @@ -450,7 +448,7 @@ module ActionController          @controller.params.merge!(parameters)          build_request_uri(action, parameters)          @controller.class.class_eval { include Testing } -        @controller.recycle!  +        @controller.recycle!          @controller.process_with_new_base_test(@request, @response)          @assigns = @controller.respond_to?(:view_assigns) ? @controller.view_assigns : {}          @request.session.delete('flash') if @request.session['flash'].blank? diff --git a/actionpack/test/controller/test_test.rb b/actionpack/test/controller/test_test.rb index 043d44500a..eae5a3d472 100644 --- a/actionpack/test/controller/test_test.rb +++ b/actionpack/test/controller/test_test.rb @@ -515,6 +515,12 @@ XML      )    end +  def test_params_passing_doesnt_modify_in_place +    page = {:name => "Page name", :month => 4, :year => 2004, :day => 6} +    get :test_params, :page => page +    assert_equal 2004, page[:year] +  end +    def test_id_converted_to_string      get :test_params, :id => 20, :foo => Object.new      assert_kind_of String, @request.path_parameters['id']  | 
