actionpack-rack-upgrade 2.3.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (441) hide show
  1. data/CHANGELOG +5250 -0
  2. data/MIT-LICENSE +21 -0
  3. data/README +409 -0
  4. data/RUNNING_UNIT_TESTS +24 -0
  5. data/Rakefile +158 -0
  6. data/install.rb +30 -0
  7. data/lib/action_controller/assertions/dom_assertions.rb +55 -0
  8. data/lib/action_controller/assertions/model_assertions.rb +21 -0
  9. data/lib/action_controller/assertions/response_assertions.rb +169 -0
  10. data/lib/action_controller/assertions/routing_assertions.rb +146 -0
  11. data/lib/action_controller/assertions/selector_assertions.rb +638 -0
  12. data/lib/action_controller/assertions/tag_assertions.rb +127 -0
  13. data/lib/action_controller/base.rb +1425 -0
  14. data/lib/action_controller/benchmarking.rb +107 -0
  15. data/lib/action_controller/caching/actions.rb +177 -0
  16. data/lib/action_controller/caching/fragments.rb +120 -0
  17. data/lib/action_controller/caching/pages.rb +152 -0
  18. data/lib/action_controller/caching/sweeper.rb +45 -0
  19. data/lib/action_controller/caching/sweeping.rb +55 -0
  20. data/lib/action_controller/caching.rb +71 -0
  21. data/lib/action_controller/cgi_ext/cookie.rb +112 -0
  22. data/lib/action_controller/cgi_ext/query_extension.rb +22 -0
  23. data/lib/action_controller/cgi_ext/stdinput.rb +24 -0
  24. data/lib/action_controller/cgi_ext.rb +15 -0
  25. data/lib/action_controller/cgi_process.rb +77 -0
  26. data/lib/action_controller/cookies.rb +197 -0
  27. data/lib/action_controller/dispatcher.rb +133 -0
  28. data/lib/action_controller/failsafe.rb +87 -0
  29. data/lib/action_controller/filters.rb +680 -0
  30. data/lib/action_controller/flash.rb +213 -0
  31. data/lib/action_controller/headers.rb +33 -0
  32. data/lib/action_controller/helpers.rb +225 -0
  33. data/lib/action_controller/http_authentication.rb +309 -0
  34. data/lib/action_controller/integration.rb +708 -0
  35. data/lib/action_controller/layout.rb +286 -0
  36. data/lib/action_controller/middleware_stack.rb +119 -0
  37. data/lib/action_controller/middlewares.rb +14 -0
  38. data/lib/action_controller/mime_responds.rb +193 -0
  39. data/lib/action_controller/mime_type.rb +212 -0
  40. data/lib/action_controller/mime_types.rb +21 -0
  41. data/lib/action_controller/params_parser.rb +77 -0
  42. data/lib/action_controller/performance_test.rb +15 -0
  43. data/lib/action_controller/polymorphic_routes.rb +189 -0
  44. data/lib/action_controller/rack_lint_patch.rb +36 -0
  45. data/lib/action_controller/record_identifier.rb +104 -0
  46. data/lib/action_controller/reloader.rb +54 -0
  47. data/lib/action_controller/request.rb +495 -0
  48. data/lib/action_controller/request_forgery_protection.rb +116 -0
  49. data/lib/action_controller/rescue.rb +183 -0
  50. data/lib/action_controller/resources.rb +682 -0
  51. data/lib/action_controller/response.rb +237 -0
  52. data/lib/action_controller/routing/builder.rb +197 -0
  53. data/lib/action_controller/routing/optimisations.rb +130 -0
  54. data/lib/action_controller/routing/recognition_optimisation.rb +167 -0
  55. data/lib/action_controller/routing/route.rb +265 -0
  56. data/lib/action_controller/routing/route_set.rb +503 -0
  57. data/lib/action_controller/routing/routing_ext.rb +49 -0
  58. data/lib/action_controller/routing/segments.rb +343 -0
  59. data/lib/action_controller/routing.rb +388 -0
  60. data/lib/action_controller/session/abstract_store.rb +276 -0
  61. data/lib/action_controller/session/cookie_store.rb +240 -0
  62. data/lib/action_controller/session/mem_cache_store.rb +60 -0
  63. data/lib/action_controller/session_management.rb +54 -0
  64. data/lib/action_controller/status_codes.rb +88 -0
  65. data/lib/action_controller/streaming.rb +181 -0
  66. data/lib/action_controller/string_coercion.rb +29 -0
  67. data/lib/action_controller/templates/rescues/_request_and_response.erb +24 -0
  68. data/lib/action_controller/templates/rescues/_trace.erb +26 -0
  69. data/lib/action_controller/templates/rescues/diagnostics.erb +11 -0
  70. data/lib/action_controller/templates/rescues/layout.erb +29 -0
  71. data/lib/action_controller/templates/rescues/missing_template.erb +2 -0
  72. data/lib/action_controller/templates/rescues/routing_error.erb +10 -0
  73. data/lib/action_controller/templates/rescues/template_error.erb +21 -0
  74. data/lib/action_controller/templates/rescues/unknown_action.erb +2 -0
  75. data/lib/action_controller/test_case.rb +209 -0
  76. data/lib/action_controller/test_process.rb +580 -0
  77. data/lib/action_controller/translation.rb +13 -0
  78. data/lib/action_controller/uploaded_file.rb +44 -0
  79. data/lib/action_controller/url_rewriter.rb +229 -0
  80. data/lib/action_controller/vendor/html-scanner/html/document.rb +68 -0
  81. data/lib/action_controller/vendor/html-scanner/html/node.rb +537 -0
  82. data/lib/action_controller/vendor/html-scanner/html/sanitizer.rb +173 -0
  83. data/lib/action_controller/vendor/html-scanner/html/selector.rb +828 -0
  84. data/lib/action_controller/vendor/html-scanner/html/tokenizer.rb +105 -0
  85. data/lib/action_controller/vendor/html-scanner/html/version.rb +11 -0
  86. data/lib/action_controller/vendor/html-scanner.rb +16 -0
  87. data/lib/action_controller/verification.rb +130 -0
  88. data/lib/action_controller.rb +113 -0
  89. data/lib/action_pack/version.rb +9 -0
  90. data/lib/action_pack.rb +24 -0
  91. data/lib/action_view/base.rb +362 -0
  92. data/lib/action_view/helpers/active_record_helper.rb +305 -0
  93. data/lib/action_view/helpers/asset_tag_helper.rb +695 -0
  94. data/lib/action_view/helpers/atom_feed_helper.rb +198 -0
  95. data/lib/action_view/helpers/benchmark_helper.rb +54 -0
  96. data/lib/action_view/helpers/cache_helper.rb +39 -0
  97. data/lib/action_view/helpers/capture_helper.rb +136 -0
  98. data/lib/action_view/helpers/csrf_helper.rb +14 -0
  99. data/lib/action_view/helpers/date_helper.rb +989 -0
  100. data/lib/action_view/helpers/debug_helper.rb +38 -0
  101. data/lib/action_view/helpers/form_helper.rb +1118 -0
  102. data/lib/action_view/helpers/form_options_helper.rb +599 -0
  103. data/lib/action_view/helpers/form_tag_helper.rb +490 -0
  104. data/lib/action_view/helpers/javascript_helper.rb +208 -0
  105. data/lib/action_view/helpers/number_helper.rb +308 -0
  106. data/lib/action_view/helpers/prototype_helper.rb +1305 -0
  107. data/lib/action_view/helpers/raw_output_helper.rb +9 -0
  108. data/lib/action_view/helpers/record_identification_helper.rb +20 -0
  109. data/lib/action_view/helpers/record_tag_helper.rb +58 -0
  110. data/lib/action_view/helpers/sanitize_helper.rb +251 -0
  111. data/lib/action_view/helpers/scriptaculous_helper.rb +226 -0
  112. data/lib/action_view/helpers/tag_helper.rb +151 -0
  113. data/lib/action_view/helpers/text_helper.rb +597 -0
  114. data/lib/action_view/helpers/translation_helper.rb +67 -0
  115. data/lib/action_view/helpers/url_helper.rb +637 -0
  116. data/lib/action_view/helpers.rb +61 -0
  117. data/lib/action_view/inline_template.rb +19 -0
  118. data/lib/action_view/locale/en.yml +117 -0
  119. data/lib/action_view/partials.rb +241 -0
  120. data/lib/action_view/paths.rb +77 -0
  121. data/lib/action_view/reloadable_template.rb +117 -0
  122. data/lib/action_view/renderable.rb +109 -0
  123. data/lib/action_view/renderable_partial.rb +53 -0
  124. data/lib/action_view/template.rb +252 -0
  125. data/lib/action_view/template_error.rb +99 -0
  126. data/lib/action_view/template_handler.rb +34 -0
  127. data/lib/action_view/template_handlers/builder.rb +17 -0
  128. data/lib/action_view/template_handlers/erb.rb +25 -0
  129. data/lib/action_view/template_handlers/rjs.rb +13 -0
  130. data/lib/action_view/template_handlers.rb +48 -0
  131. data/lib/action_view/test_case.rb +162 -0
  132. data/lib/action_view.rb +58 -0
  133. data/lib/actionpack.rb +2 -0
  134. data/test/abstract_unit.rb +78 -0
  135. data/test/active_record_unit.rb +104 -0
  136. data/test/activerecord/active_record_store_test.rb +221 -0
  137. data/test/activerecord/render_partial_with_record_identification_test.rb +188 -0
  138. data/test/adv_attr_test.rb +20 -0
  139. data/test/controller/action_pack_assertions_test.rb +545 -0
  140. data/test/controller/addresses_render_test.rb +37 -0
  141. data/test/controller/assert_select_test.rb +735 -0
  142. data/test/controller/base_test.rb +217 -0
  143. data/test/controller/benchmark_test.rb +32 -0
  144. data/test/controller/caching_test.rb +743 -0
  145. data/test/controller/capture_test.rb +66 -0
  146. data/test/controller/content_type_test.rb +178 -0
  147. data/test/controller/controller_fixtures/app/controllers/admin/user_controller.rb +0 -0
  148. data/test/controller/controller_fixtures/app/controllers/user_controller.rb +0 -0
  149. data/test/controller/controller_fixtures/vendor/plugins/bad_plugin/lib/plugin_controller.rb +0 -0
  150. data/test/controller/cookie_test.rb +208 -0
  151. data/test/controller/deprecation/deprecated_base_methods_test.rb +32 -0
  152. data/test/controller/dispatcher_test.rb +144 -0
  153. data/test/controller/dom_assertions_test.rb +53 -0
  154. data/test/controller/failsafe_test.rb +60 -0
  155. data/test/controller/fake_controllers.rb +33 -0
  156. data/test/controller/fake_models.rb +19 -0
  157. data/test/controller/filter_params_test.rb +52 -0
  158. data/test/controller/filters_test.rb +885 -0
  159. data/test/controller/flash_test.rb +174 -0
  160. data/test/controller/header_test.rb +14 -0
  161. data/test/controller/helper_test.rb +224 -0
  162. data/test/controller/html-scanner/cdata_node_test.rb +15 -0
  163. data/test/controller/html-scanner/document_test.rb +148 -0
  164. data/test/controller/html-scanner/node_test.rb +89 -0
  165. data/test/controller/html-scanner/sanitizer_test.rb +281 -0
  166. data/test/controller/html-scanner/tag_node_test.rb +238 -0
  167. data/test/controller/html-scanner/text_node_test.rb +50 -0
  168. data/test/controller/html-scanner/tokenizer_test.rb +131 -0
  169. data/test/controller/http_basic_authentication_test.rb +113 -0
  170. data/test/controller/http_digest_authentication_test.rb +254 -0
  171. data/test/controller/integration_test.rb +526 -0
  172. data/test/controller/layout_test.rb +215 -0
  173. data/test/controller/localized_templates_test.rb +24 -0
  174. data/test/controller/logging_test.rb +46 -0
  175. data/test/controller/middleware_stack_test.rb +90 -0
  176. data/test/controller/mime_responds_test.rb +536 -0
  177. data/test/controller/mime_type_test.rb +93 -0
  178. data/test/controller/output_escaping_test.rb +19 -0
  179. data/test/controller/polymorphic_routes_test.rb +297 -0
  180. data/test/controller/rack_test.rb +308 -0
  181. data/test/controller/record_identifier_test.rb +139 -0
  182. data/test/controller/redirect_test.rb +285 -0
  183. data/test/controller/reloader_test.rb +125 -0
  184. data/test/controller/render_test.rb +1783 -0
  185. data/test/controller/request/json_params_parsing_test.rb +65 -0
  186. data/test/controller/request/multipart_params_parsing_test.rb +177 -0
  187. data/test/controller/request/query_string_parsing_test.rb +120 -0
  188. data/test/controller/request/test_request_test.rb +35 -0
  189. data/test/controller/request/url_encoded_params_parsing_test.rb +146 -0
  190. data/test/controller/request/xml_params_parsing_test.rb +103 -0
  191. data/test/controller/request_forgery_protection_test.rb +233 -0
  192. data/test/controller/request_test.rb +395 -0
  193. data/test/controller/rescue_test.rb +541 -0
  194. data/test/controller/resources_test.rb +1393 -0
  195. data/test/controller/routing_test.rb +2592 -0
  196. data/test/controller/selector_test.rb +628 -0
  197. data/test/controller/send_file_test.rb +171 -0
  198. data/test/controller/session/abstract_store_test.rb +64 -0
  199. data/test/controller/session/cookie_store_test.rb +354 -0
  200. data/test/controller/session/mem_cache_store_test.rb +187 -0
  201. data/test/controller/session/test_session_test.rb +58 -0
  202. data/test/controller/test_test.rb +700 -0
  203. data/test/controller/translation_test.rb +26 -0
  204. data/test/controller/url_rewriter_test.rb +395 -0
  205. data/test/controller/verification_test.rb +270 -0
  206. data/test/controller/view_paths_test.rb +141 -0
  207. data/test/controller/webservice_test.rb +260 -0
  208. data/test/fixtures/_top_level_partial.html.erb +1 -0
  209. data/test/fixtures/_top_level_partial_only.erb +1 -0
  210. data/test/fixtures/addresses/list.erb +1 -0
  211. data/test/fixtures/alternate_helpers/foo_helper.rb +3 -0
  212. data/test/fixtures/bad_customers/_bad_customer.html.erb +1 -0
  213. data/test/fixtures/companies.yml +24 -0
  214. data/test/fixtures/company.rb +10 -0
  215. data/test/fixtures/content_type/render_default_content_types_for_respond_to.rhtml +1 -0
  216. data/test/fixtures/content_type/render_default_for_rhtml.rhtml +1 -0
  217. data/test/fixtures/content_type/render_default_for_rjs.rjs +1 -0
  218. data/test/fixtures/content_type/render_default_for_rxml.rxml +1 -0
  219. data/test/fixtures/customers/_customer.html.erb +1 -0
  220. data/test/fixtures/db_definitions/sqlite.sql +49 -0
  221. data/test/fixtures/developer.rb +9 -0
  222. data/test/fixtures/developers/_developer.erb +1 -0
  223. data/test/fixtures/developers.yml +21 -0
  224. data/test/fixtures/developers_projects.yml +13 -0
  225. data/test/fixtures/failsafe/500.html +1 -0
  226. data/test/fixtures/fun/games/_game.erb +1 -0
  227. data/test/fixtures/fun/games/hello_world.erb +1 -0
  228. data/test/fixtures/fun/serious/games/_game.erb +1 -0
  229. data/test/fixtures/functional_caching/_partial.erb +3 -0
  230. data/test/fixtures/functional_caching/formatted_fragment_cached.html.erb +3 -0
  231. data/test/fixtures/functional_caching/formatted_fragment_cached.js.rjs +6 -0
  232. data/test/fixtures/functional_caching/formatted_fragment_cached.xml.builder +5 -0
  233. data/test/fixtures/functional_caching/fragment_cached.html.erb +2 -0
  234. data/test/fixtures/functional_caching/html_fragment_cached_with_partial.html.erb +1 -0
  235. data/test/fixtures/functional_caching/inline_fragment_cached.html.erb +2 -0
  236. data/test/fixtures/functional_caching/js_fragment_cached_with_partial.js.rjs +1 -0
  237. data/test/fixtures/good_customers/_good_customer.html.erb +1 -0
  238. data/test/fixtures/helpers/abc_helper.rb +5 -0
  239. data/test/fixtures/helpers/fun/games_helper.rb +3 -0
  240. data/test/fixtures/helpers/fun/pdf_helper.rb +3 -0
  241. data/test/fixtures/layout_tests/abs_path_layout.rhtml +1 -0
  242. data/test/fixtures/layout_tests/alt/hello.rhtml +1 -0
  243. data/test/fixtures/layout_tests/alt/layouts/alt.rhtml +0 -0
  244. data/test/fixtures/layout_tests/layouts/controller_name_space/nested.rhtml +1 -0
  245. data/test/fixtures/layout_tests/layouts/item.rhtml +1 -0
  246. data/test/fixtures/layout_tests/layouts/layout_test.rhtml +1 -0
  247. data/test/fixtures/layout_tests/layouts/multiple_extensions.html.erb +1 -0
  248. data/test/fixtures/layout_tests/layouts/third_party_template_library.mab +1 -0
  249. data/test/fixtures/layout_tests/views/hello.rhtml +1 -0
  250. data/test/fixtures/layouts/_column.html.erb +2 -0
  251. data/test/fixtures/layouts/block_with_layout.erb +3 -0
  252. data/test/fixtures/layouts/builder.builder +3 -0
  253. data/test/fixtures/layouts/default_html.html.erb +1 -0
  254. data/test/fixtures/layouts/partial_with_layout.erb +3 -0
  255. data/test/fixtures/layouts/standard.erb +1 -0
  256. data/test/fixtures/layouts/talk_from_action.erb +2 -0
  257. data/test/fixtures/layouts/xhr.html.erb +2 -0
  258. data/test/fixtures/layouts/yield.erb +2 -0
  259. data/test/fixtures/localized/hello_world.de.html +1 -0
  260. data/test/fixtures/localized/hello_world.en.html +1 -0
  261. data/test/fixtures/mascot.rb +3 -0
  262. data/test/fixtures/mascots/_mascot.html.erb +1 -0
  263. data/test/fixtures/mascots.yml +4 -0
  264. data/test/fixtures/multipart/binary_file +0 -0
  265. data/test/fixtures/multipart/boundary_problem_file +10 -0
  266. data/test/fixtures/multipart/bracketed_param +5 -0
  267. data/test/fixtures/multipart/empty +10 -0
  268. data/test/fixtures/multipart/hello.txt +1 -0
  269. data/test/fixtures/multipart/large_text_file +10 -0
  270. data/test/fixtures/multipart/mixed_files +0 -0
  271. data/test/fixtures/multipart/mona_lisa.jpg +0 -0
  272. data/test/fixtures/multipart/none +9 -0
  273. data/test/fixtures/multipart/single_parameter +5 -0
  274. data/test/fixtures/multipart/text_file +10 -0
  275. data/test/fixtures/override/test/hello_world.erb +1 -0
  276. data/test/fixtures/override2/layouts/test/sub.erb +1 -0
  277. data/test/fixtures/post_test/layouts/post.html.erb +1 -0
  278. data/test/fixtures/post_test/layouts/super_post.iphone.erb +1 -0
  279. data/test/fixtures/post_test/post/index.html.erb +1 -0
  280. data/test/fixtures/post_test/post/index.iphone.erb +1 -0
  281. data/test/fixtures/post_test/super_post/index.html.erb +1 -0
  282. data/test/fixtures/post_test/super_post/index.iphone.erb +1 -0
  283. data/test/fixtures/project.rb +3 -0
  284. data/test/fixtures/projects/_project.erb +1 -0
  285. data/test/fixtures/projects.yml +7 -0
  286. data/test/fixtures/public/404.html +1 -0
  287. data/test/fixtures/public/500.da.html +1 -0
  288. data/test/fixtures/public/500.html +1 -0
  289. data/test/fixtures/public/absolute/test.css +23 -0
  290. data/test/fixtures/public/absolute/test.js +63 -0
  291. data/test/fixtures/public/images/rails.png +0 -0
  292. data/test/fixtures/public/javascripts/application.js +1 -0
  293. data/test/fixtures/public/javascripts/bank.js +1 -0
  294. data/test/fixtures/public/javascripts/controls.js +1 -0
  295. data/test/fixtures/public/javascripts/dragdrop.js +1 -0
  296. data/test/fixtures/public/javascripts/effects.js +1 -0
  297. data/test/fixtures/public/javascripts/prototype.js +1 -0
  298. data/test/fixtures/public/javascripts/robber.js +1 -0
  299. data/test/fixtures/public/javascripts/subdir/subdir.js +1 -0
  300. data/test/fixtures/public/javascripts/version.1.0.js +1 -0
  301. data/test/fixtures/public/stylesheets/bank.css +1 -0
  302. data/test/fixtures/public/stylesheets/robber.css +1 -0
  303. data/test/fixtures/public/stylesheets/subdir/subdir.css +1 -0
  304. data/test/fixtures/public/stylesheets/version.1.0.css +1 -0
  305. data/test/fixtures/quiz/questions/_question.html.erb +1 -0
  306. data/test/fixtures/replies/_reply.erb +1 -0
  307. data/test/fixtures/replies.yml +15 -0
  308. data/test/fixtures/reply.rb +7 -0
  309. data/test/fixtures/respond_to/all_types_with_layout.html.erb +1 -0
  310. data/test/fixtures/respond_to/all_types_with_layout.js.rjs +1 -0
  311. data/test/fixtures/respond_to/custom_constant_handling_without_block.mobile.erb +1 -0
  312. data/test/fixtures/respond_to/iphone_with_html_response_type.html.erb +1 -0
  313. data/test/fixtures/respond_to/iphone_with_html_response_type.iphone.erb +1 -0
  314. data/test/fixtures/respond_to/layouts/missing.html.erb +1 -0
  315. data/test/fixtures/respond_to/layouts/standard.html.erb +1 -0
  316. data/test/fixtures/respond_to/layouts/standard.iphone.erb +1 -0
  317. data/test/fixtures/respond_to/using_defaults.html.erb +1 -0
  318. data/test/fixtures/respond_to/using_defaults.js.rjs +1 -0
  319. data/test/fixtures/respond_to/using_defaults.xml.builder +1 -0
  320. data/test/fixtures/respond_to/using_defaults_with_type_list.html.erb +1 -0
  321. data/test/fixtures/respond_to/using_defaults_with_type_list.js.rjs +1 -0
  322. data/test/fixtures/respond_to/using_defaults_with_type_list.xml.builder +1 -0
  323. data/test/fixtures/scope/test/modgreet.erb +1 -0
  324. data/test/fixtures/session_autoload_test/session_autoload_test/foo.rb +10 -0
  325. data/test/fixtures/shared.html.erb +1 -0
  326. data/test/fixtures/symlink_parent/symlinked_layout.erb +5 -0
  327. data/test/fixtures/test/_counter.html.erb +1 -0
  328. data/test/fixtures/test/_customer.erb +1 -0
  329. data/test/fixtures/test/_customer_counter.erb +1 -0
  330. data/test/fixtures/test/_customer_counter_with_as.erb +1 -0
  331. data/test/fixtures/test/_customer_greeting.erb +1 -0
  332. data/test/fixtures/test/_customer_with_var.erb +1 -0
  333. data/test/fixtures/test/_form.erb +1 -0
  334. data/test/fixtures/test/_from_helper.erb +1 -0
  335. data/test/fixtures/test/_hash_greeting.erb +1 -0
  336. data/test/fixtures/test/_hash_object.erb +2 -0
  337. data/test/fixtures/test/_hello.builder +1 -0
  338. data/test/fixtures/test/_labelling_form.erb +1 -0
  339. data/test/fixtures/test/_layout_for_block_with_args.html.erb +3 -0
  340. data/test/fixtures/test/_layout_for_partial.html.erb +3 -0
  341. data/test/fixtures/test/_local_inspector.html.erb +1 -0
  342. data/test/fixtures/test/_one.html.erb +1 -0
  343. data/test/fixtures/test/_partial.erb +1 -0
  344. data/test/fixtures/test/_partial.html.erb +1 -0
  345. data/test/fixtures/test/_partial.js.erb +1 -0
  346. data/test/fixtures/test/_partial_for_use_in_layout.html.erb +1 -0
  347. data/test/fixtures/test/_partial_only.erb +1 -0
  348. data/test/fixtures/test/_partial_with_only_html_version.html.erb +1 -0
  349. data/test/fixtures/test/_person.erb +2 -0
  350. data/test/fixtures/test/_raise.html.erb +1 -0
  351. data/test/fixtures/test/_two.html.erb +1 -0
  352. data/test/fixtures/test/_utf8_partial.html.erb +1 -0
  353. data/test/fixtures/test/_utf8_partial_magic.html.erb +2 -0
  354. data/test/fixtures/test/action_talk_to_layout.erb +2 -0
  355. data/test/fixtures/test/array_translation.erb +1 -0
  356. data/test/fixtures/test/calling_partial_with_layout.html.erb +1 -0
  357. data/test/fixtures/test/capturing.erb +4 -0
  358. data/test/fixtures/test/content_for.erb +2 -0
  359. data/test/fixtures/test/content_for_concatenated.erb +3 -0
  360. data/test/fixtures/test/content_for_with_parameter.erb +2 -0
  361. data/test/fixtures/test/delete_with_js.rjs +2 -0
  362. data/test/fixtures/test/dont_pick_me +1 -0
  363. data/test/fixtures/test/dot.directory/render_file_with_ivar.erb +1 -0
  364. data/test/fixtures/test/enum_rjs_test.rjs +6 -0
  365. data/test/fixtures/test/formatted_html_erb.html.erb +1 -0
  366. data/test/fixtures/test/formatted_xml_erb.builder +1 -0
  367. data/test/fixtures/test/formatted_xml_erb.html.erb +1 -0
  368. data/test/fixtures/test/formatted_xml_erb.xml.erb +1 -0
  369. data/test/fixtures/test/greeting.erb +1 -0
  370. data/test/fixtures/test/greeting.js.rjs +1 -0
  371. data/test/fixtures/test/hello.builder +4 -0
  372. data/test/fixtures/test/hello_world.da.html.erb +1 -0
  373. data/test/fixtures/test/hello_world.erb +1 -0
  374. data/test/fixtures/test/hello_world.erb~ +1 -0
  375. data/test/fixtures/test/hello_world.pt-BR.html.erb +1 -0
  376. data/test/fixtures/test/hello_world_container.builder +3 -0
  377. data/test/fixtures/test/hello_world_from_rxml.builder +4 -0
  378. data/test/fixtures/test/hello_world_with_layout_false.erb +1 -0
  379. data/test/fixtures/test/hello_xml_world.builder +11 -0
  380. data/test/fixtures/test/hyphen-ated.erb +1 -0
  381. data/test/fixtures/test/implicit_content_type.atom.builder +2 -0
  382. data/test/fixtures/test/list.erb +1 -0
  383. data/test/fixtures/test/malformed/malformed.en.html.erb~ +1 -0
  384. data/test/fixtures/test/malformed/malformed.erb~ +1 -0
  385. data/test/fixtures/test/malformed/malformed.html.erb~ +1 -0
  386. data/test/fixtures/test/nested_layout.erb +3 -0
  387. data/test/fixtures/test/non_erb_block_content_for.builder +4 -0
  388. data/test/fixtures/test/potential_conflicts.erb +4 -0
  389. data/test/fixtures/test/render_explicit_html_template.js.rjs +1 -0
  390. data/test/fixtures/test/render_file_from_template.html.erb +1 -0
  391. data/test/fixtures/test/render_file_with_ivar.erb +1 -0
  392. data/test/fixtures/test/render_file_with_locals.erb +1 -0
  393. data/test/fixtures/test/render_implicit_html_template.js.rjs +1 -0
  394. data/test/fixtures/test/render_implicit_html_template_from_xhr_request.da.html.erb +1 -0
  395. data/test/fixtures/test/render_implicit_html_template_from_xhr_request.html.erb +1 -0
  396. data/test/fixtures/test/render_implicit_js_template_without_layout.js.erb +1 -0
  397. data/test/fixtures/test/render_to_string_test.erb +1 -0
  398. data/test/fixtures/test/scoped_array_translation.erb +1 -0
  399. data/test/fixtures/test/sub_template_raise.html.erb +1 -0
  400. data/test/fixtures/test/template.erb +1 -0
  401. data/test/fixtures/test/translation.erb +1 -0
  402. data/test/fixtures/test/update_element_with_capture.erb +9 -0
  403. data/test/fixtures/test/using_layout_around_block.html.erb +1 -0
  404. data/test/fixtures/test/using_layout_around_block_with_args.html.erb +1 -0
  405. data/test/fixtures/test/utf8.html.erb +4 -0
  406. data/test/fixtures/test/utf8_magic.html.erb +5 -0
  407. data/test/fixtures/test/utf8_magic_with_bare_partial.html.erb +5 -0
  408. data/test/fixtures/topic.rb +3 -0
  409. data/test/fixtures/topics/_topic.html.erb +1 -0
  410. data/test/fixtures/topics.yml +22 -0
  411. data/test/template/active_record_helper_i18n_test.rb +51 -0
  412. data/test/template/active_record_helper_test.rb +302 -0
  413. data/test/template/asset_tag_helper_test.rb +770 -0
  414. data/test/template/atom_feed_helper_test.rb +315 -0
  415. data/test/template/benchmark_helper_test.rb +86 -0
  416. data/test/template/compiled_templates_test.rb +204 -0
  417. data/test/template/date_helper_i18n_test.rb +121 -0
  418. data/test/template/date_helper_test.rb +2603 -0
  419. data/test/template/erb_util_test.rb +36 -0
  420. data/test/template/form_helper_test.rb +1447 -0
  421. data/test/template/form_options_helper_i18n_test.rb +27 -0
  422. data/test/template/form_options_helper_test.rb +811 -0
  423. data/test/template/form_tag_helper_test.rb +356 -0
  424. data/test/template/javascript_helper_test.rb +106 -0
  425. data/test/template/number_helper_i18n_test.rb +69 -0
  426. data/test/template/number_helper_test.rb +132 -0
  427. data/test/template/prototype_helper_test.rb +639 -0
  428. data/test/template/raw_output_helper_test.rb +21 -0
  429. data/test/template/record_tag_helper_test.rb +58 -0
  430. data/test/template/render_test.rb +329 -0
  431. data/test/template/sanitize_helper_test.rb +57 -0
  432. data/test/template/scriptaculous_helper_test.rb +90 -0
  433. data/test/template/tag_helper_test.rb +98 -0
  434. data/test/template/template_test.rb +32 -0
  435. data/test/template/test_test.rb +54 -0
  436. data/test/template/text_helper_test.rb +597 -0
  437. data/test/template/translation_helper_test.rb +95 -0
  438. data/test/template/url_helper_test.rb +641 -0
  439. data/test/testing_sandbox.rb +15 -0
  440. data/test/view/test_case_test.rb +176 -0
  441. metadata +519 -0
@@ -0,0 +1,356 @@
1
+ require 'abstract_unit'
2
+
3
+ class FormTagHelperTest < ActionView::TestCase
4
+ tests ActionView::Helpers::FormTagHelper
5
+
6
+ def setup
7
+ @controller = Class.new do
8
+ def url_for(options)
9
+ "http://www.example.com"
10
+ end
11
+ end
12
+ @controller = @controller.new
13
+ end
14
+
15
+ VALID_HTML_ID = /^[A-Za-z][-_:.A-Za-z0-9]*$/ # see http://www.w3.org/TR/html4/types.html#type-name
16
+
17
+ def test_check_box_tag
18
+ actual = check_box_tag "admin"
19
+ expected = %(<input id="admin" name="admin" type="checkbox" value="1" />)
20
+ assert_dom_equal expected, actual
21
+ end
22
+
23
+ def test_check_box_tag_id_sanitized
24
+ label_elem = root_elem(check_box_tag("project[2][admin]"))
25
+ assert_match VALID_HTML_ID, label_elem['id']
26
+ end
27
+
28
+ def test_form_tag
29
+ actual = form_tag
30
+ expected = %(<form action="http://www.example.com" method="post">)
31
+ assert_dom_equal expected, actual
32
+ end
33
+
34
+ def test_form_tag_multipart
35
+ actual = form_tag({}, { 'multipart' => true })
36
+ expected = %(<form action="http://www.example.com" enctype="multipart/form-data" method="post">)
37
+ assert_dom_equal expected, actual
38
+ end
39
+
40
+ def test_form_tag_with_method_put
41
+ actual = form_tag({}, { :method => :put })
42
+ expected = %(<form action="http://www.example.com" method="post"><div style='margin:0;padding:0;display:inline'><input type="hidden" name="_method" value="put" /></div>)
43
+ assert_dom_equal expected, actual
44
+ end
45
+
46
+ def test_form_tag_with_method_delete
47
+ actual = form_tag({}, { :method => :delete })
48
+ expected = %(<form action="http://www.example.com" method="post"><div style='margin:0;padding:0;display:inline'><input type="hidden" name="_method" value="delete" /></div>)
49
+ assert_dom_equal expected, actual
50
+ end
51
+
52
+ def test_form_tag_with_block_in_erb
53
+ __in_erb_template = ''
54
+ form_tag("http://example.com") { concat "Hello world!" }
55
+
56
+ expected = %(<form action="http://example.com" method="post">Hello world!</form>)
57
+ assert_dom_equal expected, output_buffer
58
+ end
59
+
60
+ def test_form_tag_with_block_and_method_in_erb
61
+ __in_erb_template = ''
62
+ form_tag("http://example.com", :method => :put) { concat "Hello world!" }
63
+
64
+ expected = %(<form action="http://example.com" method="post"><div style='margin:0;padding:0;display:inline'><input type="hidden" name="_method" value="put" /></div>Hello world!</form>)
65
+ assert_dom_equal expected, output_buffer
66
+ end
67
+
68
+ def test_hidden_field_tag
69
+ actual = hidden_field_tag "id", 3
70
+ expected = %(<input id="id" name="id" type="hidden" value="3" />)
71
+ assert_dom_equal expected, actual
72
+ end
73
+
74
+ def test_hidden_field_tag_id_sanitized
75
+ input_elem = root_elem(hidden_field_tag("item[][title]"))
76
+ assert_match VALID_HTML_ID, input_elem['id']
77
+ end
78
+
79
+ def test_file_field_tag
80
+ assert_dom_equal "<input name=\"picsplz\" type=\"file\" id=\"picsplz\" />", file_field_tag("picsplz")
81
+ end
82
+
83
+ def test_file_field_tag_with_options
84
+ assert_dom_equal "<input name=\"picsplz\" type=\"file\" id=\"picsplz\" class=\"pix\"/>", file_field_tag("picsplz", :class => "pix")
85
+ end
86
+
87
+ def test_password_field_tag
88
+ actual = password_field_tag
89
+ expected = %(<input id="password" name="password" type="password" />)
90
+ assert_dom_equal expected, actual
91
+ end
92
+
93
+ def test_radio_button_tag
94
+ actual = radio_button_tag "people", "david"
95
+ expected = %(<input id="people_david" name="people" type="radio" value="david" />)
96
+ assert_dom_equal expected, actual
97
+
98
+ actual = radio_button_tag("num_people", 5)
99
+ expected = %(<input id="num_people_5" name="num_people" type="radio" value="5" />)
100
+ assert_dom_equal expected, actual
101
+
102
+ actual = radio_button_tag("gender", "m") + radio_button_tag("gender", "f")
103
+ expected = %(<input id="gender_m" name="gender" type="radio" value="m" /><input id="gender_f" name="gender" type="radio" value="f" />)
104
+ assert_dom_equal expected, actual
105
+
106
+ actual = radio_button_tag("opinion", "-1") + radio_button_tag("opinion", "1")
107
+ expected = %(<input id="opinion_-1" name="opinion" type="radio" value="-1" /><input id="opinion_1" name="opinion" type="radio" value="1" />)
108
+ assert_dom_equal expected, actual
109
+
110
+ actual = radio_button_tag("person[gender]", "m")
111
+ expected = %(<input id="person_gender_m" name="person[gender]" type="radio" value="m" />)
112
+ assert_dom_equal expected, actual
113
+ end
114
+
115
+ def test_select_tag
116
+ actual = select_tag "people", "<option>david</option>".html_safe
117
+ expected = %(<select id="people" name="people"><option>david</option></select>)
118
+ assert_dom_equal expected, actual
119
+ end
120
+
121
+ def test_select_tag_with_multiple
122
+ actual = select_tag "colors", "<option>Red</option><option>Blue</option><option>Green</option>".html_safe, :multiple => :true
123
+ expected = %(<select id="colors" multiple="multiple" name="colors"><option>Red</option><option>Blue</option><option>Green</option></select>)
124
+ assert_dom_equal expected, actual
125
+ end
126
+
127
+ def test_select_tag_disabled
128
+ actual = select_tag "places", "<option>Home</option><option>Work</option><option>Pub</option>".html_safe, :disabled => :true
129
+ expected = %(<select id="places" disabled="disabled" name="places"><option>Home</option><option>Work</option><option>Pub</option></select>)
130
+ assert_dom_equal expected, actual
131
+ end
132
+
133
+ def test_select_tag_id_sanitized
134
+ input_elem = root_elem(select_tag("project[1]people", "<option>david</option>"))
135
+ assert_match VALID_HTML_ID, input_elem['id']
136
+ end
137
+
138
+ def test_select_tag_with_array_options
139
+ assert_deprecated /array/ do
140
+ select_tag "people", ["<option>david</option>"]
141
+ end
142
+ end
143
+
144
+ def test_text_area_tag_size_string
145
+ actual = text_area_tag "body", "hello world", "size" => "20x40"
146
+ expected = %(<textarea cols="20" id="body" name="body" rows="40">hello world</textarea>)
147
+ assert_dom_equal expected, actual
148
+ end
149
+
150
+ def test_text_area_tag_size_symbol
151
+ actual = text_area_tag "body", "hello world", :size => "20x40"
152
+ expected = %(<textarea cols="20" id="body" name="body" rows="40">hello world</textarea>)
153
+ assert_dom_equal expected, actual
154
+ end
155
+
156
+ def test_text_area_tag_should_disregard_size_if_its_given_as_an_integer
157
+ actual = text_area_tag "body", "hello world", :size => 20
158
+ expected = %(<textarea id="body" name="body">hello world</textarea>)
159
+ assert_dom_equal expected, actual
160
+ end
161
+
162
+ def test_text_area_tag_id_sanitized
163
+ input_elem = root_elem(text_area_tag("item[][description]"))
164
+ assert_match VALID_HTML_ID, input_elem['id']
165
+ end
166
+
167
+ def test_text_area_tag_escape_content
168
+ actual = text_area_tag "body", "<b>hello world</b>", :size => "20x40"
169
+ expected = %(<textarea cols="20" id="body" name="body" rows="40">&lt;b&gt;hello world&lt;/b&gt;</textarea>)
170
+ assert_dom_equal expected, actual
171
+ end
172
+
173
+ def test_text_area_tag_unescaped_content
174
+ actual = text_area_tag "body", "<b>hello world</b>", :size => "20x40", :escape => false
175
+ expected = %(<textarea cols="20" id="body" name="body" rows="40"><b>hello world</b></textarea>)
176
+ assert_dom_equal expected, actual
177
+ end
178
+
179
+ def test_text_area_tag_unescaped_nil_content
180
+ actual = text_area_tag "body", nil, :escape => false
181
+ expected = %(<textarea id="body" name="body"></textarea>)
182
+ assert_dom_equal expected, actual
183
+ end
184
+
185
+ def test_text_field_tag
186
+ actual = text_field_tag "title", "Hello!"
187
+ expected = %(<input id="title" name="title" type="text" value="Hello!" />)
188
+ assert_dom_equal expected, actual
189
+ end
190
+
191
+ def test_text_field_tag_class_string
192
+ actual = text_field_tag "title", "Hello!", "class" => "admin"
193
+ expected = %(<input class="admin" id="title" name="title" type="text" value="Hello!" />)
194
+ assert_dom_equal expected, actual
195
+ end
196
+
197
+ def test_text_field_tag_size_symbol
198
+ actual = text_field_tag "title", "Hello!", :size => 75
199
+ expected = %(<input id="title" name="title" size="75" type="text" value="Hello!" />)
200
+ assert_dom_equal expected, actual
201
+ end
202
+
203
+ def test_text_field_tag_size_string
204
+ actual = text_field_tag "title", "Hello!", "size" => "75"
205
+ expected = %(<input id="title" name="title" size="75" type="text" value="Hello!" />)
206
+ assert_dom_equal expected, actual
207
+ end
208
+
209
+ def test_text_field_tag_maxlength_symbol
210
+ actual = text_field_tag "title", "Hello!", :maxlength => 75
211
+ expected = %(<input id="title" name="title" maxlength="75" type="text" value="Hello!" />)
212
+ assert_dom_equal expected, actual
213
+ end
214
+
215
+ def test_text_field_tag_maxlength_string
216
+ actual = text_field_tag "title", "Hello!", "maxlength" => "75"
217
+ expected = %(<input id="title" name="title" maxlength="75" type="text" value="Hello!" />)
218
+ assert_dom_equal expected, actual
219
+ end
220
+
221
+ def test_text_field_disabled
222
+ actual = text_field_tag "title", "Hello!", :disabled => :true
223
+ expected = %(<input id="title" name="title" disabled="disabled" type="text" value="Hello!" />)
224
+ assert_dom_equal expected, actual
225
+ end
226
+
227
+ def test_text_field_tag_with_multiple_options
228
+ actual = text_field_tag "title", "Hello!", :size => 70, :maxlength => 80
229
+ expected = %(<input id="title" name="title" size="70" maxlength="80" type="text" value="Hello!" />)
230
+ assert_dom_equal expected, actual
231
+ end
232
+
233
+ def test_text_field_tag_id_sanitized
234
+ input_elem = root_elem(text_field_tag("item[][title]"))
235
+ assert_match VALID_HTML_ID, input_elem['id']
236
+ end
237
+
238
+ def test_label_tag_without_text
239
+ actual = label_tag "title"
240
+ expected = %(<label for="title">Title</label>)
241
+ assert_dom_equal expected, actual
242
+ end
243
+
244
+ def test_label_tag_with_symbol
245
+ actual = label_tag :title
246
+ expected = %(<label for="title">Title</label>)
247
+ assert_dom_equal expected, actual
248
+ end
249
+
250
+ def test_label_tag_with_text
251
+ actual = label_tag "title", "My Title"
252
+ expected = %(<label for="title">My Title</label>)
253
+ assert_dom_equal expected, actual
254
+ end
255
+
256
+ def test_label_tag_class_string
257
+ actual = label_tag "title", "My Title", "class" => "small_label"
258
+ expected = %(<label for="title" class="small_label">My Title</label>)
259
+ assert_dom_equal expected, actual
260
+ end
261
+
262
+ def test_label_tag_id_sanitized
263
+ label_elem = root_elem(label_tag("item[title]"))
264
+ assert_match VALID_HTML_ID, label_elem['for']
265
+ end
266
+
267
+ def test_boolean_options
268
+ assert_dom_equal %(<input checked="checked" disabled="disabled" id="admin" name="admin" readonly="readonly" type="checkbox" value="1" />), check_box_tag("admin", 1, true, 'disabled' => true, :readonly => "yes")
269
+ assert_dom_equal %(<input checked="checked" id="admin" name="admin" type="checkbox" value="1" />), check_box_tag("admin", 1, true, :disabled => false, :readonly => nil)
270
+ assert_dom_equal %(<input type="checkbox" />), tag(:input, :type => "checkbox", :checked => false)
271
+ assert_dom_equal %(<select id="people" multiple="multiple" name="people[]"><option>david</option></select>), select_tag("people", "<option>david</option>".html_safe, :multiple => true)
272
+ assert_dom_equal %(<select id="people_" multiple="multiple" name="people[]"><option>david</option></select>), select_tag("people[]", "<option>david</option>".html_safe, :multiple => true)
273
+ assert_dom_equal %(<select id="people" name="people"><option>david</option></select>), select_tag("people", "<option>david</option>".html_safe, :multiple => nil)
274
+ end
275
+
276
+ def test_stringify_symbol_keys
277
+ actual = text_field_tag "title", "Hello!", :id => "admin"
278
+ expected = %(<input id="admin" name="title" type="text" value="Hello!" />)
279
+ assert_dom_equal expected, actual
280
+ end
281
+
282
+ def test_submit_tag
283
+ assert_dom_equal(
284
+ %(<input name='commit' onclick="if (window.hiddenCommit) { window.hiddenCommit.setAttribute('value', this.value); }else { hiddenCommit = document.createElement('input');hiddenCommit.type = 'hidden';hiddenCommit.value = this.value;hiddenCommit.name = this.name;this.form.appendChild(hiddenCommit); }this.setAttribute('originalValue', this.value);this.disabled = true;this.value='Saving...';alert('hello!');result = (this.form.onsubmit ? (this.form.onsubmit() ? this.form.submit() : false) : this.form.submit());if (result == false) { this.value = this.getAttribute('originalValue');this.disabled = false; }return result;" type="submit" value="Save" />),
285
+ submit_tag("Save", :disable_with => "Saving...", :onclick => "alert('hello!')")
286
+ )
287
+ end
288
+
289
+ def test_submit_tag_with_no_onclick_options
290
+ assert_dom_equal(
291
+ %(<input name='commit' onclick="if (window.hiddenCommit) { window.hiddenCommit.setAttribute('value', this.value); }else { hiddenCommit = document.createElement('input');hiddenCommit.type = 'hidden';hiddenCommit.value = this.value;hiddenCommit.name = this.name;this.form.appendChild(hiddenCommit); }this.setAttribute('originalValue', this.value);this.disabled = true;this.value='Saving...';result = (this.form.onsubmit ? (this.form.onsubmit() ? this.form.submit() : false) : this.form.submit());if (result == false) { this.value = this.getAttribute('originalValue');this.disabled = false; }return result;" type="submit" value="Save" />),
292
+ submit_tag("Save", :disable_with => "Saving...")
293
+ )
294
+ end
295
+
296
+ def test_submit_tag_with_confirmation
297
+ assert_dom_equal(
298
+ %(<input name='commit' type='submit' value='Save' onclick="if (!confirm('Are you sure?')) return false; return true;"/>),
299
+ submit_tag("Save", :confirm => "Are you sure?")
300
+ )
301
+ end
302
+
303
+ def test_submit_tag_with_confirmation_and_with_disable_with
304
+ assert_dom_equal(
305
+ %(<input name="commit" onclick="if (!confirm('Are you sure?')) return false; if (window.hiddenCommit) { window.hiddenCommit.setAttribute('value', this.value); }else { hiddenCommit = document.createElement('input');hiddenCommit.type = 'hidden';hiddenCommit.value = this.value;hiddenCommit.name = this.name;this.form.appendChild(hiddenCommit); }this.setAttribute('originalValue', this.value);this.disabled = true;this.value='Saving...';result = (this.form.onsubmit ? (this.form.onsubmit() ? this.form.submit() : false) : this.form.submit());if (result == false) { this.value = this.getAttribute('originalValue');this.disabled = false; }return result;" type="submit" value="Save" />),
306
+ submit_tag("Save", :disable_with => "Saving...", :confirm => "Are you sure?")
307
+ )
308
+ end
309
+
310
+ def test_image_submit_tag_with_confirmation
311
+ assert_dom_equal(
312
+ %(<input type="image" src="/images/save.gif" onclick="return confirm('Are you sure?');"/>),
313
+ image_submit_tag("save.gif", :confirm => "Are you sure?")
314
+ )
315
+ end
316
+
317
+ def test_pass
318
+ assert_equal 1, 1
319
+ end
320
+
321
+ def test_field_set_tag_in_erb
322
+ __in_erb_template = ''
323
+ field_set_tag("Your details") { concat "Hello world!" }
324
+
325
+ expected = %(<fieldset><legend>Your details</legend>Hello world!</fieldset>)
326
+ assert_dom_equal expected, output_buffer
327
+
328
+ self.output_buffer = ''.html_safe
329
+ field_set_tag { concat "Hello world!" }
330
+
331
+ expected = %(<fieldset>Hello world!</fieldset>)
332
+ assert_dom_equal expected, output_buffer
333
+
334
+ self.output_buffer = ''.html_safe
335
+ field_set_tag('') { concat "Hello world!" }
336
+
337
+ expected = %(<fieldset>Hello world!</fieldset>)
338
+ assert_dom_equal expected, output_buffer
339
+
340
+ self.output_buffer = ''.html_safe
341
+ field_set_tag('', :class => 'format') { concat "Hello world!" }
342
+
343
+ expected = %(<fieldset class="format">Hello world!</fieldset>)
344
+ assert_dom_equal expected, output_buffer
345
+ end
346
+
347
+ def protect_against_forgery?
348
+ false
349
+ end
350
+
351
+ private
352
+
353
+ def root_elem(rendered_content)
354
+ HTML::Document.new(rendered_content).root.children[0]
355
+ end
356
+ end
@@ -0,0 +1,106 @@
1
+ require 'abstract_unit'
2
+
3
+ class JavaScriptHelperTest < ActionView::TestCase
4
+ tests ActionView::Helpers::JavaScriptHelper
5
+
6
+ attr_accessor :template_format, :output_buffer
7
+
8
+ def setup
9
+ @template = self
10
+ end
11
+
12
+ def test_escape_javascript
13
+ assert_equal '', escape_javascript(nil)
14
+ assert_equal %(This \\"thing\\" is really\\n netos\\'), escape_javascript(%(This "thing" is really\n netos'))
15
+ assert_equal %(backslash\\\\test), escape_javascript( %(backslash\\test) )
16
+ assert_equal %(dont <\\/close> tags), escape_javascript(%(dont </close> tags))
17
+ end
18
+
19
+ def test_link_to_function
20
+ assert_dom_equal %(<a href="#" onclick="alert('Hello world!'); return false;">Greeting</a>),
21
+ link_to_function("Greeting", "alert('Hello world!')")
22
+ end
23
+
24
+ def test_link_to_function_with_existing_onclick
25
+ assert_dom_equal %(<a href="#" onclick="confirm('Sanity!'); alert('Hello world!'); return false;">Greeting</a>),
26
+ link_to_function("Greeting", "alert('Hello world!')", :onclick => "confirm('Sanity!')")
27
+ end
28
+
29
+ def test_link_to_function_with_rjs_block
30
+ html = link_to_function( "Greet me!" ) do |page|
31
+ page.replace_html 'header', "<h1>Greetings</h1>"
32
+ end
33
+ assert_dom_equal %(<a href="#" onclick="Element.update(&quot;header&quot;, &quot;\\u003Ch1\\u003EGreetings\\u003C/h1\\u003E&quot;);; return false;">Greet me!</a>), html
34
+ end
35
+
36
+ def test_link_to_function_with_rjs_block_and_options
37
+ html = link_to_function( "Greet me!", :class => "updater" ) do |page|
38
+ page.replace_html 'header', "<h1>Greetings</h1>"
39
+ end
40
+ assert_dom_equal %(<a href="#" class="updater" onclick="Element.update(&quot;header&quot;, &quot;\\u003Ch1\\u003EGreetings\\u003C/h1\\u003E&quot;);; return false;">Greet me!</a>), html
41
+ end
42
+
43
+ def test_link_to_function_with_href
44
+ assert_dom_equal %(<a href="http://example.com/" onclick="alert('Hello world!'); return false;">Greeting</a>),
45
+ link_to_function("Greeting", "alert('Hello world!')", :href => 'http://example.com/')
46
+ end
47
+
48
+ def test_button_to_function
49
+ assert_dom_equal %(<input type="button" onclick="alert('Hello world!');" value="Greeting" />),
50
+ button_to_function("Greeting", "alert('Hello world!')")
51
+ end
52
+
53
+ def test_button_to_function_with_rjs_block
54
+ html = button_to_function( "Greet me!" ) do |page|
55
+ page.replace_html 'header', "<h1>Greetings</h1>"
56
+ end
57
+ assert_dom_equal %(<input type="button" onclick="Element.update(&quot;header&quot;, &quot;\\u003Ch1\\u003EGreetings\\u003C/h1\\u003E&quot;);;" value="Greet me!" />), html
58
+ end
59
+
60
+ def test_button_to_function_with_rjs_block_and_options
61
+ html = button_to_function( "Greet me!", :class => "greeter" ) do |page|
62
+ page.replace_html 'header', "<h1>Greetings</h1>"
63
+ end
64
+ assert_dom_equal %(<input type="button" class="greeter" onclick="Element.update(&quot;header&quot;, &quot;\\u003Ch1\\u003EGreetings\\u003C\/h1\\u003E&quot;);;" value="Greet me!" />), html
65
+ end
66
+
67
+ def test_button_to_function_with_onclick
68
+ assert_dom_equal "<input onclick=\"alert('Goodbye World :('); alert('Hello world!');\" type=\"button\" value=\"Greeting\" />",
69
+ button_to_function("Greeting", "alert('Hello world!')", :onclick => "alert('Goodbye World :(')")
70
+ end
71
+
72
+ def test_button_to_function_without_function
73
+ assert_dom_equal "<input onclick=\";\" type=\"button\" value=\"Greeting\" />",
74
+ button_to_function("Greeting")
75
+ end
76
+
77
+ def test_javascript_tag
78
+ self.output_buffer = 'foo'
79
+
80
+ assert_dom_equal "<script type=\"text/javascript\">\n//<![CDATA[\nalert('hello')\n//]]>\n</script>",
81
+ javascript_tag("alert('hello')")
82
+
83
+ assert_equal 'foo', output_buffer, 'javascript_tag without a block should not concat to output_buffer'
84
+ end
85
+
86
+ def test_javascript_tag_with_options
87
+ assert_dom_equal "<script id=\"the_js_tag\" type=\"text/javascript\">\n//<![CDATA[\nalert('hello')\n//]]>\n</script>",
88
+ javascript_tag("alert('hello')", :id => "the_js_tag")
89
+ end
90
+
91
+ def test_javascript_tag_with_block_in_erb
92
+ __in_erb_template = ''
93
+ javascript_tag { concat "alert('hello')" }
94
+ assert_dom_equal "<script type=\"text/javascript\">\n//<![CDATA[\nalert('hello')\n//]]>\n</script>", output_buffer
95
+ end
96
+
97
+ def test_javascript_tag_with_block_and_options_in_erb
98
+ __in_erb_template = ''
99
+ javascript_tag(:id => "the_js_tag") { concat "alert('hello')" }
100
+ assert_dom_equal "<script id=\"the_js_tag\" type=\"text/javascript\">\n//<![CDATA[\nalert('hello')\n//]]>\n</script>", output_buffer
101
+ end
102
+
103
+ def test_javascript_cdata_section
104
+ assert_dom_equal "\n//<![CDATA[\nalert('hello')\n//]]>\n", javascript_cdata_section("alert('hello')")
105
+ end
106
+ end
@@ -0,0 +1,69 @@
1
+ require 'abstract_unit'
2
+
3
+ class NumberHelperI18nTests < Test::Unit::TestCase
4
+ include ActionView::Helpers::NumberHelper
5
+
6
+ attr_reader :request
7
+
8
+ def setup
9
+ @number_defaults = { :precision => 3, :delimiter => ',', :separator => '.' }
10
+ @currency_defaults = { :unit => '$', :format => '%u%n', :precision => 2 }
11
+ @human_defaults = { :precision => 1 }
12
+ @human_storage_units_format_default = "%n %u"
13
+ @human_storage_units_units_byte_other = "Bytes"
14
+ @human_storage_units_units_kb_other = "KB"
15
+ @percentage_defaults = { :delimiter => '' }
16
+ @precision_defaults = { :delimiter => '' }
17
+
18
+ I18n.backend.store_translations 'en', :number => { :format => @number_defaults,
19
+ :currency => { :format => @currency_defaults }, :human => @human_defaults }
20
+ end
21
+
22
+ def test_number_to_currency_translates_currency_formats
23
+ I18n.expects(:translate).with(:'number.format', :locale => 'en', :raise => true).returns(@number_defaults)
24
+ I18n.expects(:translate).with(:'number.currency.format', :locale => 'en',
25
+ :raise => true).returns(@currency_defaults)
26
+ number_to_currency(1, :locale => 'en')
27
+ end
28
+
29
+ def test_number_with_precision_translates_number_formats
30
+ I18n.expects(:translate).with(:'number.format', :locale => 'en', :raise => true).returns(@number_defaults)
31
+ I18n.expects(:translate).with(:'number.precision.format', :locale => 'en',
32
+ :raise => true).returns(@precision_defaults)
33
+ number_with_precision(1, :locale => 'en')
34
+ end
35
+
36
+ def test_number_with_delimiter_translates_number_formats
37
+ I18n.expects(:translate).with(:'number.format', :locale => 'en', :raise => true).returns(@number_defaults)
38
+ number_with_delimiter(1, :locale => 'en')
39
+ end
40
+
41
+ def test_number_to_percentage_translates_number_formats
42
+ I18n.expects(:translate).with(:'number.format', :locale => 'en', :raise => true).returns(@number_defaults)
43
+ I18n.expects(:translate).with(:'number.percentage.format', :locale => 'en',
44
+ :raise => true).returns(@percentage_defaults)
45
+ number_to_percentage(1, :locale => 'en')
46
+ end
47
+
48
+ def test_number_to_human_size_translates_human_formats
49
+ I18n.expects(:translate).with(:'number.format', :locale => 'en', :raise => true).returns(@number_defaults)
50
+ I18n.expects(:translate).with(:'number.human.format', :locale => 'en',
51
+ :raise => true).returns(@human_defaults)
52
+ I18n.expects(:translate).with(:'number.human.storage_units.format', :locale => 'en',
53
+ :raise => true).returns(@human_storage_units_format_default)
54
+ I18n.expects(:translate).with(:'number.human.storage_units.units.kb', :locale => 'en', :count => 2,
55
+ :raise => true).returns(@human_storage_units_units_kb_other)
56
+ # 2KB
57
+ number_to_human_size(2048, :locale => 'en')
58
+
59
+ I18n.expects(:translate).with(:'number.format', :locale => 'en', :raise => true).returns(@number_defaults)
60
+ I18n.expects(:translate).with(:'number.human.format', :locale => 'en',
61
+ :raise => true).returns(@human_defaults)
62
+ I18n.expects(:translate).with(:'number.human.storage_units.format', :locale => 'en',
63
+ :raise => true).returns(@human_storage_units_format_default)
64
+ I18n.expects(:translate).with(:'number.human.storage_units.units.byte', :locale => 'en', :count => 42,
65
+ :raise => true).returns(@human_storage_units_units_byte_other)
66
+ # 42 Bytes
67
+ number_to_human_size(42, :locale => 'en')
68
+ end
69
+ end
@@ -0,0 +1,132 @@
1
+ require 'abstract_unit'
2
+
3
+ class NumberHelperTest < ActionView::TestCase
4
+ tests ActionView::Helpers::NumberHelper
5
+
6
+ def test_number_to_phone
7
+ assert_equal("555-1234", number_to_phone(5551234))
8
+ assert_equal("800-555-1212", number_to_phone(8005551212))
9
+ assert_equal("(800) 555-1212", number_to_phone(8005551212, {:area_code => true}))
10
+ assert_equal("800 555 1212", number_to_phone(8005551212, {:delimiter => " "}))
11
+ assert_equal("(800) 555-1212 x 123", number_to_phone(8005551212, {:area_code => true, :extension => 123}))
12
+ assert_equal("800-555-1212", number_to_phone(8005551212, :extension => " "))
13
+ assert_equal("800-555-1212", number_to_phone("8005551212"))
14
+ assert_equal("+1-800-555-1212", number_to_phone(8005551212, :country_code => 1))
15
+ assert_equal("+18005551212", number_to_phone(8005551212, :country_code => 1, :delimiter => ''))
16
+ assert_equal("22-555-1212", number_to_phone(225551212))
17
+ assert_equal("+45-22-555-1212", number_to_phone(225551212, :country_code => 45))
18
+ assert_equal("x", number_to_phone("x"))
19
+ assert_nil number_to_phone(nil)
20
+ end
21
+
22
+ def test_number_to_currency
23
+ assert_equal("$1,234,567,890.50", number_to_currency(1234567890.50))
24
+ assert_equal("$1,234,567,890.51", number_to_currency(1234567890.506))
25
+ assert_equal("$1,234,567,892", number_to_currency(1234567891.50, {:precision => 0}))
26
+ assert_equal("$1,234,567,890.5", number_to_currency(1234567890.50, {:precision => 1}))
27
+ assert_equal("&pound;1234567890,50", number_to_currency(1234567890.50, {:unit => "&pound;", :separator => ",", :delimiter => ""}))
28
+ assert_equal("$1,234,567,890.50", number_to_currency("1234567890.50"))
29
+ assert_equal("1,234,567,890.50 K&#269;", number_to_currency("1234567890.50", {:unit => "K&#269;", :format => "%n %u"}))
30
+ #assert_equal("$x.", number_to_currency("x")) # fails due to API consolidation
31
+ assert_equal("$x", number_to_currency("x"))
32
+ assert_nil number_to_currency(nil)
33
+ end
34
+
35
+ def test_number_to_percentage
36
+ assert_equal("100.000%", number_to_percentage(100))
37
+ assert_equal("100%", number_to_percentage(100, {:precision => 0}))
38
+ assert_equal("302.06%", number_to_percentage(302.0574, {:precision => 2}))
39
+ assert_equal("100.000%", number_to_percentage("100"))
40
+ assert_equal("1000.000%", number_to_percentage("1000"))
41
+ assert_equal("x%", number_to_percentage("x"))
42
+ assert_equal("1.000,000%", number_to_percentage(1000, :delimiter => '.', :separator => ','))
43
+ assert_nil number_to_percentage(nil)
44
+ end
45
+
46
+ def test_number_with_delimiter
47
+ assert_equal("12,345,678", number_with_delimiter(12345678))
48
+ assert_equal("0", number_with_delimiter(0))
49
+ assert_equal("123", number_with_delimiter(123))
50
+ assert_equal("123,456", number_with_delimiter(123456))
51
+ assert_equal("123,456.78", number_with_delimiter(123456.78))
52
+ assert_equal("123,456.789", number_with_delimiter(123456.789))
53
+ assert_equal("123,456.78901", number_with_delimiter(123456.78901))
54
+ assert_equal("123,456,789.78901", number_with_delimiter(123456789.78901))
55
+ assert_equal("0.78901", number_with_delimiter(0.78901))
56
+ assert_equal("123,456.78", number_with_delimiter("123456.78"))
57
+ assert_equal("x", number_with_delimiter("x"))
58
+ assert_nil number_with_delimiter(nil)
59
+ end
60
+
61
+ def test_number_with_delimiter_with_options_hash
62
+ assert_equal '12 345 678', number_with_delimiter(12345678, :delimiter => ' ')
63
+ assert_equal '12,345,678-05', number_with_delimiter(12345678.05, :separator => '-')
64
+ assert_equal '12.345.678,05', number_with_delimiter(12345678.05, :separator => ',', :delimiter => '.')
65
+ assert_equal '12.345.678,05', number_with_delimiter(12345678.05, :delimiter => '.', :separator => ',')
66
+ end
67
+
68
+ def test_number_with_precision
69
+ assert_equal("111.235", number_with_precision(111.2346))
70
+ assert_equal("31.83", number_with_precision(31.825, :precision => 2))
71
+ assert_equal("111.23", number_with_precision(111.2346, :precision => 2))
72
+ assert_equal("111.00", number_with_precision(111, :precision => 2))
73
+ assert_equal("111.235", number_with_precision("111.2346"))
74
+ assert_equal("31.83", number_with_precision("31.825", :precision => 2))
75
+ assert_equal("112", number_with_precision(111.50, :precision => 0))
76
+ assert_equal("1234567892", number_with_precision(1234567891.50, :precision => 0))
77
+
78
+ # Return non-numeric params unchanged.
79
+ assert_equal("x", number_with_precision("x"))
80
+ assert_nil number_with_precision(nil)
81
+ end
82
+
83
+ def test_number_with_precision_with_custom_delimiter_and_separator
84
+ assert_equal '31,83', number_with_precision(31.825, :precision => 2, :separator => ',')
85
+ assert_equal '1.231,83', number_with_precision(1231.825, :precision => 2, :separator => ',', :delimiter => '.')
86
+ end
87
+
88
+ def test_number_to_human_size
89
+ assert_equal '0 Bytes', number_to_human_size(0)
90
+ assert_equal '1 Byte', number_to_human_size(1)
91
+ assert_equal '3 Bytes', number_to_human_size(3.14159265)
92
+ assert_equal '123 Bytes', number_to_human_size(123.0)
93
+ assert_equal '123 Bytes', number_to_human_size(123)
94
+ assert_equal '1.2 KB', number_to_human_size(1234)
95
+ assert_equal '12.1 KB', number_to_human_size(12345)
96
+ assert_equal '1.2 MB', number_to_human_size(1234567)
97
+ assert_equal '1.1 GB', number_to_human_size(1234567890)
98
+ assert_equal '1.1 TB', number_to_human_size(1234567890123)
99
+ assert_equal '1025 TB', number_to_human_size(1025.terabytes)
100
+ assert_equal '444 KB', number_to_human_size(444.kilobytes)
101
+ assert_equal '1023 MB', number_to_human_size(1023.megabytes)
102
+ assert_equal '3 TB', number_to_human_size(3.terabytes)
103
+ assert_equal '1.18 MB', number_to_human_size(1234567, :precision => 2)
104
+ assert_equal '3 Bytes', number_to_human_size(3.14159265, :precision => 4)
105
+ assert_equal("123 Bytes", number_to_human_size("123"))
106
+ assert_equal '1.01 KB', number_to_human_size(1.0123.kilobytes, :precision => 2)
107
+ assert_equal '1.01 KB', number_to_human_size(1.0100.kilobytes, :precision => 4)
108
+ assert_equal '10 KB', number_to_human_size(10.000.kilobytes, :precision => 4)
109
+ assert_equal '1 Byte', number_to_human_size(1.1)
110
+ assert_equal '10 Bytes', number_to_human_size(10)
111
+ #assert_nil number_to_human_size('x') # fails due to API consolidation
112
+ assert_nil number_to_human_size(nil)
113
+ end
114
+
115
+ def test_number_to_human_size_with_options_hash
116
+ assert_equal '1.18 MB', number_to_human_size(1234567, :precision => 2)
117
+ assert_equal '3 Bytes', number_to_human_size(3.14159265, :precision => 4)
118
+ assert_equal '1.01 KB', number_to_human_size(1.0123.kilobytes, :precision => 2)
119
+ assert_equal '1.01 KB', number_to_human_size(1.0100.kilobytes, :precision => 4)
120
+ assert_equal '10 KB', number_to_human_size(10.000.kilobytes, :precision => 4)
121
+ assert_equal '1 TB', number_to_human_size(1234567890123, :precision => 0)
122
+ assert_equal '500 MB', number_to_human_size(524288000, :precision=>0)
123
+ assert_equal '40 KB', number_to_human_size(41010, :precision => 0)
124
+ assert_equal '40 KB', number_to_human_size(41100, :precision => 0)
125
+ end
126
+
127
+ def test_number_to_human_size_with_custom_delimiter_and_separator
128
+ assert_equal '1,01 KB', number_to_human_size(1.0123.kilobytes, :precision => 2, :separator => ',')
129
+ assert_equal '1,01 KB', number_to_human_size(1.0100.kilobytes, :precision => 4, :separator => ',')
130
+ assert_equal '1.000,1 TB', number_to_human_size(1000.1.terabytes, :delimiter => '.', :separator => ',')
131
+ end
132
+ end