1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
|
require File.dirname(__FILE__) + '/../abstract_unit'
unless defined?(Customer)
Customer = Struct.new("Customer", :name)
end
module Fun
class GamesController < ActionController::Base
def hello_world
end
end
end
class TestController < ActionController::Base
layout :determine_layout
def hello_world
end
def render_hello_world
render "test/hello_world"
end
def render_hello_world_from_variable
@person = "david"
render_text "hello #{@person}"
end
def render_action_hello_world
render_action "hello_world"
end
def render_text_hello_world
render_text "hello world"
end
def render_custom_code
render_text "hello world", "404 Moved"
end
def render_xml_hello
@name = "David"
render "test/hello"
end
def greeting
# let's just rely on the template
end
def layout_test
render_action "hello_world"
end
def builder_layout_test
render_action "hello"
end
def partials_list
@test_unchanged = 'hello'
@customers = [ Customer.new("david"), Customer.new("mary") ]
render_action "list"
end
def partial_only
render_partial
end
def hello_in_a_string
@customers = [ Customer.new("david"), Customer.new("mary") ]
render_text "How's there? #{render_to_string("test/list")}"
end
def accessing_params_in_template
render_template "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 rescue_action(e) raise end
private
def determine_layout
case action_name
when "layout_test": "layouts/standard"
when "builder_layout_test": "layouts/builder"
end
end
end
TestController.template_root = File.dirname(__FILE__) + "/../fixtures/"
Fun::GamesController.template_root = File.dirname(__FILE__) + "/../fixtures/"
class RenderTest < Test::Unit::TestCase
def setup
@request = ActionController::TestRequest.new
@response = ActionController::TestResponse.new
@request.host = "www.nextangle.com"
end
def test_simple_show
@request.action = "hello_world"
response = process_request
assert_equal "200 OK", response.headers["Status"]
assert_equal "test/hello_world", response.template.first_render
end
def test_do_with_render
@request.action = "render_hello_world"
assert_equal "test/hello_world", process_request.template.first_render
end
def test_do_with_render_from_variable
@request.action = "render_hello_world_from_variable"
assert_equal "hello david", process_request.body
end
def test_do_with_render_action
@request.action = "render_action_hello_world"
assert_equal "test/hello_world", process_request.template.first_render
end
def test_do_with_render_text
@request.action = "render_text_hello_world"
assert_equal "hello world", process_request.body
end
def test_do_with_render_custom_code
@request.action = "render_custom_code"
assert_equal "404 Moved", process_request.headers["Status"]
end
def test_attempt_to_access_object_method
@request.action = "clone"
assert_raises(ActionController::UnknownAction, "No action responded to [clone]") { process_request }
end
def test_private_methods
@request.action = "determine_layout"
assert_raises(ActionController::UnknownAction, "No action responded to [determine_layout]") { process_request }
end
def test_access_to_request_in_view
view_internals_old_value = ActionController::Base.view_controller_internals
ActionController::Base.view_controller_internals = false
ActionController::Base.protected_variables_cache = nil
@request.action = "hello_world"
response = process_request
assert_nil response.template.assigns["request"]
ActionController::Base.view_controller_internals = true
ActionController::Base.protected_variables_cache = nil
@request.action = "hello_world"
response = process_request
assert_kind_of ActionController::AbstractRequest, response.template.assigns["request"]
ActionController::Base.view_controller_internals = view_internals_old_value
ActionController::Base.protected_variables_cache = nil
end
def test_render_xml
@request.action = "render_xml_hello"
assert_equal "<html>\n <p>Hello David</p>\n<p>This is grand!</p>\n</html>\n", process_request.body
end
def test_render_xml_with_default
@request.action = "greeting"
assert_equal "<p>This is grand!</p>\n", process_request.body
end
def test_layout_rendering
@request.action = "layout_test"
assert_equal "<html>Hello world!</html>", process_request.body
end
def test_render_xml_with_layouts
@request.action = "builder_layout_test"
assert_equal "<wrapper>\n<html>\n <p>Hello </p>\n<p>This is grand!</p>\n</html>\n</wrapper>\n", process_request.body
end
# def test_partials_list
# @request.action = "partials_list"
# assert_equal "goodbyeHello: davidHello: marygoodbye\n", process_request.body
# end
def test_partial_only
@request.action = "partial_only"
assert_equal "only partial", process_request.body
end
def test_render_to_string
@request.action = "hello_in_a_string"
assert_equal "How's there? goodbyeHello: davidHello: marygoodbye\n", process_request.body
end
def test_nested_rendering
@request.action = "hello_world"
assert_equal "Living in a nested world", Fun::GamesController.process(@request, @response).body
end
def test_accessing_params_in_template
@request.action = "accessing_params_in_template"
@request.query_parameters[:name] = "David"
assert_equal "Hello: David", process_request.body
end
def test_accessing_local_assigns_in_inline_template
@request.action = "accessing_local_assigns_in_inline_template"
@request.query_parameters[:local_name] = "Local David"
assert_equal "Goodbye, Local David", process_request.body
end
private
def process_request
TestController.process(@request, @response)
end
end
|