actionpack 1.12.5 → 1.13.0

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 (179) hide show
  1. data/CHANGELOG +517 -15
  2. data/MIT-LICENSE +1 -1
  3. data/README +18 -20
  4. data/Rakefile +7 -4
  5. data/examples/address_book_controller.rb +3 -3
  6. data/examples/blog_controller.cgi +3 -3
  7. data/examples/debate_controller.cgi +5 -5
  8. data/lib/action_controller.rb +2 -2
  9. data/lib/action_controller/assertions.rb +73 -311
  10. data/lib/action_controller/{deprecated_assertions.rb → assertions/deprecated_assertions.rb} +32 -8
  11. data/lib/action_controller/assertions/dom_assertions.rb +25 -0
  12. data/lib/action_controller/assertions/model_assertions.rb +12 -0
  13. data/lib/action_controller/assertions/response_assertions.rb +140 -0
  14. data/lib/action_controller/assertions/routing_assertions.rb +82 -0
  15. data/lib/action_controller/assertions/selector_assertions.rb +571 -0
  16. data/lib/action_controller/assertions/tag_assertions.rb +117 -0
  17. data/lib/action_controller/base.rb +334 -163
  18. data/lib/action_controller/benchmarking.rb +3 -6
  19. data/lib/action_controller/caching.rb +83 -22
  20. data/lib/action_controller/cgi_ext/cgi_ext.rb +0 -7
  21. data/lib/action_controller/cgi_ext/cgi_methods.rb +167 -173
  22. data/lib/action_controller/cgi_ext/raw_post_data_fix.rb +43 -22
  23. data/lib/action_controller/cgi_process.rb +50 -27
  24. data/lib/action_controller/components.rb +21 -25
  25. data/lib/action_controller/cookies.rb +10 -9
  26. data/lib/action_controller/{dependencies.rb → deprecated_dependencies.rb} +9 -27
  27. data/lib/action_controller/filters.rb +448 -225
  28. data/lib/action_controller/flash.rb +24 -20
  29. data/lib/action_controller/helpers.rb +2 -5
  30. data/lib/action_controller/integration.rb +40 -16
  31. data/lib/action_controller/layout.rb +11 -8
  32. data/lib/action_controller/macros/auto_complete.rb +3 -2
  33. data/lib/action_controller/macros/in_place_editing.rb +3 -2
  34. data/lib/action_controller/mime_responds.rb +41 -29
  35. data/lib/action_controller/mime_type.rb +68 -10
  36. data/lib/action_controller/pagination.rb +4 -3
  37. data/lib/action_controller/request.rb +22 -14
  38. data/lib/action_controller/rescue.rb +25 -22
  39. data/lib/action_controller/resources.rb +302 -0
  40. data/lib/action_controller/response.rb +20 -2
  41. data/lib/action_controller/response.rb.rej +17 -0
  42. data/lib/action_controller/routing.rb +1165 -567
  43. data/lib/action_controller/scaffolding.rb +30 -31
  44. data/lib/action_controller/session/active_record_store.rb +2 -0
  45. data/lib/action_controller/session/drb_store.rb +4 -0
  46. data/lib/action_controller/session/mem_cache_store.rb +4 -0
  47. data/lib/action_controller/session_management.rb +6 -9
  48. data/lib/action_controller/status_codes.rb +89 -0
  49. data/lib/action_controller/streaming.rb +6 -15
  50. data/lib/action_controller/templates/rescues/_request_and_response.rhtml +5 -5
  51. data/lib/action_controller/templates/rescues/diagnostics.rhtml +2 -2
  52. data/lib/action_controller/templates/rescues/routing_error.rhtml +4 -4
  53. data/lib/action_controller/templates/rescues/template_error.rhtml +1 -1
  54. data/lib/action_controller/templates/scaffolds/list.rhtml +1 -1
  55. data/lib/action_controller/test_process.rb +52 -30
  56. data/lib/action_controller/url_rewriter.rb +63 -29
  57. data/lib/action_controller/vendor/html-scanner/html/document.rb +1 -0
  58. data/lib/action_controller/vendor/html-scanner/html/node.rb +3 -4
  59. data/lib/action_controller/vendor/html-scanner/html/selector.rb +822 -0
  60. data/lib/action_controller/verification.rb +22 -11
  61. data/lib/action_pack.rb +1 -1
  62. data/lib/action_pack/version.rb +2 -2
  63. data/lib/action_view.rb +1 -1
  64. data/lib/action_view/base.rb +46 -43
  65. data/lib/action_view/compiled_templates.rb +1 -1
  66. data/lib/action_view/helpers/active_record_helper.rb +54 -17
  67. data/lib/action_view/helpers/asset_tag_helper.rb +97 -46
  68. data/lib/action_view/helpers/capture_helper.rb +1 -1
  69. data/lib/action_view/helpers/date_helper.rb +258 -136
  70. data/lib/action_view/helpers/debug_helper.rb +1 -1
  71. data/lib/action_view/helpers/deprecated_helper.rb +34 -0
  72. data/lib/action_view/helpers/form_helper.rb +75 -35
  73. data/lib/action_view/helpers/form_options_helper.rb +7 -5
  74. data/lib/action_view/helpers/form_tag_helper.rb +44 -6
  75. data/lib/action_view/helpers/java_script_macros_helper.rb +59 -46
  76. data/lib/action_view/helpers/javascript_helper.rb +71 -10
  77. data/lib/action_view/helpers/javascripts/controls.js +41 -23
  78. data/lib/action_view/helpers/javascripts/dragdrop.js +105 -76
  79. data/lib/action_view/helpers/javascripts/effects.js +293 -163
  80. data/lib/action_view/helpers/javascripts/prototype.js +897 -389
  81. data/lib/action_view/helpers/javascripts/prototype.js.rej +561 -0
  82. data/lib/action_view/helpers/number_helper.rb +111 -65
  83. data/lib/action_view/helpers/prototype_helper.rb +84 -109
  84. data/lib/action_view/helpers/scriptaculous_helper.rb +5 -0
  85. data/lib/action_view/helpers/tag_helper.rb +69 -16
  86. data/lib/action_view/helpers/text_helper.rb +149 -112
  87. data/lib/action_view/helpers/url_helper.rb +200 -107
  88. data/lib/action_view/template_error.rb +66 -42
  89. data/test/abstract_unit.rb +4 -2
  90. data/test/active_record_unit.rb +84 -56
  91. data/test/activerecord/active_record_assertions_test.rb +26 -18
  92. data/test/activerecord/active_record_store_test.rb +4 -36
  93. data/test/activerecord/pagination_test.rb +1 -6
  94. data/test/controller/action_pack_assertions_test.rb +230 -113
  95. data/test/controller/addresses_render_test.rb +2 -6
  96. data/test/controller/assert_select_test.rb +576 -0
  97. data/test/controller/base_test.rb +73 -3
  98. data/test/controller/caching_test.rb +228 -0
  99. data/test/controller/capture_test.rb +12 -10
  100. data/test/controller/cgi_test.rb +89 -12
  101. data/test/controller/components_test.rb +24 -2
  102. data/test/controller/content_type_test.rb +139 -0
  103. data/test/controller/controller_fixtures/app/controllers/admin/user_controller.rb +0 -0
  104. data/test/controller/controller_fixtures/app/controllers/user_controller.rb +0 -0
  105. data/test/controller/controller_fixtures/vendor/plugins/bad_plugin/lib/plugin_controller.rb +0 -0
  106. data/test/controller/cookie_test.rb +33 -25
  107. data/test/controller/deprecated_instance_variables_test.rb +48 -0
  108. data/test/controller/deprecation/deprecated_base_methods_test.rb +60 -0
  109. data/test/controller/fake_controllers.rb +0 -1
  110. data/test/controller/filters_test.rb +301 -16
  111. data/test/controller/flash_test.rb +19 -2
  112. data/test/controller/helper_test.rb +2 -2
  113. data/test/controller/integration_test.rb +154 -0
  114. data/test/controller/layout_test.rb +115 -1
  115. data/test/controller/mime_responds_test.rb +94 -0
  116. data/test/controller/mime_type_test.rb +9 -0
  117. data/test/controller/new_render_test.rb +161 -11
  118. data/test/controller/raw_post_test.rb +52 -15
  119. data/test/controller/redirect_test.rb +27 -14
  120. data/test/controller/render_test.rb +76 -29
  121. data/test/controller/request_test.rb +55 -4
  122. data/test/controller/resources_test.rb +274 -0
  123. data/test/controller/routing_test.rb +1533 -824
  124. data/test/controller/selector_test.rb +628 -0
  125. data/test/controller/send_file_test.rb +9 -1
  126. data/test/controller/session_management_test.rb +51 -0
  127. data/test/controller/test_test.rb +113 -29
  128. data/test/controller/url_rewriter_test.rb +86 -17
  129. data/test/controller/verification_test.rb +19 -17
  130. data/test/controller/webservice_test.rb +0 -7
  131. data/test/fixtures/content_type/render_default_content_types_for_respond_to.rhtml +1 -0
  132. data/test/fixtures/content_type/render_default_for_rhtml.rhtml +1 -0
  133. data/test/fixtures/content_type/render_default_for_rjs.rjs +1 -0
  134. data/test/fixtures/content_type/render_default_for_rxml.rxml +1 -0
  135. data/test/fixtures/deprecated_instance_variables/_cookies_ivar.rhtml +1 -0
  136. data/test/fixtures/deprecated_instance_variables/_cookies_method.rhtml +1 -0
  137. data/test/fixtures/deprecated_instance_variables/_flash_ivar.rhtml +1 -0
  138. data/test/fixtures/deprecated_instance_variables/_flash_method.rhtml +1 -0
  139. data/test/fixtures/deprecated_instance_variables/_headers_ivar.rhtml +1 -0
  140. data/test/fixtures/deprecated_instance_variables/_headers_method.rhtml +1 -0
  141. data/test/fixtures/deprecated_instance_variables/_params_ivar.rhtml +1 -0
  142. data/test/fixtures/deprecated_instance_variables/_params_method.rhtml +1 -0
  143. data/test/fixtures/deprecated_instance_variables/_request_ivar.rhtml +1 -0
  144. data/test/fixtures/deprecated_instance_variables/_request_method.rhtml +1 -0
  145. data/test/fixtures/deprecated_instance_variables/_response_ivar.rhtml +1 -0
  146. data/test/fixtures/deprecated_instance_variables/_response_method.rhtml +1 -0
  147. data/test/fixtures/deprecated_instance_variables/_session_ivar.rhtml +1 -0
  148. data/test/fixtures/deprecated_instance_variables/_session_method.rhtml +1 -0
  149. data/test/fixtures/multipart/binary_file +0 -0
  150. data/test/fixtures/public/javascripts/application.js +1 -0
  151. data/test/fixtures/test/_hello.rxml +1 -0
  152. data/test/fixtures/test/hello_world_container.rxml +3 -0
  153. data/test/fixtures/topic.rb +2 -2
  154. data/test/template/active_record_helper_test.rb +83 -12
  155. data/test/template/asset_tag_helper_test.rb +75 -95
  156. data/test/template/compiled_templates_test.rb +1 -0
  157. data/test/template/date_helper_test.rb +873 -181
  158. data/test/template/deprecated_helper_test.rb +36 -0
  159. data/test/template/deprecated_instance_variables_test.rb +43 -0
  160. data/test/template/form_helper_test.rb +77 -1
  161. data/test/template/form_options_helper_test.rb +4 -0
  162. data/test/template/form_tag_helper_test.rb +66 -2
  163. data/test/template/java_script_macros_helper_test.rb +4 -1
  164. data/test/template/javascript_helper_test.rb +29 -0
  165. data/test/template/number_helper_test.rb +63 -27
  166. data/test/template/prototype_helper_test.rb +77 -34
  167. data/test/template/tag_helper_test.rb +34 -6
  168. data/test/template/text_helper_test.rb +69 -34
  169. data/test/template/url_helper_test.rb +168 -16
  170. data/test/testing_sandbox.rb +7 -22
  171. metadata +66 -20
  172. data/filler.txt +0 -50
  173. data/lib/action_controller/code_generation.rb +0 -235
  174. data/lib/action_controller/vendor/xml_simple.rb +0 -1019
  175. data/test/controller/caching_filestore.rb +0 -74
  176. data/test/fixtures/application_root/app/controllers/a_class_that_contains_a_controller/poorly_placed_controller.rb +0 -7
  177. data/test/fixtures/application_root/app/controllers/module_that_holds_controllers/nested_controller.rb +0 -3
  178. data/test/fixtures/application_root/app/models/a_class_that_contains_a_controller.rb +0 -7
  179. data/test/fixtures/dont_load.rb +0 -3
@@ -0,0 +1,36 @@
1
+ require File.dirname(__FILE__) + '/../abstract_unit'
2
+
3
+ class DeprecatedHelperTest < Test::Unit::TestCase
4
+ include ActionView::Helpers::JavaScriptHelper
5
+ include ActionView::Helpers::CaptureHelper
6
+
7
+ def test_update_element_function
8
+ assert_deprecated 'update_element_function' do
9
+
10
+ assert_equal %($('myelement').innerHTML = 'blub';\n),
11
+ update_element_function('myelement', :content => 'blub')
12
+ assert_equal %($('myelement').innerHTML = 'blub';\n),
13
+ update_element_function('myelement', :action => :update, :content => 'blub')
14
+ assert_equal %($('myelement').innerHTML = '';\n),
15
+ update_element_function('myelement', :action => :empty)
16
+ assert_equal %(Element.remove('myelement');\n),
17
+ update_element_function('myelement', :action => :remove)
18
+
19
+ assert_equal %(new Insertion.Bottom('myelement','blub');\n),
20
+ update_element_function('myelement', :position => 'bottom', :content => 'blub')
21
+ assert_equal %(new Insertion.Bottom('myelement','blub');\n),
22
+ update_element_function('myelement', :action => :update, :position => :bottom, :content => 'blub')
23
+
24
+ _erbout = ""
25
+ assert_equal %($('myelement').innerHTML = 'test';\n),
26
+ update_element_function('myelement') { _erbout << "test" }
27
+
28
+ _erbout = ""
29
+ assert_equal %($('myelement').innerHTML = 'blockstuff';\n),
30
+ update_element_function('myelement', :content => 'paramstuff') { _erbout << "blockstuff" }
31
+
32
+ end
33
+ end
34
+
35
+ end
36
+
@@ -0,0 +1,43 @@
1
+ require File.dirname(__FILE__) + '/../abstract_unit'
2
+
3
+ class DeprecatedViewInstanceVariablesTest < Test::Unit::TestCase
4
+ class DeprecatedInstanceVariablesController < ActionController::Base
5
+ self.template_root = "#{File.dirname(__FILE__)}/../fixtures/"
6
+
7
+ def self.controller_path; 'deprecated_instance_variables' end
8
+
9
+ ActionController::Base::DEPRECATED_INSTANCE_VARIABLES.each do |var|
10
+ class_eval <<-end_eval
11
+ def old_#{var}_inline; render :inline => '<%= @#{var}.to_s %>' end
12
+ def new_#{var}_inline; render :inline => '<%= #{var}.to_s %>' end
13
+ def old_#{var}_partial; render :partial => '#{var}_ivar' end
14
+ def new_#{var}_partial; render :partial => '#{var}_method' end
15
+ end_eval
16
+ end
17
+
18
+ def rescue_action(e) raise e end
19
+ end
20
+
21
+ def setup
22
+ @request = ActionController::TestRequest.new
23
+ @response = ActionController::TestResponse.new
24
+ @controller = DeprecatedInstanceVariablesController.new
25
+ end
26
+
27
+ ActionController::Base::DEPRECATED_INSTANCE_VARIABLES.each do |var|
28
+ class_eval <<-end_eval, __FILE__, __LINE__
29
+ def test_old_#{var}_is_deprecated
30
+ assert_deprecated('@#{var}') { get :old_#{var}_inline }
31
+ end
32
+ def test_new_#{var}_isnt_deprecated
33
+ assert_not_deprecated { get :new_#{var}_inline }
34
+ end
35
+ def test_old_#{var}_partial_is_deprecated
36
+ assert_deprecated('@#{var}') { get :old_#{var}_partial }
37
+ end
38
+ def test_new_#{var}_partial_isnt_deprecated
39
+ assert_not_deprecated { get :new_#{var}_partial }
40
+ end
41
+ end_eval
42
+ end
43
+ end
@@ -120,6 +120,12 @@ class FormHelperTest < Test::Unit::TestCase
120
120
  radio_button("post", "secret", "1")
121
121
  )
122
122
  end
123
+
124
+ def test_radio_button_respects_passed_in_id
125
+ assert_dom_equal('<input checked="checked" id="foo" name="post[secret]" type="radio" value="1" />',
126
+ radio_button("post", "secret", "1", :id=>"foo")
127
+ )
128
+ end
123
129
 
124
130
  def test_text_area
125
131
  assert_dom_equal(
@@ -143,6 +149,13 @@ class FormHelperTest < Test::Unit::TestCase
143
149
  )
144
150
  end
145
151
 
152
+ def test_text_area_with_size_option
153
+ assert_dom_equal(
154
+ '<textarea cols="183" id="post_body" name="post[body]" rows="820">Back to the hill and over it again!</textarea>',
155
+ text_area("post", "body", :size => "183x820")
156
+ )
157
+ end
158
+
146
159
  def test_date_selects
147
160
  assert_dom_equal(
148
161
  '<textarea cols="40" id="post_body" name="post[body]" rows="20">Back to the hill and over it again!</textarea>',
@@ -232,6 +245,27 @@ class FormHelperTest < Test::Unit::TestCase
232
245
  assert_dom_equal expected, _erbout
233
246
  end
234
247
 
248
+ def test_form_for_with_method
249
+ _erbout = ''
250
+
251
+ form_for(:post, @post, :html => { :id => 'create-post', :method => :put }) do |f|
252
+ _erbout.concat f.text_field(:title)
253
+ _erbout.concat f.text_area(:body)
254
+ _erbout.concat f.check_box(:secret)
255
+ end
256
+
257
+ expected =
258
+ "<form action='http://www.example.com' id='create-post' method='post'>" +
259
+ "<div style='margin:0;padding:0'><input name='_method' type='hidden' value='put' /></div>" +
260
+ "<input name='post[title]' size='30' type='text' id='post_title' value='Hello World' />" +
261
+ "<textarea name='post[body]' id='post_body' rows='20' cols='40'>Back to the hill and over it again!</textarea>" +
262
+ "<input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' />" +
263
+ "<input name='post[secret]' type='hidden' value='0' />" +
264
+ "</form>"
265
+
266
+ assert_dom_equal expected, _erbout
267
+ end
268
+
235
269
  def test_form_for_without_object
236
270
  _erbout = ''
237
271
 
@@ -251,6 +285,24 @@ class FormHelperTest < Test::Unit::TestCase
251
285
 
252
286
  assert_dom_equal expected, _erbout
253
287
  end
288
+
289
+ def test_form_for_with_index
290
+ _erbout = ''
291
+
292
+ form_for("post[]", @post) do |f|
293
+ _erbout.concat f.text_field(:title)
294
+ _erbout.concat f.text_area(:body)
295
+ _erbout.concat f.check_box(:secret)
296
+ end
297
+
298
+ expected =
299
+ "<form action='http://www.example.com' method='post'>" +
300
+ "<input name='post[123][title]' size='30' type='text' id='post_title' value='Hello World' />" +
301
+ "<textarea name='post[123][body]' id='post_body' rows='20' cols='40'>Back to the hill and over it again!</textarea>" +
302
+ "<input name='post[123][secret]' checked='checked' type='checkbox' id='post_secret' value='1' />" +
303
+ "<input name='post[123][secret]' type='hidden' value='0' />" +
304
+ "</form>"
305
+ end
254
306
 
255
307
  def test_fields_for
256
308
  _erbout = ''
@@ -344,7 +396,31 @@ class FormHelperTest < Test::Unit::TestCase
344
396
 
345
397
  assert_dom_equal expected, _erbout
346
398
  end
347
-
399
+
400
+ def test_default_form_builder
401
+ old_default_form_builder, ActionView::Base.default_form_builder =
402
+ ActionView::Base.default_form_builder, LabelledFormBuilder
403
+
404
+ _erbout = ''
405
+ form_for(:post, @post) do |f|
406
+ _erbout.concat f.text_field(:title)
407
+ _erbout.concat f.text_area(:body)
408
+ _erbout.concat f.check_box(:secret)
409
+ end
410
+
411
+ expected =
412
+ "<form action='http://www.example.com' method='post'>" +
413
+ "<label for='title'>Title:</label> <input name='post[title]' size='30' type='text' id='post_title' value='Hello World' /><br/>" +
414
+ "<label for='body'>Body:</label> <textarea name='post[body]' id='post_body' rows='20' cols='40'>Back to the hill and over it again!</textarea><br/>" +
415
+ "<label for='secret'>Secret:</label> <input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' />" +
416
+ "<input name='post[secret]' type='hidden' value='0' /><br/>" +
417
+ "</form>"
418
+
419
+ assert_dom_equal expected, _erbout
420
+ ensure
421
+ ActionView::Base.default_form_builder = old_default_form_builder
422
+ end
423
+
348
424
  # Perhaps this test should be moved to prototype helper tests.
349
425
  def test_remote_form_for_with_labelled_builder
350
426
  self.extend ActionView::Helpers::PrototypeHelper
@@ -103,6 +103,10 @@ class FormOptionsHelperTest < Test::Unit::TestCase
103
103
  "<option value=\"ruby\" selected=\"selected\">ruby</option>\n<option value=\"rubyonrails\">rubyonrails</option>",
104
104
  options_for_select([ "ruby", "rubyonrails" ], "ruby")
105
105
  )
106
+ assert_dom_equal(
107
+ %(<option value="ruby" selected="selected">ruby</option>\n<option value="rubyonrails">rubyonrails</option>\n<option value=""></option>),
108
+ options_for_select([ "ruby", "rubyonrails", nil ], "ruby")
109
+ )
106
110
  end
107
111
 
108
112
  def test_hash_options_for_select
@@ -1,10 +1,11 @@
1
1
  require File.dirname(__FILE__) + '/../abstract_unit'
2
2
 
3
3
  class FormTagHelperTest < Test::Unit::TestCase
4
-
5
4
  include ActionView::Helpers::UrlHelper
6
5
  include ActionView::Helpers::TagHelper
7
6
  include ActionView::Helpers::FormTagHelper
7
+ include ActionView::Helpers::TextHelper
8
+ include ActionView::Helpers::CaptureHelper
8
9
 
9
10
  def setup
10
11
  @controller = Class.new do
@@ -33,6 +34,28 @@ class FormTagHelperTest < Test::Unit::TestCase
33
34
  assert_dom_equal expected, actual
34
35
  end
35
36
 
37
+ def test_form_tag_with_method
38
+ actual = form_tag({}, { :method => :put })
39
+ expected = %(<form action="http://www.example.com" method="post"><div style='margin:0;padding:0'><input type="hidden" name="_method" value="put" /></div>)
40
+ assert_dom_equal expected, actual
41
+ end
42
+
43
+ def test_form_tag_with_block
44
+ _erbout = ''
45
+ form_tag("http://example.com") { _erbout.concat "Hello world!" }
46
+
47
+ expected = %(<form action="http://www.example.com" method="post">Hello world!</form>)
48
+ assert_dom_equal expected, _erbout
49
+ end
50
+
51
+ def test_form_tag_with_block_and_method
52
+ _erbout = ''
53
+ form_tag("http://example.com", :method => :put) { _erbout.concat "Hello world!" }
54
+
55
+ expected = %(<form action="http://www.example.com" method="post"><div style='margin:0;padding:0'><input type="hidden" name="_method" value="put" /></div>Hello world!</form>)
56
+ assert_dom_equal expected, _erbout
57
+ end
58
+
36
59
  def test_hidden_field_tag
37
60
  actual = hidden_field_tag "id", 3
38
61
  expected = %(<input id="id" name="id" type="hidden" value="3" />)
@@ -47,8 +70,21 @@ class FormTagHelperTest < Test::Unit::TestCase
47
70
 
48
71
  def test_radio_button_tag
49
72
  actual = radio_button_tag "people", "david"
50
- expected = %(<input id="people" name="people" type="radio" value="david" />)
73
+ expected = %(<input id="people_david" name="people" type="radio" value="david" />)
74
+ assert_dom_equal expected, actual
75
+
76
+ actual = radio_button_tag("num_people", 5)
77
+ expected = %(<input id="num_people_5" name="num_people" type="radio" value="5" />)
78
+ assert_dom_equal expected, actual
79
+
80
+ actual = radio_button_tag("gender", "m") + radio_button_tag("gender", "f")
81
+ expected = %(<input id="gender_m" name="gender" type="radio" value="m" /><input id="gender_f" name="gender" type="radio" value="f" />)
82
+ assert_dom_equal expected, actual
83
+
84
+ actual = radio_button_tag("opinion", "-1") + radio_button_tag("opinion", "1")
85
+ expected = %(<input id="opinion_-1" name="opinion" type="radio" value="-1" /><input id="opinion_1" name="opinion" type="radio" value="1" />)
51
86
  assert_dom_equal expected, actual
87
+
52
88
  end
53
89
 
54
90
  def test_select_tag
@@ -106,3 +142,31 @@ class FormTagHelperTest < Test::Unit::TestCase
106
142
  end
107
143
  end
108
144
 
145
+ class DeprecatedFormTagHelperTest < Test::Unit::TestCase
146
+ include ActionView::Helpers::UrlHelper
147
+ include ActionView::Helpers::TagHelper
148
+ include ActionView::Helpers::FormTagHelper
149
+ include ActionView::Helpers::TextHelper
150
+ include ActionView::Helpers::CaptureHelper
151
+
152
+ def setup
153
+ @controller = Class.new do
154
+ def url_for(options, *parameters_for_method_reference)
155
+ "http://www.example.com"
156
+ end
157
+ end
158
+ @controller = @controller.new
159
+ end
160
+
161
+ def test_start_form_tag_deprecation
162
+ assert_deprecated /start_form_tag/ do
163
+ start_form_tag
164
+ end
165
+ end
166
+
167
+ def test_end_form_tag_deprecation
168
+ assert_deprecated /end_form_tag/ do
169
+ end_form_tag
170
+ end
171
+ end
172
+ end
@@ -38,6 +38,8 @@ class JavaScriptMacrosHelperTest < Test::Unit::TestCase
38
38
  assert_dom_equal %(<script type=\"text/javascript\">\n//<![CDATA[\nvar some_input_auto_completer = new Ajax.Autocompleter('some_input', 'some_input_auto_complete', 'http://www.example.com/autocomplete', {afterUpdateElement:function(element,value){alert('You have chosen: '+value)}})\n//]]>\n</script>),
39
39
  auto_complete_field("some_input", :url => { :action => "autocomplete" },
40
40
  :after_update_element => "function(element,value){alert('You have chosen: '+value)}");
41
+ assert_dom_equal %(<script type=\"text/javascript\">\n//<![CDATA[\nvar some_input_auto_completer = new Ajax.Autocompleter('some_input', 'some_input_auto_complete', 'http://www.example.com/autocomplete', {paramName:'huidriwusch'})\n//]]>\n</script>),
42
+ auto_complete_field("some_input", :url => { :action => "autocomplete" }, :param_name => 'huidriwusch');
41
43
  end
42
44
 
43
45
  def test_auto_complete_result
@@ -53,8 +55,9 @@ class JavaScriptMacrosHelperTest < Test::Unit::TestCase
53
55
  end
54
56
 
55
57
  def test_text_field_with_auto_complete
56
- assert_match "<style>",
58
+ assert_match %(<style type="text/css">),
57
59
  text_field_with_auto_complete(:message, :recipient)
60
+
58
61
  assert_dom_equal %(<input id=\"message_recipient\" name=\"message[recipient]\" size=\"30\" type=\"text\" /><div class=\"auto_complete\" id=\"message_recipient_auto_complete\"></div><script type=\"text/javascript\">\n//<![CDATA[\nvar message_recipient_auto_completer = new Ajax.Autocompleter('message_recipient', 'message_recipient_auto_complete', 'http://www.example.com/auto_complete_for_message_recipient', {})\n//]]>\n</script>),
59
62
  text_field_with_auto_complete(:message, :recipient, {}, :skip_style => true)
60
63
  end
@@ -19,6 +19,7 @@ class JavaScriptHelperTest < Test::Unit::TestCase
19
19
 
20
20
  def test_escape_javascript
21
21
  assert_equal %(This \\"thing\\" is really\\n netos\\'), escape_javascript(%(This "thing" is really\n netos'))
22
+ assert_equal %(backslash\\\\test), escape_javascript( %(backslash\\test) )
22
23
  end
23
24
 
24
25
  def test_link_to_function
@@ -31,8 +32,36 @@ class JavaScriptHelperTest < Test::Unit::TestCase
31
32
  link_to_function("Greeting", "alert('Hello world!')", :onclick => "confirm('Sanity!')")
32
33
  end
33
34
 
35
+ def test_link_to_function_with_rjs_block
36
+ html = link_to_function( "Greet me!" ) do |page|
37
+ page.replace_html 'header', "<h1>Greetings</h1>"
38
+ end
39
+ assert_dom_equal %(<a href="#" onclick="Element.update(&quot;header&quot;, &quot;&lt;h1&gt;Greetings&lt;/h1&gt;&quot;);; return false;">Greet me!</a>), html
40
+ end
41
+
42
+ def test_link_to_function_with_rjs_block_and_options
43
+ html = link_to_function( "Greet me!", :class => "updater" ) do |page|
44
+ page.replace_html 'header', "<h1>Greetings</h1>"
45
+ end
46
+ assert_dom_equal %(<a href="#" class="updater" onclick="Element.update(&quot;header&quot;, &quot;&lt;h1&gt;Greetings&lt;/h1&gt;&quot;);; return false;">Greet me!</a>), html
47
+ end
48
+
34
49
  def test_button_to_function
35
50
  assert_dom_equal %(<input type="button" onclick="alert('Hello world!');" value="Greeting" />),
36
51
  button_to_function("Greeting", "alert('Hello world!')")
37
52
  end
53
+
54
+ def test_button_to_function_with_rjs_block
55
+ html = button_to_function( "Greet me!" ) do |page|
56
+ page.replace_html 'header', "<h1>Greetings</h1>"
57
+ end
58
+ assert_dom_equal %(<input type="button" onclick="Element.update(&quot;header&quot;, &quot;&lt;h1&gt;Greetings&lt;/h1&gt;&quot;);;" value="Greet me!" />), html
59
+ end
60
+
61
+ def test_button_to_function_with_rjs_block_and_options
62
+ html = button_to_function( "Greet me!", :class => "greeter" ) do |page|
63
+ page.replace_html 'header', "<h1>Greetings</h1>"
64
+ end
65
+ assert_dom_equal %(<input type="button" class="greeter" onclick="Element.update(&quot;header&quot;, &quot;&lt;h1&gt;Greetings&lt;/h1&gt;&quot;);;" value="Greet me!" />), html
66
+ end
38
67
  end
@@ -1,18 +1,22 @@
1
- require 'test/unit'
1
+ require File.dirname(__FILE__) + '/../abstract_unit'
2
2
  require File.dirname(__FILE__) + '/../../lib/action_view/helpers/number_helper'
3
- require File.dirname(__FILE__) + '/../../../activesupport/lib/active_support/core_ext/hash' # for stringify_keys
4
- require File.dirname(__FILE__) + '/../../../activesupport/lib/active_support/core_ext/numeric' # for human_size
5
3
 
6
4
  class NumberHelperTest < Test::Unit::TestCase
7
5
  include ActionView::Helpers::NumberHelper
8
- include ActiveSupport::CoreExtensions::Hash
9
6
 
10
7
  def test_number_to_phone
11
- assert_equal("123-555-1234", number_to_phone(1235551234))
12
- assert_equal("(123) 555-1234", number_to_phone(1235551234, {:area_code => true}))
13
- assert_equal("123 555 1234", number_to_phone(1235551234, {:delimiter => " "}))
14
- assert_equal("(123) 555-1234 x 555", number_to_phone(1235551234, {:area_code => true, :extension => 555}))
15
- assert_equal("123-555-1234", number_to_phone(1235551234, :extension => " "))
8
+ assert_equal("800-555-1212", number_to_phone(8005551212))
9
+ assert_equal("(800) 555-1212", number_to_phone(8005551212, {:area_code => true}))
10
+ assert_equal("800 555 1212", number_to_phone(8005551212, {:delimiter => " "}))
11
+ assert_equal("(800) 555-1212 x 123", number_to_phone(8005551212, {:area_code => true, :extension => 123}))
12
+ assert_equal("800-555-1212", number_to_phone(8005551212, :extension => " "))
13
+ assert_equal("800-555-1212", number_to_phone("8005551212"))
14
+ assert_equal("+1-800-555-1212", number_to_phone(8005551212, :country_code => 1))
15
+ assert_equal("+18005551212", number_to_phone(8005551212, :country_code => 1, :delimiter => ''))
16
+ assert_equal("22-555-1212", number_to_phone(225551212))
17
+ assert_equal("+45-22-555-1212", number_to_phone(225551212, :country_code => 45))
18
+ assert_equal("x", number_to_phone("x"))
19
+ assert_nil number_to_phone(nil)
16
20
  end
17
21
 
18
22
  def test_number_to_currency
@@ -21,36 +25,68 @@ class NumberHelperTest < Test::Unit::TestCase
21
25
  assert_equal("$1,234,567,890", number_to_currency(1234567890.50, {:precision => 0}))
22
26
  assert_equal("$1,234,567,890.5", number_to_currency(1234567890.50, {:precision => 1}))
23
27
  assert_equal("&pound;1234567890,50", number_to_currency(1234567890.50, {:unit => "&pound;", :separator => ",", :delimiter => ""}))
28
+ assert_equal("$1,234,567,890.50", number_to_currency("1234567890.50"))
29
+ assert_equal("$x.", number_to_currency("x"))
30
+ assert_nil number_to_currency(nil)
24
31
  end
25
32
 
26
33
  def test_number_to_percentage
27
34
  assert_equal("100.000%", number_to_percentage(100))
28
35
  assert_equal("100%", number_to_percentage(100, {:precision => 0}))
29
36
  assert_equal("302.06%", number_to_percentage(302.0574, {:precision => 2}))
37
+ assert_equal("100.000%", number_to_percentage("100"))
38
+ assert_equal("x%", number_to_percentage("x"))
39
+ assert_nil number_to_percentage(nil)
30
40
  end
31
41
 
32
42
  def test_number_with_delimiter
33
43
  assert_equal("12,345,678", number_with_delimiter(12345678))
44
+ assert_equal("0", number_with_delimiter(0))
45
+ assert_equal("123", number_with_delimiter(123))
46
+ assert_equal("123,456", number_with_delimiter(123456))
47
+ assert_equal("123,456.78", number_with_delimiter(123456.78))
48
+ assert_equal("123,456.789", number_with_delimiter(123456.789))
49
+ assert_equal("123,456.78901", number_with_delimiter(123456.78901))
50
+ assert_equal("123,456,789.78901", number_with_delimiter(123456789.78901))
51
+ assert_equal("0.78901", number_with_delimiter(0.78901))
52
+ assert_equal("123,456.78", number_with_delimiter("123456.78"))
53
+ assert_equal("x", number_with_delimiter("x"))
54
+ assert_nil number_with_delimiter(nil)
34
55
  end
35
-
36
- def test_number_to_human_size
37
- assert_equal '0 Bytes', human_size(0)
38
- assert_equal '3 Bytes', human_size(3.14159265)
39
- assert_equal '123 Bytes', human_size(123.0)
40
- assert_equal '123 Bytes', human_size(123)
41
- assert_equal '1.2 KB', human_size(1234)
42
- assert_equal '12.1 KB', human_size(12345)
43
- assert_equal '1.2 MB', human_size(1234567)
44
- assert_equal '1.1 GB', human_size(1234567890)
45
- assert_equal '1.1 TB', human_size(1234567890123)
46
- assert_equal '444 KB', human_size(444.kilobytes)
47
- assert_equal '1023 MB', human_size(1023.megabytes)
48
- assert_equal '3 TB', human_size(3.terabytes)
49
- assert_nil human_size('x')
50
- assert_nil human_size(nil)
51
- end
52
-
56
+
53
57
  def test_number_with_precision
54
58
  assert_equal("111.235", number_with_precision(111.2346))
59
+ assert_equal("111.23", number_with_precision(111.2346, 2))
60
+ assert_equal("111.00", number_with_precision(111, 2))
61
+ assert_equal("111.235", number_with_precision("111.2346"))
62
+ assert_equal("x", number_with_precision("x"))
63
+ assert_nil number_with_precision(nil)
64
+ end
65
+
66
+ def test_number_to_human_size
67
+ assert_equal '0 Bytes', number_to_human_size(0)
68
+ assert_equal '1 Byte', number_to_human_size(1)
69
+ assert_equal '3 Bytes', number_to_human_size(3.14159265)
70
+ assert_equal '123 Bytes', number_to_human_size(123.0)
71
+ assert_equal '123 Bytes', number_to_human_size(123)
72
+ assert_equal '1.2 KB', number_to_human_size(1234)
73
+ assert_equal '12.1 KB', number_to_human_size(12345)
74
+ assert_equal '1.2 MB', number_to_human_size(1234567)
75
+ assert_equal '1.1 GB', number_to_human_size(1234567890)
76
+ assert_equal '1.1 TB', number_to_human_size(1234567890123)
77
+ assert_equal '444 KB', number_to_human_size(444.kilobytes)
78
+ assert_equal '1023 MB', number_to_human_size(1023.megabytes)
79
+ assert_equal '3 TB', number_to_human_size(3.terabytes)
80
+ assert_equal '1.18 MB', number_to_human_size(1234567, 2)
81
+ assert_equal '3 Bytes', number_to_human_size(3.14159265, 4)
82
+ assert_equal("123 Bytes", number_to_human_size("123"))
83
+ assert_nil number_to_human_size('x')
84
+ assert_nil number_to_human_size(nil)
85
+ end
86
+
87
+ def test_human_size_alias_is_deprecated
88
+ assert_deprecated 'human_size' do
89
+ assert_equal '0 Bytes', human_size(0)
90
+ end
55
91
  end
56
92
  end