diff --git a/actionpack/lib/action_controller/test_process.rb b/actionpack/lib/action_controller/test_process.rb index dbaec00..becfa21 100644 --- a/actionpack/lib/action_controller/test_process.rb +++ b/actionpack/lib/action_controller/test_process.rb @@ -485,7 +485,17 @@ module ActionController #:nodoc: def html_document xml = @response.content_type =~ /xml$/ - @html_document ||= HTML::Document.new(@response.body, false, xml) + + text = if @response.body.respond_to?(:call) + out = StringIO.new + @response.body.call(out, out) + out.rewind + out.read + else + @response.body + end + + @html_document ||= HTML::Document.new(text, false, xml) end def find_tag(conditions) diff --git a/actionpack/test/controller/render_test.rb b/actionpack/test/controller/render_test.rb index a529315..3a98856 100644 --- a/actionpack/test/controller/render_test.rb +++ b/actionpack/test/controller/render_test.rb @@ -231,6 +231,12 @@ class TestController < ActionController::Base render :text => false end + def render_text_with_proc + render :text => Proc.new{ |resp, out| + 1.upto(10){ |i| out.write "#{i}" } + } + end + def render_nothing_with_appendix render :text => "appended" end @@ -939,6 +945,12 @@ class RenderTest < ActionController::TestCase get :render_text_with_false assert_equal 'false', @response.body end + + def test_render_text_with_proc + get :render_text_with_proc + assert_response :success + assert_select "element", 10 + end def test_render_nothing_with_appendix get :render_nothing_with_appendix