actionpack 2.1.0 → 2.1.1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of actionpack might be problematic. Click here for more details.

Files changed (60) hide show
  1. data/CHANGELOG +17 -0
  2. data/Rakefile +10 -6
  3. data/lib/action_controller.rb +0 -0
  4. data/lib/action_controller/assertions/response_assertions.rb +1 -1
  5. data/lib/action_controller/assertions/selector_assertions.rb +26 -46
  6. data/lib/action_controller/base.rb +8 -4
  7. data/lib/action_controller/dispatcher.rb +1 -1
  8. data/lib/action_controller/filters.rb +194 -195
  9. data/lib/action_controller/polymorphic_routes.rb +25 -12
  10. data/lib/action_controller/record_identifier.rb +20 -13
  11. data/lib/action_controller/request.rb +9 -6
  12. data/lib/action_controller/request_profiler.rb +0 -0
  13. data/lib/action_controller/response.rb +0 -0
  14. data/lib/action_controller/routing.rb +5 -1
  15. data/lib/action_controller/routing/builder.rb +1 -2
  16. data/lib/action_controller/routing/segments.rb +1 -1
  17. data/lib/action_controller/templates/rescues/layout.erb +1 -1
  18. data/lib/action_controller/test_process.rb +4 -2
  19. data/lib/action_controller/vendor/html-scanner/html/document.rb +1 -1
  20. data/lib/action_controller/verification.rb +1 -1
  21. data/lib/action_pack/version.rb +1 -1
  22. data/lib/action_view/base.rb +7 -3
  23. data/lib/action_view/helpers/asset_tag_helper.rb +14 -11
  24. data/lib/action_view/helpers/date_helper.rb +3 -3
  25. data/lib/action_view/helpers/form_helper.rb +5 -1
  26. data/lib/action_view/helpers/form_options_helper.rb +2 -2
  27. data/lib/action_view/helpers/form_tag_helper.rb +5 -3
  28. data/lib/action_view/helpers/javascript_helper.rb +4 -4
  29. data/lib/action_view/helpers/prototype_helper.rb +7 -7
  30. data/lib/action_view/helpers/tag_helper.rb +4 -3
  31. data/lib/action_view/helpers/text_helper.rb +1 -1
  32. data/lib/action_view/helpers/url_helper.rb +3 -5
  33. data/lib/action_view/partial_template.rb +1 -1
  34. data/test/controller/action_pack_assertions_test.rb +24 -5
  35. data/test/controller/assert_select_test.rb +6 -1
  36. data/test/controller/base_test.rb +37 -1
  37. data/test/controller/cgi_test.rb +0 -0
  38. data/test/controller/dispatcher_test.rb +2 -2
  39. data/test/controller/html-scanner/document_test.rb +25 -0
  40. data/test/controller/integration_upload_test.rb +1 -1
  41. data/test/controller/new_render_test.rb +22 -3
  42. data/test/controller/polymorphic_routes_test.rb +33 -0
  43. data/test/controller/redirect_test.rb +0 -0
  44. data/test/controller/render_test.rb +1 -1
  45. data/test/controller/request_test.rb +6 -0
  46. data/test/controller/resources_test.rb +15 -17
  47. data/test/controller/routing_test.rb +22 -2
  48. data/test/controller/session/cookie_store_test.rb +0 -0
  49. data/test/controller/test_test.rb +11 -2
  50. data/test/controller/verification_test.rb +34 -17
  51. data/test/fixtures/test/render_file_from_template.html.erb +1 -0
  52. data/test/template/date_helper_test.rb +59 -8
  53. data/test/template/deprecated_erb_variable_test.rb +9 -0
  54. data/test/template/form_options_helper_test.rb +505 -514
  55. data/test/template/form_tag_helper_test.rb +13 -0
  56. data/test/template/javascript_helper_test.rb +7 -4
  57. data/test/template/prototype_helper_test.rb +14 -6
  58. data/test/template/text_helper_test.rb +1 -0
  59. data/test/template/url_helper_test.rb +11 -1
  60. metadata +8 -4
File without changes
@@ -103,7 +103,7 @@ class TestController < ActionController::Base
103
103
  def render_line_offset
104
104
  begin
105
105
  render :inline => '<% raise %>', :locals => {:foo => 'bar'}
106
- rescue => exc
106
+ rescue RuntimeError => exc
107
107
  end
108
108
  line = exc.backtrace.first
109
109
  render :text => line
@@ -12,6 +12,9 @@ class RequestTest < Test::Unit::TestCase
12
12
  @request.remote_addr = '1.2.3.4'
13
13
  assert_equal '1.2.3.4', @request.remote_ip
14
14
 
15
+ @request.remote_addr = '1.2.3.4,3.4.5.6'
16
+ assert_equal '1.2.3.4', @request.remote_ip
17
+
15
18
  @request.env['HTTP_CLIENT_IP'] = '2.3.4.5'
16
19
  assert_equal '1.2.3.4', @request.remote_ip
17
20
 
@@ -59,6 +62,9 @@ class RequestTest < Test::Unit::TestCase
59
62
  assert_match /HTTP_X_FORWARDED_FOR="9.9.9.9, 3.4.5.6, 10.0.0.1, 172.31.4.4"/, e.message
60
63
  assert_match /HTTP_CLIENT_IP="8.8.8.8"/, e.message
61
64
 
65
+ @request.env['HTTP_X_FORWARDED_FOR'] = '8.8.8.8, 9.9.9.9'
66
+ assert_equal '8.8.8.8', @request.remote_ip
67
+
62
68
  @request.env.delete 'HTTP_CLIENT_IP'
63
69
  @request.env.delete 'HTTP_X_FORWARDED_FOR'
64
70
  end
@@ -28,18 +28,16 @@ module Backoffice
28
28
  end
29
29
 
30
30
  class ResourcesTest < Test::Unit::TestCase
31
-
32
-
33
31
  # The assertions in these tests are incompatible with the hash method
34
32
  # optimisation. This could indicate user level problems
35
33
  def setup
36
34
  ActionController::Base.optimise_named_routes = false
37
35
  end
38
-
39
- def tear_down
36
+
37
+ def teardown
40
38
  ActionController::Base.optimise_named_routes = true
41
39
  end
42
-
40
+
43
41
  def test_should_arrange_actions
44
42
  resource = ActionController::Resources::Resource.new(:messages,
45
43
  :collection => { :rss => :get, :reorder => :post, :csv => :post },
@@ -159,14 +157,14 @@ class ResourcesTest < Test::Unit::TestCase
159
157
 
160
158
  def test_with_collection_actions_and_name_prefix
161
159
  actions = { 'a' => :get, 'b' => :put, 'c' => :post, 'd' => :delete }
162
-
160
+
163
161
  with_restful_routing :messages, :path_prefix => '/threads/:thread_id', :name_prefix => "thread_", :collection => actions do
164
162
  assert_restful_routes_for :messages, :path_prefix => 'threads/1/', :name_prefix => 'thread_', :options => { :thread_id => '1' } do |options|
165
163
  actions.each do |action, method|
166
164
  assert_recognizes(options.merge(:action => action), :path => "/threads/1/messages/#{action}", :method => method)
167
165
  end
168
166
  end
169
-
167
+
170
168
  assert_restful_named_routes_for :messages, :path_prefix => 'threads/1/', :name_prefix => 'thread_', :options => { :thread_id => '1' } do |options|
171
169
  actions.keys.each do |action|
172
170
  assert_named_route "/threads/1/messages/#{action}", "#{action}_thread_messages_path", :action => action
@@ -177,14 +175,14 @@ class ResourcesTest < Test::Unit::TestCase
177
175
 
178
176
  def test_with_collection_action_and_name_prefix_and_formatted
179
177
  actions = { 'a' => :get, 'b' => :put, 'c' => :post, 'd' => :delete }
180
-
178
+
181
179
  with_restful_routing :messages, :path_prefix => '/threads/:thread_id', :name_prefix => "thread_", :collection => actions do
182
180
  assert_restful_routes_for :messages, :path_prefix => 'threads/1/', :name_prefix => 'thread_', :options => { :thread_id => '1' } do |options|
183
181
  actions.each do |action, method|
184
182
  assert_recognizes(options.merge(:action => action, :format => 'xml'), :path => "/threads/1/messages/#{action}.xml", :method => method)
185
183
  end
186
184
  end
187
-
185
+
188
186
  assert_restful_named_routes_for :messages, :path_prefix => 'threads/1/', :name_prefix => 'thread_', :options => { :thread_id => '1' } do |options|
189
187
  actions.keys.each do |action|
190
188
  assert_named_route "/threads/1/messages/#{action}.xml", "formatted_#{action}_thread_messages_path", :action => action, :format => 'xml'
@@ -279,7 +277,7 @@ class ResourcesTest < Test::Unit::TestCase
279
277
  end
280
278
  end
281
279
  end
282
-
280
+
283
281
  def test_with_new_action_with_name_prefix
284
282
  with_restful_routing :messages, :new => { :preview => :post }, :path_prefix => '/threads/:thread_id', :name_prefix => 'thread_' do
285
283
  preview_options = {:action => 'preview', :thread_id => '1'}
@@ -293,7 +291,7 @@ class ResourcesTest < Test::Unit::TestCase
293
291
  end
294
292
  end
295
293
  end
296
-
294
+
297
295
  def test_with_formatted_new_action_with_name_prefix
298
296
  with_restful_routing :messages, :new => { :preview => :post }, :path_prefix => '/threads/:thread_id', :name_prefix => 'thread_' do
299
297
  preview_options = {:action => 'preview', :thread_id => '1', :format => 'xml'}
@@ -307,7 +305,7 @@ class ResourcesTest < Test::Unit::TestCase
307
305
  end
308
306
  end
309
307
  end
310
-
308
+
311
309
  def test_override_new_method
312
310
  with_restful_routing :messages do
313
311
  assert_restful_routes_for :messages do |options|
@@ -524,9 +522,9 @@ class ResourcesTest < Test::Unit::TestCase
524
522
  map.resources :messages, :collection => {:search => :get}, :new => {:preview => :any}, :name_prefix => 'thread_', :path_prefix => '/threads/:thread_id'
525
523
  map.resource :account, :member => {:login => :get}, :new => {:preview => :any}, :name_prefix => 'admin_', :path_prefix => '/admin'
526
524
  end
527
-
525
+
528
526
  action_separator = ActionController::Base.resource_action_separator
529
-
527
+
530
528
  assert_simply_restful_for :messages, :name_prefix => 'thread_', :path_prefix => 'threads/1/', :options => { :thread_id => '1' }
531
529
  assert_named_route "/threads/1/messages#{action_separator}search", "search_thread_messages_path", {}
532
530
  assert_named_route "/threads/1/messages/new", "new_thread_message_path", {}
@@ -623,7 +621,7 @@ class ResourcesTest < Test::Unit::TestCase
623
621
  assert_simply_restful_for :products, :controller => "backoffice/products"
624
622
  end
625
623
  end
626
-
624
+
627
625
  def test_nested_resources_using_namespace
628
626
  with_routing do |set|
629
627
  set.draw do |map|
@@ -795,7 +793,7 @@ class ResourcesTest < Test::Unit::TestCase
795
793
 
796
794
  yield options[:options] if block_given?
797
795
  end
798
-
796
+
799
797
  def assert_singleton_routes_for(singleton_name, options = {})
800
798
  options[:options] ||= {}
801
799
  options[:options][:controller] = options[:controller] || singleton_name.to_s.pluralize
@@ -855,7 +853,7 @@ class ResourcesTest < Test::Unit::TestCase
855
853
  actual = @controller.send(route, options) rescue $!.class.name
856
854
  assert_equal expected, actual, "Error on route: #{route}(#{options.inspect})"
857
855
  end
858
-
856
+
859
857
  def assert_resource_methods(expected, resource, action_method, method)
860
858
  assert_equal expected.length, resource.send("#{action_method}_methods")[method].size, "#{resource.send("#{action_method}_methods")[method].inspect}"
861
859
  expected.each do |action|
@@ -1983,6 +1983,26 @@ class RouteSetTest < Test::Unit::TestCase
1983
1983
  Object.send(:remove_const, :Api)
1984
1984
  end
1985
1985
 
1986
+ def test_namespace_with_path_prefix
1987
+ Object.const_set(:Api, Module.new { |m| m.const_set(:ProductsController, Class.new) })
1988
+
1989
+ set.draw do |map|
1990
+
1991
+ map.namespace 'api', :path_prefix => 'prefix' do |api|
1992
+ api.route 'inventory', :controller => "products", :action => 'inventory'
1993
+ end
1994
+
1995
+ end
1996
+
1997
+ request.path = "/prefix/inventory"
1998
+ request.method = :get
1999
+ assert_nothing_raised { set.recognize(request) }
2000
+ assert_equal("api/products", request.path_parameters[:controller])
2001
+ assert_equal("inventory", request.path_parameters[:action])
2002
+ ensure
2003
+ Object.send(:remove_const, :Api)
2004
+ end
2005
+
1986
2006
  def test_generate_finds_best_fit
1987
2007
  set.draw do |map|
1988
2008
  map.connect "/people", :controller => "people", :action => "index"
@@ -2392,10 +2412,10 @@ uses_mocha 'route loading' do
2392
2412
  end
2393
2413
 
2394
2414
  def test_adding_inflections_forces_reload
2395
- Inflector::Inflections.instance.expects(:uncountable).with('equipment')
2415
+ ActiveSupport::Inflector::Inflections.instance.expects(:uncountable).with('equipment')
2396
2416
  routes.expects(:reload!)
2397
2417
 
2398
- Inflector.inflections { |inflect| inflect.uncountable('equipment') }
2418
+ ActiveSupport::Inflector.inflections { |inflect| inflect.uncountable('equipment') }
2399
2419
  end
2400
2420
 
2401
2421
  def test_load_with_configuration
@@ -531,6 +531,11 @@ XML
531
531
  assert_equal content_type, file.content_type
532
532
  assert_equal file.path, file.local_path
533
533
  assert_equal expected, file.read
534
+
535
+ new_content_type = "new content_type"
536
+ file.content_type = new_content_type
537
+ assert_equal new_content_type, file.content_type
538
+
534
539
  end
535
540
 
536
541
  def test_test_uploaded_file_with_binary
@@ -571,7 +576,9 @@ XML
571
576
  get :redirect_to_same_controller
572
577
  assert_response :redirect
573
578
  assert_redirected_to :controller => 'test_test/test', :action => 'test_uri', :id => 5
574
- assert_nothing_raised { follow_redirect }
579
+ assert_deprecated 'follow_redirect' do
580
+ assert_nothing_raised { follow_redirect }
581
+ end
575
582
  end
576
583
  end
577
584
 
@@ -580,7 +587,9 @@ XML
580
587
  get :redirect_to_different_controller
581
588
  assert_response :redirect
582
589
  assert_redirected_to :controller => 'fail', :id => 5
583
- assert_raise(RuntimeError) { follow_redirect }
590
+ assert_raise(RuntimeError) do
591
+ assert_deprecated { follow_redirect }
592
+ end
584
593
  end
585
594
  end
586
595
 
@@ -21,10 +21,10 @@ class VerificationTest < Test::Unit::TestCase
21
21
 
22
22
  verify :only => :guarded_by_method, :method => :post,
23
23
  :redirect_to => { :action => "unguarded" }
24
-
24
+
25
25
  verify :only => :guarded_by_xhr, :xhr => true,
26
26
  :redirect_to => { :action => "unguarded" }
27
-
27
+
28
28
  verify :only => :guarded_by_not_xhr, :xhr => false,
29
29
  :redirect_to => { :action => "unguarded" }
30
30
 
@@ -39,10 +39,13 @@ class VerificationTest < Test::Unit::TestCase
39
39
 
40
40
  verify :only => :no_default_action, :params => "santa"
41
41
 
42
+ verify :only => :guarded_with_back, :method => :post,
43
+ :redirect_to => :back
44
+
42
45
  def guarded_one
43
46
  render :text => "#{params[:one]}"
44
47
  end
45
-
48
+
46
49
  def guarded_one_for_named_route_test
47
50
  render :text => "#{params[:one]}"
48
51
  end
@@ -70,11 +73,11 @@ class VerificationTest < Test::Unit::TestCase
70
73
  def guarded_by_method
71
74
  render :text => "#{request.method}"
72
75
  end
73
-
76
+
74
77
  def guarded_by_xhr
75
78
  render :text => "#{request.xhr?}"
76
79
  end
77
-
80
+
78
81
  def guarded_by_not_xhr
79
82
  render :text => "#{request.xhr?}"
80
83
  end
@@ -86,15 +89,19 @@ class VerificationTest < Test::Unit::TestCase
86
89
  def two_redirects
87
90
  render :nothing => true
88
91
  end
89
-
92
+
90
93
  def must_be_post
91
94
  render :text => "Was a post!"
92
95
  end
93
-
96
+
97
+ def guarded_with_back
98
+ render :text => "#{params[:one]}"
99
+ end
100
+
94
101
  def no_default_action
95
102
  # Will never run
96
103
  end
97
-
104
+
98
105
  protected
99
106
  def rescue_action(e) raise end
100
107
 
@@ -109,7 +116,17 @@ class VerificationTest < Test::Unit::TestCase
109
116
  @response = ActionController::TestResponse.new
110
117
  ActionController::Routing::Routes.add_named_route :foo, '/foo', :controller => 'test', :action => 'foo'
111
118
  end
112
-
119
+
120
+ def test_using_symbol_back_with_no_referrer
121
+ assert_raise(ActionController::RedirectBackError) { get :guarded_with_back }
122
+ end
123
+
124
+ def test_using_symbol_back_redirects_to_referrer
125
+ @request.env["HTTP_REFERER"] = "/foo"
126
+ get :guarded_with_back
127
+ assert_redirected_to '/foo'
128
+ end
129
+
113
130
  def test_no_deprecation_warning_for_named_route
114
131
  assert_not_deprecated do
115
132
  get :guarded_one_for_named_route_test, :two => "not one"
@@ -209,44 +226,44 @@ class VerificationTest < Test::Unit::TestCase
209
226
  get :guarded_by_method
210
227
  assert_redirected_to :action => "unguarded"
211
228
  end
212
-
229
+
213
230
  def test_guarded_by_xhr_with_prereqs
214
231
  xhr :post, :guarded_by_xhr
215
232
  assert_equal "true", @response.body
216
233
  end
217
-
234
+
218
235
  def test_guarded_by_xhr_without_prereqs
219
236
  get :guarded_by_xhr
220
237
  assert_redirected_to :action => "unguarded"
221
238
  end
222
-
239
+
223
240
  def test_guarded_by_not_xhr_with_prereqs
224
241
  get :guarded_by_not_xhr
225
242
  assert_equal "false", @response.body
226
243
  end
227
-
244
+
228
245
  def test_guarded_by_not_xhr_without_prereqs
229
246
  xhr :post, :guarded_by_not_xhr
230
247
  assert_redirected_to :action => "unguarded"
231
248
  end
232
-
249
+
233
250
  def test_guarded_post_and_calls_render_succeeds
234
251
  post :must_be_post
235
252
  assert_equal "Was a post!", @response.body
236
253
  end
237
-
254
+
238
255
  def test_default_failure_should_be_a_bad_request
239
256
  post :no_default_action
240
257
  assert_response :bad_request
241
258
  end
242
-
259
+
243
260
  def test_guarded_post_and_calls_render_fails_and_sets_allow_header
244
261
  get :must_be_post
245
262
  assert_response 405
246
263
  assert_equal "Must be post", @response.body
247
264
  assert_equal "POST", @response.headers["Allow"]
248
265
  end
249
-
266
+
250
267
  def test_second_redirect
251
268
  assert_nothing_raised { get :two_redirects }
252
269
  end
@@ -0,0 +1 @@
1
+ <%= render :file => @path %>
@@ -1157,6 +1157,32 @@ class DateHelperTest < ActionView::TestCase
1157
1157
  assert_dom_equal expected, date_select("post", "written_on", {}, :class => 'selector')
1158
1158
  end
1159
1159
 
1160
+ def test_date_select_with_html_options_within_fields_for
1161
+ @post = Post.new
1162
+ @post.written_on = Date.new(2004, 6, 15)
1163
+
1164
+ _erbout = ''
1165
+
1166
+ fields_for :post, @post do |f|
1167
+ _erbout.concat f.date_select(:written_on, {}, :class => 'selector')
1168
+ end
1169
+
1170
+ expected = %{<select id="post_written_on_1i" name="post[written_on(1i)]" class="selector">\n}
1171
+ expected << %{<option value="1999">1999</option>\n<option value="2000">2000</option>\n<option value="2001">2001</option>\n<option value="2002">2002</option>\n<option value="2003">2003</option>\n<option value="2004" selected="selected">2004</option>\n<option value="2005">2005</option>\n<option value="2006">2006</option>\n<option value="2007">2007</option>\n<option value="2008">2008</option>\n<option value="2009">2009</option>\n}
1172
+ expected << "</select>\n"
1173
+
1174
+ expected << %{<select id="post_written_on_2i" name="post[written_on(2i)]" class="selector">\n}
1175
+ expected << %{<option value="1">January</option>\n<option value="2">February</option>\n<option value="3">March</option>\n<option value="4">April</option>\n<option value="5">May</option>\n<option value="6" selected="selected">June</option>\n<option value="7">July</option>\n<option value="8">August</option>\n<option value="9">September</option>\n<option value="10">October</option>\n<option value="11">November</option>\n<option value="12">December</option>\n}
1176
+ expected << "</select>\n"
1177
+
1178
+ expected << %{<select id="post_written_on_3i" name="post[written_on(3i)]" class="selector">\n}
1179
+ expected << %{<option value="1">1</option>\n<option value="2">2</option>\n<option value="3">3</option>\n<option value="4">4</option>\n<option value="5">5</option>\n<option value="6">6</option>\n<option value="7">7</option>\n<option value="8">8</option>\n<option value="9">9</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15" selected="selected">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31">31</option>\n}
1180
+
1181
+ expected << "</select>\n"
1182
+
1183
+ assert_dom_equal expected, _erbout
1184
+ end
1185
+
1160
1186
  def test_time_select
1161
1187
  @post = Post.new
1162
1188
  @post.written_on = Time.local(2004, 6, 15, 15, 16, 35)
@@ -1218,6 +1244,31 @@ class DateHelperTest < ActionView::TestCase
1218
1244
  assert_dom_equal expected, time_select("post", "written_on", {}, :class => 'selector')
1219
1245
  end
1220
1246
 
1247
+ def test_time_select_with_html_options_within_fields_for
1248
+ @post = Post.new
1249
+ @post.written_on = Time.local(2004, 6, 15, 15, 16, 35)
1250
+
1251
+ _erbout = ''
1252
+
1253
+ fields_for :post, @post do |f|
1254
+ _erbout.concat f.time_select(:written_on, {}, :class => 'selector')
1255
+ end
1256
+
1257
+ expected = %{<input type="hidden" id="post_written_on_1i" name="post[written_on(1i)]" value="2004" />\n}
1258
+ expected << %{<input type="hidden" id="post_written_on_2i" name="post[written_on(2i)]" value="6" />\n}
1259
+ expected << %{<input type="hidden" id="post_written_on_3i" name="post[written_on(3i)]" value="15" />\n}
1260
+
1261
+ expected << %(<select id="post_written_on_4i" name="post[written_on(4i)]" class="selector">\n)
1262
+ 0.upto(23) { |i| expected << %(<option value="#{leading_zero_on_single_digits(i)}"#{' selected="selected"' if i == 15}>#{leading_zero_on_single_digits(i)}</option>\n) }
1263
+ expected << "</select>\n"
1264
+ expected << " : "
1265
+ expected << %(<select id="post_written_on_5i" name="post[written_on(5i)]" class="selector">\n)
1266
+ 0.upto(59) { |i| expected << %(<option value="#{leading_zero_on_single_digits(i)}"#{' selected="selected"' if i == 16}>#{leading_zero_on_single_digits(i)}</option>\n) }
1267
+ expected << "</select>\n"
1268
+
1269
+ assert_dom_equal expected, _erbout
1270
+ end
1271
+
1221
1272
  def test_datetime_select
1222
1273
  @post = Post.new
1223
1274
  @post.updated_at = Time.local(2004, 6, 15, 16, 35)
@@ -1283,23 +1334,23 @@ class DateHelperTest < ActionView::TestCase
1283
1334
  end
1284
1335
  end
1285
1336
 
1286
- def test_datetime_select_within_fields_for
1337
+ def test_datetime_select_with_html_options_within_fields_for
1287
1338
  @post = Post.new
1288
1339
  @post.updated_at = Time.local(2004, 6, 15, 16, 35)
1289
1340
 
1290
1341
  _erbout = ''
1291
1342
 
1292
1343
  fields_for :post, @post do |f|
1293
- _erbout.concat f.datetime_select(:updated_at)
1344
+ _erbout.concat f.datetime_select(:updated_at, {}, :class => 'selector')
1294
1345
  end
1295
1346
 
1296
- expected = "<select id='post_updated_at_1i' name='post[updated_at(1i)]'>\n<option value='1999'>1999</option>\n<option value='2000'>2000</option>\n<option value='2001'>2001</option>\n<option value='2002'>2002</option>\n<option value='2003'>2003</option>\n<option selected='selected' value='2004'>2004</option>\n<option value='2005'>2005</option>\n<option value='2006'>2006</option>\n<option value='2007'>2007</option>\n<option value='2008'>2008</option>\n<option value='2009'>2009</option>\n</select>\n"
1297
- expected << "<select id='post_updated_at_2i' name='post[updated_at(2i)]'>\n<option value='1'>January</option>\n<option value='2'>February</option>\n<option value='3'>March</option>\n<option value='4'>April</option>\n<option value='5'>May</option>\n<option selected='selected' value='6'>June</option>\n<option value='7'>July</option>\n<option value='8'>August</option>\n<option value='9'>September</option>\n<option value='10'>October</option>\n<option value='11'>November</option>\n<option value='12'>December</option>\n</select>\n"
1298
- expected << "<select id='post_updated_at_3i' name='post[updated_at(3i)]'>\n<option value='1'>1</option>\n<option value='2'>2</option>\n<option value='3'>3</option>\n<option value='4'>4</option>\n<option value='5'>5</option>\n<option value='6'>6</option>\n<option value='7'>7</option>\n<option value='8'>8</option>\n<option value='9'>9</option>\n<option value='10'>10</option>\n<option value='11'>11</option>\n<option value='12'>12</option>\n<option value='13'>13</option>\n<option value='14'>14</option>\n<option selected='selected' value='15'>15</option>\n<option value='16'>16</option>\n<option value='17'>17</option>\n<option value='18'>18</option>\n<option value='19'>19</option>\n<option value='20'>20</option>\n<option value='21'>21</option>\n<option value='22'>22</option>\n<option value='23'>23</option>\n<option value='24'>24</option>\n<option value='25'>25</option>\n<option value='26'>26</option>\n<option value='27'>27</option>\n<option value='28'>28</option>\n<option value='29'>29</option>\n<option value='30'>30</option>\n<option value='31'>31</option>\n</select>\n"
1299
- expected << " &mdash; <select id='post_updated_at_4i' name='post[updated_at(4i)]'>\n<option value='00'>00</option>\n<option value='01'>01</option>\n<option value='02'>02</option>\n<option value='03'>03</option>\n<option value='04'>04</option>\n<option value='05'>05</option>\n<option value='06'>06</option>\n<option value='07'>07</option>\n<option value='08'>08</option>\n<option value='09'>09</option>\n<option value='10'>10</option>\n<option value='11'>11</option>\n<option value='12'>12</option>\n<option value='13'>13</option>\n<option value='14'>14</option>\n<option value='15'>15</option>\n<option selected='selected' value='16'>16</option>\n<option value='17'>17</option>\n<option value='18'>18</option>\n<option value='19'>19</option>\n<option value='20'>20</option>\n<option value='21'>21</option>\n<option value='22'>22</option>\n<option value='23'>23</option>\n</select>\n"
1300
- expected << " : <select id='post_updated_at_5i' name='post[updated_at(5i)]'>\n<option value='00'>00</option>\n<option value='01'>01</option>\n<option value='02'>02</option>\n<option value='03'>03</option>\n<option value='04'>04</option>\n<option value='05'>05</option>\n<option value='06'>06</option>\n<option value='07'>07</option>\n<option value='08'>08</option>\n<option value='09'>09</option>\n<option value='10'>10</option>\n<option value='11'>11</option>\n<option value='12'>12</option>\n<option value='13'>13</option>\n<option value='14'>14</option>\n<option value='15'>15</option>\n<option value='16'>16</option>\n<option value='17'>17</option>\n<option value='18'>18</option>\n<option value='19'>19</option>\n<option value='20'>20</option>\n<option value='21'>21</option>\n<option value='22'>22</option>\n<option value='23'>23</option>\n<option value='24'>24</option>\n<option value='25'>25</option>\n<option value='26'>26</option>\n<option value='27'>27</option>\n<option value='28'>28</option>\n<option value='29'>29</option>\n<option value='30'>30</option>\n<option value='31'>31</option>\n<option value='32'>32</option>\n<option value='33'>33</option>\n<option value='34'>34</option>\n<option selected='selected' value='35'>35</option>\n<option value='36'>36</option>\n<option value='37'>37</option>\n<option value='38'>38</option>\n<option value='39'>39</option>\n<option value='40'>40</option>\n<option value='41'>41</option>\n<option value='42'>42</option>\n<option value='43'>43</option>\n<option value='44'>44</option>\n<option value='45'>45</option>\n<option value='46'>46</option>\n<option value='47'>47</option>\n<option value='48'>48</option>\n<option value='49'>49</option>\n<option value='50'>50</option>\n<option value='51'>51</option>\n<option value='52'>52</option>\n<option value='53'>53</option>\n<option value='54'>54</option>\n<option value='55'>55</option>\n<option value='56'>56</option>\n<option value='57'>57</option>\n<option value='58'>58</option>\n<option value='59'>59</option>\n</select>\n"
1347
+ expected = "<select id='post_updated_at_1i' name='post[updated_at(1i)]' class='selector'>\n<option value='1999'>1999</option>\n<option value='2000'>2000</option>\n<option value='2001'>2001</option>\n<option value='2002'>2002</option>\n<option value='2003'>2003</option>\n<option selected='selected' value='2004'>2004</option>\n<option value='2005'>2005</option>\n<option value='2006'>2006</option>\n<option value='2007'>2007</option>\n<option value='2008'>2008</option>\n<option value='2009'>2009</option>\n</select>\n"
1348
+ expected << "<select id='post_updated_at_2i' name='post[updated_at(2i)]' class='selector'>\n<option value='1'>January</option>\n<option value='2'>February</option>\n<option value='3'>March</option>\n<option value='4'>April</option>\n<option value='5'>May</option>\n<option selected='selected' value='6'>June</option>\n<option value='7'>July</option>\n<option value='8'>August</option>\n<option value='9'>September</option>\n<option value='10'>October</option>\n<option value='11'>November</option>\n<option value='12'>December</option>\n</select>\n"
1349
+ expected << "<select id='post_updated_at_3i' name='post[updated_at(3i)]' class='selector'>\n<option value='1'>1</option>\n<option value='2'>2</option>\n<option value='3'>3</option>\n<option value='4'>4</option>\n<option value='5'>5</option>\n<option value='6'>6</option>\n<option value='7'>7</option>\n<option value='8'>8</option>\n<option value='9'>9</option>\n<option value='10'>10</option>\n<option value='11'>11</option>\n<option value='12'>12</option>\n<option value='13'>13</option>\n<option value='14'>14</option>\n<option selected='selected' value='15'>15</option>\n<option value='16'>16</option>\n<option value='17'>17</option>\n<option value='18'>18</option>\n<option value='19'>19</option>\n<option value='20'>20</option>\n<option value='21'>21</option>\n<option value='22'>22</option>\n<option value='23'>23</option>\n<option value='24'>24</option>\n<option value='25'>25</option>\n<option value='26'>26</option>\n<option value='27'>27</option>\n<option value='28'>28</option>\n<option value='29'>29</option>\n<option value='30'>30</option>\n<option value='31'>31</option>\n</select>\n"
1350
+ expected << " &mdash; <select id='post_updated_at_4i' name='post[updated_at(4i)]' class='selector'>\n<option value='00'>00</option>\n<option value='01'>01</option>\n<option value='02'>02</option>\n<option value='03'>03</option>\n<option value='04'>04</option>\n<option value='05'>05</option>\n<option value='06'>06</option>\n<option value='07'>07</option>\n<option value='08'>08</option>\n<option value='09'>09</option>\n<option value='10'>10</option>\n<option value='11'>11</option>\n<option value='12'>12</option>\n<option value='13'>13</option>\n<option value='14'>14</option>\n<option value='15'>15</option>\n<option selected='selected' value='16'>16</option>\n<option value='17'>17</option>\n<option value='18'>18</option>\n<option value='19'>19</option>\n<option value='20'>20</option>\n<option value='21'>21</option>\n<option value='22'>22</option>\n<option value='23'>23</option>\n</select>\n"
1351
+ expected << " : <select id='post_updated_at_5i' name='post[updated_at(5i)]' class='selector'>\n<option value='00'>00</option>\n<option value='01'>01</option>\n<option value='02'>02</option>\n<option value='03'>03</option>\n<option value='04'>04</option>\n<option value='05'>05</option>\n<option value='06'>06</option>\n<option value='07'>07</option>\n<option value='08'>08</option>\n<option value='09'>09</option>\n<option value='10'>10</option>\n<option value='11'>11</option>\n<option value='12'>12</option>\n<option value='13'>13</option>\n<option value='14'>14</option>\n<option value='15'>15</option>\n<option value='16'>16</option>\n<option value='17'>17</option>\n<option value='18'>18</option>\n<option value='19'>19</option>\n<option value='20'>20</option>\n<option value='21'>21</option>\n<option value='22'>22</option>\n<option value='23'>23</option>\n<option value='24'>24</option>\n<option value='25'>25</option>\n<option value='26'>26</option>\n<option value='27'>27</option>\n<option value='28'>28</option>\n<option value='29'>29</option>\n<option value='30'>30</option>\n<option value='31'>31</option>\n<option value='32'>32</option>\n<option value='33'>33</option>\n<option value='34'>34</option>\n<option selected='selected' value='35'>35</option>\n<option value='36'>36</option>\n<option value='37'>37</option>\n<option value='38'>38</option>\n<option value='39'>39</option>\n<option value='40'>40</option>\n<option value='41'>41</option>\n<option value='42'>42</option>\n<option value='43'>43</option>\n<option value='44'>44</option>\n<option value='45'>45</option>\n<option value='46'>46</option>\n<option value='47'>47</option>\n<option value='48'>48</option>\n<option value='49'>49</option>\n<option value='50'>50</option>\n<option value='51'>51</option>\n<option value='52'>52</option>\n<option value='53'>53</option>\n<option value='54'>54</option>\n<option value='55'>55</option>\n<option value='56'>56</option>\n<option value='57'>57</option>\n<option value='58'>58</option>\n<option value='59'>59</option>\n</select>\n"
1301
1352
 
1302
- assert_dom_equal(expected, _erbout)
1353
+ assert_dom_equal expected, _erbout
1303
1354
  end
1304
1355
 
1305
1356
  def test_date_select_with_zero_value_and_no_start_year