aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/test
diff options
context:
space:
mode:
Diffstat (limited to 'actionpack/test')
-rw-r--r--actionpack/test/abstract/abstract_controller_test.rb261
-rw-r--r--actionpack/test/abstract/helper_test.rb126
-rw-r--r--actionpack/test/abstract/layouts_test.rb383
-rw-r--r--actionpack/test/abstract/render_test.rb102
-rw-r--r--actionpack/test/abstract/views/abstract_controller/testing/me3/formatted.html.erb1
-rw-r--r--actionpack/test/abstract/views/abstract_controller/testing/me3/index.erb1
-rw-r--r--actionpack/test/abstract/views/abstract_controller/testing/me4/index.erb1
-rw-r--r--actionpack/test/abstract/views/abstract_controller/testing/me5/index.erb1
-rw-r--r--actionpack/test/abstract/views/action_with_ivars.erb1
-rw-r--r--actionpack/test/abstract/views/helper_test.erb1
-rw-r--r--actionpack/test/abstract/views/index.erb1
-rw-r--r--actionpack/test/abstract/views/layouts/abstract_controller/testing/me4.erb1
-rw-r--r--actionpack/test/abstract/views/layouts/application.erb1
-rw-r--r--actionpack/test/abstract/views/naked_render.erb1
-rw-r--r--actionpack/test/abstract_unit.rb33
-rw-r--r--actionpack/test/controller/action_pack_assertions_test.rb18
-rw-r--r--actionpack/test/controller/assert_select_test.rb3
-rw-r--r--actionpack/test/controller/caching_test.rb4
-rw-r--r--actionpack/test/controller/capture_test.rb79
-rw-r--r--actionpack/test/controller/flash_test.rb12
-rw-r--r--actionpack/test/controller/layout_test.rb262
-rw-r--r--actionpack/test/controller/mime/respond_with_test.rb1
-rw-r--r--actionpack/test/controller/new_base/render_streaming_test.rb2
-rw-r--r--actionpack/test/controller/new_base/render_text_test.rb15
-rw-r--r--actionpack/test/controller/parameters/parameters_permit_test.rb9
-rw-r--r--actionpack/test/controller/render_test.rb1406
-rw-r--r--actionpack/test/controller/request_forgery_protection_test.rb10
-rw-r--r--actionpack/test/controller/routing_test.rb4
-rw-r--r--actionpack/test/controller/view_paths_test.rb174
-rw-r--r--actionpack/test/dispatch/debug_exceptions_test.rb41
-rw-r--r--actionpack/test/dispatch/response_test.rb5
-rw-r--r--actionpack/test/fixtures/customers/_customer.html.erb1
-rw-r--r--actionpack/test/fixtures/fun/games/_form.erb1
-rw-r--r--actionpack/test/fixtures/fun/games/hello_world.erb1
-rw-r--r--actionpack/test/fixtures/good_customers/_good_customer.html.erb1
-rw-r--r--actionpack/test/fixtures/hello.html1
-rw-r--r--actionpack/test/fixtures/helpers/abc_helper.rb2
-rw-r--r--actionpack/test/fixtures/helpers_missing/invalid_require_helper.rb5
-rw-r--r--actionpack/test/fixtures/layout_tests/alt/layouts/alt.erb0
-rw-r--r--actionpack/test/fixtures/layout_tests/layouts/controller_name_space/nested.erb1
-rw-r--r--actionpack/test/fixtures/layout_tests/layouts/item.erb1
-rw-r--r--actionpack/test/fixtures/layout_tests/layouts/layout_test.erb1
-rw-r--r--actionpack/test/fixtures/layout_tests/layouts/multiple_extensions.html.erb1
l---------actionpack/test/fixtures/layout_tests/layouts/symlinked1
-rw-r--r--actionpack/test/fixtures/layout_tests/layouts/third_party_template_library.mab1
-rw-r--r--actionpack/test/fixtures/layout_tests/views/goodbye.erb1
-rw-r--r--actionpack/test/fixtures/layout_tests/views/hello.erb1
-rw-r--r--actionpack/test/fixtures/override/test/hello_world.erb1
-rw-r--r--actionpack/test/fixtures/override2/layouts/test/sub.erb1
-rw-r--r--actionpack/test/fixtures/quiz/questions/_question.html.erb1
-rw-r--r--actionpack/test/lib/controller/fake_models.rb6
51 files changed, 232 insertions, 2757 deletions
diff --git a/actionpack/test/abstract/abstract_controller_test.rb b/actionpack/test/abstract/abstract_controller_test.rb
deleted file mode 100644
index eb9143c8f6..0000000000
--- a/actionpack/test/abstract/abstract_controller_test.rb
+++ /dev/null
@@ -1,261 +0,0 @@
-require 'abstract_unit'
-require 'set'
-
-module AbstractController
- module Testing
-
- # Test basic dispatching.
- # ====
- # * Call process
- # * Test that the response_body is set correctly
- class SimpleController < AbstractController::Base
- end
-
- class Me < SimpleController
- def index
- self.response_body = "Hello world"
- "Something else"
- end
- end
-
- class TestBasic < ActiveSupport::TestCase
- test "dispatching works" do
- controller = Me.new
- controller.process(:index)
- assert_equal "Hello world", controller.response_body
- end
- end
-
- # Test Render mixin
- # ====
- class RenderingController < AbstractController::Base
- include AbstractController::Rendering
-
- def _prefixes
- []
- end
-
- def render(options = {})
- if options.is_a?(String)
- options = {:_template_name => options}
- end
- super
- end
-
- append_view_path File.expand_path(File.join(File.dirname(__FILE__), "views"))
- end
-
- class Me2 < RenderingController
- def index
- render "index.erb"
- end
-
- def index_to_string
- self.response_body = render_to_string "index"
- end
-
- def action_with_ivars
- @my_ivar = "Hello"
- render "action_with_ivars.erb"
- end
-
- def naked_render
- render
- end
-
- def rendering_to_body
- self.response_body = render_to_body :template => "naked_render"
- end
-
- def rendering_to_string
- self.response_body = render_to_string :template => "naked_render"
- end
- end
-
- class TestRenderingController < ActiveSupport::TestCase
- def setup
- @controller = Me2.new
- end
-
- test "rendering templates works" do
- @controller.process(:index)
- assert_equal "Hello from index.erb", @controller.response_body
- end
-
- test "render_to_string works with a String as an argument" do
- @controller.process(:index_to_string)
- assert_equal "Hello from index.erb", @controller.response_body
- end
-
- test "rendering passes ivars to the view" do
- @controller.process(:action_with_ivars)
- assert_equal "Hello from index_with_ivars.erb", @controller.response_body
- end
-
- test "rendering with no template name" do
- @controller.process(:naked_render)
- assert_equal "Hello from naked_render.erb", @controller.response_body
- end
-
- test "rendering to a rack body" do
- @controller.process(:rendering_to_body)
- assert_equal "Hello from naked_render.erb", @controller.response_body
- end
-
- test "rendering to a string" do
- @controller.process(:rendering_to_string)
- assert_equal "Hello from naked_render.erb", @controller.response_body
- end
- end
-
- # Test rendering with prefixes
- # ====
- # * self._prefix is used when defined
- class PrefixedViews < RenderingController
- private
- def self.prefix
- name.underscore
- end
-
- def _prefixes
- [self.class.prefix]
- end
- end
-
- class Me3 < PrefixedViews
- def index
- render
- end
-
- def formatted
- self.formats = [:html]
- render
- end
- end
-
- class TestPrefixedViews < ActiveSupport::TestCase
- def setup
- @controller = Me3.new
- end
-
- test "templates are located inside their 'prefix' folder" do
- @controller.process(:index)
- assert_equal "Hello from me3/index.erb", @controller.response_body
- end
-
- test "templates included their format" do
- @controller.process(:formatted)
- assert_equal "Hello from me3/formatted.html.erb", @controller.response_body
- end
- end
-
- # Test rendering with layouts
- # ====
- # self._layout is used when defined
- class WithLayouts < PrefixedViews
- include AbstractController::Layouts
-
- private
- def self.layout(formats)
- find_template(name.underscore, {:formats => formats}, :_prefixes => ["layouts"])
- rescue ActionView::MissingTemplate
- begin
- find_template("application", {:formats => formats}, :_prefixes => ["layouts"])
- rescue ActionView::MissingTemplate
- end
- end
-
- def render_to_body(options = {})
- options[:_layout] = options[:layout] || _default_layout({})
- super
- end
- end
-
- class Me4 < WithLayouts
- def index
- render
- end
- end
-
- class TestLayouts < ActiveSupport::TestCase
- test "layouts are included" do
- controller = Me4.new
- controller.process(:index)
- assert_equal "Me4 Enter : Hello from me4/index.erb : Exit", controller.response_body
- end
- end
-
- # respond_to_action?(action_name)
- # ====
- # * A method can be used as an action only if this method
- # returns true when passed the method name as an argument
- # * Defaults to true in AbstractController
- class DefaultRespondToActionController < AbstractController::Base
- def index() self.response_body = "success" end
- end
-
- class ActionMissingRespondToActionController < AbstractController::Base
- # No actions
- private
- def action_missing(action_name)
- self.response_body = "success"
- end
- end
-
- class RespondToActionController < AbstractController::Base;
- def index() self.response_body = "success" end
-
- def fail() self.response_body = "fail" end
-
- private
-
- def method_for_action(action_name)
- action_name.to_s != "fail" && action_name
- end
- end
-
- class TestRespondToAction < ActiveSupport::TestCase
-
- def assert_dispatch(klass, body = "success", action = :index)
- controller = klass.new
- controller.process(action)
- assert_equal body, controller.response_body
- end
-
- test "an arbitrary method is available as an action by default" do
- assert_dispatch DefaultRespondToActionController, "success", :index
- end
-
- test "raises ActionNotFound when method does not exist and action_missing is not defined" do
- assert_raise(ActionNotFound) { DefaultRespondToActionController.new.process(:fail) }
- end
-
- test "dispatches to action_missing when method does not exist and action_missing is defined" do
- assert_dispatch ActionMissingRespondToActionController, "success", :ohai
- end
-
- test "a method is available as an action if method_for_action returns true" do
- assert_dispatch RespondToActionController, "success", :index
- end
-
- test "raises ActionNotFound if method is defined but method_for_action returns false" do
- assert_raise(ActionNotFound) { RespondToActionController.new.process(:fail) }
- end
- end
-
- class Me6 < AbstractController::Base
- self.action_methods
-
- def index
- end
- end
-
- class TestActionMethodsReloading < ActiveSupport::TestCase
-
- test "action_methods should be reloaded after defining a new method" do
- assert_equal Set.new(["index"]), Me6.action_methods
- end
- end
-
- end
-end
diff --git a/actionpack/test/abstract/helper_test.rb b/actionpack/test/abstract/helper_test.rb
deleted file mode 100644
index bc3e34684c..0000000000
--- a/actionpack/test/abstract/helper_test.rb
+++ /dev/null
@@ -1,126 +0,0 @@
-require 'abstract_unit'
-
-ActionController::Base.helpers_path = File.expand_path('../../fixtures/helpers', __FILE__)
-
-module AbstractController
- module Testing
-
- class ControllerWithHelpers < AbstractController::Base
- include AbstractController::Rendering
- include AbstractController::Helpers
-
- def with_module
- render :inline => "Module <%= included_method %>"
- end
- end
-
- module HelperyTest
- def included_method
- "Included"
- end
- end
-
- class AbstractHelpers < ControllerWithHelpers
- helper(HelperyTest) do
- def helpery_test
- "World"
- end
- end
-
- helper :abc
-
- def with_block
- render :inline => "Hello <%= helpery_test %>"
- end
-
- def with_symbol
- render :inline => "I respond to bare_a: <%= respond_to?(:bare_a) %>"
- end
- end
-
- class ::HelperyTestController < AbstractHelpers
- clear_helpers
- end
-
- class AbstractHelpersBlock < ControllerWithHelpers
- helper do
- include AbstractController::Testing::HelperyTest
- end
- end
-
- class AbstractInvalidHelpers < AbstractHelpers
- include ActionController::Helpers
-
- path = File.join(File.expand_path('../../fixtures', __FILE__), "helpers_missing")
- $:.unshift(path)
- self.helpers_path = path
- end
-
- class TestHelpers < ActiveSupport::TestCase
- def setup
- @controller = AbstractHelpers.new
- end
-
- def test_helpers_with_block
- @controller.process(:with_block)
- assert_equal "Hello World", @controller.response_body
- end
-
- def test_helpers_with_module
- @controller.process(:with_module)
- assert_equal "Module Included", @controller.response_body
- end
-
- def test_helpers_with_symbol
- @controller.process(:with_symbol)
- assert_equal "I respond to bare_a: true", @controller.response_body
- end
-
- def test_declare_missing_helper
- AbstractHelpers.helper :missing
- flunk "should have raised an exception"
- rescue LoadError => e
- assert_equal "helpers/missing_helper.rb", e.path
- end
-
- def test_helpers_with_module_through_block
- @controller = AbstractHelpersBlock.new
- @controller.process(:with_module)
- assert_equal "Module Included", @controller.response_body
- end
- end
-
- class ClearHelpersTest < ActiveSupport::TestCase
- def setup
- @controller = HelperyTestController.new
- end
-
- def test_clears_up_previous_helpers
- @controller.process(:with_symbol)
- assert_equal "I respond to bare_a: false", @controller.response_body
- end
-
- def test_includes_controller_default_helper
- @controller.process(:with_block)
- assert_equal "Hello Default", @controller.response_body
- end
- end
-
- class InvalidHelpersTest < ActiveSupport::TestCase
- def test_controller_raise_error_about_real_require_problem
- e = assert_raise(LoadError) { AbstractInvalidHelpers.helper(:invalid_require) }
- assert_equal "No such file to load -- very_invalid_file_name", e.message
- end
-
- def test_controller_raise_error_about_missing_helper
- e = assert_raise(AbstractController::Helpers::MissingHelperError) { AbstractInvalidHelpers.helper(:missing) }
- assert_equal "Missing helper file helpers/missing_helper.rb", e.message
- end
-
- def test_missing_helper_error_has_the_right_path
- e = assert_raise(AbstractController::Helpers::MissingHelperError) { AbstractInvalidHelpers.helper(:missing) }
- assert_equal "helpers/missing_helper.rb", e.path
- end
- end
- end
-end
diff --git a/actionpack/test/abstract/layouts_test.rb b/actionpack/test/abstract/layouts_test.rb
deleted file mode 100644
index 4a05c00f8b..0000000000
--- a/actionpack/test/abstract/layouts_test.rb
+++ /dev/null
@@ -1,383 +0,0 @@
-require 'abstract_unit'
-
-module AbstractControllerTests
- module Layouts
-
- # Base controller for these tests
- class Base < AbstractController::Base
- include AbstractController::Rendering
- include AbstractController::Layouts
-
- abstract!
-
- self.view_paths = [ActionView::FixtureResolver.new(
- "layouts/hello.erb" => "With String <%= yield %>",
- "layouts/hello_override.erb" => "With Override <%= yield %>",
- "layouts/overwrite.erb" => "Overwrite <%= yield %>",
- "layouts/with_false_layout.erb" => "False Layout <%= yield %>",
- "abstract_controller_tests/layouts/with_string_implied_child.erb" =>
- "With Implied <%= yield %>",
- "abstract_controller_tests/layouts/with_grand_child_of_implied.erb" =>
- "With Grand Child <%= yield %>"
-
- )]
- end
-
- class Blank < Base
- self.view_paths = []
-
- def index
- render :template => ActionView::Template::Text.new("Hello blank!")
- end
- end
-
- class WithString < Base
- layout "hello"
-
- def index
- render :template => ActionView::Template::Text.new("Hello string!")
- end
-
- def overwrite_default
- render :template => ActionView::Template::Text.new("Hello string!"), :layout => :default
- end
-
- def overwrite_false
- render :template => ActionView::Template::Text.new("Hello string!"), :layout => false
- end
-
- def overwrite_string
- render :template => ActionView::Template::Text.new("Hello string!"), :layout => "overwrite"
- end
-
- def overwrite_skip
- render :text => "Hello text!"
- end
- end
-
- class WithStringChild < WithString
- end
-
- class WithStringOverriddenChild < WithString
- layout "hello_override"
- end
-
- class WithStringImpliedChild < WithString
- layout nil
- end
-
- class WithChildOfImplied < WithStringImpliedChild
- end
-
- class WithGrandChildOfImplied < WithStringImpliedChild
- layout nil
- end
-
- class WithProc < Base
- layout proc { "overwrite" }
-
- def index
- render :template => ActionView::Template::Text.new("Hello proc!")
- end
- end
-
- class WithProcReturningNil < Base
- layout proc { nil }
-
- def index
- render template: ActionView::Template::Text.new("Hello nil!")
- end
- end
-
- class WithZeroArityProc < Base
- layout proc { "overwrite" }
-
- def index
- render :template => ActionView::Template::Text.new("Hello zero arity proc!")
- end
- end
-
- class WithProcInContextOfInstance < Base
- def an_instance_method; end
-
- layout proc {
- break unless respond_to? :an_instance_method
- "overwrite"
- }
-
- def index
- render :template => ActionView::Template::Text.new("Hello again zero arity proc!")
- end
- end
-
- class WithSymbol < Base
- layout :hello
-
- def index
- render :template => ActionView::Template::Text.new("Hello symbol!")
- end
- private
- def hello
- "overwrite"
- end
- end
-
- class WithSymbolReturningNil < Base
- layout :nilz
-
- def index
- render :template => ActionView::Template::Text.new("Hello nilz!")
- end
-
- def nilz() end
- end
-
- class WithSymbolReturningObj < Base
- layout :objekt
-
- def index
- render :template => ActionView::Template::Text.new("Hello nilz!")
- end
-
- def objekt
- Object.new
- end
- end
-
- class WithSymbolAndNoMethod < Base
- layout :no_method
-
- def index
- render :template => ActionView::Template::Text.new("Hello boom!")
- end
- end
-
- class WithMissingLayout < Base
- layout "missing"
-
- def index
- render :template => ActionView::Template::Text.new("Hello missing!")
- end
- end
-
- class WithFalseLayout < Base
- layout false
-
- def index
- render :template => ActionView::Template::Text.new("Hello false!")
- end
- end
-
- class WithNilLayout < Base
- layout nil
-
- def index
- render :template => ActionView::Template::Text.new("Hello nil!")
- end
- end
-
- class WithOnlyConditional < WithStringImpliedChild
- layout "overwrite", :only => :show
-
- def index
- render :template => ActionView::Template::Text.new("Hello index!")
- end
-
- def show
- render :template => ActionView::Template::Text.new("Hello show!")
- end
- end
-
- class WithExceptConditional < WithStringImpliedChild
- layout "overwrite", :except => :show
-
- def index
- render :template => ActionView::Template::Text.new("Hello index!")
- end
-
- def show
- render :template => ActionView::Template::Text.new("Hello show!")
- end
- end
-
- class TestBase < ActiveSupport::TestCase
- test "when no layout is specified, and no default is available, render without a layout" do
- controller = Blank.new
- controller.process(:index)
- assert_equal "Hello blank!", controller.response_body
- end
-
- test "when layout is specified as a string, render with that layout" do
- controller = WithString.new
- controller.process(:index)
- assert_equal "With String Hello string!", controller.response_body
- end
-
- test "when layout is overwriten by :default in render, render default layout" do
- controller = WithString.new
- controller.process(:overwrite_default)
- assert_equal "With String Hello string!", controller.response_body
- end
-
- test "when layout is overwriten by string in render, render new layout" do
- controller = WithString.new
- controller.process(:overwrite_string)
- assert_equal "Overwrite Hello string!", controller.response_body
- end
-
- test "when layout is overwriten by false in render, render no layout" do
- controller = WithString.new
- controller.process(:overwrite_false)
- assert_equal "Hello string!", controller.response_body
- end
-
- test "when text is rendered, render no layout" do
- controller = WithString.new
- controller.process(:overwrite_skip)
- assert_equal "Hello text!", controller.response_body
- end
-
- test "when layout is specified as a string, but the layout is missing, raise an exception" do
- assert_raises(ActionView::MissingTemplate) { WithMissingLayout.new.process(:index) }
- end
-
- test "when layout is specified as false, do not use a layout" do
- controller = WithFalseLayout.new
- controller.process(:index)
- assert_equal "Hello false!", controller.response_body
- end
-
- test "when layout is specified as nil, do not use a layout" do
- controller = WithNilLayout.new
- controller.process(:index)
- assert_equal "Hello nil!", controller.response_body
- end
-
- test "when layout is specified as a proc, do not leak any methods into controller's action_methods" do
- assert_equal Set.new(['index']), WithProc.action_methods
- end
-
- test "when layout is specified as a proc, call it and use the layout returned" do
- controller = WithProc.new
- controller.process(:index)
- assert_equal "Overwrite Hello proc!", controller.response_body
- end
-
- test "when layout is specified as a proc and the proc retuns nil, don't use a layout" do
- controller = WithProcReturningNil.new
- controller.process(:index)
- assert_equal "Hello nil!", controller.response_body
- end
-
- test "when layout is specified as a proc without parameters it works just the same" do
- controller = WithZeroArityProc.new
- controller.process(:index)
- assert_equal "Overwrite Hello zero arity proc!", controller.response_body
- end
-
- test "when layout is specified as a proc without parameters the block is evaluated in the context of an instance" do
- controller = WithProcInContextOfInstance.new
- controller.process(:index)
- assert_equal "Overwrite Hello again zero arity proc!", controller.response_body
- end
-
- test "when layout is specified as a symbol, call the requested method and use the layout returned" do
- controller = WithSymbol.new
- controller.process(:index)
- assert_equal "Overwrite Hello symbol!", controller.response_body
- end
-
- test "when layout is specified as a symbol and the method returns nil, don't use a layout" do
- controller = WithSymbolReturningNil.new
- controller.process(:index)
- assert_equal "Hello nilz!", controller.response_body
- end
-
- test "when the layout is specified as a symbol and the method doesn't exist, raise an exception" do
- assert_raises(NameError) { WithSymbolAndNoMethod.new.process(:index) }
- end
-
- test "when the layout is specified as a symbol and the method returns something besides a string/false/nil, raise an exception" do
- assert_raises(ArgumentError) { WithSymbolReturningObj.new.process(:index) }
- end
-
- test "when a child controller does not have a layout, use the parent controller layout" do
- controller = WithStringChild.new
- controller.process(:index)
- assert_equal "With String Hello string!", controller.response_body
- end
-
- test "when a child controller has specified a layout, use that layout and not the parent controller layout" do
- controller = WithStringOverriddenChild.new
- controller.process(:index)
- assert_equal "With Override Hello string!", controller.response_body
- end
-
- test "when a child controller has an implied layout, use that layout and not the parent controller layout" do
- controller = WithStringImpliedChild.new
- controller.process(:index)
- assert_equal "With Implied Hello string!", controller.response_body
- end
-
- test "when a grandchild has no layout specified, the child has an implied layout, and the " \
- "parent has specified a layout, use the child controller layout" do
- controller = WithChildOfImplied.new
- controller.process(:index)
- assert_equal "With Implied Hello string!", controller.response_body
- end
-
- test "when a grandchild has nil layout specified, the child has an implied layout, and the " \
- "parent has specified a layout, use the child controller layout" do
- controller = WithGrandChildOfImplied.new
- controller.process(:index)
- assert_equal "With Grand Child Hello string!", controller.response_body
- end
-
- test "raises an exception when specifying layout true" do
- assert_raises ArgumentError do
- Object.class_eval do
- class ::BadFailLayout < AbstractControllerTests::Layouts::Base
- layout true
- end
- end
- end
- end
-
- test "when specify an :only option which match current action name" do
- controller = WithOnlyConditional.new
- controller.process(:show)
- assert_equal "Overwrite Hello show!", controller.response_body
- end
-
- test "when specify an :only option which does not match current action name" do
- controller = WithOnlyConditional.new
- controller.process(:index)
- assert_equal "With Implied Hello index!", controller.response_body
- end
-
- test "when specify an :except option which match current action name" do
- controller = WithExceptConditional.new
- controller.process(:show)
- assert_equal "With Implied Hello show!", controller.response_body
- end
-
- test "when specify an :except option which does not match current action name" do
- controller = WithExceptConditional.new
- controller.process(:index)
- assert_equal "Overwrite Hello index!", controller.response_body
- end
-
- test "layout for anonymous controller" do
- klass = Class.new(WithString) do
- def index
- render :text => 'index', :layout => true
- end
- end
-
- controller = klass.new
- controller.process(:index)
- assert_equal "With String index", controller.response_body
- end
- end
- end
-end
diff --git a/actionpack/test/abstract/render_test.rb b/actionpack/test/abstract/render_test.rb
deleted file mode 100644
index b9293d1241..0000000000
--- a/actionpack/test/abstract/render_test.rb
+++ /dev/null
@@ -1,102 +0,0 @@
-require 'abstract_unit'
-
-module AbstractController
- module Testing
-
- class ControllerRenderer < AbstractController::Base
- include AbstractController::Rendering
-
- def _prefixes
- %w[renderer]
- end
-
- self.view_paths = [ActionView::FixtureResolver.new(
- "template.erb" => "With Template",
- "renderer/default.erb" => "With Default",
- "renderer/string.erb" => "With String",
- "renderer/symbol.erb" => "With Symbol",
- "string/with_path.erb" => "With String With Path",
- "some/file.erb" => "With File"
- )]
-
- def template
- render :template => "template"
- end
-
- def file
- render :file => "some/file"
- end
-
- def inline
- render :inline => "With <%= :Inline %>"
- end
-
- def text
- render :text => "With Text"
- end
-
- def default
- render
- end
-
- def string
- render "string"
- end
-
- def string_with_path
- render "string/with_path"
- end
-
- def symbol
- render :symbol
- end
- end
-
- class TestRenderer < ActiveSupport::TestCase
-
- def setup
- @controller = ControllerRenderer.new
- end
-
- def test_render_template
- @controller.process(:template)
- assert_equal "With Template", @controller.response_body
- end
-
- def test_render_file
- @controller.process(:file)
- assert_equal "With File", @controller.response_body
- end
-
- def test_render_inline
- @controller.process(:inline)
- assert_equal "With Inline", @controller.response_body
- end
-
- def test_render_text
- @controller.process(:text)
- assert_equal "With Text", @controller.response_body
- end
-
- def test_render_default
- @controller.process(:default)
- assert_equal "With Default", @controller.response_body
- end
-
- def test_render_string
- @controller.process(:string)
- assert_equal "With String", @controller.response_body
- end
-
- def test_render_symbol
- @controller.process(:symbol)
- assert_equal "With Symbol", @controller.response_body
- end
-
- def test_render_string_with_path
- @controller.process(:string_with_path)
- assert_equal "With String With Path", @controller.response_body
- end
- end
- end
-end
diff --git a/actionpack/test/abstract/views/abstract_controller/testing/me3/formatted.html.erb b/actionpack/test/abstract/views/abstract_controller/testing/me3/formatted.html.erb
deleted file mode 100644
index 785bf69191..0000000000
--- a/actionpack/test/abstract/views/abstract_controller/testing/me3/formatted.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-Hello from me3/formatted.html.erb \ No newline at end of file
diff --git a/actionpack/test/abstract/views/abstract_controller/testing/me3/index.erb b/actionpack/test/abstract/views/abstract_controller/testing/me3/index.erb
deleted file mode 100644
index f079ad8204..0000000000
--- a/actionpack/test/abstract/views/abstract_controller/testing/me3/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-Hello from me3/index.erb \ No newline at end of file
diff --git a/actionpack/test/abstract/views/abstract_controller/testing/me4/index.erb b/actionpack/test/abstract/views/abstract_controller/testing/me4/index.erb
deleted file mode 100644
index 89dce12bdc..0000000000
--- a/actionpack/test/abstract/views/abstract_controller/testing/me4/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-Hello from me4/index.erb \ No newline at end of file
diff --git a/actionpack/test/abstract/views/abstract_controller/testing/me5/index.erb b/actionpack/test/abstract/views/abstract_controller/testing/me5/index.erb
deleted file mode 100644
index 84d0b7417e..0000000000
--- a/actionpack/test/abstract/views/abstract_controller/testing/me5/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-Hello from me5/index.erb \ No newline at end of file
diff --git a/actionpack/test/abstract/views/action_with_ivars.erb b/actionpack/test/abstract/views/action_with_ivars.erb
deleted file mode 100644
index 8d8ae22fd7..0000000000
--- a/actionpack/test/abstract/views/action_with_ivars.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= @my_ivar %> from index_with_ivars.erb \ No newline at end of file
diff --git a/actionpack/test/abstract/views/helper_test.erb b/actionpack/test/abstract/views/helper_test.erb
deleted file mode 100644
index 8ae45cc195..0000000000
--- a/actionpack/test/abstract/views/helper_test.erb
+++ /dev/null
@@ -1 +0,0 @@
-Hello <%= helpery_test %> : <%= included_method %> \ No newline at end of file
diff --git a/actionpack/test/abstract/views/index.erb b/actionpack/test/abstract/views/index.erb
deleted file mode 100644
index cc1a8b8c85..0000000000
--- a/actionpack/test/abstract/views/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-Hello from index.erb \ No newline at end of file
diff --git a/actionpack/test/abstract/views/layouts/abstract_controller/testing/me4.erb b/actionpack/test/abstract/views/layouts/abstract_controller/testing/me4.erb
deleted file mode 100644
index 172dd56569..0000000000
--- a/actionpack/test/abstract/views/layouts/abstract_controller/testing/me4.erb
+++ /dev/null
@@ -1 +0,0 @@
-Me4 Enter : <%= yield %> : Exit \ No newline at end of file
diff --git a/actionpack/test/abstract/views/layouts/application.erb b/actionpack/test/abstract/views/layouts/application.erb
deleted file mode 100644
index 27317140ad..0000000000
--- a/actionpack/test/abstract/views/layouts/application.erb
+++ /dev/null
@@ -1 +0,0 @@
-Application Enter : <%= yield %> : Exit \ No newline at end of file
diff --git a/actionpack/test/abstract/views/naked_render.erb b/actionpack/test/abstract/views/naked_render.erb
deleted file mode 100644
index 1b3d03878b..0000000000
--- a/actionpack/test/abstract/views/naked_render.erb
+++ /dev/null
@@ -1 +0,0 @@
-Hello from naked_render.erb \ No newline at end of file
diff --git a/actionpack/test/abstract_unit.rb b/actionpack/test/abstract_unit.rb
index 8213997f4e..a0d90f7eee 100644
--- a/actionpack/test/abstract_unit.rb
+++ b/actionpack/test/abstract_unit.rb
@@ -64,28 +64,6 @@ module RackTestUtils
extend self
end
-module RenderERBUtils
- def view
- @view ||= begin
- path = ActionView::FileSystemResolver.new(FIXTURE_LOAD_PATH)
- view_paths = ActionView::PathSet.new([path])
- ActionView::Base.new(view_paths)
- end
- end
-
- def render_erb(string)
- @virtual_path = nil
-
- template = ActionView::Template.new(
- string.strip,
- "test template",
- ActionView::Template::Handlers::ERB,
- {})
-
- template.render(self, {}).strip
- end
-end
-
SharedTestRoutes = ActionDispatch::Routing::RouteSet.new
module ActionDispatch
@@ -268,6 +246,8 @@ class Rack::TestCase < ActionDispatch::IntegrationTest
end
end
+ActionController::Base.superclass.send(:include, ActionView::Layouts)
+
module ActionController
class Base
include ActionController::Testing
@@ -290,15 +270,8 @@ module ActionController
end
end
-class ::ApplicationController < ActionController::Base
-end
-module ActionView
- class TestCase
- # Must repeat the setup because AV::TestCase is a duplication
- # of AC::TestCase
- include ActionDispatch::SharedRoutes
- end
+class ::ApplicationController < ActionController::Base
end
class Workshop
diff --git a/actionpack/test/controller/action_pack_assertions_test.rb b/actionpack/test/controller/action_pack_assertions_test.rb
index 22a410db94..ba4cffcd3e 100644
--- a/actionpack/test/controller/action_pack_assertions_test.rb
+++ b/actionpack/test/controller/action_pack_assertions_test.rb
@@ -39,6 +39,8 @@ class ActionPackAssertionsController < ActionController::Base
def redirect_external() redirect_to "http://www.rubyonrails.org"; end
+ def redirect_external_protocol_relative() redirect_to "//www.rubyonrails.org"; end
+
def response404() head '404 AWOL' end
def response500() head '500 Sorry' end
@@ -258,6 +260,19 @@ class ActionPackAssertionsControllerTest < ActionController::TestCase
end
end
+ def test_assert_redirect_failure_message_with_protocol_relative_url
+ begin
+ process :redirect_external_protocol_relative
+ assert_redirected_to "/foo"
+ rescue ActiveSupport::TestCase::Assertion => ex
+ assert_no_match(
+ /#{request.protocol}#{request.host}\/\/www.rubyonrails.org/,
+ ex.message,
+ 'protocol relative url was incorrectly normalized'
+ )
+ end
+ end
+
def test_template_objects_exist
process :assign_this
assert !@controller.instance_variable_defined?(:"@hi")
@@ -309,6 +324,9 @@ class ActionPackAssertionsControllerTest < ActionController::TestCase
process :redirect_external
assert_equal 'http://www.rubyonrails.org', @response.redirect_url
+
+ process :redirect_external_protocol_relative
+ assert_equal '//www.rubyonrails.org', @response.redirect_url
end
def test_no_redirect_url
diff --git a/actionpack/test/controller/assert_select_test.rb b/actionpack/test/controller/assert_select_test.rb
index 3d667f0a2f..114bbf3c22 100644
--- a/actionpack/test/controller/assert_select_test.rb
+++ b/actionpack/test/controller/assert_select_test.rb
@@ -8,6 +8,9 @@ require 'abstract_unit'
require 'controller/fake_controllers'
require 'action_mailer'
+require 'action_view'
+
+ActionMailer::Base.send(:include, ActionView::Layouts)
ActionMailer::Base.view_paths = FIXTURE_LOAD_PATH
class AssertSelectTest < ActionController::TestCase
diff --git a/actionpack/test/controller/caching_test.rb b/actionpack/test/controller/caching_test.rb
index a67dff5436..57b45b8f7b 100644
--- a/actionpack/test/controller/caching_test.rb
+++ b/actionpack/test/controller/caching_test.rb
@@ -20,7 +20,7 @@ class FragmentCachingMetalTest < ActionController::TestCase
@controller = FragmentCachingMetalTestController.new
@controller.perform_caching = true
@controller.cache_store = @store
- @params = { controller: 'posts', action: 'index'}
+ @params = { controller: 'posts', action: 'index' }
@request = ActionController::TestRequest.new
@response = ActionController::TestResponse.new
@controller.params = @params
@@ -40,7 +40,7 @@ class CachingController < ActionController::Base
end
class FragmentCachingTestController < CachingController
- def some_action; end;
+ def some_action; end
end
class FragmentCachingTest < ActionController::TestCase
diff --git a/actionpack/test/controller/capture_test.rb b/actionpack/test/controller/capture_test.rb
deleted file mode 100644
index 72263156d9..0000000000
--- a/actionpack/test/controller/capture_test.rb
+++ /dev/null
@@ -1,79 +0,0 @@
-require 'abstract_unit'
-require 'active_support/logger'
-
-class CaptureController < ActionController::Base
- def self.controller_name; "test"; end
- def self.controller_path; "test"; end
-
- def content_for
- @title = nil
- render :layout => "talk_from_action"
- end
-
- def content_for_with_parameter
- @title = nil
- render :layout => "talk_from_action"
- end
-
- def content_for_concatenated
- @title = nil
- render :layout => "talk_from_action"
- end
-
- def non_erb_block_content_for
- @title = nil
- render :layout => "talk_from_action"
- end
-
- def proper_block_detection
- @todo = "some todo"
- end
-end
-
-class CaptureTest < ActionController::TestCase
- tests CaptureController
-
- def setup
- super
- # enable a logger so that (e.g.) the benchmarking stuff runs, so we can get
- # a more accurate simulation of what happens in "real life".
- @controller.logger = ActiveSupport::Logger.new(nil)
-
- @request.host = "www.nextangle.com"
- end
-
- def test_simple_capture
- get :capturing
- assert_equal "Dreamy days", @response.body.strip
- end
-
- def test_content_for
- get :content_for
- assert_equal expected_content_for_output, @response.body
- end
-
- def test_should_concatentate_content_for
- get :content_for_concatenated
- assert_equal expected_content_for_output, @response.body
- end
-
- def test_should_set_content_for_with_parameter
- get :content_for_with_parameter
- assert_equal expected_content_for_output, @response.body
- end
-
- def test_non_erb_block_content_for
- get :non_erb_block_content_for
- assert_equal expected_content_for_output, @response.body
- end
-
- def test_proper_block_detection
- get :proper_block_detection
- assert_equal "some todo", @response.body
- end
-
- private
- def expected_content_for_output
- "<title>Putting stuff in the title!</title>\nGreat stuff!"
- end
-end
diff --git a/actionpack/test/controller/flash_test.rb b/actionpack/test/controller/flash_test.rb
index 3b874a739a..c64ffef654 100644
--- a/actionpack/test/controller/flash_test.rb
+++ b/actionpack/test/controller/flash_test.rb
@@ -214,6 +214,18 @@ class FlashTest < ActionController::TestCase
get :redirect_with_foo_flash
assert_equal "for great justice", @controller.send(:flash)[:foo]
end
+
+ class SubclassesTestController < TestController; end
+
+ def test_add_flash_type_to_subclasses
+ TestController.add_flash_types :foo
+ assert SubclassesTestController._flash_types.include?(:foo)
+ end
+
+ def test_do_not_add_flash_type_to_parent_class
+ SubclassesTestController.add_flash_types :bar
+ assert_not TestController._flash_types.include?(:bar)
+ end
end
class FlashIntegrationTest < ActionDispatch::IntegrationTest
diff --git a/actionpack/test/controller/layout_test.rb b/actionpack/test/controller/layout_test.rb
deleted file mode 100644
index 34304cf640..0000000000
--- a/actionpack/test/controller/layout_test.rb
+++ /dev/null
@@ -1,262 +0,0 @@
-require 'abstract_unit'
-require 'rbconfig'
-require 'active_support/core_ext/array/extract_options'
-
-# The view_paths array must be set on Base and not LayoutTest so that LayoutTest's inherited
-# method has access to the view_paths array when looking for a layout to automatically assign.
-old_load_paths = ActionController::Base.view_paths
-
-ActionView::Template::register_template_handler :mab,
- lambda { |template| template.source.inspect }
-
-ActionController::Base.view_paths = [ File.dirname(__FILE__) + '/../fixtures/layout_tests/' ]
-
-class LayoutTest < ActionController::Base
- def self.controller_path; 'views' end
- def self._implied_layout_name; to_s.underscore.gsub(/_controller$/, '') ; end
- self.view_paths = ActionController::Base.view_paths.dup
-end
-
-# Restore view_paths to previous value
-ActionController::Base.view_paths = old_load_paths
-
-class ProductController < LayoutTest
-end
-
-class ItemController < LayoutTest
-end
-
-class ThirdPartyTemplateLibraryController < LayoutTest
-end
-
-module ControllerNameSpace
-end
-
-class ControllerNameSpace::NestedController < LayoutTest
-end
-
-class MultipleExtensions < LayoutTest
-end
-
-class LayoutAutoDiscoveryTest < ActionController::TestCase
- def setup
- super
- @request.host = "www.nextangle.com"
- end
-
- def test_application_layout_is_default_when_no_controller_match
- @controller = ProductController.new
- get :hello
- assert_equal 'layout_test.erb hello.erb', @response.body
- end
-
- def test_controller_name_layout_name_match
- @controller = ItemController.new
- get :hello
- assert_equal 'item.erb hello.erb', @response.body
- end
-
- def test_third_party_template_library_auto_discovers_layout
- @controller = ThirdPartyTemplateLibraryController.new
- get :hello
- assert_response :success
- assert_equal 'layouts/third_party_template_library.mab', @response.body
- end
-
- def test_namespaced_controllers_auto_detect_layouts1
- @controller = ControllerNameSpace::NestedController.new
- get :hello
- assert_equal 'controller_name_space/nested.erb hello.erb', @response.body
- end
-
- def test_namespaced_controllers_auto_detect_layouts2
- @controller = MultipleExtensions.new
- get :hello
- assert_equal 'multiple_extensions.html.erb hello.erb', @response.body.strip
- end
-end
-
-class DefaultLayoutController < LayoutTest
-end
-
-class StreamingLayoutController < LayoutTest
- def render(*args)
- options = args.extract_options!
- super(*args, options.merge(:stream => true))
- end
-end
-
-class AbsolutePathLayoutController < LayoutTest
- layout File.expand_path(File.expand_path(__FILE__) + '/../../fixtures/layout_tests/layouts/layout_test')
-end
-
-class HasOwnLayoutController < LayoutTest
- layout 'item'
-end
-
-class HasNilLayoutSymbol < LayoutTest
- layout :nilz
-
- def nilz
- nil
- end
-end
-
-class HasNilLayoutProc < LayoutTest
- layout proc { nil }
-end
-
-class PrependsViewPathController < LayoutTest
- def hello
- prepend_view_path File.dirname(__FILE__) + '/../fixtures/layout_tests/alt/'
- render :layout => 'alt'
- end
-end
-
-class OnlyLayoutController < LayoutTest
- layout 'item', :only => "hello"
-end
-
-class ExceptLayoutController < LayoutTest
- layout 'item', :except => "goodbye"
-end
-
-class SetsLayoutInRenderController < LayoutTest
- def hello
- render :layout => 'third_party_template_library'
- end
-end
-
-class RendersNoLayoutController < LayoutTest
- def hello
- render :layout => false
- end
-end
-
-class LayoutSetInResponseTest < ActionController::TestCase
- include ActionView::Template::Handlers
-
- def test_layout_set_when_using_default_layout
- @controller = DefaultLayoutController.new
- get :hello
- assert_template :layout => "layouts/layout_test"
- end
-
- def test_layout_set_when_using_streaming_layout
- @controller = StreamingLayoutController.new
- get :hello
- assert_template :hello
- end
-
- def test_layout_set_when_set_in_controller
- @controller = HasOwnLayoutController.new
- get :hello
- assert_template :layout => "layouts/item"
- end
-
- def test_layout_symbol_set_in_controller_returning_nil_falls_back_to_default
- @controller = HasNilLayoutSymbol.new
- get :hello
- assert_template layout: "layouts/layout_test"
- end
-
- def test_layout_proc_set_in_controller_returning_nil_falls_back_to_default
- @controller = HasNilLayoutProc.new
- get :hello
- assert_template layout: "layouts/layout_test"
- end
-
- def test_layout_only_exception_when_included
- @controller = OnlyLayoutController.new
- get :hello
- assert_template :layout => "layouts/item"
- end
-
- def test_layout_only_exception_when_excepted
- @controller = OnlyLayoutController.new
- get :goodbye
- assert !@response.body.include?("item.erb"), "#{@response.body.inspect} included 'item.erb'"
- end
-
- def test_layout_except_exception_when_included
- @controller = ExceptLayoutController.new
- get :hello
- assert_template :layout => "layouts/item"
- end
-
- def test_layout_except_exception_when_excepted
- @controller = ExceptLayoutController.new
- get :goodbye
- assert !@response.body.include?("item.erb"), "#{@response.body.inspect} included 'item.erb'"
- end
-
- def test_layout_set_when_using_render
- @controller = SetsLayoutInRenderController.new
- get :hello
- assert_template :layout => "layouts/third_party_template_library"
- end
-
- def test_layout_is_not_set_when_none_rendered
- @controller = RendersNoLayoutController.new
- get :hello
- assert_template :layout => nil
- end
-
- def test_layout_is_picked_from_the_controller_instances_view_path
- @controller = PrependsViewPathController.new
- get :hello
- assert_template :layout => /layouts\/alt/
- end
-
- def test_absolute_pathed_layout
- @controller = AbsolutePathLayoutController.new
- get :hello
- assert_equal "layout_test.erb hello.erb", @response.body.strip
- end
-end
-
-class RenderWithTemplateOptionController < LayoutTest
- def hello
- render :template => 'alt/hello'
- end
-end
-
-class SetsNonExistentLayoutFile < LayoutTest
- layout "nofile"
-end
-
-class LayoutExceptionRaisedTest < ActionController::TestCase
- def test_exception_raised_when_layout_file_not_found
- @controller = SetsNonExistentLayoutFile.new
- assert_raise(ActionView::MissingTemplate) { get :hello }
- end
-end
-
-class LayoutStatusIsRendered < LayoutTest
- def hello
- render :status => 401
- end
-end
-
-class LayoutStatusIsRenderedTest < ActionController::TestCase
- def test_layout_status_is_rendered
- @controller = LayoutStatusIsRendered.new
- get :hello
- assert_response 401
- end
-end
-
-unless RbConfig::CONFIG['host_os'] =~ /mswin|mingw/
- class LayoutSymlinkedTest < LayoutTest
- layout "symlinked/symlinked_layout"
- end
-
- class LayoutSymlinkedIsRenderedTest < ActionController::TestCase
- def test_symlinked_layout_is_rendered
- @controller = LayoutSymlinkedTest.new
- get :hello
- assert_response 200
- assert_template :layout => "layouts/symlinked/symlinked_layout"
- end
- end
-end
diff --git a/actionpack/test/controller/mime/respond_with_test.rb b/actionpack/test/controller/mime/respond_with_test.rb
index 29ddbff8d4..76af9e3414 100644
--- a/actionpack/test/controller/mime/respond_with_test.rb
+++ b/actionpack/test/controller/mime/respond_with_test.rb
@@ -337,6 +337,7 @@ class RespondWithControllerTest < ActionController::TestCase
errors = { :name => :invalid }
Customer.any_instance.stubs(:errors).returns(errors)
put :using_resource
+
assert_equal "text/html", @response.content_type
assert_equal 200, @response.status
assert_equal "Edit world!\n", @response.body
diff --git a/actionpack/test/controller/new_base/render_streaming_test.rb b/actionpack/test/controller/new_base/render_streaming_test.rb
index f4bdd3e1d4..2b36a399bb 100644
--- a/actionpack/test/controller/new_base/render_streaming_test.rb
+++ b/actionpack/test/controller/new_base/render_streaming_test.rb
@@ -92,7 +92,7 @@ module RenderStreaming
io.rewind
assert_match "(undefined method `invalid!' for nil:NilClass)", io.read
ensure
- ActionController::Base.logger = _old
+ ActionView::Base.logger = _old
end
end
diff --git a/actionpack/test/controller/new_base/render_text_test.rb b/actionpack/test/controller/new_base/render_text_test.rb
index d6c3926a4d..2a253799f3 100644
--- a/actionpack/test/controller/new_base/render_text_test.rb
+++ b/actionpack/test/controller/new_base/render_text_test.rb
@@ -1,6 +1,15 @@
require 'abstract_unit'
module RenderText
+ class MinimalController < ActionController::Metal
+ include AbstractController::Rendering
+ include ActionController::Rendering
+
+ def index
+ render text: "Hello World!"
+ end
+ end
+
class SimpleController < ActionController::Base
self.view_paths = [ActionView::FixtureResolver.new]
@@ -63,6 +72,12 @@ module RenderText
end
class RenderTextTest < Rack::TestCase
+ test "rendering text from a minimal controller" do
+ get "/render_text/minimal/index"
+ assert_body "Hello World!"
+ assert_status 200
+ end
+
test "rendering text from an action with default options renders the text with the layout" do
with_routing do |set|
set.draw { get ':controller', :action => 'index' }
diff --git a/actionpack/test/controller/parameters/parameters_permit_test.rb b/actionpack/test/controller/parameters/parameters_permit_test.rb
index 437da43d9b..84e007b5d0 100644
--- a/actionpack/test/controller/parameters/parameters_permit_test.rb
+++ b/actionpack/test/controller/parameters/parameters_permit_test.rb
@@ -107,6 +107,15 @@ class ParametersPermitTest < ActiveSupport::TestCase
assert_equal [], permitted[:id]
end
+ test 'do not break params filtering on nil values' do
+ params = ActionController::Parameters.new(a: 1, b: [1, 2, 3], c: nil)
+
+ permitted = params.permit(:a, c: [], b: [])
+ assert_equal 1, permitted[:a]
+ assert_equal [1, 2, 3], permitted[:b]
+ assert_equal nil, permitted[:c]
+ end
+
test 'key to empty array: arrays of permitted scalars pass' do
[['foo'], [1], ['foo', 'bar'], [1, 2, 3]].each do |array|
params = ActionController::Parameters.new(id: array)
diff --git a/actionpack/test/controller/render_test.rb b/actionpack/test/controller/render_test.rb
index fd835795c0..f41287381a 100644
--- a/actionpack/test/controller/render_test.rb
+++ b/actionpack/test/controller/render_test.rb
@@ -2,26 +2,6 @@ require 'abstract_unit'
require 'controller/fake_models'
require 'pathname'
-module Fun
- class GamesController < ActionController::Base
- # :ported:
- def hello_world
- end
-
- def nested_partial_with_form_builder
- render :partial => ActionView::Helpers::FormBuilder.new(:post, nil, view_context, {})
- end
- end
-end
-
-module Quiz
- class QuestionsController < ActionController::Base
- def new
- render :partial => Quiz::Question.new("Namespaced Partial")
- end
- end
-end
-
class TestControllerWithExtraEtags < ActionController::Base
etag { nil }
etag { 'ab' }
@@ -58,10 +38,6 @@ class TestController < ActionController::Base
def hello_world
end
- def hello_world_file
- render :file => File.expand_path("../../fixtures/hello", __FILE__), :formats => [:html]
- end
-
def conditional_hello
if stale?(:last_modified => Time.now.utc.beginning_of_day, :etag => [:foo, 123])
render :action => 'hello_world'
@@ -147,327 +123,10 @@ class TestController < ActionController::Base
fresh_when(:last_modified => Time.now.utc.beginning_of_day, :etag => [ :foo, 123 ])
end
- # :ported:
- def render_hello_world
- render :template => "test/hello_world"
- end
-
- def render_hello_world_with_last_modified_set
- response.last_modified = Date.new(2008, 10, 10).to_time
- render :template => "test/hello_world"
- end
-
- # :ported: compatibility
- def render_hello_world_with_forward_slash
- render :template => "/test/hello_world"
- end
-
- # :ported:
- def render_template_in_top_directory
- render :template => 'shared'
- end
-
- # :deprecated:
- def render_template_in_top_directory_with_slash
- render :template => '/shared'
- end
-
- # :ported:
- def render_hello_world_from_variable
- @person = "david"
- render :text => "hello #{@person}"
- end
-
- # :ported:
- def render_action_hello_world
- render :action => "hello_world"
- end
-
- def render_action_upcased_hello_world
- render :action => "Hello_world"
- end
-
- def render_action_hello_world_as_string
- render "hello_world"
- end
-
- def render_action_hello_world_with_symbol
- render :action => :hello_world
- end
-
- # :ported:
- def render_text_hello_world
- render :text => "hello world"
- end
-
- # :ported:
- def render_text_hello_world_with_layout
- @variable_for_layout = ", I am here!"
- render :text => "hello world", :layout => true
- end
-
- def hello_world_with_layout_false
- render :layout => false
- end
-
- # :ported:
- def render_file_with_instance_variables
- @secret = 'in the sauce'
- path = File.join(File.dirname(__FILE__), '../fixtures/test/render_file_with_ivar')
- render :file => path
- end
-
- # :ported:
- def render_file_as_string_with_instance_variables
- @secret = 'in the sauce'
- path = File.expand_path(File.join(File.dirname(__FILE__), '../fixtures/test/render_file_with_ivar'))
- render path
- end
-
- # :ported:
- def render_file_not_using_full_path
- @secret = 'in the sauce'
- render :file => 'test/render_file_with_ivar'
- end
-
- def render_file_not_using_full_path_with_dot_in_path
- @secret = 'in the sauce'
- render :file => 'test/dot.directory/render_file_with_ivar'
- end
-
- def render_file_using_pathname
- @secret = 'in the sauce'
- render :file => Pathname.new(File.dirname(__FILE__)).join('..', 'fixtures', 'test', 'dot.directory', 'render_file_with_ivar')
- end
-
- def render_file_from_template
- @secret = 'in the sauce'
- @path = File.expand_path(File.join(File.dirname(__FILE__), '../fixtures/test/render_file_with_ivar'))
- end
-
- def render_file_with_locals
- path = File.join(File.dirname(__FILE__), '../fixtures/test/render_file_with_locals')
- render :file => path, :locals => {:secret => 'in the sauce'}
- end
-
- def render_file_as_string_with_locals
- path = File.expand_path(File.join(File.dirname(__FILE__), '../fixtures/test/render_file_with_locals'))
- render path, :locals => {:secret => 'in the sauce'}
- end
-
- def accessing_request_in_template
- render :inline => "Hello: <%= request.host %>"
- end
-
- def accessing_logger_in_template
- render :inline => "<%= logger.class %>"
- end
-
- def accessing_action_name_in_template
- render :inline => "<%= action_name %>"
- end
-
- def accessing_controller_name_in_template
- render :inline => "<%= controller_name %>"
- end
-
- # :ported:
- def render_custom_code
- render :text => "hello world", :status => 404
- end
-
- # :ported:
- def render_text_with_nil
- render :text => nil
- end
-
- # :ported:
- def render_text_with_false
- render :text => false
- end
-
- def render_text_with_resource
- render :text => Customer.new("David")
- end
-
- # :ported:
- def render_nothing_with_appendix
- render :text => "appended"
- end
-
- # This test is testing 3 things:
- # render :file in AV :ported:
- # render :template in AC :ported:
- # setting content type
- def render_xml_hello
- @name = "David"
- render :template => "test/hello"
- end
-
- def render_xml_hello_as_string_template
- @name = "David"
- render "test/hello"
- end
-
- def render_line_offset
- render :inline => '<% raise %>', :locals => {:foo => 'bar'}
- end
-
def heading
head :ok
end
- def greeting
- # let's just rely on the template
- end
-
- # :ported:
- def blank_response
- render :text => ' '
- end
-
- # :ported:
- def layout_test
- render :action => "hello_world"
- end
-
- # :ported:
- def builder_layout_test
- @name = nil
- render :action => "hello", :layout => "layouts/builder"
- end
-
- # :move: test this in Action View
- def builder_partial_test
- render :action => "hello_world_container"
- end
-
- # :ported:
- def partials_list
- @test_unchanged = 'hello'
- @customers = [ Customer.new("david"), Customer.new("mary") ]
- render :action => "list"
- end
-
- def partial_only
- render :partial => true
- end
-
- def hello_in_a_string
- @customers = [ Customer.new("david"), Customer.new("mary") ]
- render :text => "How's there? " + render_to_string(:template => "test/list")
- end
-
- def accessing_params_in_template
- render :inline => "Hello: <%= params[:name] %>"
- end
-
- def accessing_local_assigns_in_inline_template
- name = params[:local_name]
- render :inline => "<%= 'Goodbye, ' + local_name %>",
- :locals => { :local_name => name }
- end
-
- def render_implicit_html_template_from_xhr_request
- end
-
- def render_implicit_js_template_without_layout
- end
-
- def formatted_html_erb
- end
-
- def formatted_xml_erb
- end
-
- def render_to_string_test
- @foo = render_to_string :inline => "this is a test"
- end
-
- def default_render
- @alternate_default_render ||= nil
- if @alternate_default_render
- @alternate_default_render.call
- else
- super
- end
- end
-
- def render_action_hello_world_as_symbol
- render :action => :hello_world
- end
-
- def layout_test_with_different_layout
- render :action => "hello_world", :layout => "standard"
- end
-
- def layout_test_with_different_layout_and_string_action
- render "hello_world", :layout => "standard"
- end
-
- def layout_test_with_different_layout_and_symbol_action
- render :hello_world, :layout => "standard"
- end
-
- def rendering_without_layout
- render :action => "hello_world", :layout => false
- end
-
- def layout_overriding_layout
- render :action => "hello_world", :layout => "standard"
- end
-
- def rendering_nothing_on_layout
- render :nothing => true
- end
-
- def render_to_string_with_assigns
- @before = "i'm before the render"
- render_to_string :text => "foo"
- @after = "i'm after the render"
- render :template => "test/hello_world"
- end
-
- def render_to_string_with_exception
- render_to_string :file => "exception that will not be caught - this will certainly not work"
- end
-
- def render_to_string_with_caught_exception
- @before = "i'm before the render"
- begin
- render_to_string :file => "exception that will be caught- hope my future instance vars still work!"
- rescue
- end
- @after = "i'm after the render"
- render :template => "test/hello_world"
- end
-
- def accessing_params_in_template_with_layout
- render :layout => true, :inline => "Hello: <%= params[:name] %>"
- end
-
- # :ported:
- def render_with_explicit_template
- render :template => "test/hello_world"
- end
-
- def render_with_explicit_unescaped_template
- render :template => "test/h*llo_world"
- end
-
- def render_with_explicit_escaped_template
- render :template => "test/hello,world"
- end
-
- def render_with_explicit_string_template
- render "test/hello_world"
- end
-
- # :ported:
- def render_with_explicit_template_with_locals
- render :template => "test/render_file_with_locals", :locals => { :secret => 'area51' }
- end
-
# :ported:
def double_render
render :text => "hello"
@@ -508,25 +167,6 @@ class TestController < ActionController::Base
render :template => "test/hello_world_from_rxml", :handlers => [:builder]
end
- def action_talk_to_layout
- # Action template sets variable that's picked up by layout
- end
-
- # :addressed:
- def render_text_with_assigns
- @hello = "world"
- render :text => "foo"
- end
-
- def yield_content_for
- render :action => "content_for", :layout => "yield"
- end
-
- def render_content_type_from_body
- response.content_type = Mime::RSS
- render :text => "hello world!"
- end
-
def head_created
head :created
end
@@ -571,162 +211,6 @@ class TestController < ActionController::Base
head :forbidden, :x_custom_header => "something"
end
- def render_using_layout_around_block
- render :action => "using_layout_around_block"
- end
-
- def render_using_layout_around_block_in_main_layout_and_within_content_for_layout
- render :action => "using_layout_around_block", :layout => "layouts/block_with_layout"
- end
-
- def partial_formats_html
- render :partial => 'partial', :formats => [:html]
- end
-
- def partial
- render :partial => 'partial'
- end
-
- def partial_html_erb
- render :partial => 'partial_html_erb'
- end
-
- def render_to_string_with_partial
- @partial_only = render_to_string :partial => "partial_only"
- @partial_with_locals = render_to_string :partial => "customer", :locals => { :customer => Customer.new("david") }
- render :template => "test/hello_world"
- end
-
- def render_to_string_with_template_and_html_partial
- @text = render_to_string :template => "test/with_partial", :formats => [:text]
- @html = render_to_string :template => "test/with_partial", :formats => [:html]
- render :template => "test/with_html_partial"
- end
-
- def render_to_string_and_render_with_different_formats
- @html = render_to_string :template => "test/with_partial", :formats => [:html]
- render :template => "test/with_partial", :formats => [:text]
- end
-
- def render_template_within_a_template_with_other_format
- render :template => "test/with_xml_template",
- :formats => [:html],
- :layout => "with_html_partial"
- end
-
- def partial_with_counter
- render :partial => "counter", :locals => { :counter_counter => 5 }
- end
-
- def partial_with_locals
- render :partial => "customer", :locals => { :customer => Customer.new("david") }
- end
-
- def partial_with_form_builder
- render :partial => ActionView::Helpers::FormBuilder.new(:post, nil, view_context, {})
- end
-
- def partial_with_form_builder_subclass
- render :partial => LabellingFormBuilder.new(:post, nil, view_context, {})
- end
-
- def partial_collection
- render :partial => "customer", :collection => [ Customer.new("david"), Customer.new("mary") ]
- end
-
- def partial_collection_with_as
- render :partial => "customer_with_var", :collection => [ Customer.new("david"), Customer.new("mary") ], :as => :customer
- end
-
- def partial_collection_with_counter
- render :partial => "customer_counter", :collection => [ Customer.new("david"), Customer.new("mary") ]
- end
-
- def partial_collection_with_as_and_counter
- render :partial => "customer_counter_with_as", :collection => [ Customer.new("david"), Customer.new("mary") ], :as => :client
- end
-
- def partial_collection_with_locals
- render :partial => "customer_greeting", :collection => [ Customer.new("david"), Customer.new("mary") ], :locals => { :greeting => "Bonjour" }
- end
-
- def partial_collection_with_spacer
- render :partial => "customer", :spacer_template => "partial_only", :collection => [ Customer.new("david"), Customer.new("mary") ]
- end
-
- def partial_collection_with_spacer_which_uses_render
- render :partial => "customer", :spacer_template => "partial_with_partial", :collection => [ Customer.new("david"), Customer.new("mary") ]
- end
-
- def partial_collection_shorthand_with_locals
- render :partial => [ Customer.new("david"), Customer.new("mary") ], :locals => { :greeting => "Bonjour" }
- end
-
- def partial_collection_shorthand_with_different_types_of_records
- render :partial => [
- BadCustomer.new("mark"),
- GoodCustomer.new("craig"),
- BadCustomer.new("john"),
- GoodCustomer.new("zach"),
- GoodCustomer.new("brandon"),
- BadCustomer.new("dan") ],
- :locals => { :greeting => "Bonjour" }
- end
-
- def empty_partial_collection
- render :partial => "customer", :collection => []
- end
-
- def partial_collection_shorthand_with_different_types_of_records_with_counter
- partial_collection_shorthand_with_different_types_of_records
- end
-
- def missing_partial
- render :partial => 'thisFileIsntHere'
- end
-
- def partial_with_hash_object
- render :partial => "hash_object", :object => {:first_name => "Sam"}
- end
-
- def partial_with_nested_object
- render :partial => "quiz/questions/question", :object => Quiz::Question.new("first")
- end
-
- def partial_with_nested_object_shorthand
- render Quiz::Question.new("first")
- end
-
- def partial_hash_collection
- render :partial => "hash_object", :collection => [ {:first_name => "Pratik"}, {:first_name => "Amy"} ]
- end
-
- def partial_hash_collection_with_locals
- render :partial => "hash_greeting", :collection => [ {:first_name => "Pratik"}, {:first_name => "Amy"} ], :locals => { :greeting => "Hola" }
- end
-
- def partial_with_implicit_local_assignment
- @customer = Customer.new("Marcel")
- render :partial => "customer"
- end
-
- def render_call_to_partial_with_layout
- render :action => "calling_partial_with_layout"
- end
-
- def render_call_to_partial_with_layout_in_main_layout_and_within_content_for_layout
- render :action => "calling_partial_with_layout", :layout => "layouts/partial_with_layout"
- end
-
- before_action only: :render_with_filters do
- request.format = :xml
- end
-
- # Ensure that the before filter is executed *before* self.formats is set.
- def render_with_filters
- render :action => :formatted_xml_erb
- end
-
private
def set_variable_for_layout
@@ -755,6 +239,8 @@ class TestController < ActionController::Base
end
class MetalTestController < ActionController::Metal
+ include AbstractController::Rendering
+ include ActionView::Rendering
include ActionController::Rendering
def accessing_logger_in_template
@@ -762,788 +248,9 @@ class MetalTestController < ActionController::Metal
end
end
-class RenderTest < ActionController::TestCase
- tests TestController
-
- def setup
- # enable a logger so that (e.g.) the benchmarking stuff runs, so we can get
- # a more accurate simulation of what happens in "real life".
- super
- @controller.logger = ActiveSupport::Logger.new(nil)
- ActionView::Base.logger = ActiveSupport::Logger.new(nil)
-
- @request.host = "www.nextangle.com"
- end
-
- # :ported:
- def test_simple_show
- get :hello_world
- assert_response 200
- assert_response :success
- assert_template "test/hello_world"
- assert_equal "<html>Hello world!</html>", @response.body
- end
-
- # :ported:
- def test_renders_default_template_for_missing_action
- get :'hyphen-ated'
- assert_template 'test/hyphen-ated'
- end
-
- # :ported:
- def test_render
- get :render_hello_world
- assert_template "test/hello_world"
- end
-
- def test_line_offset
- get :render_line_offset
- flunk "the action should have raised an exception"
- rescue StandardError => exc
- line = exc.backtrace.first
- assert(line =~ %r{:(\d+):})
- assert_equal "1", $1,
- "The line offset is wrong, perhaps the wrong exception has been raised, exception was: #{exc.inspect}"
- end
-
- # :ported: compatibility
- def test_render_with_forward_slash
- get :render_hello_world_with_forward_slash
- assert_template "test/hello_world"
- end
-
- # :ported:
- def test_render_in_top_directory
- get :render_template_in_top_directory
- assert_template "shared"
- assert_equal "Elastica", @response.body
- end
-
- # :ported:
- def test_render_in_top_directory_with_slash
- get :render_template_in_top_directory_with_slash
- assert_template "shared"
- assert_equal "Elastica", @response.body
- end
-
- # :ported:
- def test_render_from_variable
- get :render_hello_world_from_variable
- assert_equal "hello david", @response.body
- end
-
- # :ported:
- def test_render_action
- get :render_action_hello_world
- assert_template "test/hello_world"
- end
-
- def test_render_action_upcased
- assert_raise ActionView::MissingTemplate do
- get :render_action_upcased_hello_world
- end
- end
-
- # :ported:
- def test_render_action_hello_world_as_string
- get :render_action_hello_world_as_string
- assert_equal "Hello world!", @response.body
- assert_template "test/hello_world"
- end
-
- # :ported:
- def test_render_action_with_symbol
- get :render_action_hello_world_with_symbol
- assert_template "test/hello_world"
- end
-
- # :ported:
- def test_render_text
- get :render_text_hello_world
- assert_equal "hello world", @response.body
- end
-
- # :ported:
- def test_do_with_render_text_and_layout
- get :render_text_hello_world_with_layout
- assert_equal "<html>hello world, I am here!</html>", @response.body
- end
-
- # :ported:
- def test_do_with_render_action_and_layout_false
- get :hello_world_with_layout_false
- assert_equal 'Hello world!', @response.body
- end
-
- # :ported:
- def test_render_file_with_instance_variables
- get :render_file_with_instance_variables
- assert_equal "The secret is in the sauce\n", @response.body
- end
-
- def test_render_file
- get :hello_world_file
- assert_equal "Hello world!", @response.body
- end
-
- # :ported:
- def test_render_file_as_string_with_instance_variables
- get :render_file_as_string_with_instance_variables
- assert_equal "The secret is in the sauce\n", @response.body
- end
-
- # :ported:
- def test_render_file_not_using_full_path
- get :render_file_not_using_full_path
- assert_equal "The secret is in the sauce\n", @response.body
- end
-
- # :ported:
- def test_render_file_not_using_full_path_with_dot_in_path
- get :render_file_not_using_full_path_with_dot_in_path
- assert_equal "The secret is in the sauce\n", @response.body
- end
-
- # :ported:
- def test_render_file_using_pathname
- get :render_file_using_pathname
- assert_equal "The secret is in the sauce\n", @response.body
- end
-
- # :ported:
- def test_render_file_with_locals
- get :render_file_with_locals
- assert_equal "The secret is in the sauce\n", @response.body
- end
-
- # :ported:
- def test_render_file_as_string_with_locals
- get :render_file_as_string_with_locals
- assert_equal "The secret is in the sauce\n", @response.body
- end
-
- # :assessed:
- def test_render_file_from_template
- get :render_file_from_template
- assert_equal "The secret is in the sauce\n", @response.body
- end
-
- # :ported:
- def test_render_custom_code
- get :render_custom_code
- assert_response 404
- assert_response :missing
- assert_equal 'hello world', @response.body
- end
-
- # :ported:
- def test_render_text_with_nil
- get :render_text_with_nil
- assert_response 200
- assert_equal ' ', @response.body
- end
-
- # :ported:
- def test_render_text_with_false
- get :render_text_with_false
- assert_equal 'false', @response.body
- end
-
- # :ported:
- def test_render_nothing_with_appendix
- get :render_nothing_with_appendix
- assert_response 200
- assert_equal 'appended', @response.body
- end
-
- def test_render_text_with_resource
- get :render_text_with_resource
- assert_equal 'name: "David"', @response.body
- end
-
- # :ported:
- def test_attempt_to_access_object_method
- assert_raise(AbstractController::ActionNotFound, "No action responded to [clone]") { get :clone }
- end
-
- # :ported:
- def test_private_methods
- assert_raise(AbstractController::ActionNotFound, "No action responded to [determine_layout]") { get :determine_layout }
- end
-
- # :ported:
- def test_access_to_request_in_view
- get :accessing_request_in_template
- assert_equal "Hello: www.nextangle.com", @response.body
- end
-
- def test_access_to_logger_in_view
- get :accessing_logger_in_template
- assert_equal "ActiveSupport::Logger", @response.body
- end
-
- # :ported:
- def test_access_to_action_name_in_view
- get :accessing_action_name_in_template
- assert_equal "accessing_action_name_in_template", @response.body
- end
-
- # :ported:
- def test_access_to_controller_name_in_view
- get :accessing_controller_name_in_template
- assert_equal "test", @response.body # name is explicitly set in the controller.
- end
-
- # :ported:
- def test_render_xml
- get :render_xml_hello
- assert_equal "<html>\n <p>Hello David</p>\n<p>This is grand!</p>\n</html>\n", @response.body
- assert_equal "application/xml", @response.content_type
- end
-
- # :ported:
- def test_render_xml_as_string_template
- get :render_xml_hello_as_string_template
- assert_equal "<html>\n <p>Hello David</p>\n<p>This is grand!</p>\n</html>\n", @response.body
- assert_equal "application/xml", @response.content_type
- end
-
- # :ported:
- def test_render_xml_with_default
- get :greeting
- assert_equal "<p>This is grand!</p>\n", @response.body
- end
-
- # :move: test in AV
- def test_render_xml_with_partial
- get :builder_partial_test
- assert_equal "<test>\n <hello/>\n</test>\n", @response.body
- end
-
- # :ported:
- def test_layout_rendering
- get :layout_test
- assert_equal "<html>Hello world!</html>", @response.body
- end
-
- def test_render_xml_with_layouts
- get :builder_layout_test
- assert_equal "<wrapper>\n<html>\n <p>Hello </p>\n<p>This is grand!</p>\n</html>\n</wrapper>\n", @response.body
- end
-
- def test_partials_list
- get :partials_list
- assert_equal "goodbyeHello: davidHello: marygoodbye\n", @response.body
- end
-
- def test_render_to_string
- get :hello_in_a_string
- assert_equal "How's there? goodbyeHello: davidHello: marygoodbye\n", @response.body
- end
-
- def test_render_to_string_resets_assigns
- get :render_to_string_test
- assert_equal "The value of foo is: ::this is a test::\n", @response.body
- end
-
- def test_render_to_string_inline
- get :render_to_string_with_inline_and_render
- assert_template "test/hello_world"
- end
-
- # :ported:
- def test_nested_rendering
- @controller = Fun::GamesController.new
- get :hello_world
- assert_equal "Living in a nested world", @response.body
- end
-
- def test_accessing_params_in_template
- get :accessing_params_in_template, :name => "David"
- assert_equal "Hello: David", @response.body
- end
-
- def test_accessing_local_assigns_in_inline_template
- get :accessing_local_assigns_in_inline_template, :local_name => "Local David"
- assert_equal "Goodbye, Local David", @response.body
- assert_equal "text/html", @response.content_type
- end
-
- def test_should_implicitly_render_html_template_from_xhr_request
- xhr :get, :render_implicit_html_template_from_xhr_request
- assert_equal "XHR!\nHello HTML!", @response.body
- end
-
- def test_should_implicitly_render_js_template_without_layout
- get :render_implicit_js_template_without_layout, :format => :js
- assert_no_match %r{<html>}, @response.body
- end
-
- def test_should_render_formatted_template
- get :formatted_html_erb
- assert_equal 'formatted html erb', @response.body
- end
-
- def test_should_render_formatted_html_erb_template
- get :formatted_xml_erb
- assert_equal '<test>passed formatted html erb</test>', @response.body
- end
-
- def test_should_render_formatted_html_erb_template_with_bad_accepts_header
- @request.env["HTTP_ACCEPT"] = "; a=dsf"
- get :formatted_xml_erb
- assert_equal '<test>passed formatted html erb</test>', @response.body
- end
-
- def test_should_render_formatted_html_erb_template_with_faulty_accepts_header
- @request.accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, appliction/x-shockwave-flash, */*"
- get :formatted_xml_erb
- assert_equal '<test>passed formatted html erb</test>', @response.body
- end
-
- def test_layout_test_with_different_layout
- get :layout_test_with_different_layout
- assert_equal "<html>Hello world!</html>", @response.body
- end
-
- def test_layout_test_with_different_layout_and_string_action
- get :layout_test_with_different_layout_and_string_action
- assert_equal "<html>Hello world!</html>", @response.body
- end
-
- def test_layout_test_with_different_layout_and_symbol_action
- get :layout_test_with_different_layout_and_symbol_action
- assert_equal "<html>Hello world!</html>", @response.body
- end
-
- def test_rendering_without_layout
- get :rendering_without_layout
- assert_equal "Hello world!", @response.body
- end
-
- def test_layout_overriding_layout
- get :layout_overriding_layout
- assert_no_match %r{<title>}, @response.body
- end
-
- def test_rendering_nothing_on_layout
- get :rendering_nothing_on_layout
- assert_equal " ", @response.body
- end
-
- def test_render_to_string_doesnt_break_assigns
- get :render_to_string_with_assigns
- assert_equal "i'm before the render", assigns(:before)
- assert_equal "i'm after the render", assigns(:after)
- end
-
- def test_bad_render_to_string_still_throws_exception
- assert_raise(ActionView::MissingTemplate) { get :render_to_string_with_exception }
- end
-
- def test_render_to_string_that_throws_caught_exception_doesnt_break_assigns
- assert_nothing_raised { get :render_to_string_with_caught_exception }
- assert_equal "i'm before the render", assigns(:before)
- assert_equal "i'm after the render", assigns(:after)
- end
-
- def test_accessing_params_in_template_with_layout
- get :accessing_params_in_template_with_layout, :name => "David"
- assert_equal "<html>Hello: David</html>", @response.body
- end
-
- def test_render_with_explicit_template
- get :render_with_explicit_template
- assert_response :success
- end
-
- def test_render_with_explicit_unescaped_template
- assert_raise(ActionView::MissingTemplate) { get :render_with_explicit_unescaped_template }
- get :render_with_explicit_escaped_template
- assert_equal "Hello w*rld!", @response.body
- end
-
- def test_render_with_explicit_string_template
- get :render_with_explicit_string_template
- assert_equal "<html>Hello world!</html>", @response.body
- end
-
- def test_render_with_filters
- get :render_with_filters
- assert_equal "<test>passed formatted xml erb</test>", @response.body
- end
-
- # :ported:
- def test_double_render
- assert_raise(AbstractController::DoubleRenderError) { get :double_render }
- end
-
- def test_double_redirect
- assert_raise(AbstractController::DoubleRenderError) { get :double_redirect }
- end
-
- def test_render_and_redirect
- assert_raise(AbstractController::DoubleRenderError) { get :render_and_redirect }
- end
-
- # specify the one exception to double render rule - render_to_string followed by render
- def test_render_to_string_and_render
- get :render_to_string_and_render
- assert_equal("Hi web users! here is some cached stuff", @response.body)
- end
-
- def test_rendering_with_conflicting_local_vars
- get :rendering_with_conflicting_local_vars
- assert_equal("First: David\nSecond: Stephan\nThird: David\nFourth: David\nFifth: ", @response.body)
- end
-
- def test_action_talk_to_layout
- get :action_talk_to_layout
- assert_equal "<title>Talking to the layout</title>\nAction was here!", @response.body
- end
-
- # :addressed:
- def test_render_text_with_assigns
- get :render_text_with_assigns
- assert_equal "world", assigns["hello"]
- end
-
- # :ported:
- def test_template_with_locals
- get :render_with_explicit_template_with_locals
- assert_equal "The secret is area51\n", @response.body
- end
-
- def test_yield_content_for
- get :yield_content_for
- assert_equal "<title>Putting stuff in the title!</title>\nGreat stuff!\n", @response.body
- end
-
- def test_overwritting_rendering_relative_file_with_extension
- get :hello_world_from_rxml_using_template
- assert_equal "<html>\n <p>Hello</p>\n</html>\n", @response.body
-
- get :hello_world_from_rxml_using_action
- assert_equal "<html>\n <p>Hello</p>\n</html>\n", @response.body
- end
-
- def test_head_created
- post :head_created
- assert @response.body.blank?
- assert_response :created
- end
-
- def test_head_created_with_application_json_content_type
- post :head_created_with_application_json_content_type
- assert @response.body.blank?
- assert_equal "application/json", @response.header["Content-Type"]
- assert_response :created
- end
-
- def test_head_ok_with_image_png_content_type
- post :head_ok_with_image_png_content_type
- assert @response.body.blank?
- assert_equal "image/png", @response.header["Content-Type"]
- assert_response :ok
- end
-
- def test_head_with_location_header
- get :head_with_location_header
- assert @response.body.blank?
- assert_equal "/foo", @response.headers["Location"]
- assert_response :ok
- end
-
- def test_head_with_location_object
- with_routing do |set|
- set.draw do
- resources :customers
- get ':controller/:action'
- end
-
- get :head_with_location_object
- assert @response.body.blank?
- assert_equal "http://www.nextangle.com/customers/1", @response.headers["Location"]
- assert_response :ok
- end
- end
-
- def test_head_with_custom_header
- get :head_with_custom_header
- assert @response.body.blank?
- assert_equal "something", @response.headers["X-Custom-Header"]
- assert_response :ok
- end
-
- def test_head_with_www_authenticate_header
- get :head_with_www_authenticate_header
- assert @response.body.blank?
- assert_equal "something", @response.headers["WWW-Authenticate"]
- assert_response :ok
- end
-
- def test_head_with_symbolic_status
- get :head_with_symbolic_status, :status => "ok"
- assert_equal 200, @response.status
- assert_response :ok
-
- get :head_with_symbolic_status, :status => "not_found"
- assert_equal 404, @response.status
- assert_response :not_found
-
- get :head_with_symbolic_status, :status => "no_content"
- assert_equal 204, @response.status
- assert !@response.headers.include?('Content-Length')
- assert_response :no_content
-
- Rack::Utils::SYMBOL_TO_STATUS_CODE.each do |status, code|
- get :head_with_symbolic_status, :status => status.to_s
- assert_equal code, @response.response_code
- assert_response status
- end
- end
-
- def test_head_with_integer_status
- Rack::Utils::HTTP_STATUS_CODES.each do |code, message|
- get :head_with_integer_status, :status => code.to_s
- assert_equal message, @response.message
- end
- end
-
- def test_head_with_string_status
- get :head_with_string_status, :status => "404 Eat Dirt"
- assert_equal 404, @response.response_code
- assert_equal "Not Found", @response.message
- assert_response :not_found
- end
-
- def test_head_with_status_code_first
- get :head_with_status_code_first
- assert_equal 403, @response.response_code
- assert_equal "Forbidden", @response.message
- assert_equal "something", @response.headers["X-Custom-Header"]
- assert_response :forbidden
- end
-
- def test_using_layout_around_block
- get :render_using_layout_around_block
- assert_equal "Before (David)\nInside from block\nAfter", @response.body
- end
-
- def test_using_layout_around_block_in_main_layout_and_within_content_for_layout
- get :render_using_layout_around_block_in_main_layout_and_within_content_for_layout
- assert_equal "Before (Anthony)\nInside from first block in layout\nAfter\nBefore (David)\nInside from block\nAfter\nBefore (Ramm)\nInside from second block in layout\nAfter\n", @response.body
- end
-
- def test_partial_only
- get :partial_only
- assert_equal "only partial", @response.body
- assert_equal "text/html", @response.content_type
- end
-
- def test_should_render_html_formatted_partial
- get :partial
- assert_equal "partial html", @response.body
- assert_equal "text/html", @response.content_type
- end
-
- def test_render_html_formatted_partial_even_with_other_mime_time_in_accept
- @request.accept = "text/javascript, text/html"
-
- get :partial_html_erb
-
- assert_equal "partial.html.erb", @response.body.strip
- assert_equal "text/html", @response.content_type
- end
-
- def test_should_render_html_partial_with_formats
- get :partial_formats_html
- assert_equal "partial html", @response.body
- assert_equal "text/html", @response.content_type
- end
-
- def test_render_to_string_partial
- get :render_to_string_with_partial
- assert_equal "only partial", assigns(:partial_only)
- assert_equal "Hello: david", assigns(:partial_with_locals)
- assert_equal "text/html", @response.content_type
- end
-
- def test_render_to_string_with_template_and_html_partial
- get :render_to_string_with_template_and_html_partial
- assert_equal "**only partial**\n", assigns(:text)
- assert_equal "<strong>only partial</strong>\n", assigns(:html)
- assert_equal "<strong>only html partial</strong>\n", @response.body
- assert_equal "text/html", @response.content_type
- end
-
- def test_render_to_string_and_render_with_different_formats
- get :render_to_string_and_render_with_different_formats
- assert_equal "<strong>only partial</strong>\n", assigns(:html)
- assert_equal "**only partial**\n", @response.body
- assert_equal "text/plain", @response.content_type
- end
-
- def test_render_template_within_a_template_with_other_format
- get :render_template_within_a_template_with_other_format
- expected = "only html partial<p>This is grand!</p>"
- assert_equal expected, @response.body.strip
- assert_equal "text/html", @response.content_type
- end
-
- def test_partial_with_counter
- get :partial_with_counter
- assert_equal "5", @response.body
- end
-
- def test_partial_with_locals
- get :partial_with_locals
- assert_equal "Hello: david", @response.body
- end
-
- def test_partial_with_form_builder
- get :partial_with_form_builder
- assert_match(/<label/, @response.body)
- assert_template('test/_form')
- end
-
- def test_partial_with_form_builder_subclass
- get :partial_with_form_builder_subclass
- assert_match(/<label/, @response.body)
- assert_template('test/_labelling_form')
- end
-
- def test_nested_partial_with_form_builder
- @controller = Fun::GamesController.new
- get :nested_partial_with_form_builder
- assert_match(/<label/, @response.body)
- assert_template('fun/games/_form')
- end
-
- def test_namespaced_object_partial
- @controller = Quiz::QuestionsController.new
- get :new
- assert_equal "Namespaced Partial", @response.body
- end
-
- def test_partial_collection
- get :partial_collection
- assert_equal "Hello: davidHello: mary", @response.body
- end
-
- def test_partial_collection_with_as
- get :partial_collection_with_as
- assert_equal "david david davidmary mary mary", @response.body
- end
-
- def test_partial_collection_with_counter
- get :partial_collection_with_counter
- assert_equal "david0mary1", @response.body
- end
-
- def test_partial_collection_with_as_and_counter
- get :partial_collection_with_as_and_counter
- assert_equal "david0mary1", @response.body
- end
-
- def test_partial_collection_with_locals
- get :partial_collection_with_locals
- assert_equal "Bonjour: davidBonjour: mary", @response.body
- end
-
- def test_locals_option_to_assert_template_is_not_supported
- get :partial_collection_with_locals
-
- warning_buffer = StringIO.new
- $stderr = warning_buffer
-
- assert_template partial: 'customer_greeting', locals: { greeting: 'Bonjour' }
- assert_equal "the :locals option to #assert_template is only supported in a ActionView::TestCase\n", warning_buffer.string
- ensure
- $stderr = STDERR
- end
-
- def test_partial_collection_with_spacer
- get :partial_collection_with_spacer
- assert_equal "Hello: davidonly partialHello: mary", @response.body
- assert_template :partial => '_customer'
- end
-
- def test_partial_collection_with_spacer_which_uses_render
- get :partial_collection_with_spacer_which_uses_render
- assert_equal "Hello: davidpartial html\npartial with partial\nHello: mary", @response.body
- assert_template :partial => '_customer'
- end
-
- def test_partial_collection_shorthand_with_locals
- get :partial_collection_shorthand_with_locals
- assert_equal "Bonjour: davidBonjour: mary", @response.body
- assert_template :partial => 'customers/_customer', :count => 2
- assert_template :partial => '_completely_fake_and_made_up_template_that_cannot_possibly_be_rendered', :count => 0
- end
-
- def test_partial_collection_shorthand_with_different_types_of_records
- get :partial_collection_shorthand_with_different_types_of_records
- assert_equal "Bonjour bad customer: mark0Bonjour good customer: craig1Bonjour bad customer: john2Bonjour good customer: zach3Bonjour good customer: brandon4Bonjour bad customer: dan5", @response.body
- assert_template :partial => 'good_customers/_good_customer', :count => 3
- assert_template :partial => 'bad_customers/_bad_customer', :count => 3
- end
-
- def test_empty_partial_collection
- get :empty_partial_collection
- assert_equal " ", @response.body
- assert_template :partial => false
- end
-
- def test_partial_with_hash_object
- get :partial_with_hash_object
- assert_equal "Sam\nmaS\n", @response.body
- end
-
- def test_partial_with_nested_object
- get :partial_with_nested_object
- assert_equal "first", @response.body
- end
-
- def test_partial_with_nested_object_shorthand
- get :partial_with_nested_object_shorthand
- assert_equal "first", @response.body
- end
-
- def test_hash_partial_collection
- get :partial_hash_collection
- assert_equal "Pratik\nkitarP\nAmy\nymA\n", @response.body
- end
-
- def test_partial_hash_collection_with_locals
- get :partial_hash_collection_with_locals
- assert_equal "Hola: PratikHola: Amy", @response.body
- end
-
- def test_render_missing_partial_template
- assert_raise(ActionView::MissingTemplate) do
- get :missing_partial
- end
- end
-
- def test_render_call_to_partial_with_layout
- get :render_call_to_partial_with_layout
- assert_equal "Before (David)\nInside from partial (David)\nAfter", @response.body
- end
-
- def test_render_call_to_partial_with_layout_in_main_layout_and_within_content_for_layout
- get :render_call_to_partial_with_layout_in_main_layout_and_within_content_for_layout
- assert_equal "Before (Anthony)\nInside from partial (Anthony)\nAfter\nBefore (David)\nInside from partial (David)\nAfter\nBefore (Ramm)\nInside from partial (Ramm)\nAfter", @response.body
- end
-end
-
class ExpiresInRenderTest < ActionController::TestCase
tests TestController
- def setup
- @request.host = "www.nextangle.com"
- end
-
def test_expires_in_header
get :conditional_hello_with_expires_in
assert_equal "max-age=60, private", @response.headers["Cache-Control"]
@@ -1598,7 +305,6 @@ class LastModifiedRenderTest < ActionController::TestCase
def setup
super
- @request.host = "www.nextangle.com"
@last_modified = Time.now.utc.beginning_of_day.httpdate
end
@@ -1683,7 +389,6 @@ class EtagRenderTest < ActionController::TestCase
def setup
super
- @request.host = "www.nextangle.com"
end
def test_multiple_etags
@@ -1711,7 +416,6 @@ class EtagRenderTest < ActionController::TestCase
end
end
-
class MetalRenderTest < ActionController::TestCase
tests MetalTestController
@@ -1720,3 +424,109 @@ class MetalRenderTest < ActionController::TestCase
assert_equal "NilClass", @response.body
end
end
+
+class HeadRenderTest < ActionController::TestCase
+ tests TestController
+
+ def setup
+ @request.host = "www.nextangle.com"
+ end
+
+ def test_head_created
+ post :head_created
+ assert @response.body.blank?
+ assert_response :created
+ end
+
+ def test_head_created_with_application_json_content_type
+ post :head_created_with_application_json_content_type
+ assert @response.body.blank?
+ assert_equal "application/json", @response.header["Content-Type"]
+ assert_response :created
+ end
+
+ def test_head_ok_with_image_png_content_type
+ post :head_ok_with_image_png_content_type
+ assert @response.body.blank?
+ assert_equal "image/png", @response.header["Content-Type"]
+ assert_response :ok
+ end
+
+ def test_head_with_location_header
+ get :head_with_location_header
+ assert @response.body.blank?
+ assert_equal "/foo", @response.headers["Location"]
+ assert_response :ok
+ end
+
+ def test_head_with_location_object
+ with_routing do |set|
+ set.draw do
+ resources :customers
+ get ':controller/:action'
+ end
+
+ get :head_with_location_object
+ assert @response.body.blank?
+ assert_equal "http://www.nextangle.com/customers/1", @response.headers["Location"]
+ assert_response :ok
+ end
+ end
+
+ def test_head_with_custom_header
+ get :head_with_custom_header
+ assert @response.body.blank?
+ assert_equal "something", @response.headers["X-Custom-Header"]
+ assert_response :ok
+ end
+
+ def test_head_with_www_authenticate_header
+ get :head_with_www_authenticate_header
+ assert @response.body.blank?
+ assert_equal "something", @response.headers["WWW-Authenticate"]
+ assert_response :ok
+ end
+
+ def test_head_with_symbolic_status
+ get :head_with_symbolic_status, :status => "ok"
+ assert_equal 200, @response.status
+ assert_response :ok
+
+ get :head_with_symbolic_status, :status => "not_found"
+ assert_equal 404, @response.status
+ assert_response :not_found
+
+ get :head_with_symbolic_status, :status => "no_content"
+ assert_equal 204, @response.status
+ assert !@response.headers.include?('Content-Length')
+ assert_response :no_content
+
+ Rack::Utils::SYMBOL_TO_STATUS_CODE.each do |status, code|
+ get :head_with_symbolic_status, :status => status.to_s
+ assert_equal code, @response.response_code
+ assert_response status
+ end
+ end
+
+ def test_head_with_integer_status
+ Rack::Utils::HTTP_STATUS_CODES.each do |code, message|
+ get :head_with_integer_status, :status => code.to_s
+ assert_equal message, @response.message
+ end
+ end
+
+ def test_head_with_string_status
+ get :head_with_string_status, :status => "404 Eat Dirt"
+ assert_equal 404, @response.response_code
+ assert_equal "Not Found", @response.message
+ assert_response :not_found
+ end
+
+ def test_head_with_status_code_first
+ get :head_with_status_code_first
+ assert_equal 403, @response.response_code
+ assert_equal "Forbidden", @response.message
+ assert_equal "something", @response.headers["X-Custom-Header"]
+ assert_response :forbidden
+ end
+end \ No newline at end of file
diff --git a/actionpack/test/controller/request_forgery_protection_test.rb b/actionpack/test/controller/request_forgery_protection_test.rb
index c272e785c2..727db79241 100644
--- a/actionpack/test/controller/request_forgery_protection_test.rb
+++ b/actionpack/test/controller/request_forgery_protection_test.rb
@@ -78,6 +78,11 @@ class RequestForgeryProtectionControllerUsingNullSession < ActionController::Bas
cookies.encrypted[:foo] = 'bar'
render :nothing => true
end
+
+ def try_to_reset_session
+ reset_session
+ render :nothing => true
+ end
end
class FreeCookieController < RequestForgeryProtectionControllerUsingResetSession
@@ -320,6 +325,11 @@ class RequestForgeryProtectionControllerUsingNullSessionTest < ActionController:
post :encrypted
assert_response :ok
end
+
+ test 'should allow reset_session' do
+ post :try_to_reset_session
+ assert_response :ok
+ end
end
class RequestForgeryProtectionControllerUsingExceptionTest < ActionController::TestCase
diff --git a/actionpack/test/controller/routing_test.rb b/actionpack/test/controller/routing_test.rb
index f735564305..46df1a7bd5 100644
--- a/actionpack/test/controller/routing_test.rb
+++ b/actionpack/test/controller/routing_test.rb
@@ -1904,6 +1904,10 @@ class RackMountIntegrationTests < ActiveSupport::TestCase
assert_equal({:controller => 'news', :action => 'index'}, @routes.recognize_path(URI.parser.escape('こんにちは/世界'), :method => :get))
end
+ def test_downcased_unicode_path
+ assert_equal({:controller => 'news', :action => 'index'}, @routes.recognize_path(URI.parser.escape('こんにちは/世界').downcase, :method => :get))
+ end
+
private
def sort_extras!(extras)
if extras.length == 2
diff --git a/actionpack/test/controller/view_paths_test.rb b/actionpack/test/controller/view_paths_test.rb
deleted file mode 100644
index c6e7a523b9..0000000000
--- a/actionpack/test/controller/view_paths_test.rb
+++ /dev/null
@@ -1,174 +0,0 @@
-require 'abstract_unit'
-
-class ViewLoadPathsTest < ActionController::TestCase
- class TestController < ActionController::Base
- def self.controller_path() "test" end
-
- before_action :add_view_path, only: :hello_world_at_request_time
-
- def hello_world() end
- def hello_world_at_request_time() render(:action => 'hello_world') end
-
- private
- def add_view_path
- prepend_view_path "#{FIXTURE_LOAD_PATH}/override"
- end
- end
-
- module Test
- class SubController < ActionController::Base
- layout 'test/sub'
- def hello_world; render(:template => 'test/hello_world'); end
- end
- end
-
- def setup
- @request = ActionController::TestRequest.new
- @response = ActionController::TestResponse.new
- @controller = TestController.new
- @paths = TestController.view_paths
- end
-
- def teardown
- TestController.view_paths = @paths
- end
-
- def expand(array)
- array.map {|x| File.expand_path(x.to_s)}
- end
-
- def assert_paths(*paths)
- controller = paths.first.is_a?(Class) ? paths.shift : @controller
- assert_equal expand(paths), controller.view_paths.map { |p| p.to_s }
- end
-
- def test_template_load_path_was_set_correctly
- assert_paths FIXTURE_LOAD_PATH
- end
-
- def test_controller_appends_view_path_correctly
- @controller.append_view_path 'foo'
- assert_paths(FIXTURE_LOAD_PATH, "foo")
-
- @controller.append_view_path(%w(bar baz))
- assert_paths(FIXTURE_LOAD_PATH, "foo", "bar", "baz")
-
- @controller.append_view_path(FIXTURE_LOAD_PATH)
- assert_paths(FIXTURE_LOAD_PATH, "foo", "bar", "baz", FIXTURE_LOAD_PATH)
- end
-
- def test_controller_prepends_view_path_correctly
- @controller.prepend_view_path 'baz'
- assert_paths("baz", FIXTURE_LOAD_PATH)
-
- @controller.prepend_view_path(%w(foo bar))
- assert_paths "foo", "bar", "baz", FIXTURE_LOAD_PATH
-
- @controller.prepend_view_path(FIXTURE_LOAD_PATH)
- assert_paths FIXTURE_LOAD_PATH, "foo", "bar", "baz", FIXTURE_LOAD_PATH
- end
-
- def test_template_appends_view_path_correctly
- @controller.instance_variable_set :@template, ActionView::Base.new(TestController.view_paths, {}, @controller)
- class_view_paths = TestController.view_paths
-
- @controller.append_view_path 'foo'
- assert_paths FIXTURE_LOAD_PATH, "foo"
-
- @controller.append_view_path(%w(bar baz))
- assert_paths FIXTURE_LOAD_PATH, "foo", "bar", "baz"
- assert_paths TestController, *class_view_paths
- end
-
- def test_template_prepends_view_path_correctly
- @controller.instance_variable_set :@template, ActionView::Base.new(TestController.view_paths, {}, @controller)
- class_view_paths = TestController.view_paths
-
- @controller.prepend_view_path 'baz'
- assert_paths "baz", FIXTURE_LOAD_PATH
-
- @controller.prepend_view_path(%w(foo bar))
- assert_paths "foo", "bar", "baz", FIXTURE_LOAD_PATH
- assert_paths TestController, *class_view_paths
- end
-
- def test_view_paths
- get :hello_world
- assert_response :success
- assert_equal "Hello world!", @response.body
- end
-
- def test_view_paths_override
- TestController.prepend_view_path "#{FIXTURE_LOAD_PATH}/override"
- get :hello_world
- assert_response :success
- assert_equal "Hello overridden world!", @response.body
- end
-
- def test_view_paths_override_for_layouts_in_controllers_with_a_module
- @controller = Test::SubController.new
- Test::SubController.view_paths = [ "#{FIXTURE_LOAD_PATH}/override", FIXTURE_LOAD_PATH, "#{FIXTURE_LOAD_PATH}/override2" ]
- get :hello_world
- assert_response :success
- assert_equal "layout: Hello overridden world!", @response.body
- end
-
- def test_view_paths_override_at_request_time
- get :hello_world_at_request_time
- assert_response :success
- assert_equal "Hello overridden world!", @response.body
- end
-
- def test_decorate_view_paths_with_custom_resolver
- decorator_class = Class.new(ActionView::PathResolver) do
- def initialize(path_set)
- @path_set = path_set
- end
-
- def find_all(*args)
- @path_set.find_all(*args).collect do |template|
- ::ActionView::Template.new(
- "Decorated body",
- template.identifier,
- template.handler,
- {
- :virtual_path => template.virtual_path,
- :format => template.formats
- }
- )
- end
- end
- end
-
- decorator = decorator_class.new(TestController.view_paths)
- TestController.view_paths = ActionView::PathSet.new.push(decorator)
-
- get :hello_world
- assert_response :success
- assert_equal "Decorated body", @response.body
- end
-
- def test_inheritance
- original_load_paths = ActionController::Base.view_paths
-
- self.class.class_eval %{
- class A < ActionController::Base; end
- class B < A; end
- class C < ActionController::Base; end
- }
-
- A.view_paths = ['a/path']
-
- assert_paths A, "a/path"
- assert_paths A, *B.view_paths
- assert_paths C, *original_load_paths
-
- C.view_paths = []
- assert_nothing_raised { C.append_view_path 'c/path' }
- assert_paths C, "c/path"
- end
-
- def test_lookup_context_accessor
- assert_equal ["test"], TestController.new.lookup_context.prefixes
- end
-end
diff --git a/actionpack/test/dispatch/debug_exceptions_test.rb b/actionpack/test/dispatch/debug_exceptions_test.rb
index ff0baccd76..3045a07ad6 100644
--- a/actionpack/test/dispatch/debug_exceptions_test.rb
+++ b/actionpack/test/dispatch/debug_exceptions_test.rb
@@ -128,6 +128,47 @@ class DebugExceptionsTest < ActionDispatch::IntegrationTest
assert_match(/ActionController::ParameterMissing/, body)
end
+ test "rescue with text error for xhr request" do
+ @app = DevelopmentApp
+ xhr_request_env = {'action_dispatch.show_exceptions' => true, 'HTTP_X_REQUESTED_WITH' => 'XMLHttpRequest'}
+
+ get "/", {}, xhr_request_env
+ assert_response 500
+ assert_no_match(/<body>/, body)
+ assert_equal response.content_type, "text/plain"
+ assert_match(/puke/, body)
+
+ get "/not_found", {}, xhr_request_env
+ assert_response 404
+ assert_no_match(/<body>/, body)
+ assert_equal response.content_type, "text/plain"
+ assert_match(/#{AbstractController::ActionNotFound.name}/, body)
+
+ get "/method_not_allowed", {}, xhr_request_env
+ assert_response 405
+ assert_no_match(/<body>/, body)
+ assert_equal response.content_type, "text/plain"
+ assert_match(/ActionController::MethodNotAllowed/, body)
+
+ get "/unknown_http_method", {}, xhr_request_env
+ assert_response 405
+ assert_no_match(/<body>/, body)
+ assert_equal response.content_type, "text/plain"
+ assert_match(/ActionController::UnknownHttpMethod/, body)
+
+ get "/bad_request", {}, xhr_request_env
+ assert_response 400
+ assert_no_match(/<body>/, body)
+ assert_equal response.content_type, "text/plain"
+ assert_match(/ActionController::BadRequest/, body)
+
+ get "/parameter_missing", {}, xhr_request_env
+ assert_response 400
+ assert_no_match(/<body>/, body)
+ assert_equal response.content_type, "text/plain"
+ assert_match(/ActionController::ParameterMissing/, body)
+ end
+
test "does not show filtered parameters" do
@app = DevelopmentApp
diff --git a/actionpack/test/dispatch/response_test.rb b/actionpack/test/dispatch/response_test.rb
index 2fbe7358f9..4501ea095c 100644
--- a/actionpack/test/dispatch/response_test.rb
+++ b/actionpack/test/dispatch/response_test.rb
@@ -212,6 +212,11 @@ class ResponseTest < ActiveSupport::TestCase
ActionDispatch::Response.default_headers = nil
end
end
+
+ test "respond_to? accepts include_private" do
+ assert_not @response.respond_to?(:method_missing)
+ assert @response.respond_to?(:method_missing, true)
+ end
end
class ResponseIntegrationTest < ActionDispatch::IntegrationTest
diff --git a/actionpack/test/fixtures/customers/_customer.html.erb b/actionpack/test/fixtures/customers/_customer.html.erb
deleted file mode 100644
index 483571e22a..0000000000
--- a/actionpack/test/fixtures/customers/_customer.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= greeting %>: <%= customer.name %> \ No newline at end of file
diff --git a/actionpack/test/fixtures/fun/games/_form.erb b/actionpack/test/fixtures/fun/games/_form.erb
deleted file mode 100644
index 01107f1cb2..0000000000
--- a/actionpack/test/fixtures/fun/games/_form.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= form.label :title %>
diff --git a/actionpack/test/fixtures/fun/games/hello_world.erb b/actionpack/test/fixtures/fun/games/hello_world.erb
deleted file mode 100644
index 1ebfbe2539..0000000000
--- a/actionpack/test/fixtures/fun/games/hello_world.erb
+++ /dev/null
@@ -1 +0,0 @@
-Living in a nested world \ No newline at end of file
diff --git a/actionpack/test/fixtures/good_customers/_good_customer.html.erb b/actionpack/test/fixtures/good_customers/_good_customer.html.erb
deleted file mode 100644
index a2d97ebc6d..0000000000
--- a/actionpack/test/fixtures/good_customers/_good_customer.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= greeting %> good customer: <%= good_customer.name %><%= good_customer_counter %> \ No newline at end of file
diff --git a/actionpack/test/fixtures/hello.html b/actionpack/test/fixtures/hello.html
deleted file mode 100644
index 6769dd60bd..0000000000
--- a/actionpack/test/fixtures/hello.html
+++ /dev/null
@@ -1 +0,0 @@
-Hello world! \ No newline at end of file
diff --git a/actionpack/test/fixtures/helpers/abc_helper.rb b/actionpack/test/fixtures/helpers/abc_helper.rb
index 7104ff3730..cf2774bb5f 100644
--- a/actionpack/test/fixtures/helpers/abc_helper.rb
+++ b/actionpack/test/fixtures/helpers/abc_helper.rb
@@ -1,5 +1,3 @@
module AbcHelper
def bare_a() end
- def bare_b() end
- def bare_c() end
end
diff --git a/actionpack/test/fixtures/helpers_missing/invalid_require_helper.rb b/actionpack/test/fixtures/helpers_missing/invalid_require_helper.rb
deleted file mode 100644
index d8801e54d5..0000000000
--- a/actionpack/test/fixtures/helpers_missing/invalid_require_helper.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-require 'very_invalid_file_name'
-
-module InvalidRequireHelper
-end
-
diff --git a/actionpack/test/fixtures/layout_tests/alt/layouts/alt.erb b/actionpack/test/fixtures/layout_tests/alt/layouts/alt.erb
deleted file mode 100644
index e69de29bb2..0000000000
--- a/actionpack/test/fixtures/layout_tests/alt/layouts/alt.erb
+++ /dev/null
diff --git a/actionpack/test/fixtures/layout_tests/layouts/controller_name_space/nested.erb b/actionpack/test/fixtures/layout_tests/layouts/controller_name_space/nested.erb
deleted file mode 100644
index 121bc079a1..0000000000
--- a/actionpack/test/fixtures/layout_tests/layouts/controller_name_space/nested.erb
+++ /dev/null
@@ -1 +0,0 @@
-controller_name_space/nested.erb <%= yield %> \ No newline at end of file
diff --git a/actionpack/test/fixtures/layout_tests/layouts/item.erb b/actionpack/test/fixtures/layout_tests/layouts/item.erb
deleted file mode 100644
index 60f04d77d5..0000000000
--- a/actionpack/test/fixtures/layout_tests/layouts/item.erb
+++ /dev/null
@@ -1 +0,0 @@
-item.erb <%= yield %> \ No newline at end of file
diff --git a/actionpack/test/fixtures/layout_tests/layouts/layout_test.erb b/actionpack/test/fixtures/layout_tests/layouts/layout_test.erb
deleted file mode 100644
index b74ac0840d..0000000000
--- a/actionpack/test/fixtures/layout_tests/layouts/layout_test.erb
+++ /dev/null
@@ -1 +0,0 @@
-layout_test.erb <%= yield %> \ No newline at end of file
diff --git a/actionpack/test/fixtures/layout_tests/layouts/multiple_extensions.html.erb b/actionpack/test/fixtures/layout_tests/layouts/multiple_extensions.html.erb
deleted file mode 100644
index 3b65e54f9c..0000000000
--- a/actionpack/test/fixtures/layout_tests/layouts/multiple_extensions.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-multiple_extensions.html.erb <%= yield %>
diff --git a/actionpack/test/fixtures/layout_tests/layouts/symlinked b/actionpack/test/fixtures/layout_tests/layouts/symlinked
deleted file mode 120000
index 0ddc1154ab..0000000000
--- a/actionpack/test/fixtures/layout_tests/layouts/symlinked
+++ /dev/null
@@ -1 +0,0 @@
-../../symlink_parent \ No newline at end of file
diff --git a/actionpack/test/fixtures/layout_tests/layouts/third_party_template_library.mab b/actionpack/test/fixtures/layout_tests/layouts/third_party_template_library.mab
deleted file mode 100644
index fcee620d82..0000000000
--- a/actionpack/test/fixtures/layout_tests/layouts/third_party_template_library.mab
+++ /dev/null
@@ -1 +0,0 @@
-layouts/third_party_template_library.mab \ No newline at end of file
diff --git a/actionpack/test/fixtures/layout_tests/views/goodbye.erb b/actionpack/test/fixtures/layout_tests/views/goodbye.erb
deleted file mode 100644
index 4ee911188e..0000000000
--- a/actionpack/test/fixtures/layout_tests/views/goodbye.erb
+++ /dev/null
@@ -1 +0,0 @@
-hello.erb \ No newline at end of file
diff --git a/actionpack/test/fixtures/layout_tests/views/hello.erb b/actionpack/test/fixtures/layout_tests/views/hello.erb
deleted file mode 100644
index 4ee911188e..0000000000
--- a/actionpack/test/fixtures/layout_tests/views/hello.erb
+++ /dev/null
@@ -1 +0,0 @@
-hello.erb \ No newline at end of file
diff --git a/actionpack/test/fixtures/override/test/hello_world.erb b/actionpack/test/fixtures/override/test/hello_world.erb
deleted file mode 100644
index 3e308d3d86..0000000000
--- a/actionpack/test/fixtures/override/test/hello_world.erb
+++ /dev/null
@@ -1 +0,0 @@
-Hello overridden world! \ No newline at end of file
diff --git a/actionpack/test/fixtures/override2/layouts/test/sub.erb b/actionpack/test/fixtures/override2/layouts/test/sub.erb
deleted file mode 100644
index 3863d5a8ef..0000000000
--- a/actionpack/test/fixtures/override2/layouts/test/sub.erb
+++ /dev/null
@@ -1 +0,0 @@
-layout: <%= yield %> \ No newline at end of file
diff --git a/actionpack/test/fixtures/quiz/questions/_question.html.erb b/actionpack/test/fixtures/quiz/questions/_question.html.erb
deleted file mode 100644
index fb4dcfee64..0000000000
--- a/actionpack/test/fixtures/quiz/questions/_question.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= question.name %> \ No newline at end of file
diff --git a/actionpack/test/lib/controller/fake_models.rb b/actionpack/test/lib/controller/fake_models.rb
index 82f38b5309..38abb16d08 100644
--- a/actionpack/test/lib/controller/fake_models.rb
+++ b/actionpack/test/lib/controller/fake_models.rb
@@ -28,12 +28,6 @@ class Customer < Struct.new(:name, :id)
end
end
-class BadCustomer < Customer
-end
-
-class GoodCustomer < Customer
-end
-
class ValidatedCustomer < Customer
def errors
if name =~ /Sikachu/i