1 require File.dirname(__FILE__) + '/../abstract_unit'
3 silence_warnings { ActionController::Helpers::HELPERS_DIR = File.dirname(__FILE__) + '/../fixtures/helpers' }
5 class TestController < ActionController::Base
6 attr_accessor :delegate_attr
7 def delegate_method() end
8 def rescue_action(e) raise end
12 class GamesController < ActionController::Base
13 def render_hello_world
14 render :inline => "hello: <%= stratego %>"
17 def rescue_action(e) raise end
20 class PdfController < ActionController::Base
22 render :inline => "test: <%= foobar %>"
25 def rescue_action(e) raise end
29 class ApplicationController < ActionController::Base
39 class HelperTest < Test::Unit::TestCase
41 # Increment symbol counter.
42 @symbol = (@@counter ||= 'A0').succ!.dup
44 # Generate new controller class.
45 controller_class_name = "Helper#{@symbol}Controller"
46 eval("class #{controller_class_name} < TestController; end")
47 @controller_class = self.class.const_get(controller_class_name)
49 # Generate new template class and assign to controller.
50 template_class_name = "Test#{@symbol}View"
51 eval("class #{template_class_name} < ActionView::Base; end")
52 @template_class = self.class.const_get(template_class_name)
53 @controller_class.template_class = @template_class
55 # Set default test helper.
56 self.test_helper = LocalAbcHelper
60 # Reset template class.
61 #ActionController::Base.template_class = ActionView::Base
65 def test_deprecated_helper
66 assert_equal expected_helper_methods, missing_methods
67 assert_nothing_raised { @controller_class.helper TestHelper }
68 assert_equal [], missing_methods
71 def test_declare_helper
73 self.test_helper = AbcHelper
74 assert_equal expected_helper_methods, missing_methods
75 assert_nothing_raised { @controller_class.helper :abc }
76 assert_equal [], missing_methods
79 def test_declare_missing_helper
80 assert_equal expected_helper_methods, missing_methods
81 assert_raise(MissingSourceFile) { @controller_class.helper :missing }
84 def test_declare_missing_file_from_helper
85 require 'broken_helper'
87 assert_nil(/\bbroken_helper\b/.match(e.to_s)[1])
91 assert_nothing_raised {
92 @controller_class.helper { def block_helper_method; end }
94 assert master_helper_methods.include?('block_helper_method')
97 def test_helper_block_include
98 assert_equal expected_helper_methods, missing_methods
99 assert_nothing_raised {
100 @controller_class.helper { include TestHelper }
102 assert [], missing_methods
105 def test_helper_method
106 assert_nothing_raised { @controller_class.helper_method :delegate_method }
107 assert master_helper_methods.include?('delegate_method')
111 assert_nothing_raised { @controller_class.helper_attr :delegate_attr }
112 assert master_helper_methods.include?('delegate_attr')
113 assert master_helper_methods.include?('delegate_attr=')
116 def test_helper_for_nested_controller
117 request = ActionController::TestRequest.new
118 response = ActionController::TestResponse.new
119 request.action = 'render_hello_world'
121 assert_equal 'hello: Iz guuut!', Fun::GamesController.process(request, response).body
124 def test_helper_for_acronym_controller
125 request = ActionController::TestRequest.new
126 response = ActionController::TestResponse.new
127 request.action = 'test'
129 assert_equal 'test: baz', Fun::PdfController.process(request, response).body
134 assert ApplicationController.master_helper_module.instance_methods.include?("bare_a")
136 # fun/games_helper.rb
137 assert ApplicationController.master_helper_module.instance_methods.include?("stratego")
140 assert ApplicationController.master_helper_module.instance_methods.include?("foobar")
144 def expected_helper_methods
145 TestHelper.instance_methods
148 def master_helper_methods
149 @controller_class.master_helper_module.instance_methods
153 expected_helper_methods - master_helper_methods
156 def test_helper=(helper_module)
157 silence_warnings { self.class.const_set('TestHelper', helper_module) }
162 class IsolatedHelpersTest < Test::Unit::TestCase
163 class A < ActionController::Base
165 render :inline => '<%= shout %>'
168 def rescue_action(e) raise end
172 helper { def shout; 'B' end }
175 render :inline => '<%= shout %>'
180 helper { def shout; 'C' end }
183 render :inline => '<%= shout %>'
188 @request = ActionController::TestRequest.new
189 @response = ActionController::TestResponse.new
190 @request.action = 'index'
194 assert_raise(NameError) { A.process(@request, @response) }
198 assert_equal 'B', B.process(@request, @response).body
202 assert_equal 'C', C.process(@request, @response).body