actionpack 2.3.18 → 3.0.0.beta

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 (513) hide show
  1. data/CHANGELOG +15 -64
  2. data/README +39 -48
  3. data/lib/abstract_controller.rb +22 -0
  4. data/lib/abstract_controller/base.rb +191 -0
  5. data/lib/abstract_controller/callbacks.rb +113 -0
  6. data/lib/abstract_controller/collector.rb +30 -0
  7. data/lib/abstract_controller/compatibility.rb +18 -0
  8. data/lib/abstract_controller/helpers.rb +163 -0
  9. data/lib/abstract_controller/layouts.rb +413 -0
  10. data/lib/abstract_controller/localized_cache.rb +49 -0
  11. data/lib/abstract_controller/logger.rb +13 -0
  12. data/lib/abstract_controller/rendering.rb +238 -0
  13. data/lib/{action_controller → abstract_controller}/translation.rb +1 -1
  14. data/lib/action_controller.rb +68 -102
  15. data/lib/action_controller/base.rb +77 -1409
  16. data/lib/action_controller/caching.rb +58 -45
  17. data/lib/action_controller/caching/actions.rb +100 -114
  18. data/lib/action_controller/caching/fragments.rb +17 -19
  19. data/lib/action_controller/caching/pages.rb +12 -6
  20. data/lib/action_controller/caching/sweeping.rb +42 -0
  21. data/lib/action_controller/deprecated.rb +5 -0
  22. data/lib/action_controller/deprecated/dispatcher.rb +28 -0
  23. data/lib/action_controller/deprecated/integration_test.rb +2 -0
  24. data/lib/action_controller/deprecated/performance_test.rb +1 -0
  25. data/lib/action_controller/metal.rb +125 -0
  26. data/lib/action_controller/metal/compatibility.rb +141 -0
  27. data/lib/action_controller/metal/conditional_get.rb +86 -0
  28. data/lib/action_controller/metal/configuration.rb +28 -0
  29. data/lib/action_controller/metal/cookies.rb +17 -0
  30. data/lib/action_controller/metal/exceptions.rb +46 -0
  31. data/lib/action_controller/metal/flash.rb +28 -0
  32. data/lib/action_controller/metal/head.rb +33 -0
  33. data/lib/action_controller/metal/helpers.rb +116 -0
  34. data/lib/action_controller/metal/hide_actions.rb +50 -0
  35. data/lib/action_controller/{http_authentication.rb → metal/http_authentication.rb} +18 -15
  36. data/lib/action_controller/metal/instrumentation.rb +99 -0
  37. data/lib/action_controller/metal/mime_responds.rb +300 -0
  38. data/lib/action_controller/metal/rack_delegation.rb +35 -0
  39. data/lib/action_controller/metal/redirecting.rb +90 -0
  40. data/lib/action_controller/metal/renderers.rb +95 -0
  41. data/lib/action_controller/metal/rendering.rb +69 -0
  42. data/lib/action_controller/metal/request_forgery_protection.rb +115 -0
  43. data/lib/action_controller/metal/rescue.rb +13 -0
  44. data/lib/action_controller/metal/responder.rb +220 -0
  45. data/lib/action_controller/{session_management.rb → metal/session_management.rb} +5 -14
  46. data/lib/action_controller/{streaming.rb → metal/streaming.rb} +13 -12
  47. data/lib/action_controller/metal/testing.rb +42 -0
  48. data/lib/action_controller/metal/url_for.rb +157 -0
  49. data/lib/action_controller/{verification.rb → metal/verification.rb} +41 -41
  50. data/lib/action_controller/middleware.rb +38 -0
  51. data/lib/action_controller/polymorphic_routes.rb +20 -26
  52. data/lib/action_controller/railtie.rb +30 -0
  53. data/lib/action_controller/railties/subscriber.rb +63 -0
  54. data/lib/action_controller/record_identifier.rb +3 -16
  55. data/lib/action_controller/test_case.rb +156 -18
  56. data/lib/action_controller/url_rewriter.rb +47 -200
  57. data/lib/action_controller/vendor/html-scanner.rb +16 -12
  58. data/lib/action_controller/vendor/html-scanner/html/node.rb +1 -1
  59. data/lib/action_controller/vendor/html-scanner/html/sanitizer.rb +12 -9
  60. data/lib/action_dispatch.rb +88 -0
  61. data/lib/action_dispatch/http/cache.rb +123 -0
  62. data/lib/action_dispatch/http/filter_parameters.rb +98 -0
  63. data/lib/{action_controller → action_dispatch/http}/headers.rb +8 -8
  64. data/lib/action_dispatch/http/mime_negotiation.rb +101 -0
  65. data/lib/{action_controller → action_dispatch/http}/mime_type.rb +30 -11
  66. data/lib/{action_controller → action_dispatch/http}/mime_types.rb +5 -3
  67. data/lib/action_dispatch/http/parameters.rb +49 -0
  68. data/lib/action_dispatch/http/request.rb +223 -0
  69. data/lib/action_dispatch/http/response.rb +209 -0
  70. data/lib/action_dispatch/http/upload.rb +48 -0
  71. data/lib/action_dispatch/http/url.rb +129 -0
  72. data/lib/action_dispatch/middleware/callbacks.rb +50 -0
  73. data/lib/action_dispatch/middleware/cascade.rb +29 -0
  74. data/lib/action_dispatch/middleware/cookies.rb +216 -0
  75. data/lib/{action_controller → action_dispatch/middleware}/flash.rb +51 -90
  76. data/lib/action_dispatch/middleware/head.rb +18 -0
  77. data/lib/action_dispatch/middleware/params_parser.rb +78 -0
  78. data/lib/action_dispatch/middleware/rescue.rb +26 -0
  79. data/lib/action_dispatch/middleware/session/abstract_store.rb +209 -0
  80. data/lib/{action_controller → action_dispatch/middleware}/session/cookie_store.rb +56 -60
  81. data/lib/action_dispatch/middleware/session/mem_cache_store.rb +47 -0
  82. data/lib/action_dispatch/middleware/show_exceptions.rb +173 -0
  83. data/lib/{action_controller/middleware_stack.rb → action_dispatch/middleware/stack.rb} +23 -13
  84. data/lib/action_dispatch/middleware/static.rb +44 -0
  85. data/lib/{action_controller → action_dispatch/middleware}/templates/rescues/_request_and_response.erb +10 -3
  86. data/lib/{action_controller → action_dispatch/middleware}/templates/rescues/_trace.erb +4 -4
  87. data/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb +10 -0
  88. data/lib/{action_controller → action_dispatch/middleware}/templates/rescues/layout.erb +2 -2
  89. data/lib/{action_controller → action_dispatch/middleware}/templates/rescues/missing_template.erb +0 -0
  90. data/lib/{action_controller → action_dispatch/middleware}/templates/rescues/routing_error.erb +0 -0
  91. data/lib/{action_controller → action_dispatch/middleware}/templates/rescues/template_error.erb +3 -3
  92. data/lib/{action_controller → action_dispatch/middleware}/templates/rescues/unknown_action.erb +0 -0
  93. data/lib/action_dispatch/railtie.rb +15 -0
  94. data/lib/action_dispatch/routing.rb +217 -0
  95. data/lib/action_dispatch/routing/deprecated_mapper.rb +877 -0
  96. data/lib/action_dispatch/routing/mapper.rb +649 -0
  97. data/lib/action_dispatch/routing/route.rb +55 -0
  98. data/lib/action_dispatch/routing/route_set.rb +445 -0
  99. data/lib/action_dispatch/testing/assertions.rb +21 -0
  100. data/lib/action_dispatch/testing/assertions/dom.rb +37 -0
  101. data/lib/{action_controller/assertions/model_assertions.rb → action_dispatch/testing/assertions/model.rb} +2 -4
  102. data/lib/action_dispatch/testing/assertions/response.rb +154 -0
  103. data/lib/{action_controller/assertions/routing_assertions.rb → action_dispatch/testing/assertions/routing.rb} +72 -34
  104. data/lib/{action_controller/assertions/selector_assertions.rb → action_dispatch/testing/assertions/selector.rb} +14 -11
  105. data/lib/{action_controller/assertions/tag_assertions.rb → action_dispatch/testing/assertions/tag.rb} +25 -14
  106. data/lib/{action_controller → action_dispatch/testing}/integration.rb +173 -406
  107. data/lib/action_dispatch/testing/performance_test.rb +17 -0
  108. data/lib/action_dispatch/testing/test_process.rb +42 -0
  109. data/lib/action_dispatch/testing/test_request.rb +83 -0
  110. data/lib/action_dispatch/testing/test_response.rb +136 -0
  111. data/lib/action_pack/version.rb +3 -3
  112. data/lib/action_view.rb +29 -26
  113. data/lib/action_view/base.rb +101 -148
  114. data/lib/action_view/context.rb +44 -0
  115. data/lib/action_view/helpers.rb +6 -4
  116. data/lib/action_view/helpers/{active_record_helper.rb → active_model_helper.rb} +63 -63
  117. data/lib/action_view/helpers/asset_tag_helper.rb +166 -31
  118. data/lib/action_view/helpers/cache_helper.rb +1 -1
  119. data/lib/action_view/helpers/capture_helper.rb +40 -8
  120. data/lib/action_view/helpers/csrf_helper.rb +2 -4
  121. data/lib/action_view/helpers/date_helper.rb +14 -15
  122. data/lib/action_view/helpers/form_helper.rb +121 -24
  123. data/lib/action_view/helpers/form_options_helper.rb +26 -25
  124. data/lib/action_view/helpers/form_tag_helper.rb +42 -33
  125. data/lib/action_view/helpers/javascript_helper.rb +1 -109
  126. data/lib/action_view/helpers/number_helper.rb +4 -1
  127. data/lib/action_view/helpers/prototype_helper.rb +75 -499
  128. data/lib/action_view/helpers/raw_output_helper.rb +1 -1
  129. data/lib/action_view/helpers/record_tag_helper.rb +3 -3
  130. data/lib/action_view/helpers/sanitize_helper.rb +3 -2
  131. data/lib/action_view/helpers/scriptaculous_helper.rb +89 -53
  132. data/lib/action_view/helpers/tag_helper.rb +12 -13
  133. data/lib/action_view/helpers/text_helper.rb +33 -38
  134. data/lib/action_view/helpers/translation_helper.rb +11 -35
  135. data/lib/action_view/helpers/url_helper.rb +140 -134
  136. data/lib/action_view/locale/en.yml +34 -28
  137. data/lib/action_view/paths.rb +27 -24
  138. data/lib/action_view/railtie.rb +17 -0
  139. data/lib/action_view/railties/subscriber.rb +24 -0
  140. data/lib/action_view/{partials.rb → render/partials.rb} +161 -51
  141. data/lib/action_view/render/rendering.rb +117 -0
  142. data/lib/action_view/template.rb +88 -217
  143. data/lib/action_view/template/error.rb +105 -0
  144. data/lib/action_view/template/handler.rb +41 -0
  145. data/lib/action_view/template/handlers.rb +54 -0
  146. data/lib/action_view/{template_handlers → template/handlers}/builder.rb +6 -6
  147. data/lib/action_view/template/handlers/erb.rb +58 -0
  148. data/lib/action_view/{template_handlers → template/handlers}/rjs.rb +8 -3
  149. data/lib/action_view/template/resolver.rb +164 -0
  150. data/lib/action_view/template/text.rb +40 -0
  151. data/lib/action_view/test_case.rb +18 -18
  152. metadata +165 -420
  153. data/RUNNING_UNIT_TESTS +0 -24
  154. data/Rakefile +0 -158
  155. data/install.rb +0 -30
  156. data/lib/action_controller/assertions/dom_assertions.rb +0 -55
  157. data/lib/action_controller/assertions/response_assertions.rb +0 -169
  158. data/lib/action_controller/benchmarking.rb +0 -107
  159. data/lib/action_controller/caching/sweeper.rb +0 -45
  160. data/lib/action_controller/cgi_ext.rb +0 -15
  161. data/lib/action_controller/cgi_ext/cookie.rb +0 -112
  162. data/lib/action_controller/cgi_ext/query_extension.rb +0 -22
  163. data/lib/action_controller/cgi_ext/stdinput.rb +0 -24
  164. data/lib/action_controller/cgi_process.rb +0 -77
  165. data/lib/action_controller/cookies.rb +0 -197
  166. data/lib/action_controller/dispatcher.rb +0 -133
  167. data/lib/action_controller/failsafe.rb +0 -87
  168. data/lib/action_controller/filters.rb +0 -680
  169. data/lib/action_controller/helpers.rb +0 -225
  170. data/lib/action_controller/layout.rb +0 -286
  171. data/lib/action_controller/middlewares.rb +0 -14
  172. data/lib/action_controller/mime_responds.rb +0 -193
  173. data/lib/action_controller/params_parser.rb +0 -77
  174. data/lib/action_controller/performance_test.rb +0 -15
  175. data/lib/action_controller/rack_lint_patch.rb +0 -36
  176. data/lib/action_controller/reloader.rb +0 -54
  177. data/lib/action_controller/request.rb +0 -518
  178. data/lib/action_controller/request_forgery_protection.rb +0 -116
  179. data/lib/action_controller/rescue.rb +0 -183
  180. data/lib/action_controller/resources.rb +0 -682
  181. data/lib/action_controller/response.rb +0 -237
  182. data/lib/action_controller/routing.rb +0 -388
  183. data/lib/action_controller/routing/builder.rb +0 -197
  184. data/lib/action_controller/routing/optimisations.rb +0 -130
  185. data/lib/action_controller/routing/recognition_optimisation.rb +0 -167
  186. data/lib/action_controller/routing/route.rb +0 -265
  187. data/lib/action_controller/routing/route_set.rb +0 -503
  188. data/lib/action_controller/routing/routing_ext.rb +0 -49
  189. data/lib/action_controller/routing/segments.rb +0 -343
  190. data/lib/action_controller/session/abstract_store.rb +0 -276
  191. data/lib/action_controller/session/mem_cache_store.rb +0 -60
  192. data/lib/action_controller/status_codes.rb +0 -88
  193. data/lib/action_controller/string_coercion.rb +0 -29
  194. data/lib/action_controller/templates/rescues/diagnostics.erb +0 -11
  195. data/lib/action_controller/test_process.rb +0 -580
  196. data/lib/action_controller/uploaded_file.rb +0 -44
  197. data/lib/action_view/helpers/benchmark_helper.rb +0 -54
  198. data/lib/action_view/inline_template.rb +0 -19
  199. data/lib/action_view/reloadable_template.rb +0 -117
  200. data/lib/action_view/renderable.rb +0 -109
  201. data/lib/action_view/renderable_partial.rb +0 -53
  202. data/lib/action_view/template_error.rb +0 -99
  203. data/lib/action_view/template_handler.rb +0 -34
  204. data/lib/action_view/template_handlers.rb +0 -48
  205. data/lib/action_view/template_handlers/erb.rb +0 -25
  206. data/lib/actionpack.rb +0 -2
  207. data/test/abstract_unit.rb +0 -78
  208. data/test/active_record_unit.rb +0 -104
  209. data/test/activerecord/active_record_store_test.rb +0 -221
  210. data/test/activerecord/render_partial_with_record_identification_test.rb +0 -188
  211. data/test/adv_attr_test.rb +0 -20
  212. data/test/controller/action_pack_assertions_test.rb +0 -545
  213. data/test/controller/addresses_render_test.rb +0 -37
  214. data/test/controller/assert_select_test.rb +0 -735
  215. data/test/controller/base_test.rb +0 -217
  216. data/test/controller/benchmark_test.rb +0 -32
  217. data/test/controller/caching_test.rb +0 -743
  218. data/test/controller/capture_test.rb +0 -66
  219. data/test/controller/content_type_test.rb +0 -178
  220. data/test/controller/controller_fixtures/app/controllers/admin/user_controller.rb +0 -0
  221. data/test/controller/controller_fixtures/app/controllers/user_controller.rb +0 -0
  222. data/test/controller/controller_fixtures/vendor/plugins/bad_plugin/lib/plugin_controller.rb +0 -0
  223. data/test/controller/cookie_test.rb +0 -208
  224. data/test/controller/deprecation/deprecated_base_methods_test.rb +0 -32
  225. data/test/controller/dispatcher_test.rb +0 -144
  226. data/test/controller/dom_assertions_test.rb +0 -53
  227. data/test/controller/failsafe_test.rb +0 -60
  228. data/test/controller/fake_controllers.rb +0 -33
  229. data/test/controller/fake_models.rb +0 -19
  230. data/test/controller/filter_params_test.rb +0 -52
  231. data/test/controller/filters_test.rb +0 -885
  232. data/test/controller/flash_test.rb +0 -174
  233. data/test/controller/header_test.rb +0 -14
  234. data/test/controller/helper_test.rb +0 -224
  235. data/test/controller/html-scanner/cdata_node_test.rb +0 -15
  236. data/test/controller/html-scanner/document_test.rb +0 -148
  237. data/test/controller/html-scanner/node_test.rb +0 -89
  238. data/test/controller/html-scanner/sanitizer_test.rb +0 -300
  239. data/test/controller/html-scanner/tag_node_test.rb +0 -238
  240. data/test/controller/html-scanner/text_node_test.rb +0 -50
  241. data/test/controller/html-scanner/tokenizer_test.rb +0 -131
  242. data/test/controller/http_basic_authentication_test.rb +0 -113
  243. data/test/controller/http_digest_authentication_test.rb +0 -254
  244. data/test/controller/integration_test.rb +0 -526
  245. data/test/controller/layout_test.rb +0 -215
  246. data/test/controller/localized_templates_test.rb +0 -24
  247. data/test/controller/logging_test.rb +0 -46
  248. data/test/controller/middleware_stack_test.rb +0 -90
  249. data/test/controller/mime_responds_test.rb +0 -536
  250. data/test/controller/mime_type_test.rb +0 -93
  251. data/test/controller/output_escaping_test.rb +0 -19
  252. data/test/controller/polymorphic_routes_test.rb +0 -297
  253. data/test/controller/rack_test.rb +0 -308
  254. data/test/controller/record_identifier_test.rb +0 -139
  255. data/test/controller/redirect_test.rb +0 -285
  256. data/test/controller/reloader_test.rb +0 -125
  257. data/test/controller/render_test.rb +0 -1783
  258. data/test/controller/request/json_params_parsing_test.rb +0 -65
  259. data/test/controller/request/multipart_params_parsing_test.rb +0 -177
  260. data/test/controller/request/query_string_parsing_test.rb +0 -129
  261. data/test/controller/request/test_request_test.rb +0 -35
  262. data/test/controller/request/url_encoded_params_parsing_test.rb +0 -146
  263. data/test/controller/request/xml_params_parsing_test.rb +0 -103
  264. data/test/controller/request_forgery_protection_test.rb +0 -233
  265. data/test/controller/request_test.rb +0 -398
  266. data/test/controller/rescue_test.rb +0 -541
  267. data/test/controller/resources_test.rb +0 -1393
  268. data/test/controller/routing_test.rb +0 -2592
  269. data/test/controller/selector_test.rb +0 -628
  270. data/test/controller/send_file_test.rb +0 -171
  271. data/test/controller/session/abstract_store_test.rb +0 -64
  272. data/test/controller/session/cookie_store_test.rb +0 -354
  273. data/test/controller/session/mem_cache_store_test.rb +0 -187
  274. data/test/controller/session/test_session_test.rb +0 -58
  275. data/test/controller/test_test.rb +0 -700
  276. data/test/controller/translation_test.rb +0 -26
  277. data/test/controller/url_rewriter_test.rb +0 -395
  278. data/test/controller/verification_test.rb +0 -270
  279. data/test/controller/view_paths_test.rb +0 -141
  280. data/test/controller/webservice_test.rb +0 -273
  281. data/test/fixtures/_top_level_partial.html.erb +0 -1
  282. data/test/fixtures/_top_level_partial_only.erb +0 -1
  283. data/test/fixtures/addresses/list.erb +0 -1
  284. data/test/fixtures/alternate_helpers/foo_helper.rb +0 -3
  285. data/test/fixtures/bad_customers/_bad_customer.html.erb +0 -1
  286. data/test/fixtures/companies.yml +0 -24
  287. data/test/fixtures/company.rb +0 -10
  288. data/test/fixtures/content_type/render_default_content_types_for_respond_to.rhtml +0 -1
  289. data/test/fixtures/content_type/render_default_for_rhtml.rhtml +0 -1
  290. data/test/fixtures/content_type/render_default_for_rjs.rjs +0 -1
  291. data/test/fixtures/content_type/render_default_for_rxml.rxml +0 -1
  292. data/test/fixtures/customers/_customer.html.erb +0 -1
  293. data/test/fixtures/db_definitions/sqlite.sql +0 -49
  294. data/test/fixtures/developer.rb +0 -9
  295. data/test/fixtures/developers.yml +0 -21
  296. data/test/fixtures/developers/_developer.erb +0 -1
  297. data/test/fixtures/developers_projects.yml +0 -13
  298. data/test/fixtures/failsafe/500.html +0 -1
  299. data/test/fixtures/fun/games/_game.erb +0 -1
  300. data/test/fixtures/fun/games/hello_world.erb +0 -1
  301. data/test/fixtures/fun/serious/games/_game.erb +0 -1
  302. data/test/fixtures/functional_caching/_partial.erb +0 -3
  303. data/test/fixtures/functional_caching/formatted_fragment_cached.html.erb +0 -3
  304. data/test/fixtures/functional_caching/formatted_fragment_cached.js.rjs +0 -6
  305. data/test/fixtures/functional_caching/formatted_fragment_cached.xml.builder +0 -5
  306. data/test/fixtures/functional_caching/fragment_cached.html.erb +0 -2
  307. data/test/fixtures/functional_caching/html_fragment_cached_with_partial.html.erb +0 -1
  308. data/test/fixtures/functional_caching/inline_fragment_cached.html.erb +0 -2
  309. data/test/fixtures/functional_caching/js_fragment_cached_with_partial.js.rjs +0 -1
  310. data/test/fixtures/good_customers/_good_customer.html.erb +0 -1
  311. data/test/fixtures/helpers/abc_helper.rb +0 -5
  312. data/test/fixtures/helpers/fun/games_helper.rb +0 -3
  313. data/test/fixtures/helpers/fun/pdf_helper.rb +0 -3
  314. data/test/fixtures/layout_tests/abs_path_layout.rhtml +0 -1
  315. data/test/fixtures/layout_tests/alt/hello.rhtml +0 -1
  316. data/test/fixtures/layout_tests/alt/layouts/alt.rhtml +0 -0
  317. data/test/fixtures/layout_tests/layouts/controller_name_space/nested.rhtml +0 -1
  318. data/test/fixtures/layout_tests/layouts/item.rhtml +0 -1
  319. data/test/fixtures/layout_tests/layouts/layout_test.rhtml +0 -1
  320. data/test/fixtures/layout_tests/layouts/multiple_extensions.html.erb +0 -1
  321. data/test/fixtures/layout_tests/layouts/third_party_template_library.mab +0 -1
  322. data/test/fixtures/layout_tests/views/hello.rhtml +0 -1
  323. data/test/fixtures/layouts/_column.html.erb +0 -2
  324. data/test/fixtures/layouts/block_with_layout.erb +0 -3
  325. data/test/fixtures/layouts/builder.builder +0 -3
  326. data/test/fixtures/layouts/default_html.html.erb +0 -1
  327. data/test/fixtures/layouts/partial_with_layout.erb +0 -3
  328. data/test/fixtures/layouts/standard.erb +0 -1
  329. data/test/fixtures/layouts/talk_from_action.erb +0 -2
  330. data/test/fixtures/layouts/xhr.html.erb +0 -2
  331. data/test/fixtures/layouts/yield.erb +0 -2
  332. data/test/fixtures/localized/hello_world.de.html +0 -1
  333. data/test/fixtures/localized/hello_world.en.html +0 -1
  334. data/test/fixtures/mascot.rb +0 -3
  335. data/test/fixtures/mascots.yml +0 -4
  336. data/test/fixtures/mascots/_mascot.html.erb +0 -1
  337. data/test/fixtures/multipart/binary_file +0 -0
  338. data/test/fixtures/multipart/boundary_problem_file +0 -10
  339. data/test/fixtures/multipart/bracketed_param +0 -5
  340. data/test/fixtures/multipart/empty +0 -10
  341. data/test/fixtures/multipart/hello.txt +0 -1
  342. data/test/fixtures/multipart/large_text_file +0 -10
  343. data/test/fixtures/multipart/mixed_files +0 -0
  344. data/test/fixtures/multipart/mona_lisa.jpg +0 -0
  345. data/test/fixtures/multipart/none +0 -9
  346. data/test/fixtures/multipart/single_parameter +0 -5
  347. data/test/fixtures/multipart/text_file +0 -10
  348. data/test/fixtures/override/test/hello_world.erb +0 -1
  349. data/test/fixtures/override2/layouts/test/sub.erb +0 -1
  350. data/test/fixtures/post_test/layouts/post.html.erb +0 -1
  351. data/test/fixtures/post_test/layouts/super_post.iphone.erb +0 -1
  352. data/test/fixtures/post_test/post/index.html.erb +0 -1
  353. data/test/fixtures/post_test/post/index.iphone.erb +0 -1
  354. data/test/fixtures/post_test/super_post/index.html.erb +0 -1
  355. data/test/fixtures/post_test/super_post/index.iphone.erb +0 -1
  356. data/test/fixtures/project.rb +0 -3
  357. data/test/fixtures/projects.yml +0 -7
  358. data/test/fixtures/projects/_project.erb +0 -1
  359. data/test/fixtures/public/404.html +0 -1
  360. data/test/fixtures/public/500.da.html +0 -1
  361. data/test/fixtures/public/500.html +0 -1
  362. data/test/fixtures/public/absolute/test.css +0 -23
  363. data/test/fixtures/public/absolute/test.js +0 -63
  364. data/test/fixtures/public/images/rails.png +0 -0
  365. data/test/fixtures/public/javascripts/application.js +0 -1
  366. data/test/fixtures/public/javascripts/bank.js +0 -1
  367. data/test/fixtures/public/javascripts/controls.js +0 -1
  368. data/test/fixtures/public/javascripts/dragdrop.js +0 -1
  369. data/test/fixtures/public/javascripts/effects.js +0 -1
  370. data/test/fixtures/public/javascripts/prototype.js +0 -1
  371. data/test/fixtures/public/javascripts/robber.js +0 -1
  372. data/test/fixtures/public/javascripts/subdir/subdir.js +0 -1
  373. data/test/fixtures/public/javascripts/version.1.0.js +0 -1
  374. data/test/fixtures/public/stylesheets/bank.css +0 -1
  375. data/test/fixtures/public/stylesheets/robber.css +0 -1
  376. data/test/fixtures/public/stylesheets/subdir/subdir.css +0 -1
  377. data/test/fixtures/public/stylesheets/version.1.0.css +0 -1
  378. data/test/fixtures/quiz/questions/_question.html.erb +0 -1
  379. data/test/fixtures/replies.yml +0 -15
  380. data/test/fixtures/replies/_reply.erb +0 -1
  381. data/test/fixtures/reply.rb +0 -7
  382. data/test/fixtures/respond_to/all_types_with_layout.html.erb +0 -1
  383. data/test/fixtures/respond_to/all_types_with_layout.js.rjs +0 -1
  384. data/test/fixtures/respond_to/custom_constant_handling_without_block.mobile.erb +0 -1
  385. data/test/fixtures/respond_to/iphone_with_html_response_type.html.erb +0 -1
  386. data/test/fixtures/respond_to/iphone_with_html_response_type.iphone.erb +0 -1
  387. data/test/fixtures/respond_to/layouts/missing.html.erb +0 -1
  388. data/test/fixtures/respond_to/layouts/standard.html.erb +0 -1
  389. data/test/fixtures/respond_to/layouts/standard.iphone.erb +0 -1
  390. data/test/fixtures/respond_to/using_defaults.html.erb +0 -1
  391. data/test/fixtures/respond_to/using_defaults.js.rjs +0 -1
  392. data/test/fixtures/respond_to/using_defaults.xml.builder +0 -1
  393. data/test/fixtures/respond_to/using_defaults_with_type_list.html.erb +0 -1
  394. data/test/fixtures/respond_to/using_defaults_with_type_list.js.rjs +0 -1
  395. data/test/fixtures/respond_to/using_defaults_with_type_list.xml.builder +0 -1
  396. data/test/fixtures/scope/test/modgreet.erb +0 -1
  397. data/test/fixtures/session_autoload_test/session_autoload_test/foo.rb +0 -10
  398. data/test/fixtures/shared.html.erb +0 -1
  399. data/test/fixtures/symlink_parent/symlinked_layout.erb +0 -5
  400. data/test/fixtures/test/_counter.html.erb +0 -1
  401. data/test/fixtures/test/_customer.erb +0 -1
  402. data/test/fixtures/test/_customer_counter.erb +0 -1
  403. data/test/fixtures/test/_customer_counter_with_as.erb +0 -1
  404. data/test/fixtures/test/_customer_greeting.erb +0 -1
  405. data/test/fixtures/test/_customer_with_var.erb +0 -1
  406. data/test/fixtures/test/_form.erb +0 -1
  407. data/test/fixtures/test/_from_helper.erb +0 -1
  408. data/test/fixtures/test/_hash_greeting.erb +0 -1
  409. data/test/fixtures/test/_hash_object.erb +0 -2
  410. data/test/fixtures/test/_hello.builder +0 -1
  411. data/test/fixtures/test/_labelling_form.erb +0 -1
  412. data/test/fixtures/test/_layout_for_block_with_args.html.erb +0 -3
  413. data/test/fixtures/test/_layout_for_partial.html.erb +0 -3
  414. data/test/fixtures/test/_local_inspector.html.erb +0 -1
  415. data/test/fixtures/test/_one.html.erb +0 -1
  416. data/test/fixtures/test/_partial.erb +0 -1
  417. data/test/fixtures/test/_partial.html.erb +0 -1
  418. data/test/fixtures/test/_partial.js.erb +0 -1
  419. data/test/fixtures/test/_partial_for_use_in_layout.html.erb +0 -1
  420. data/test/fixtures/test/_partial_only.erb +0 -1
  421. data/test/fixtures/test/_partial_with_only_html_version.html.erb +0 -1
  422. data/test/fixtures/test/_person.erb +0 -2
  423. data/test/fixtures/test/_raise.html.erb +0 -1
  424. data/test/fixtures/test/_two.html.erb +0 -1
  425. data/test/fixtures/test/_utf8_partial.html.erb +0 -1
  426. data/test/fixtures/test/_utf8_partial_magic.html.erb +0 -2
  427. data/test/fixtures/test/action_talk_to_layout.erb +0 -2
  428. data/test/fixtures/test/array_translation.erb +0 -1
  429. data/test/fixtures/test/calling_partial_with_layout.html.erb +0 -1
  430. data/test/fixtures/test/capturing.erb +0 -4
  431. data/test/fixtures/test/content_for.erb +0 -2
  432. data/test/fixtures/test/content_for_concatenated.erb +0 -3
  433. data/test/fixtures/test/content_for_with_parameter.erb +0 -2
  434. data/test/fixtures/test/delete_with_js.rjs +0 -2
  435. data/test/fixtures/test/dont_pick_me +0 -1
  436. data/test/fixtures/test/dot.directory/render_file_with_ivar.erb +0 -1
  437. data/test/fixtures/test/enum_rjs_test.rjs +0 -6
  438. data/test/fixtures/test/formatted_html_erb.html.erb +0 -1
  439. data/test/fixtures/test/formatted_xml_erb.builder +0 -1
  440. data/test/fixtures/test/formatted_xml_erb.html.erb +0 -1
  441. data/test/fixtures/test/formatted_xml_erb.xml.erb +0 -1
  442. data/test/fixtures/test/greeting.erb +0 -1
  443. data/test/fixtures/test/greeting.js.rjs +0 -1
  444. data/test/fixtures/test/hello.builder +0 -4
  445. data/test/fixtures/test/hello_world.da.html.erb +0 -1
  446. data/test/fixtures/test/hello_world.erb +0 -1
  447. data/test/fixtures/test/hello_world.erb~ +0 -1
  448. data/test/fixtures/test/hello_world.pt-BR.html.erb +0 -1
  449. data/test/fixtures/test/hello_world_container.builder +0 -3
  450. data/test/fixtures/test/hello_world_from_rxml.builder +0 -4
  451. data/test/fixtures/test/hello_world_with_layout_false.erb +0 -1
  452. data/test/fixtures/test/hello_xml_world.builder +0 -11
  453. data/test/fixtures/test/hyphen-ated.erb +0 -1
  454. data/test/fixtures/test/implicit_content_type.atom.builder +0 -2
  455. data/test/fixtures/test/list.erb +0 -1
  456. data/test/fixtures/test/malformed/malformed.en.html.erb~ +0 -1
  457. data/test/fixtures/test/malformed/malformed.erb~ +0 -1
  458. data/test/fixtures/test/malformed/malformed.html.erb~ +0 -1
  459. data/test/fixtures/test/nested_layout.erb +0 -3
  460. data/test/fixtures/test/non_erb_block_content_for.builder +0 -4
  461. data/test/fixtures/test/potential_conflicts.erb +0 -4
  462. data/test/fixtures/test/render_explicit_html_template.js.rjs +0 -1
  463. data/test/fixtures/test/render_file_from_template.html.erb +0 -1
  464. data/test/fixtures/test/render_file_with_ivar.erb +0 -1
  465. data/test/fixtures/test/render_file_with_locals.erb +0 -1
  466. data/test/fixtures/test/render_implicit_html_template.js.rjs +0 -1
  467. data/test/fixtures/test/render_implicit_html_template_from_xhr_request.da.html.erb +0 -1
  468. data/test/fixtures/test/render_implicit_html_template_from_xhr_request.html.erb +0 -1
  469. data/test/fixtures/test/render_implicit_js_template_without_layout.js.erb +0 -1
  470. data/test/fixtures/test/render_to_string_test.erb +0 -1
  471. data/test/fixtures/test/scoped_array_translation.erb +0 -1
  472. data/test/fixtures/test/sub_template_raise.html.erb +0 -1
  473. data/test/fixtures/test/template.erb +0 -1
  474. data/test/fixtures/test/translation.erb +0 -1
  475. data/test/fixtures/test/update_element_with_capture.erb +0 -9
  476. data/test/fixtures/test/using_layout_around_block.html.erb +0 -1
  477. data/test/fixtures/test/using_layout_around_block_with_args.html.erb +0 -1
  478. data/test/fixtures/test/utf8.html.erb +0 -4
  479. data/test/fixtures/test/utf8_magic.html.erb +0 -5
  480. data/test/fixtures/test/utf8_magic_with_bare_partial.html.erb +0 -5
  481. data/test/fixtures/topic.rb +0 -3
  482. data/test/fixtures/topics.yml +0 -22
  483. data/test/fixtures/topics/_topic.html.erb +0 -1
  484. data/test/template/active_record_helper_i18n_test.rb +0 -51
  485. data/test/template/active_record_helper_test.rb +0 -302
  486. data/test/template/asset_tag_helper_test.rb +0 -770
  487. data/test/template/atom_feed_helper_test.rb +0 -315
  488. data/test/template/benchmark_helper_test.rb +0 -86
  489. data/test/template/compiled_templates_test.rb +0 -204
  490. data/test/template/date_helper_i18n_test.rb +0 -121
  491. data/test/template/date_helper_test.rb +0 -2603
  492. data/test/template/erb_util_test.rb +0 -36
  493. data/test/template/form_helper_test.rb +0 -1447
  494. data/test/template/form_options_helper_i18n_test.rb +0 -27
  495. data/test/template/form_options_helper_test.rb +0 -811
  496. data/test/template/form_tag_helper_test.rb +0 -356
  497. data/test/template/javascript_helper_test.rb +0 -106
  498. data/test/template/number_helper_i18n_test.rb +0 -69
  499. data/test/template/number_helper_test.rb +0 -132
  500. data/test/template/prototype_helper_test.rb +0 -639
  501. data/test/template/raw_output_helper_test.rb +0 -21
  502. data/test/template/record_tag_helper_test.rb +0 -58
  503. data/test/template/render_test.rb +0 -329
  504. data/test/template/sanitize_helper_test.rb +0 -57
  505. data/test/template/scriptaculous_helper_test.rb +0 -90
  506. data/test/template/tag_helper_test.rb +0 -98
  507. data/test/template/template_test.rb +0 -32
  508. data/test/template/test_test.rb +0 -54
  509. data/test/template/text_helper_test.rb +0 -601
  510. data/test/template/translation_helper_test.rb +0 -95
  511. data/test/template/url_helper_test.rb +0 -641
  512. data/test/testing_sandbox.rb +0 -15
  513. data/test/view/test_case_test.rb +0 -176
@@ -1,36 +0,0 @@
1
- require 'abstract_unit'
2
-
3
- class ErbUtilTest < Test::Unit::TestCase
4
- include ERB::Util
5
-
6
- ERB::Util::HTML_ESCAPE.each do |given, expected|
7
- define_method "test_html_escape_#{expected.gsub /\W/, ''}" do
8
- assert_equal expected, html_escape(given)
9
- end
10
-
11
- unless given == '"' || given == "'"
12
- define_method "test_json_escape_#{expected.gsub /\W/, ''}" do
13
- assert_equal ERB::Util::JSON_ESCAPE[given], json_escape(given)
14
- end
15
- end
16
- end
17
-
18
- def test_html_escape_is_html_safe
19
- escaped = h("<p>")
20
- assert_equal "&lt;p&gt;", escaped
21
- assert escaped.html_safe?
22
- end
23
-
24
- def test_html_escape_passes_html_escpe_unmodified
25
- escaped = h("<p>".html_safe)
26
- assert_equal "<p>", escaped
27
- assert escaped.html_safe?
28
- end
29
-
30
- def test_rest_in_ascii
31
- (0..127).to_a.map(&:chr).each do |chr|
32
- next if %w(& " < > ').include?(chr)
33
- assert_equal chr, html_escape(chr)
34
- end
35
- end
36
- end
@@ -1,1447 +0,0 @@
1
- require 'abstract_unit'
2
-
3
- silence_warnings do
4
- Post = Struct.new(:title, :author_name, :body, :secret, :written_on, :cost)
5
- Post.class_eval do
6
- alias_method :title_before_type_cast, :title unless respond_to?(:title_before_type_cast)
7
- alias_method :body_before_type_cast, :body unless respond_to?(:body_before_type_cast)
8
- alias_method :author_name_before_type_cast, :author_name unless respond_to?(:author_name_before_type_cast)
9
- alias_method :secret?, :secret
10
-
11
- def new_record=(boolean)
12
- @new_record = boolean
13
- end
14
-
15
- def new_record?
16
- @new_record
17
- end
18
-
19
- attr_accessor :author
20
- def author_attributes=(attributes); end
21
-
22
- attr_accessor :comments
23
- def comments_attributes=(attributes); end
24
-
25
- attr_accessor :tags
26
- def tags_attributes=(attributes); end
27
- end
28
-
29
- class Comment
30
- attr_reader :id
31
- attr_reader :post_id
32
- def initialize(id = nil, post_id = nil); @id, @post_id = id, post_id end
33
- def save; @id = 1; @post_id = 1 end
34
- def new_record?; @id.nil? end
35
- def to_param; @id; end
36
- def name
37
- @id.nil? ? "new #{self.class.name.downcase}" : "#{self.class.name.downcase} ##{@id}"
38
- end
39
-
40
- attr_accessor :relevances
41
- def relevances_attributes=(attributes); end
42
-
43
- end
44
-
45
- class Tag
46
- attr_reader :id
47
- attr_reader :post_id
48
- def initialize(id = nil, post_id = nil); @id, @post_id = id, post_id end
49
- def save; @id = 1; @post_id = 1 end
50
- def new_record?; @id.nil? end
51
- def to_param; @id; end
52
- def value
53
- @id.nil? ? "new #{self.class.name.downcase}" : "#{self.class.name.downcase} ##{@id}"
54
- end
55
-
56
- attr_accessor :relevances
57
- def relevances_attributes=(attributes); end
58
-
59
- end
60
-
61
- class CommentRelevance
62
- attr_reader :id
63
- attr_reader :comment_id
64
- def initialize(id = nil, comment_id = nil); @id, @comment_id = id, comment_id end
65
- def save; @id = 1; @comment_id = 1 end
66
- def new_record?; @id.nil? end
67
- def to_param; @id; end
68
- def value
69
- @id.nil? ? "new #{self.class.name.downcase}" : "#{self.class.name.downcase} ##{@id}"
70
- end
71
- end
72
-
73
- class TagRelevance
74
- attr_reader :id
75
- attr_reader :tag_id
76
- def initialize(id = nil, tag_id = nil); @id, @tag_id = id, tag_id end
77
- def save; @id = 1; @tag_id = 1 end
78
- def new_record?; @id.nil? end
79
- def to_param; @id; end
80
- def value
81
- @id.nil? ? "new #{self.class.name.downcase}" : "#{self.class.name.downcase} ##{@id}"
82
- end
83
- end
84
-
85
- class Author < Comment
86
- attr_accessor :post
87
- def post_attributes=(attributes); end
88
- end
89
- end
90
-
91
- class FormHelperTest < ActionView::TestCase
92
- tests ActionView::Helpers::FormHelper
93
-
94
- def setup
95
- super
96
-
97
- # Create "label" locale for testing I18n label helpers
98
- I18n.backend.store_translations 'label', {
99
- :helpers => {
100
- :label => {
101
- :post => {
102
- :body => "Write entire text here"
103
- }
104
- }
105
- }
106
- }
107
-
108
- @post = Post.new
109
- @comment = Comment.new
110
- def @post.errors()
111
- Class.new{
112
- def on(field); "can't be empty" if field == "author_name"; end
113
- def empty?() false end
114
- def count() 1 end
115
- def full_messages() [ "Author name can't be empty" ] end
116
- }.new
117
- end
118
- def @post.id; 123; end
119
- def @post.id_before_type_cast; 123; end
120
- def @post.to_param; '123'; end
121
-
122
- @post.title = "Hello World"
123
- @post.author_name = ""
124
- @post.body = "Back to the hill and over it again!"
125
- @post.secret = 1
126
- @post.written_on = Date.new(2004, 6, 15)
127
-
128
- def Post.human_attribute_name(attribute)
129
- attribute.to_s == "cost" ? "Total cost" : attribute.to_s.humanize
130
- end
131
-
132
- @controller = Class.new do
133
- attr_reader :url_for_options
134
- def url_for(options)
135
- @url_for_options = options
136
- "http://www.example.com"
137
- end
138
- end
139
- @controller = @controller.new
140
- end
141
-
142
- def test_label
143
- assert_dom_equal('<label for="post_title">Title</label>', label("post", "title"))
144
- assert_dom_equal('<label for="post_title">The title goes here</label>', label("post", "title", "The title goes here"))
145
- assert_dom_equal(
146
- '<label class="title_label" for="post_title">Title</label>',
147
- label("post", "title", nil, :class => 'title_label')
148
- )
149
- assert_dom_equal('<label for="post_secret">Secret?</label>', label("post", "secret?"))
150
- end
151
-
152
- def test_label_with_symbols
153
- assert_dom_equal('<label for="post_title">Title</label>', label(:post, :title))
154
- assert_dom_equal('<label for="post_secret">Secret?</label>', label(:post, :secret?))
155
- end
156
-
157
- def test_label_with_locales_strings
158
- old_locale, I18n.locale = I18n.locale, :label
159
- assert_dom_equal('<label for="post_body">Write entire text here</label>', label("post", "body"))
160
- ensure
161
- I18n.locale = old_locale
162
- end
163
-
164
- def test_label_with_human_attribute_name
165
- old_locale, I18n.locale = I18n.locale, :label
166
- assert_dom_equal('<label for="post_cost">Total cost</label>', label(:post, :cost))
167
- ensure
168
- I18n.locale = old_locale
169
- end
170
-
171
- def test_label_with_locales_symbols
172
- old_locale, I18n.locale = I18n.locale, :label
173
- assert_dom_equal('<label for="post_body">Write entire text here</label>', label(:post, :body))
174
- ensure
175
- I18n.locale = old_locale
176
- end
177
-
178
- def test_label_with_for_attribute_as_symbol
179
- assert_dom_equal('<label for="my_for">Title</label>', label(:post, :title, nil, :for => "my_for"))
180
- end
181
-
182
- def test_label_with_for_attribute_as_string
183
- assert_dom_equal('<label for="my_for">Title</label>', label(:post, :title, nil, "for" => "my_for"))
184
- end
185
-
186
- def test_label_with_id_attribute_as_symbol
187
- assert_dom_equal('<label for="post_title" id="my_id">Title</label>', label(:post, :title, nil, :id => "my_id"))
188
- end
189
-
190
- def test_label_with_id_attribute_as_string
191
- assert_dom_equal('<label for="post_title" id="my_id">Title</label>', label(:post, :title, nil, "id" => "my_id"))
192
- end
193
-
194
- def test_label_with_for_and_id_attributes_as_symbol
195
- assert_dom_equal('<label for="my_for" id="my_id">Title</label>', label(:post, :title, nil, :for => "my_for", :id => "my_id"))
196
- end
197
-
198
- def test_label_with_for_and_id_attributes_as_string
199
- assert_dom_equal('<label for="my_for" id="my_id">Title</label>', label(:post, :title, nil, "for" => "my_for", "id" => "my_id"))
200
- end
201
-
202
- def test_label_for_radio_buttons_with_value
203
- assert_dom_equal('<label for="post_title_great_title">The title goes here</label>', label("post", "title", "The title goes here", :value => "great_title"))
204
- assert_dom_equal('<label for="post_title_great_title">The title goes here</label>', label("post", "title", "The title goes here", :value => "great title"))
205
- end
206
-
207
- def test_text_field
208
- assert_dom_equal(
209
- '<input id="post_title" name="post[title]" size="30" type="text" value="Hello World" />', text_field("post", "title")
210
- )
211
- assert_dom_equal(
212
- '<input id="post_title" name="post[title]" size="30" type="password" value="Hello World" />', password_field("post", "title")
213
- )
214
- assert_dom_equal(
215
- '<input id="person_name" name="person[name]" size="30" type="password" />', password_field("person", "name")
216
- )
217
- end
218
-
219
- def test_text_field_with_escapes
220
- @post.title = "<b>Hello World</b>"
221
- assert_dom_equal(
222
- '<input id="post_title" name="post[title]" size="30" type="text" value="&lt;b&gt;Hello World&lt;/b&gt;" />', text_field("post", "title")
223
- )
224
- end
225
-
226
- def test_text_field_with_html_entities
227
- @post.title = "The HTML Entity for & is &amp;"
228
- assert_dom_equal(
229
- '<input id="post_title" name="post[title]" size="30" type="text" value="The HTML Entity for &amp; is &amp;amp;" />',
230
- text_field("post", "title")
231
- )
232
- end
233
-
234
- def test_text_field_with_options
235
- expected = '<input id="post_title" name="post[title]" size="35" type="text" value="Hello World" />'
236
- assert_dom_equal expected, text_field("post", "title", "size" => 35)
237
- assert_dom_equal expected, text_field("post", "title", :size => 35)
238
- end
239
-
240
- def test_text_field_assuming_size
241
- expected = '<input id="post_title" maxlength="35" name="post[title]" size="35" type="text" value="Hello World" />'
242
- assert_dom_equal expected, text_field("post", "title", "maxlength" => 35)
243
- assert_dom_equal expected, text_field("post", "title", :maxlength => 35)
244
- end
245
-
246
- def test_text_field_removing_size
247
- expected = '<input id="post_title" maxlength="35" name="post[title]" type="text" value="Hello World" />'
248
- assert_dom_equal expected, text_field("post", "title", "maxlength" => 35, "size" => nil)
249
- assert_dom_equal expected, text_field("post", "title", :maxlength => 35, :size => nil)
250
- end
251
-
252
- def test_text_field_doesnt_change_param_values
253
- object_name = 'post[]'
254
- expected = '<input id="post_123_title" name="post[123][title]" size="30" type="text" value="Hello World" />'
255
- assert_equal expected, text_field(object_name, "title")
256
- assert_equal object_name, "post[]"
257
- end
258
-
259
- def test_hidden_field
260
- assert_dom_equal '<input id="post_title" name="post[title]" type="hidden" value="Hello World" />',
261
- hidden_field("post", "title")
262
- assert_dom_equal '<input id="post_secret" name="post[secret]" type="hidden" value="1" />',
263
- hidden_field("post", "secret?")
264
- end
265
-
266
- def test_hidden_field_with_escapes
267
- @post.title = "<b>Hello World</b>"
268
- assert_dom_equal '<input id="post_title" name="post[title]" type="hidden" value="&lt;b&gt;Hello World&lt;/b&gt;" />',
269
- hidden_field("post", "title")
270
- end
271
-
272
- def test_text_field_with_options
273
- assert_dom_equal '<input id="post_title" name="post[title]" type="hidden" value="Something Else" />',
274
- hidden_field("post", "title", :value => "Something Else")
275
- end
276
-
277
- def test_check_box
278
- assert_dom_equal(
279
- '<input name="post[secret]" type="hidden" value="0" /><input checked="checked" id="post_secret" name="post[secret]" type="checkbox" value="1" />',
280
- check_box("post", "secret")
281
- )
282
- @post.secret = 0
283
- assert_dom_equal(
284
- '<input name="post[secret]" type="hidden" value="0" /><input id="post_secret" name="post[secret]" type="checkbox" value="1" />',
285
- check_box("post", "secret")
286
- )
287
- assert_dom_equal(
288
- '<input name="post[secret]" type="hidden" value="0" /><input checked="checked" id="post_secret" name="post[secret]" type="checkbox" value="1" />',
289
- check_box("post", "secret" ,{"checked"=>"checked"})
290
- )
291
- @post.secret = true
292
- assert_dom_equal(
293
- '<input name="post[secret]" type="hidden" value="0" /><input checked="checked" id="post_secret" name="post[secret]" type="checkbox" value="1" />',
294
- check_box("post", "secret")
295
- )
296
- assert_dom_equal(
297
- '<input name="post[secret]" type="hidden" value="0" /><input checked="checked" id="post_secret" name="post[secret]" type="checkbox" value="1" />',
298
- check_box("post", "secret?")
299
- )
300
-
301
- @post.secret = ['0']
302
- assert_dom_equal(
303
- '<input name="post[secret]" type="hidden" value="0" /><input id="post_secret" name="post[secret]" type="checkbox" value="1" />',
304
- check_box("post", "secret")
305
- )
306
- @post.secret = ['1']
307
- assert_dom_equal(
308
- '<input name="post[secret]" type="hidden" value="0" /><input checked="checked" id="post_secret" name="post[secret]" type="checkbox" value="1" />',
309
- check_box("post", "secret")
310
- )
311
- end
312
-
313
- def test_check_box_with_explicit_checked_and_unchecked_values
314
- @post.secret = "on"
315
- assert_dom_equal(
316
- '<input name="post[secret]" type="hidden" value="off" /><input checked="checked" id="post_secret" name="post[secret]" type="checkbox" value="on" />',
317
- check_box("post", "secret", {}, "on", "off")
318
- )
319
- end
320
-
321
- def test_checkbox_disabled_still_submits_checked_value
322
- assert_dom_equal(
323
- '<input name="post[secret]" type="hidden" value="1" /><input checked="checked" disabled="disabled" id="post_secret" name="post[secret]" type="checkbox" value="1" />',
324
- check_box("post", "secret", { :disabled => :true })
325
- )
326
- end
327
-
328
- def test_radio_button
329
- assert_dom_equal('<input checked="checked" id="post_title_hello_world" name="post[title]" type="radio" value="Hello World" />',
330
- radio_button("post", "title", "Hello World")
331
- )
332
- assert_dom_equal('<input id="post_title_goodbye_world" name="post[title]" type="radio" value="Goodbye World" />',
333
- radio_button("post", "title", "Goodbye World")
334
- )
335
- assert_dom_equal('<input id="item_subobject_title_inside_world" name="item[subobject][title]" type="radio" value="inside world"/>',
336
- radio_button("item[subobject]", "title", "inside world")
337
- )
338
- end
339
-
340
- def test_radio_button_is_checked_with_integers
341
- assert_dom_equal('<input checked="checked" id="post_secret_1" name="post[secret]" type="radio" value="1" />',
342
- radio_button("post", "secret", "1")
343
- )
344
- end
345
-
346
- def test_radio_button_respects_passed_in_id
347
- assert_dom_equal('<input checked="checked" id="foo" name="post[secret]" type="radio" value="1" />',
348
- radio_button("post", "secret", "1", :id=>"foo")
349
- )
350
- end
351
-
352
- def test_radio_button_with_booleans
353
- assert_dom_equal('<input id="post_secret_true" name="post[secret]" type="radio" value="true" />',
354
- radio_button("post", "secret", true)
355
- )
356
-
357
- assert_dom_equal('<input id="post_secret_false" name="post[secret]" type="radio" value="false" />',
358
- radio_button("post", "secret", false)
359
- )
360
- end
361
-
362
- def test_text_area
363
- assert_dom_equal(
364
- '<textarea cols="40" id="post_body" name="post[body]" rows="20">Back to the hill and over it again!</textarea>',
365
- text_area("post", "body")
366
- )
367
- end
368
-
369
- def test_text_area_with_escapes
370
- @post.body = "Back to <i>the</i> hill and over it again!"
371
- assert_dom_equal(
372
- '<textarea cols="40" id="post_body" name="post[body]" rows="20">Back to &lt;i&gt;the&lt;/i&gt; hill and over it again!</textarea>',
373
- text_area("post", "body")
374
- )
375
- end
376
-
377
- def test_text_area_with_alternate_value
378
- assert_dom_equal(
379
- '<textarea cols="40" id="post_body" name="post[body]" rows="20">Testing alternate values.</textarea>',
380
- text_area("post", "body", :value => 'Testing alternate values.')
381
- )
382
- end
383
-
384
- def test_text_area_with_html_entities
385
- @post.body = "The HTML Entity for & is &amp;"
386
- assert_dom_equal(
387
- '<textarea cols="40" id="post_body" name="post[body]" rows="20">The HTML Entity for &amp; is &amp;amp;</textarea>',
388
- text_area("post", "body")
389
- )
390
- end
391
-
392
- def test_text_area_with_size_option
393
- assert_dom_equal(
394
- '<textarea cols="183" id="post_body" name="post[body]" rows="820">Back to the hill and over it again!</textarea>',
395
- text_area("post", "body", :size => "183x820")
396
- )
397
- end
398
-
399
- def test_explicit_name
400
- assert_dom_equal(
401
- '<input id="post_title" name="dont guess" size="30" type="text" value="Hello World" />', text_field("post", "title", "name" => "dont guess")
402
- )
403
- assert_dom_equal(
404
- '<textarea cols="40" id="post_body" name="really!" rows="20">Back to the hill and over it again!</textarea>',
405
- text_area("post", "body", "name" => "really!")
406
- )
407
- assert_dom_equal(
408
- '<input name="i mean it" type="hidden" value="0" /><input checked="checked" id="post_secret" name="i mean it" type="checkbox" value="1" />',
409
- check_box("post", "secret", "name" => "i mean it")
410
- )
411
- assert_dom_equal text_field("post", "title", "name" => "dont guess"),
412
- text_field("post", "title", :name => "dont guess")
413
- assert_dom_equal text_area("post", "body", "name" => "really!"),
414
- text_area("post", "body", :name => "really!")
415
- assert_dom_equal check_box("post", "secret", "name" => "i mean it"),
416
- check_box("post", "secret", :name => "i mean it")
417
- end
418
-
419
- def test_explicit_id
420
- assert_dom_equal(
421
- '<input id="dont guess" name="post[title]" size="30" type="text" value="Hello World" />', text_field("post", "title", "id" => "dont guess")
422
- )
423
- assert_dom_equal(
424
- '<textarea cols="40" id="really!" name="post[body]" rows="20">Back to the hill and over it again!</textarea>',
425
- text_area("post", "body", "id" => "really!")
426
- )
427
- assert_dom_equal(
428
- '<input name="post[secret]" type="hidden" value="0" /><input checked="checked" id="i mean it" name="post[secret]" type="checkbox" value="1" />',
429
- check_box("post", "secret", "id" => "i mean it")
430
- )
431
- assert_dom_equal text_field("post", "title", "id" => "dont guess"),
432
- text_field("post", "title", :id => "dont guess")
433
- assert_dom_equal text_area("post", "body", "id" => "really!"),
434
- text_area("post", "body", :id => "really!")
435
- assert_dom_equal check_box("post", "secret", "id" => "i mean it"),
436
- check_box("post", "secret", :id => "i mean it")
437
- end
438
-
439
- def test_auto_index
440
- pid = @post.id
441
- assert_dom_equal(
442
- "<label for=\"post_#{pid}_title\">Title</label>",
443
- label("post[]", "title")
444
- )
445
- assert_dom_equal(
446
- "<input id=\"post_#{pid}_title\" name=\"post[#{pid}][title]\" size=\"30\" type=\"text\" value=\"Hello World\" />", text_field("post[]","title")
447
- )
448
- assert_dom_equal(
449
- "<textarea cols=\"40\" id=\"post_#{pid}_body\" name=\"post[#{pid}][body]\" rows=\"20\">Back to the hill and over it again!</textarea>",
450
- text_area("post[]", "body")
451
- )
452
- assert_dom_equal(
453
- "<input name=\"post[#{pid}][secret]\" type=\"hidden\" value=\"0\" /><input checked=\"checked\" id=\"post_#{pid}_secret\" name=\"post[#{pid}][secret]\" type=\"checkbox\" value=\"1\" />",
454
- check_box("post[]", "secret")
455
- )
456
- assert_dom_equal(
457
- "<input checked=\"checked\" id=\"post_#{pid}_title_hello_world\" name=\"post[#{pid}][title]\" type=\"radio\" value=\"Hello World\" />",
458
- radio_button("post[]", "title", "Hello World")
459
- )
460
- assert_dom_equal("<input id=\"post_#{pid}_title_goodbye_world\" name=\"post[#{pid}][title]\" type=\"radio\" value=\"Goodbye World\" />",
461
- radio_button("post[]", "title", "Goodbye World")
462
- )
463
- end
464
-
465
- def test_form_for
466
- form_for(:post, @post, :html => { :id => 'create-post' }) do |f|
467
- concat f.label(:title)
468
- concat f.text_field(:title)
469
- concat f.text_area(:body)
470
- concat f.check_box(:secret)
471
- concat f.submit('Create post')
472
- end
473
-
474
- expected =
475
- "<form action='http://www.example.com' id='create-post' method='post'>" +
476
- "<label for='post_title'>Title</label>" +
477
- "<input name='post[title]' size='30' type='text' id='post_title' value='Hello World' />" +
478
- "<textarea name='post[body]' id='post_body' rows='20' cols='40'>Back to the hill and over it again!</textarea>" +
479
- "<input name='post[secret]' type='hidden' value='0' />" +
480
- "<input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' />" +
481
- "<input name='commit' id='post_submit' type='submit' value='Create post' />" +
482
- "</form>"
483
-
484
- assert_dom_equal expected, output_buffer
485
- end
486
-
487
- def test_form_for_with_method
488
- form_for(:post, @post, :html => { :id => 'create-post', :method => :put }) do |f|
489
- concat f.text_field(:title)
490
- concat f.text_area(:body)
491
- concat f.check_box(:secret)
492
- end
493
-
494
- expected =
495
- "<form action='http://www.example.com' id='create-post' method='post'>" +
496
- "<div style='margin:0;padding:0;display:inline'><input name='_method' type='hidden' value='put' /></div>" +
497
- "<input name='post[title]' size='30' type='text' id='post_title' value='Hello World' />" +
498
- "<textarea name='post[body]' id='post_body' rows='20' cols='40'>Back to the hill and over it again!</textarea>" +
499
- "<input name='post[secret]' type='hidden' value='0' />" +
500
- "<input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' />" +
501
- "</form>"
502
-
503
- assert_dom_equal expected, output_buffer
504
- end
505
-
506
- def test_form_for_without_object
507
- form_for(:post, :html => { :id => 'create-post' }) do |f|
508
- concat f.text_field(:title)
509
- concat f.text_area(:body)
510
- concat f.check_box(:secret)
511
- end
512
-
513
- expected =
514
- "<form action='http://www.example.com' id='create-post' method='post'>" +
515
- "<input name='post[title]' size='30' type='text' id='post_title' value='Hello World' />" +
516
- "<textarea name='post[body]' id='post_body' rows='20' cols='40'>Back to the hill and over it again!</textarea>" +
517
- "<input name='post[secret]' type='hidden' value='0' />" +
518
- "<input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' />" +
519
- "</form>"
520
-
521
- assert_dom_equal expected, output_buffer
522
- end
523
-
524
- def test_form_for_with_index
525
- form_for("post[]", @post) do |f|
526
- concat f.label(:title)
527
- concat f.text_field(:title)
528
- concat f.text_area(:body)
529
- concat f.check_box(:secret)
530
- end
531
-
532
- expected =
533
- "<form action='http://www.example.com' method='post'>" +
534
- "<label for=\"post_123_title\">Title</label>" +
535
- "<input name='post[123][title]' size='30' type='text' id='post_123_title' value='Hello World' />" +
536
- "<textarea name='post[123][body]' id='post_123_body' rows='20' cols='40'>Back to the hill and over it again!</textarea>" +
537
- "<input name='post[123][secret]' type='hidden' value='0' />" +
538
- "<input name='post[123][secret]' checked='checked' type='checkbox' id='post_123_secret' value='1' />" +
539
- "</form>"
540
-
541
- assert_dom_equal expected, output_buffer
542
- end
543
-
544
- def test_form_for_with_nil_index_option_override
545
- form_for("post[]", @post, :index => nil) do |f|
546
- concat f.text_field(:title)
547
- concat f.text_area(:body)
548
- concat f.check_box(:secret)
549
- end
550
-
551
- expected =
552
- "<form action='http://www.example.com' method='post'>" +
553
- "<input name='post[][title]' size='30' type='text' id='post__title' value='Hello World' />" +
554
- "<textarea name='post[][body]' id='post__body' rows='20' cols='40'>Back to the hill and over it again!</textarea>" +
555
- "<input name='post[][secret]' type='hidden' value='0' />" +
556
- "<input name='post[][secret]' checked='checked' type='checkbox' id='post__secret' value='1' />" +
557
- "</form>"
558
-
559
- assert_dom_equal expected, output_buffer
560
- end
561
-
562
- def test_nested_fields_for
563
- form_for(:post, @post) do |f|
564
- f.fields_for(:comment, @post) do |c|
565
- concat c.text_field(:title)
566
- end
567
- end
568
-
569
- expected = "<form action='http://www.example.com' method='post'>" +
570
- "<input name='post[comment][title]' size='30' type='text' id='post_comment_title' value='Hello World' />" +
571
- "</form>"
572
-
573
- assert_dom_equal expected, output_buffer
574
- end
575
-
576
- def test_nested_fields_for_with_nested_collections
577
- form_for('post[]', @post) do |f|
578
- concat f.text_field(:title)
579
- f.fields_for('comment[]', @comment) do |c|
580
- concat c.text_field(:name)
581
- end
582
- end
583
-
584
- expected = "<form action='http://www.example.com' method='post'>" +
585
- "<input name='post[123][title]' size='30' type='text' id='post_123_title' value='Hello World' />" +
586
- "<input name='post[123][comment][][name]' size='30' type='text' id='post_123_comment__name' value='new comment' />" +
587
- "</form>"
588
-
589
- assert_dom_equal expected, output_buffer
590
- end
591
-
592
- def test_nested_fields_for_with_index_and_parent_fields
593
- form_for('post', @post, :index => 1) do |c|
594
- concat c.text_field(:title)
595
- c.fields_for('comment', @comment, :index => 1) do |r|
596
- concat r.text_field(:name)
597
- end
598
- end
599
-
600
- expected = "<form action='http://www.example.com' method='post'>" +
601
- "<input name='post[1][title]' size='30' type='text' id='post_1_title' value='Hello World' />" +
602
- "<input name='post[1][comment][1][name]' size='30' type='text' id='post_1_comment_1_name' value='new comment' />" +
603
- "</form>"
604
-
605
- assert_dom_equal expected, output_buffer
606
- end
607
-
608
- def test_form_for_with_index_and_nested_fields_for
609
- form_for(:post, @post, :index => 1) do |f|
610
- f.fields_for(:comment, @post) do |c|
611
- concat c.text_field(:title)
612
- end
613
- end
614
-
615
- expected = "<form action='http://www.example.com' method='post'>" +
616
- "<input name='post[1][comment][title]' size='30' type='text' id='post_1_comment_title' value='Hello World' />" +
617
- "</form>"
618
-
619
- assert_dom_equal expected, output_buffer
620
- end
621
-
622
- def test_nested_fields_for_with_index_on_both
623
- form_for(:post, @post, :index => 1) do |f|
624
- f.fields_for(:comment, @post, :index => 5) do |c|
625
- concat c.text_field(:title)
626
- end
627
- end
628
-
629
- expected = "<form action='http://www.example.com' method='post'>" +
630
- "<input name='post[1][comment][5][title]' size='30' type='text' id='post_1_comment_5_title' value='Hello World' />" +
631
- "</form>"
632
-
633
- assert_dom_equal expected, output_buffer
634
- end
635
-
636
- def test_nested_fields_for_with_auto_index
637
- form_for("post[]", @post) do |f|
638
- f.fields_for(:comment, @post) do |c|
639
- concat c.text_field(:title)
640
- end
641
- end
642
-
643
- expected = "<form action='http://www.example.com' method='post'>" +
644
- "<input name='post[123][comment][title]' size='30' type='text' id='post_123_comment_title' value='Hello World' />" +
645
- "</form>"
646
-
647
- assert_dom_equal expected, output_buffer
648
- end
649
-
650
- def test_nested_fields_for_with_index_radio_button
651
- form_for(:post, @post) do |f|
652
- f.fields_for(:comment, @post, :index => 5) do |c|
653
- concat c.radio_button(:title, "hello")
654
- end
655
- end
656
-
657
- expected = "<form action='http://www.example.com' method='post'>" +
658
- "<input name='post[comment][5][title]' type='radio' id='post_comment_5_title_hello' value='hello' />" +
659
- "</form>"
660
-
661
- assert_dom_equal expected, output_buffer
662
- end
663
-
664
- def test_nested_fields_for_with_auto_index_on_both
665
- form_for("post[]", @post) do |f|
666
- f.fields_for("comment[]", @post) do |c|
667
- concat c.text_field(:title)
668
- end
669
- end
670
-
671
- expected = "<form action='http://www.example.com' method='post'>" +
672
- "<input name='post[123][comment][123][title]' size='30' type='text' id='post_123_comment_123_title' value='Hello World' />" +
673
- "</form>"
674
-
675
- assert_dom_equal expected, output_buffer
676
- end
677
-
678
- def test_nested_fields_for_with_index_and_auto_index
679
- form_for("post[]", @post) do |f|
680
- f.fields_for(:comment, @post, :index => 5) do |c|
681
- concat c.text_field(:title)
682
- end
683
- end
684
-
685
- form_for(:post, @post, :index => 1) do |f|
686
- f.fields_for("comment[]", @post) do |c|
687
- concat c.text_field(:title)
688
- end
689
- end
690
-
691
- expected = "<form action='http://www.example.com' method='post'>" +
692
- "<input name='post[123][comment][5][title]' size='30' type='text' id='post_123_comment_5_title' value='Hello World' />" +
693
- "</form>" +
694
- "<form action='http://www.example.com' method='post'>" +
695
- "<input name='post[1][comment][123][title]' size='30' type='text' id='post_1_comment_123_title' value='Hello World' />" +
696
- "</form>"
697
-
698
- assert_dom_equal expected, output_buffer
699
- end
700
-
701
- def test_nested_fields_for_with_a_new_record_on_a_nested_attributes_one_to_one_association
702
- @post.author = Author.new
703
-
704
- form_for(:post, @post) do |f|
705
- concat f.text_field(:title)
706
- f.fields_for(:author) do |af|
707
- concat af.text_field(:name)
708
- end
709
- end
710
-
711
- expected = '<form action="http://www.example.com" method="post">' +
712
- '<input name="post[title]" size="30" type="text" id="post_title" value="Hello World" />' +
713
- '<input id="post_author_attributes_name" name="post[author_attributes][name]" size="30" type="text" value="new author" />' +
714
- '</form>'
715
-
716
- assert_dom_equal expected, output_buffer
717
- end
718
-
719
- def test_nested_fields_for_with_explicitly_passed_object_on_a_nested_attributes_one_to_one_association
720
- form_for(:post, @post) do |f|
721
- f.fields_for(:author, Author.new(123)) do |af|
722
- assert_not_nil af.object
723
- assert_equal 123, af.object.id
724
- end
725
- end
726
- end
727
-
728
- def test_nested_fields_for_with_an_existing_record_on_a_nested_attributes_one_to_one_association
729
- @post.author = Author.new(321)
730
-
731
- form_for(:post, @post) do |f|
732
- concat f.text_field(:title)
733
- f.fields_for(:author) do |af|
734
- concat af.text_field(:name)
735
- end
736
- end
737
-
738
- expected = '<form action="http://www.example.com" method="post">' +
739
- '<input name="post[title]" size="30" type="text" id="post_title" value="Hello World" />' +
740
- '<input id="post_author_attributes_name" name="post[author_attributes][name]" size="30" type="text" value="author #321" />' +
741
- '<input id="post_author_attributes_id" name="post[author_attributes][id]" type="hidden" value="321" />' +
742
- '</form>'
743
-
744
- assert_dom_equal expected, output_buffer
745
- end
746
-
747
- def test_nested_fields_for_with_existing_records_on_a_nested_attributes_one_to_one_association_with_explicit_hidden_field_placement
748
- @post.author = Author.new(321)
749
-
750
- form_for(:post, @post) do |f|
751
- concat f.text_field(:title)
752
- f.fields_for(:author) do |af|
753
- concat af.hidden_field(:id)
754
- concat af.text_field(:name)
755
- end
756
- end
757
-
758
- expected = '<form action="http://www.example.com" method="post">' +
759
- '<input name="post[title]" size="30" type="text" id="post_title" value="Hello World" />' +
760
- '<input id="post_author_attributes_id" name="post[author_attributes][id]" type="hidden" value="321" />' +
761
- '<input id="post_author_attributes_name" name="post[author_attributes][name]" size="30" type="text" value="author #321" />' +
762
- '</form>'
763
-
764
- assert_dom_equal expected, output_buffer
765
- end
766
-
767
- def test_nested_fields_for_with_existing_records_on_a_nested_attributes_collection_association
768
- @post.comments = Array.new(2) { |id| Comment.new(id + 1) }
769
-
770
- form_for(:post, @post) do |f|
771
- concat f.text_field(:title)
772
- @post.comments.each do |comment|
773
- f.fields_for(:comments, comment) do |cf|
774
- concat cf.text_field(:name)
775
- end
776
- end
777
- end
778
-
779
- expected = '<form action="http://www.example.com" method="post">' +
780
- '<input name="post[title]" size="30" type="text" id="post_title" value="Hello World" />' +
781
- '<input id="post_comments_attributes_0_name" name="post[comments_attributes][0][name]" size="30" type="text" value="comment #1" />' +
782
- '<input id="post_comments_attributes_0_id" name="post[comments_attributes][0][id]" type="hidden" value="1" />' +
783
- '<input id="post_comments_attributes_1_name" name="post[comments_attributes][1][name]" size="30" type="text" value="comment #2" />' +
784
- '<input id="post_comments_attributes_1_id" name="post[comments_attributes][1][id]" type="hidden" value="2" />' +
785
- '</form>'
786
-
787
- assert_dom_equal expected, output_buffer
788
- end
789
-
790
- def test_nested_fields_for_with_existing_records_on_a_nested_attributes_collection_association_with_explicit_hidden_field_placement
791
- @post.comments = Array.new(2) { |id| Comment.new(id + 1) }
792
-
793
- form_for(:post, @post) do |f|
794
- concat f.text_field(:title)
795
- @post.comments.each do |comment|
796
- f.fields_for(:comments, comment) do |cf|
797
- concat cf.hidden_field(:id)
798
- concat cf.text_field(:name)
799
- end
800
- end
801
- end
802
-
803
- expected = '<form action="http://www.example.com" method="post">' +
804
- '<input name="post[title]" size="30" type="text" id="post_title" value="Hello World" />' +
805
- '<input id="post_comments_attributes_0_id" name="post[comments_attributes][0][id]" type="hidden" value="1" />' +
806
- '<input id="post_comments_attributes_0_name" name="post[comments_attributes][0][name]" size="30" type="text" value="comment #1" />' +
807
- '<input id="post_comments_attributes_1_id" name="post[comments_attributes][1][id]" type="hidden" value="2" />' +
808
- '<input id="post_comments_attributes_1_name" name="post[comments_attributes][1][name]" size="30" type="text" value="comment #2" />' +
809
- '</form>'
810
-
811
- assert_dom_equal expected, output_buffer
812
- end
813
-
814
- def test_nested_fields_for_with_new_records_on_a_nested_attributes_collection_association
815
- @post.comments = [Comment.new, Comment.new]
816
-
817
- form_for(:post, @post) do |f|
818
- concat f.text_field(:title)
819
- @post.comments.each do |comment|
820
- f.fields_for(:comments, comment) do |cf|
821
- concat cf.text_field(:name)
822
- end
823
- end
824
- end
825
-
826
- expected = '<form action="http://www.example.com" method="post">' +
827
- '<input name="post[title]" size="30" type="text" id="post_title" value="Hello World" />' +
828
- '<input id="post_comments_attributes_0_name" name="post[comments_attributes][0][name]" size="30" type="text" value="new comment" />' +
829
- '<input id="post_comments_attributes_1_name" name="post[comments_attributes][1][name]" size="30" type="text" value="new comment" />' +
830
- '</form>'
831
-
832
- assert_dom_equal expected, output_buffer
833
- end
834
-
835
- def test_nested_fields_for_with_existing_and_new_records_on_a_nested_attributes_collection_association
836
- @post.comments = [Comment.new(321), Comment.new]
837
-
838
- form_for(:post, @post) do |f|
839
- concat f.text_field(:title)
840
- @post.comments.each do |comment|
841
- f.fields_for(:comments, comment) do |cf|
842
- concat cf.text_field(:name)
843
- end
844
- end
845
- end
846
-
847
- expected = '<form action="http://www.example.com" method="post">' +
848
- '<input name="post[title]" size="30" type="text" id="post_title" value="Hello World" />' +
849
- '<input id="post_comments_attributes_0_name" name="post[comments_attributes][0][name]" size="30" type="text" value="comment #321" />' +
850
- '<input id="post_comments_attributes_0_id" name="post[comments_attributes][0][id]" type="hidden" value="321" />' +
851
- '<input id="post_comments_attributes_1_name" name="post[comments_attributes][1][name]" size="30" type="text" value="new comment" />' +
852
- '</form>'
853
-
854
- assert_dom_equal expected, output_buffer
855
- end
856
-
857
- def test_nested_fields_for_with_an_empty_supplied_attributes_collection
858
- form_for(:post, @post) do |f|
859
- concat f.text_field(:title)
860
- f.fields_for(:comments, []) do |cf|
861
- concat cf.text_field(:name)
862
- end
863
- end
864
-
865
- expected = '<form action="http://www.example.com" method="post">' +
866
- '<input name="post[title]" size="30" type="text" id="post_title" value="Hello World" />' +
867
- '</form>'
868
-
869
- assert_dom_equal expected, output_buffer
870
- end
871
-
872
- def test_nested_fields_for_with_existing_records_on_a_supplied_nested_attributes_collection
873
- @post.comments = Array.new(2) { |id| Comment.new(id + 1) }
874
-
875
- form_for(:post, @post) do |f|
876
- concat f.text_field(:title)
877
- f.fields_for(:comments, @post.comments) do |cf|
878
- concat cf.text_field(:name)
879
- end
880
- end
881
-
882
- expected = '<form action="http://www.example.com" method="post">' +
883
- '<input name="post[title]" size="30" type="text" id="post_title" value="Hello World" />' +
884
- '<input id="post_comments_attributes_0_name" name="post[comments_attributes][0][name]" size="30" type="text" value="comment #1" />' +
885
- '<input id="post_comments_attributes_0_id" name="post[comments_attributes][0][id]" type="hidden" value="1" />' +
886
- '<input id="post_comments_attributes_1_name" name="post[comments_attributes][1][name]" size="30" type="text" value="comment #2" />' +
887
- '<input id="post_comments_attributes_1_id" name="post[comments_attributes][1][id]" type="hidden" value="2" />' +
888
- '</form>'
889
-
890
- assert_dom_equal expected, output_buffer
891
- end
892
-
893
- def test_nested_fields_for_on_a_nested_attributes_collection_association_yields_only_builder
894
- @post.comments = [Comment.new(321), Comment.new]
895
- yielded_comments = []
896
-
897
- form_for(:post, @post) do |f|
898
- concat f.text_field(:title)
899
- f.fields_for(:comments) do |cf|
900
- concat cf.text_field(:name)
901
- yielded_comments << cf.object
902
- end
903
- end
904
-
905
- expected = '<form action="http://www.example.com" method="post">' +
906
- '<input name="post[title]" size="30" type="text" id="post_title" value="Hello World" />' +
907
- '<input id="post_comments_attributes_0_name" name="post[comments_attributes][0][name]" size="30" type="text" value="comment #321" />' +
908
- '<input id="post_comments_attributes_0_id" name="post[comments_attributes][0][id]" type="hidden" value="321" />' +
909
- '<input id="post_comments_attributes_1_name" name="post[comments_attributes][1][name]" size="30" type="text" value="new comment" />' +
910
- '</form>'
911
-
912
- assert_dom_equal expected, output_buffer
913
- assert_equal yielded_comments, @post.comments
914
- end
915
-
916
- def test_nested_fields_for_with_child_index_option_override_on_a_nested_attributes_collection_association
917
- @post.comments = []
918
-
919
- form_for(:post, @post) do |f|
920
- f.fields_for(:comments, Comment.new(321), :child_index => 'abc') do |cf|
921
- concat cf.text_field(:name)
922
- end
923
- end
924
-
925
- expected = '<form action="http://www.example.com" method="post">' +
926
- '<input id="post_comments_attributes_abc_name" name="post[comments_attributes][abc][name]" size="30" type="text" value="comment #321" />' +
927
- '<input id="post_comments_attributes_abc_id" name="post[comments_attributes][abc][id]" type="hidden" value="321" />' +
928
- '</form>'
929
-
930
- assert_dom_equal expected, output_buffer
931
- end
932
-
933
- def test_nested_fields_uses_unique_indices_for_different_collection_associations
934
- @post.comments = [Comment.new(321)]
935
- @post.tags = [Tag.new(123), Tag.new(456)]
936
- @post.comments[0].relevances = []
937
- @post.tags[0].relevances = []
938
- @post.tags[1].relevances = []
939
- form_for(:post, @post) do |f|
940
- f.fields_for(:comments, @post.comments[0]) do |cf|
941
- concat cf.text_field(:name)
942
- cf.fields_for(:relevances, CommentRelevance.new(314)) do |crf|
943
- concat crf.text_field(:value)
944
- end
945
- end
946
- f.fields_for(:tags, @post.tags[0]) do |tf|
947
- concat tf.text_field(:value)
948
- tf.fields_for(:relevances, TagRelevance.new(3141)) do |trf|
949
- concat trf.text_field(:value)
950
- end
951
- end
952
- f.fields_for('tags', @post.tags[1]) do |tf|
953
- concat tf.text_field(:value)
954
- tf.fields_for(:relevances, TagRelevance.new(31415)) do |trf|
955
- concat trf.text_field(:value)
956
- end
957
- end
958
- end
959
-
960
- expected = '<form action="http://www.example.com" method="post">' +
961
- '<input id="post_comments_attributes_0_name" name="post[comments_attributes][0][name]" size="30" type="text" value="comment #321" />' +
962
- '<input id="post_comments_attributes_0_relevances_attributes_0_value" name="post[comments_attributes][0][relevances_attributes][0][value]" size="30" type="text" value="commentrelevance #314" />' +
963
- '<input id="post_comments_attributes_0_relevances_attributes_0_id" name="post[comments_attributes][0][relevances_attributes][0][id]" type="hidden" value="314" />' +
964
- '<input id="post_comments_attributes_0_id" name="post[comments_attributes][0][id]" type="hidden" value="321" />' +
965
- '<input id="post_tags_attributes_0_value" name="post[tags_attributes][0][value]" size="30" type="text" value="tag #123" />' +
966
- '<input id="post_tags_attributes_0_relevances_attributes_0_value" name="post[tags_attributes][0][relevances_attributes][0][value]" size="30" type="text" value="tagrelevance #3141" />' +
967
- '<input id="post_tags_attributes_0_relevances_attributes_0_id" name="post[tags_attributes][0][relevances_attributes][0][id]" type="hidden" value="3141" />' +
968
- '<input id="post_tags_attributes_0_id" name="post[tags_attributes][0][id]" type="hidden" value="123" />' +
969
- '<input id="post_tags_attributes_1_value" name="post[tags_attributes][1][value]" size="30" type="text" value="tag #456" />' +
970
- '<input id="post_tags_attributes_1_relevances_attributes_0_value" name="post[tags_attributes][1][relevances_attributes][0][value]" size="30" type="text" value="tagrelevance #31415" />' +
971
- '<input id="post_tags_attributes_1_relevances_attributes_0_id" name="post[tags_attributes][1][relevances_attributes][0][id]" type="hidden" value="31415" />' +
972
- '<input id="post_tags_attributes_1_id" name="post[tags_attributes][1][id]" type="hidden" value="456" />' +
973
- '</form>'
974
-
975
- assert_dom_equal expected, output_buffer
976
- end
977
-
978
- def test_fields_for
979
- fields_for(:post, @post) do |f|
980
- concat f.text_field(:title)
981
- concat f.text_area(:body)
982
- concat f.check_box(:secret)
983
- end
984
-
985
- expected =
986
- "<input name='post[title]' size='30' type='text' id='post_title' value='Hello World' />" +
987
- "<textarea name='post[body]' id='post_body' rows='20' cols='40'>Back to the hill and over it again!</textarea>" +
988
- "<input name='post[secret]' type='hidden' value='0' />" +
989
- "<input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' />"
990
-
991
- assert_dom_equal expected, output_buffer
992
- end
993
-
994
- def test_fields_for_with_index
995
- fields_for("post[]", @post) do |f|
996
- concat f.text_field(:title)
997
- concat f.text_area(:body)
998
- concat f.check_box(:secret)
999
- end
1000
-
1001
- expected =
1002
- "<input name='post[123][title]' size='30' type='text' id='post_123_title' value='Hello World' />" +
1003
- "<textarea name='post[123][body]' id='post_123_body' rows='20' cols='40'>Back to the hill and over it again!</textarea>" +
1004
- "<input name='post[123][secret]' type='hidden' value='0' />" +
1005
- "<input name='post[123][secret]' checked='checked' type='checkbox' id='post_123_secret' value='1' />"
1006
-
1007
- assert_dom_equal expected, output_buffer
1008
- end
1009
-
1010
- def test_fields_for_with_nil_index_option_override
1011
- fields_for("post[]", @post, :index => nil) do |f|
1012
- concat f.text_field(:title)
1013
- concat f.text_area(:body)
1014
- concat f.check_box(:secret)
1015
- end
1016
-
1017
- expected =
1018
- "<input name='post[][title]' size='30' type='text' id='post__title' value='Hello World' />" +
1019
- "<textarea name='post[][body]' id='post__body' rows='20' cols='40'>Back to the hill and over it again!</textarea>" +
1020
- "<input name='post[][secret]' type='hidden' value='0' />" +
1021
- "<input name='post[][secret]' checked='checked' type='checkbox' id='post__secret' value='1' />"
1022
-
1023
- assert_dom_equal expected, output_buffer
1024
- end
1025
-
1026
- def test_fields_for_with_index_option_override
1027
- fields_for("post[]", @post, :index => "abc") do |f|
1028
- concat f.text_field(:title)
1029
- concat f.text_area(:body)
1030
- concat f.check_box(:secret)
1031
- end
1032
-
1033
- expected =
1034
- "<input name='post[abc][title]' size='30' type='text' id='post_abc_title' value='Hello World' />" +
1035
- "<textarea name='post[abc][body]' id='post_abc_body' rows='20' cols='40'>Back to the hill and over it again!</textarea>" +
1036
- "<input name='post[abc][secret]' type='hidden' value='0' />" +
1037
- "<input name='post[abc][secret]' checked='checked' type='checkbox' id='post_abc_secret' value='1' />"
1038
-
1039
- assert_dom_equal expected, output_buffer
1040
- end
1041
-
1042
- def test_fields_for_without_object
1043
- fields_for(:post) do |f|
1044
- concat f.text_field(:title)
1045
- concat f.text_area(:body)
1046
- concat f.check_box(:secret)
1047
- end
1048
-
1049
- expected =
1050
- "<input name='post[title]' size='30' type='text' id='post_title' value='Hello World' />" +
1051
- "<textarea name='post[body]' id='post_body' rows='20' cols='40'>Back to the hill and over it again!</textarea>" +
1052
- "<input name='post[secret]' type='hidden' value='0' />" +
1053
- "<input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' />"
1054
-
1055
- assert_dom_equal expected, output_buffer
1056
- end
1057
-
1058
- def test_fields_for_with_only_object
1059
- fields_for(@post) do |f|
1060
- concat f.text_field(:title)
1061
- concat f.text_area(:body)
1062
- concat f.check_box(:secret)
1063
- end
1064
-
1065
- expected =
1066
- "<input name='post[title]' size='30' type='text' id='post_title' value='Hello World' />" +
1067
- "<textarea name='post[body]' id='post_body' rows='20' cols='40'>Back to the hill and over it again!</textarea>" +
1068
- "<input name='post[secret]' type='hidden' value='0' />" +
1069
- "<input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' />"
1070
-
1071
- assert_dom_equal expected, output_buffer
1072
- end
1073
-
1074
- def test_fields_for_object_with_bracketed_name
1075
- fields_for("author[post]", @post) do |f|
1076
- concat f.label(:title)
1077
- concat f.text_field(:title)
1078
- end
1079
-
1080
- assert_dom_equal "<label for=\"author_post_title\">Title</label>" +
1081
- "<input name='author[post][title]' size='30' type='text' id='author_post_title' value='Hello World' />",
1082
- output_buffer
1083
- end
1084
-
1085
- def test_fields_for_object_with_bracketed_name_and_index
1086
- fields_for("author[post]", @post, :index => 1) do |f|
1087
- concat f.label(:title)
1088
- concat f.text_field(:title)
1089
- end
1090
-
1091
- assert_dom_equal "<label for=\"author_post_1_title\">Title</label>" +
1092
- "<input name='author[post][1][title]' size='30' type='text' id='author_post_1_title' value='Hello World' />",
1093
- output_buffer
1094
- end
1095
-
1096
- def test_form_builder_does_not_have_form_for_method
1097
- assert ! ActionView::Helpers::FormBuilder.instance_methods.include?('form_for')
1098
- end
1099
-
1100
- def test_form_for_and_fields_for
1101
- form_for(:post, @post, :html => { :id => 'create-post' }) do |post_form|
1102
- concat post_form.text_field(:title)
1103
- concat post_form.text_area(:body)
1104
-
1105
- fields_for(:parent_post, @post) do |parent_fields|
1106
- concat parent_fields.check_box(:secret)
1107
- end
1108
- end
1109
-
1110
- expected =
1111
- "<form action='http://www.example.com' id='create-post' method='post'>" +
1112
- "<input name='post[title]' size='30' type='text' id='post_title' value='Hello World' />" +
1113
- "<textarea name='post[body]' id='post_body' rows='20' cols='40'>Back to the hill and over it again!</textarea>" +
1114
- "<input name='parent_post[secret]' type='hidden' value='0' />" +
1115
- "<input name='parent_post[secret]' checked='checked' type='checkbox' id='parent_post_secret' value='1' />" +
1116
- "</form>"
1117
-
1118
- assert_dom_equal expected, output_buffer
1119
- end
1120
-
1121
- def test_form_for_and_fields_for_with_object
1122
- form_for(:post, @post, :html => { :id => 'create-post' }) do |post_form|
1123
- concat post_form.text_field(:title)
1124
- concat post_form.text_area(:body)
1125
-
1126
- post_form.fields_for(@comment) do |comment_fields|
1127
- concat comment_fields.text_field(:name)
1128
- end
1129
- end
1130
-
1131
- expected =
1132
- "<form action='http://www.example.com' id='create-post' method='post'>" +
1133
- "<input name='post[title]' size='30' type='text' id='post_title' value='Hello World' />" +
1134
- "<textarea name='post[body]' id='post_body' rows='20' cols='40'>Back to the hill and over it again!</textarea>" +
1135
- "<input name='post[comment][name]' type='text' id='post_comment_name' value='new comment' size='30' />" +
1136
- "</form>"
1137
-
1138
- assert_dom_equal expected, output_buffer
1139
- end
1140
-
1141
- class LabelledFormBuilder < ActionView::Helpers::FormBuilder
1142
- (field_helpers - %w(hidden_field)).each do |selector|
1143
- src, line = <<-END_SRC, __LINE__ + 1
1144
- def #{selector}(field, *args, &proc)
1145
- ("<label for='\#{field}'>\#{field.to_s.humanize}:</label> " + super + "<br/>").html_safe
1146
- end
1147
- END_SRC
1148
- class_eval src, __FILE__, line
1149
- end
1150
- end
1151
-
1152
- def test_form_for_with_labelled_builder
1153
- form_for(:post, @post, :builder => LabelledFormBuilder) do |f|
1154
- concat f.text_field(:title)
1155
- concat f.text_area(:body)
1156
- concat f.check_box(:secret)
1157
- end
1158
-
1159
- expected =
1160
- "<form action='http://www.example.com' method='post'>" +
1161
- "<label for='title'>Title:</label> <input name='post[title]' size='30' type='text' id='post_title' value='Hello World' /><br/>" +
1162
- "<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/>" +
1163
- "<label for='secret'>Secret:</label> <input name='post[secret]' type='hidden' value='0' /><input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' /><br/>" +
1164
- "</form>"
1165
-
1166
- assert_dom_equal expected, output_buffer
1167
- end
1168
-
1169
- def test_default_form_builder
1170
- old_default_form_builder, ActionView::Base.default_form_builder =
1171
- ActionView::Base.default_form_builder, LabelledFormBuilder
1172
-
1173
- form_for(:post, @post) do |f|
1174
- concat f.text_field(:title)
1175
- concat f.text_area(:body)
1176
- concat f.check_box(:secret)
1177
- end
1178
-
1179
- expected =
1180
- "<form action='http://www.example.com' method='post'>" +
1181
- "<label for='title'>Title:</label> <input name='post[title]' size='30' type='text' id='post_title' value='Hello World' /><br/>" +
1182
- "<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/>" +
1183
- "<label for='secret'>Secret:</label> <input name='post[secret]' type='hidden' value='0' /><input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' /><br/>" +
1184
- "</form>"
1185
-
1186
- assert_dom_equal expected, output_buffer
1187
- ensure
1188
- ActionView::Base.default_form_builder = old_default_form_builder
1189
- end
1190
-
1191
- def test_default_form_builder_with_active_record_helpers
1192
- form_for(:post, @post) do |f|
1193
- concat f.error_message_on('author_name')
1194
- concat f.error_messages
1195
- end
1196
-
1197
- expected = %(<form action='http://www.example.com' method='post'>) +
1198
- %(<div class='formError'>can&#39;t be empty</div>) +
1199
- %(<div class="errorExplanation" id="errorExplanation"><h2>1 error prohibited this post from being saved</h2><p>There were problems with the following fields:</p><ul><li>Author name can&#39;t be empty</li></ul></div>) +
1200
- %(</form>)
1201
-
1202
- assert_dom_equal expected, output_buffer
1203
-
1204
- end
1205
-
1206
- def test_default_form_builder_no_instance_variable
1207
- post = @post
1208
- @post = nil
1209
-
1210
- form_for(:post, post) do |f|
1211
- concat f.error_message_on('author_name')
1212
- concat f.error_messages
1213
- end
1214
-
1215
- expected = %(<form action='http://www.example.com' method='post'>) +
1216
- %(<div class='formError'>can&#39;t be empty</div>) +
1217
- %(<div class="errorExplanation" id="errorExplanation"><h2>1 error prohibited this post from being saved</h2><p>There were problems with the following fields:</p><ul><li>Author name can&#39;t be empty</li></ul></div>) +
1218
- %(</form>)
1219
-
1220
- assert_dom_equal expected, output_buffer
1221
-
1222
- end
1223
-
1224
- def test_default_form_builder_without_object
1225
-
1226
- form_for(:post) do |f|
1227
- concat f.error_message_on('author_name')
1228
- concat f.error_messages
1229
- end
1230
-
1231
- expected = %(<form action='http://www.example.com' method='post'>) +
1232
- %(<div class='formError'>can&#39;t be empty</div>) +
1233
- %(<div class="errorExplanation" id="errorExplanation"><h2>1 error prohibited this post from being saved</h2><p>There were problems with the following fields:</p><ul><li>Author name can&#39;t be empty</li></ul></div>) +
1234
- %(</form>)
1235
-
1236
- assert_dom_equal expected, output_buffer
1237
-
1238
- end
1239
-
1240
- # Perhaps this test should be moved to prototype helper tests.
1241
- def test_remote_form_for_with_labelled_builder
1242
- self.extend ActionView::Helpers::PrototypeHelper
1243
-
1244
- remote_form_for(:post, @post, :builder => LabelledFormBuilder) do |f|
1245
- concat f.text_field(:title)
1246
- concat f.text_area(:body)
1247
- concat f.check_box(:secret)
1248
- end
1249
-
1250
- expected =
1251
- %(<form action="http://www.example.com" onsubmit="new Ajax.Request('http://www.example.com', {asynchronous:true, evalScripts:true, parameters:Form.serialize(this)}); return false;" method="post">) +
1252
- "<label for='title'>Title:</label> <input name='post[title]' size='30' type='text' id='post_title' value='Hello World' /><br/>" +
1253
- "<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/>" +
1254
- "<label for='secret'>Secret:</label> <input name='post[secret]' type='hidden' value='0' /><input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' /><br/>" +
1255
- "</form>"
1256
-
1257
- assert_dom_equal expected, output_buffer
1258
- end
1259
-
1260
- def test_fields_for_with_labelled_builder
1261
- fields_for(:post, @post, :builder => LabelledFormBuilder) do |f|
1262
- concat f.text_field(:title)
1263
- concat f.text_area(:body)
1264
- concat f.check_box(:secret)
1265
- end
1266
-
1267
- expected =
1268
- "<label for='title'>Title:</label> <input name='post[title]' size='30' type='text' id='post_title' value='Hello World' /><br/>" +
1269
- "<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/>" +
1270
- "<label for='secret'>Secret:</label> <input name='post[secret]' type='hidden' value='0' /><input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' /><br/>"
1271
-
1272
- assert_dom_equal expected, output_buffer
1273
- end
1274
-
1275
- def test_form_for_with_labelled_builder_with_nested_fields_for_without_options_hash
1276
- klass = nil
1277
-
1278
- form_for(:post, @post, :builder => LabelledFormBuilder) do |f|
1279
- f.fields_for(:comments, Comment.new) do |nested_fields|
1280
- klass = nested_fields.class
1281
- ''
1282
- end
1283
- end
1284
-
1285
- assert_equal LabelledFormBuilder, klass
1286
- end
1287
-
1288
- def test_form_for_with_labelled_builder_with_nested_fields_for_with_options_hash
1289
- klass = nil
1290
-
1291
- form_for(:post, @post, :builder => LabelledFormBuilder) do |f|
1292
- f.fields_for(:comments, Comment.new, :index => 'foo') do |nested_fields|
1293
- klass = nested_fields.class
1294
- ''
1295
- end
1296
- end
1297
-
1298
- assert_equal LabelledFormBuilder, klass
1299
- end
1300
-
1301
- class LabelledFormBuilderSubclass < LabelledFormBuilder; end
1302
-
1303
- def test_form_for_with_labelled_builder_with_nested_fields_for_with_custom_builder
1304
- klass = nil
1305
-
1306
- form_for(:post, @post, :builder => LabelledFormBuilder) do |f|
1307
- f.fields_for(:comments, Comment.new, :builder => LabelledFormBuilderSubclass) do |nested_fields|
1308
- klass = nested_fields.class
1309
- ''
1310
- end
1311
- end
1312
-
1313
- assert_equal LabelledFormBuilderSubclass, klass
1314
- end
1315
-
1316
- def test_form_for_with_html_options_adds_options_to_form_tag
1317
- form_for(:post, @post, :html => {:id => 'some_form', :class => 'some_class'}) do |f| end
1318
- expected = "<form action=\"http://www.example.com\" class=\"some_class\" id=\"some_form\" method=\"post\"></form>"
1319
-
1320
- assert_dom_equal expected, output_buffer
1321
- end
1322
-
1323
- def test_form_for_with_string_url_option
1324
- form_for(:post, @post, :url => 'http://www.otherdomain.com') do |f| end
1325
-
1326
- assert_equal '<form action="http://www.otherdomain.com" method="post"></form>', output_buffer
1327
- end
1328
-
1329
- def test_form_for_with_hash_url_option
1330
- form_for(:post, @post, :url => {:controller => 'controller', :action => 'action'}) do |f| end
1331
-
1332
- assert_equal 'controller', @controller.url_for_options[:controller]
1333
- assert_equal 'action', @controller.url_for_options[:action]
1334
- end
1335
-
1336
- def test_form_for_with_record_url_option
1337
- form_for(:post, @post, :url => @post) do |f| end
1338
-
1339
- expected = "<form action=\"/posts/123\" method=\"post\"></form>"
1340
- assert_equal expected, output_buffer
1341
- end
1342
-
1343
- def test_form_for_with_existing_object
1344
- form_for(@post) do |f| end
1345
-
1346
- expected = "<form action=\"/posts/123\" class=\"edit_post\" id=\"edit_post_123\" method=\"post\"><div style=\"margin:0;padding:0;display:inline\"><input name=\"_method\" type=\"hidden\" value=\"put\" /></div></form>"
1347
- assert_equal expected, output_buffer
1348
- end
1349
-
1350
- def test_form_for_with_new_object
1351
- post = Post.new
1352
- post.new_record = true
1353
- def post.id() nil end
1354
-
1355
- form_for(post) do |f| end
1356
-
1357
- expected = "<form action=\"/posts\" class=\"new_post\" id=\"new_post\" method=\"post\"></form>"
1358
- assert_equal expected, output_buffer
1359
- end
1360
-
1361
- def test_form_for_with_existing_object_in_list
1362
- @post.new_record = false
1363
- @comment.save
1364
-
1365
- form_for([@post, @comment]) {}
1366
-
1367
- expected = %(<form action="#{comment_path(@post, @comment)}" class="edit_comment" id="edit_comment_1" method="post"><div style="margin:0;padding:0;display:inline"><input name="_method" type="hidden" value="put" /></div></form>)
1368
- assert_dom_equal expected, output_buffer
1369
- end
1370
-
1371
- def test_form_for_with_new_object_in_list
1372
- @post.new_record = false
1373
-
1374
- form_for([@post, @comment]) {}
1375
-
1376
- expected = %(<form action="#{comments_path(@post)}" class="new_comment" id="new_comment" method="post"></form>)
1377
- assert_dom_equal expected, output_buffer
1378
- end
1379
-
1380
- def test_form_for_with_existing_object_and_namespace_in_list
1381
- @post.new_record = false
1382
- @comment.save
1383
-
1384
- form_for([:admin, @post, @comment]) {}
1385
-
1386
- expected = %(<form action="#{admin_comment_path(@post, @comment)}" class="edit_comment" id="edit_comment_1" method="post"><div style="margin:0;padding:0;display:inline"><input name="_method" type="hidden" value="put" /></div></form>)
1387
- assert_dom_equal expected, output_buffer
1388
- end
1389
-
1390
- def test_form_for_with_new_object_and_namespace_in_list
1391
- @post.new_record = false
1392
-
1393
- form_for([:admin, @post, @comment]) {}
1394
-
1395
- expected = %(<form action="#{admin_comments_path(@post)}" class="new_comment" id="new_comment" method="post"></form>)
1396
- assert_dom_equal expected, output_buffer
1397
- end
1398
-
1399
- def test_form_for_with_existing_object_and_custom_url
1400
- form_for(@post, :url => "/super_posts") do |f| end
1401
-
1402
- expected = "<form action=\"/super_posts\" class=\"edit_post\" id=\"edit_post_123\" method=\"post\"><div style=\"margin:0;padding:0;display:inline\"><input name=\"_method\" type=\"hidden\" value=\"put\" /></div></form>"
1403
- assert_equal expected, output_buffer
1404
- end
1405
-
1406
- def test_remote_form_for_with_html_options_adds_options_to_form_tag
1407
- self.extend ActionView::Helpers::PrototypeHelper
1408
-
1409
- remote_form_for(:post, @post, :html => {:id => 'some_form', :class => 'some_class'}) do |f| end
1410
- expected = "<form action=\"http://www.example.com\" class=\"some_class\" id=\"some_form\" method=\"post\" onsubmit=\"new Ajax.Request('http://www.example.com', {asynchronous:true, evalScripts:true, parameters:Form.serialize(this)}); return false;\"></form>"
1411
-
1412
- assert_dom_equal expected, output_buffer
1413
- end
1414
-
1415
- protected
1416
- def comments_path(post)
1417
- "/posts/#{post.id}/comments"
1418
- end
1419
- alias_method :post_comments_path, :comments_path
1420
-
1421
- def comment_path(post, comment)
1422
- "/posts/#{post.id}/comments/#{comment.id}"
1423
- end
1424
- alias_method :post_comment_path, :comment_path
1425
-
1426
- def admin_comments_path(post)
1427
- "/admin/posts/#{post.id}/comments"
1428
- end
1429
- alias_method :admin_post_comments_path, :admin_comments_path
1430
-
1431
- def admin_comment_path(post, comment)
1432
- "/admin/posts/#{post.id}/comments/#{comment.id}"
1433
- end
1434
- alias_method :admin_post_comment_path, :admin_comment_path
1435
-
1436
- def posts_path
1437
- "/posts"
1438
- end
1439
-
1440
- def post_path(post)
1441
- "/posts/#{post.id}"
1442
- end
1443
-
1444
- def protect_against_forgery?
1445
- false
1446
- end
1447
- end