actionpack_csi 2.3.5.p6

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 (429) hide show
  1. data/CHANGELOG +5184 -0
  2. data/MIT-LICENSE +21 -0
  3. data/README +409 -0
  4. data/RUNNING_UNIT_TESTS +24 -0
  5. data/Rakefile +160 -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 +160 -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 +1423 -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 +95 -0
  27. data/lib/action_controller/dispatcher.rb +133 -0
  28. data/lib/action_controller/failsafe.rb +86 -0
  29. data/lib/action_controller/filters.rb +680 -0
  30. data/lib/action_controller/flash.rb +171 -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 +692 -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 +493 -0
  48. data/lib/action_controller/request_forgery_protection.rb +113 -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 +239 -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 +502 -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 +181 -0
  61. data/lib/action_controller/session/cookie_store.rb +221 -0
  62. data/lib/action_controller/session/mem_cache_store.rb +51 -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 +216 -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/erb/util.rb +44 -0
  93. data/lib/action_view/helpers/active_record_helper.rb +305 -0
  94. data/lib/action_view/helpers/asset_tag_helper.rb +694 -0
  95. data/lib/action_view/helpers/atom_feed_helper.rb +198 -0
  96. data/lib/action_view/helpers/benchmark_helper.rb +54 -0
  97. data/lib/action_view/helpers/cache_helper.rb +39 -0
  98. data/lib/action_view/helpers/capture_helper.rb +136 -0
  99. data/lib/action_view/helpers/date_helper.rb +988 -0
  100. data/lib/action_view/helpers/debug_helper.rb +38 -0
  101. data/lib/action_view/helpers/form_helper.rb +1074 -0
  102. data/lib/action_view/helpers/form_options_helper.rb +600 -0
  103. data/lib/action_view/helpers/form_tag_helper.rb +487 -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 +259 -0
  111. data/lib/action_view/helpers/scriptaculous_helper.rb +226 -0
  112. data/lib/action_view/helpers/tag_helper.rb +150 -0
  113. data/lib/action_view/helpers/text_helper.rb +587 -0
  114. data/lib/action_view/helpers/translation_helper.rb +39 -0
  115. data/lib/action_view/helpers/url_helper.rb +639 -0
  116. data/lib/action_view/helpers.rb +59 -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 +240 -0
  120. data/lib/action_view/paths.rb +69 -0
  121. data/lib/action_view/reloadable_template.rb +117 -0
  122. data/lib/action_view/renderable.rb +95 -0
  123. data/lib/action_view/renderable_partial.rb +47 -0
  124. data/lib/action_view/safe_buffer.rb +28 -0
  125. data/lib/action_view/template.rb +252 -0
  126. data/lib/action_view/template_error.rb +99 -0
  127. data/lib/action_view/template_handler.rb +34 -0
  128. data/lib/action_view/template_handlers/builder.rb +17 -0
  129. data/lib/action_view/template_handlers/erb.rb +22 -0
  130. data/lib/action_view/template_handlers/rjs.rb +13 -0
  131. data/lib/action_view/template_handlers.rb +48 -0
  132. data/lib/action_view/test_case.rb +162 -0
  133. data/lib/action_view.rb +58 -0
  134. data/lib/actionpack.rb +2 -0
  135. data/test/abstract_unit.rb +61 -0
  136. data/test/active_record_unit.rb +104 -0
  137. data/test/activerecord/active_record_store_test.rb +174 -0
  138. data/test/activerecord/render_partial_with_record_identification_test.rb +188 -0
  139. data/test/adv_attr_test.rb +20 -0
  140. data/test/controller/action_pack_assertions_test.rb +543 -0
  141. data/test/controller/addresses_render_test.rb +37 -0
  142. data/test/controller/assert_select_test.rb +734 -0
  143. data/test/controller/base_test.rb +217 -0
  144. data/test/controller/benchmark_test.rb +32 -0
  145. data/test/controller/caching_test.rb +729 -0
  146. data/test/controller/capture_test.rb +66 -0
  147. data/test/controller/content_type_test.rb +168 -0
  148. data/test/controller/controller_fixtures/app/controllers/admin/user_controller.rb +0 -0
  149. data/test/controller/controller_fixtures/app/controllers/user_controller.rb +0 -0
  150. data/test/controller/controller_fixtures/vendor/plugins/bad_plugin/lib/plugin_controller.rb +0 -0
  151. data/test/controller/cookie_test.rb +134 -0
  152. data/test/controller/deprecation/deprecated_base_methods_test.rb +32 -0
  153. data/test/controller/dispatcher_test.rb +144 -0
  154. data/test/controller/dom_assertions_test.rb +53 -0
  155. data/test/controller/failsafe_test.rb +60 -0
  156. data/test/controller/fake_controllers.rb +33 -0
  157. data/test/controller/fake_models.rb +19 -0
  158. data/test/controller/filter_params_test.rb +52 -0
  159. data/test/controller/filters_test.rb +885 -0
  160. data/test/controller/flash_test.rb +147 -0
  161. data/test/controller/header_test.rb +14 -0
  162. data/test/controller/helper_test.rb +224 -0
  163. data/test/controller/html-scanner/cdata_node_test.rb +15 -0
  164. data/test/controller/html-scanner/document_test.rb +148 -0
  165. data/test/controller/html-scanner/node_test.rb +89 -0
  166. data/test/controller/html-scanner/sanitizer_test.rb +274 -0
  167. data/test/controller/html-scanner/tag_node_test.rb +238 -0
  168. data/test/controller/html-scanner/text_node_test.rb +50 -0
  169. data/test/controller/html-scanner/tokenizer_test.rb +131 -0
  170. data/test/controller/http_basic_authentication_test.rb +113 -0
  171. data/test/controller/http_digest_authentication_test.rb +254 -0
  172. data/test/controller/integration_test.rb +483 -0
  173. data/test/controller/layout_test.rb +215 -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/polymorphic_routes_test.rb +297 -0
  179. data/test/controller/rack_test.rb +311 -0
  180. data/test/controller/record_identifier_test.rb +139 -0
  181. data/test/controller/redirect_test.rb +285 -0
  182. data/test/controller/reloader_test.rb +124 -0
  183. data/test/controller/render_test.rb +1762 -0
  184. data/test/controller/request/json_params_parsing_test.rb +65 -0
  185. data/test/controller/request/multipart_params_parsing_test.rb +162 -0
  186. data/test/controller/request/query_string_parsing_test.rb +120 -0
  187. data/test/controller/request/test_request_test.rb +35 -0
  188. data/test/controller/request/url_encoded_params_parsing_test.rb +146 -0
  189. data/test/controller/request/xml_params_parsing_test.rb +103 -0
  190. data/test/controller/request_forgery_protection_test.rb +265 -0
  191. data/test/controller/request_test.rb +395 -0
  192. data/test/controller/rescue_test.rb +536 -0
  193. data/test/controller/resources_test.rb +1393 -0
  194. data/test/controller/routing_test.rb +2591 -0
  195. data/test/controller/selector_test.rb +628 -0
  196. data/test/controller/send_file_test.rb +171 -0
  197. data/test/controller/session/cookie_store_test.rb +216 -0
  198. data/test/controller/session/mem_cache_store_test.rb +127 -0
  199. data/test/controller/session/test_session_test.rb +58 -0
  200. data/test/controller/test_test.rb +700 -0
  201. data/test/controller/translation_test.rb +26 -0
  202. data/test/controller/url_rewriter_test.rb +385 -0
  203. data/test/controller/verification_test.rb +270 -0
  204. data/test/controller/view_paths_test.rb +141 -0
  205. data/test/controller/webservice_test.rb +273 -0
  206. data/test/fixtures/_top_level_partial.html.erb +1 -0
  207. data/test/fixtures/_top_level_partial_only.erb +1 -0
  208. data/test/fixtures/addresses/list.erb +1 -0
  209. data/test/fixtures/alternate_helpers/foo_helper.rb +3 -0
  210. data/test/fixtures/bad_customers/_bad_customer.html.erb +1 -0
  211. data/test/fixtures/companies.yml +24 -0
  212. data/test/fixtures/company.rb +10 -0
  213. data/test/fixtures/content_type/render_default_content_types_for_respond_to.rhtml +1 -0
  214. data/test/fixtures/content_type/render_default_for_rhtml.rhtml +1 -0
  215. data/test/fixtures/content_type/render_default_for_rjs.rjs +1 -0
  216. data/test/fixtures/content_type/render_default_for_rxml.rxml +1 -0
  217. data/test/fixtures/customers/_customer.html.erb +1 -0
  218. data/test/fixtures/db_definitions/sqlite.sql +49 -0
  219. data/test/fixtures/developer.rb +9 -0
  220. data/test/fixtures/developers/_developer.erb +1 -0
  221. data/test/fixtures/developers.yml +21 -0
  222. data/test/fixtures/developers_projects.yml +13 -0
  223. data/test/fixtures/failsafe/500.html +1 -0
  224. data/test/fixtures/fun/games/_game.erb +1 -0
  225. data/test/fixtures/fun/games/hello_world.erb +1 -0
  226. data/test/fixtures/fun/serious/games/_game.erb +1 -0
  227. data/test/fixtures/functional_caching/_partial.erb +3 -0
  228. data/test/fixtures/functional_caching/formatted_fragment_cached.html.erb +3 -0
  229. data/test/fixtures/functional_caching/formatted_fragment_cached.js.rjs +6 -0
  230. data/test/fixtures/functional_caching/formatted_fragment_cached.xml.builder +5 -0
  231. data/test/fixtures/functional_caching/fragment_cached.html.erb +2 -0
  232. data/test/fixtures/functional_caching/html_fragment_cached_with_partial.html.erb +1 -0
  233. data/test/fixtures/functional_caching/inline_fragment_cached.html.erb +2 -0
  234. data/test/fixtures/functional_caching/js_fragment_cached_with_partial.js.rjs +1 -0
  235. data/test/fixtures/good_customers/_good_customer.html.erb +1 -0
  236. data/test/fixtures/helpers/abc_helper.rb +5 -0
  237. data/test/fixtures/helpers/fun/games_helper.rb +3 -0
  238. data/test/fixtures/helpers/fun/pdf_helper.rb +3 -0
  239. data/test/fixtures/layout_tests/abs_path_layout.rhtml +1 -0
  240. data/test/fixtures/layout_tests/alt/hello.rhtml +1 -0
  241. data/test/fixtures/layout_tests/alt/layouts/alt.rhtml +0 -0
  242. data/test/fixtures/layout_tests/layouts/controller_name_space/nested.rhtml +1 -0
  243. data/test/fixtures/layout_tests/layouts/item.rhtml +1 -0
  244. data/test/fixtures/layout_tests/layouts/layout_test.rhtml +1 -0
  245. data/test/fixtures/layout_tests/layouts/multiple_extensions.html.erb +1 -0
  246. data/test/fixtures/layout_tests/layouts/third_party_template_library.mab +1 -0
  247. data/test/fixtures/layout_tests/views/hello.rhtml +1 -0
  248. data/test/fixtures/layouts/_column.html.erb +2 -0
  249. data/test/fixtures/layouts/block_with_layout.erb +3 -0
  250. data/test/fixtures/layouts/builder.builder +3 -0
  251. data/test/fixtures/layouts/default_html.html.erb +1 -0
  252. data/test/fixtures/layouts/partial_with_layout.erb +3 -0
  253. data/test/fixtures/layouts/standard.erb +1 -0
  254. data/test/fixtures/layouts/talk_from_action.erb +2 -0
  255. data/test/fixtures/layouts/xhr.html.erb +2 -0
  256. data/test/fixtures/layouts/yield.erb +2 -0
  257. data/test/fixtures/mascot.rb +3 -0
  258. data/test/fixtures/mascots/_mascot.html.erb +1 -0
  259. data/test/fixtures/mascots.yml +4 -0
  260. data/test/fixtures/multipart/binary_file +0 -0
  261. data/test/fixtures/multipart/boundary_problem_file +10 -0
  262. data/test/fixtures/multipart/bracketed_param +5 -0
  263. data/test/fixtures/multipart/empty +10 -0
  264. data/test/fixtures/multipart/hello.txt +1 -0
  265. data/test/fixtures/multipart/large_text_file +10 -0
  266. data/test/fixtures/multipart/mixed_files +0 -0
  267. data/test/fixtures/multipart/mona_lisa.jpg +0 -0
  268. data/test/fixtures/multipart/none +9 -0
  269. data/test/fixtures/multipart/single_parameter +5 -0
  270. data/test/fixtures/multipart/text_file +10 -0
  271. data/test/fixtures/override/test/hello_world.erb +1 -0
  272. data/test/fixtures/override2/layouts/test/sub.erb +1 -0
  273. data/test/fixtures/post_test/layouts/post.html.erb +1 -0
  274. data/test/fixtures/post_test/layouts/super_post.iphone.erb +1 -0
  275. data/test/fixtures/post_test/post/index.html.erb +1 -0
  276. data/test/fixtures/post_test/post/index.iphone.erb +1 -0
  277. data/test/fixtures/post_test/super_post/index.html.erb +1 -0
  278. data/test/fixtures/post_test/super_post/index.iphone.erb +1 -0
  279. data/test/fixtures/project.rb +3 -0
  280. data/test/fixtures/projects/_project.erb +1 -0
  281. data/test/fixtures/projects.yml +7 -0
  282. data/test/fixtures/public/404.html +1 -0
  283. data/test/fixtures/public/500.da.html +1 -0
  284. data/test/fixtures/public/500.html +1 -0
  285. data/test/fixtures/public/absolute/test.css +23 -0
  286. data/test/fixtures/public/absolute/test.js +63 -0
  287. data/test/fixtures/public/images/rails.png +0 -0
  288. data/test/fixtures/public/javascripts/application.js +1 -0
  289. data/test/fixtures/public/javascripts/bank.js +1 -0
  290. data/test/fixtures/public/javascripts/controls.js +1 -0
  291. data/test/fixtures/public/javascripts/dragdrop.js +1 -0
  292. data/test/fixtures/public/javascripts/effects.js +1 -0
  293. data/test/fixtures/public/javascripts/prototype.js +1 -0
  294. data/test/fixtures/public/javascripts/robber.js +1 -0
  295. data/test/fixtures/public/javascripts/subdir/subdir.js +1 -0
  296. data/test/fixtures/public/javascripts/version.1.0.js +1 -0
  297. data/test/fixtures/public/stylesheets/bank.css +1 -0
  298. data/test/fixtures/public/stylesheets/robber.css +1 -0
  299. data/test/fixtures/public/stylesheets/subdir/subdir.css +1 -0
  300. data/test/fixtures/public/stylesheets/version.1.0.css +1 -0
  301. data/test/fixtures/quiz/questions/_question.html.erb +1 -0
  302. data/test/fixtures/replies/_reply.erb +1 -0
  303. data/test/fixtures/replies.yml +15 -0
  304. data/test/fixtures/reply.rb +7 -0
  305. data/test/fixtures/respond_to/all_types_with_layout.html.erb +1 -0
  306. data/test/fixtures/respond_to/all_types_with_layout.js.rjs +1 -0
  307. data/test/fixtures/respond_to/custom_constant_handling_without_block.mobile.erb +1 -0
  308. data/test/fixtures/respond_to/iphone_with_html_response_type.html.erb +1 -0
  309. data/test/fixtures/respond_to/iphone_with_html_response_type.iphone.erb +1 -0
  310. data/test/fixtures/respond_to/layouts/missing.html.erb +1 -0
  311. data/test/fixtures/respond_to/layouts/standard.html.erb +1 -0
  312. data/test/fixtures/respond_to/layouts/standard.iphone.erb +1 -0
  313. data/test/fixtures/respond_to/using_defaults.html.erb +1 -0
  314. data/test/fixtures/respond_to/using_defaults.js.rjs +1 -0
  315. data/test/fixtures/respond_to/using_defaults.xml.builder +1 -0
  316. data/test/fixtures/respond_to/using_defaults_with_type_list.html.erb +1 -0
  317. data/test/fixtures/respond_to/using_defaults_with_type_list.js.rjs +1 -0
  318. data/test/fixtures/respond_to/using_defaults_with_type_list.xml.builder +1 -0
  319. data/test/fixtures/scope/test/modgreet.erb +1 -0
  320. data/test/fixtures/shared.html.erb +1 -0
  321. data/test/fixtures/symlink_parent/symlinked_layout.erb +5 -0
  322. data/test/fixtures/test/_counter.html.erb +1 -0
  323. data/test/fixtures/test/_customer.erb +1 -0
  324. data/test/fixtures/test/_customer_counter.erb +1 -0
  325. data/test/fixtures/test/_customer_greeting.erb +1 -0
  326. data/test/fixtures/test/_customer_with_var.erb +1 -0
  327. data/test/fixtures/test/_form.erb +1 -0
  328. data/test/fixtures/test/_from_helper.erb +1 -0
  329. data/test/fixtures/test/_hash_greeting.erb +1 -0
  330. data/test/fixtures/test/_hash_object.erb +2 -0
  331. data/test/fixtures/test/_hello.builder +1 -0
  332. data/test/fixtures/test/_labelling_form.erb +1 -0
  333. data/test/fixtures/test/_layout_for_block_with_args.html.erb +3 -0
  334. data/test/fixtures/test/_layout_for_partial.html.erb +3 -0
  335. data/test/fixtures/test/_local_inspector.html.erb +1 -0
  336. data/test/fixtures/test/_one.html.erb +1 -0
  337. data/test/fixtures/test/_partial.erb +1 -0
  338. data/test/fixtures/test/_partial.html.erb +1 -0
  339. data/test/fixtures/test/_partial.js.erb +1 -0
  340. data/test/fixtures/test/_partial_for_use_in_layout.html.erb +1 -0
  341. data/test/fixtures/test/_partial_only.erb +1 -0
  342. data/test/fixtures/test/_partial_with_only_html_version.html.erb +1 -0
  343. data/test/fixtures/test/_person.erb +2 -0
  344. data/test/fixtures/test/_raise.html.erb +1 -0
  345. data/test/fixtures/test/_two.html.erb +1 -0
  346. data/test/fixtures/test/action_talk_to_layout.erb +2 -0
  347. data/test/fixtures/test/calling_partial_with_layout.html.erb +1 -0
  348. data/test/fixtures/test/capturing.erb +4 -0
  349. data/test/fixtures/test/content_for.erb +2 -0
  350. data/test/fixtures/test/content_for_concatenated.erb +3 -0
  351. data/test/fixtures/test/content_for_with_parameter.erb +2 -0
  352. data/test/fixtures/test/delete_with_js.rjs +2 -0
  353. data/test/fixtures/test/dont_pick_me +1 -0
  354. data/test/fixtures/test/dot.directory/render_file_with_ivar.erb +1 -0
  355. data/test/fixtures/test/enum_rjs_test.rjs +6 -0
  356. data/test/fixtures/test/formatted_html_erb.html.erb +1 -0
  357. data/test/fixtures/test/formatted_xml_erb.builder +1 -0
  358. data/test/fixtures/test/formatted_xml_erb.html.erb +1 -0
  359. data/test/fixtures/test/formatted_xml_erb.xml.erb +1 -0
  360. data/test/fixtures/test/greeting.erb +1 -0
  361. data/test/fixtures/test/greeting.js.rjs +1 -0
  362. data/test/fixtures/test/hello.builder +4 -0
  363. data/test/fixtures/test/hello_world.da.html.erb +1 -0
  364. data/test/fixtures/test/hello_world.erb +1 -0
  365. data/test/fixtures/test/hello_world.erb~ +1 -0
  366. data/test/fixtures/test/hello_world.pt-BR.html.erb +1 -0
  367. data/test/fixtures/test/hello_world_container.builder +3 -0
  368. data/test/fixtures/test/hello_world_from_rxml.builder +4 -0
  369. data/test/fixtures/test/hello_world_with_layout_false.erb +1 -0
  370. data/test/fixtures/test/hello_xml_world.builder +11 -0
  371. data/test/fixtures/test/hyphen-ated.erb +1 -0
  372. data/test/fixtures/test/implicit_content_type.atom.builder +2 -0
  373. data/test/fixtures/test/list.erb +1 -0
  374. data/test/fixtures/test/malformed/malformed.en.html.erb~ +1 -0
  375. data/test/fixtures/test/malformed/malformed.erb~ +1 -0
  376. data/test/fixtures/test/malformed/malformed.html.erb~ +1 -0
  377. data/test/fixtures/test/nested_layout.erb +3 -0
  378. data/test/fixtures/test/non_erb_block_content_for.builder +4 -0
  379. data/test/fixtures/test/potential_conflicts.erb +4 -0
  380. data/test/fixtures/test/render_explicit_html_template.js.rjs +1 -0
  381. data/test/fixtures/test/render_file_from_template.html.erb +1 -0
  382. data/test/fixtures/test/render_file_with_ivar.erb +1 -0
  383. data/test/fixtures/test/render_file_with_locals.erb +1 -0
  384. data/test/fixtures/test/render_implicit_html_template.js.rjs +1 -0
  385. data/test/fixtures/test/render_implicit_html_template_from_xhr_request.da.html.erb +1 -0
  386. data/test/fixtures/test/render_implicit_html_template_from_xhr_request.html.erb +1 -0
  387. data/test/fixtures/test/render_implicit_js_template_without_layout.js.erb +1 -0
  388. data/test/fixtures/test/render_to_string_test.erb +1 -0
  389. data/test/fixtures/test/sub_template_raise.html.erb +1 -0
  390. data/test/fixtures/test/template.erb +1 -0
  391. data/test/fixtures/test/update_element_with_capture.erb +9 -0
  392. data/test/fixtures/test/using_layout_around_block.html.erb +1 -0
  393. data/test/fixtures/test/using_layout_around_block_with_args.html.erb +1 -0
  394. data/test/fixtures/test/utf8.html.erb +2 -0
  395. data/test/fixtures/topic.rb +3 -0
  396. data/test/fixtures/topics/_topic.html.erb +1 -0
  397. data/test/fixtures/topics.yml +22 -0
  398. data/test/template/active_record_helper_i18n_test.rb +44 -0
  399. data/test/template/active_record_helper_test.rb +302 -0
  400. data/test/template/asset_tag_helper_test.rb +771 -0
  401. data/test/template/atom_feed_helper_test.rb +315 -0
  402. data/test/template/benchmark_helper_test.rb +86 -0
  403. data/test/template/compiled_templates_test.rb +204 -0
  404. data/test/template/date_helper_i18n_test.rb +121 -0
  405. data/test/template/date_helper_test.rb +2485 -0
  406. data/test/template/erb_util_test.rb +24 -0
  407. data/test/template/form_helper_test.rb +1393 -0
  408. data/test/template/form_options_helper_i18n_test.rb +27 -0
  409. data/test/template/form_options_helper_test.rb +807 -0
  410. data/test/template/form_tag_helper_test.rb +344 -0
  411. data/test/template/javascript_helper_test.rb +106 -0
  412. data/test/template/number_helper_i18n_test.rb +69 -0
  413. data/test/template/number_helper_test.rb +132 -0
  414. data/test/template/prototype_helper_test.rb +639 -0
  415. data/test/template/raw_output_helper_test.rb +21 -0
  416. data/test/template/record_tag_helper_test.rb +58 -0
  417. data/test/template/render_test.rb +290 -0
  418. data/test/template/sanitize_helper_test.rb +57 -0
  419. data/test/template/scriptaculous_helper_test.rb +90 -0
  420. data/test/template/tag_helper_test.rb +98 -0
  421. data/test/template/template_test.rb +32 -0
  422. data/test/template/test_test.rb +54 -0
  423. data/test/template/text_helper_test.rb +543 -0
  424. data/test/template/translation_helper_test.rb +32 -0
  425. data/test/template/url_helper_test.rb +622 -0
  426. data/test/testing_sandbox.rb +15 -0
  427. data/test/view/safe_buffer_test.rb +36 -0
  428. data/test/view/test_case_test.rb +176 -0
  429. metadata +531 -0
@@ -0,0 +1,344 @@
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>"
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>", :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>", :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_text_area_tag_size_string
139
+ actual = text_area_tag "body", "hello world", "size" => "20x40"
140
+ expected = %(<textarea cols="20" id="body" name="body" rows="40">hello world</textarea>)
141
+ assert_dom_equal expected, actual
142
+ end
143
+
144
+ def test_text_area_tag_size_symbol
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_should_disregard_size_if_its_given_as_an_integer
151
+ actual = text_area_tag "body", "hello world", :size => 20
152
+ expected = %(<textarea id="body" name="body">hello world</textarea>)
153
+ assert_dom_equal expected, actual
154
+ end
155
+
156
+ def test_text_area_tag_id_sanitized
157
+ input_elem = root_elem(text_area_tag("item[][description]"))
158
+ assert_match VALID_HTML_ID, input_elem['id']
159
+ end
160
+
161
+ def test_text_area_tag_escape_content
162
+ actual = text_area_tag "body", "<b>hello world</b>", :size => "20x40"
163
+ expected = %(<textarea cols="20" id="body" name="body" rows="40">&lt;b&gt;hello world&lt;/b&gt;</textarea>)
164
+ assert_dom_equal expected, actual
165
+ end
166
+
167
+ def test_text_area_tag_unescaped_content
168
+ actual = text_area_tag "body", "<b>hello world</b>", :size => "20x40", :escape => false
169
+ expected = %(<textarea cols="20" id="body" name="body" rows="40"><b>hello world</b></textarea>)
170
+ assert_dom_equal expected, actual
171
+ end
172
+
173
+ def test_text_field_tag
174
+ actual = text_field_tag "title", "Hello!"
175
+ expected = %(<input id="title" name="title" type="text" value="Hello!" />)
176
+ assert_dom_equal expected, actual
177
+ end
178
+
179
+ def test_text_field_tag_class_string
180
+ actual = text_field_tag "title", "Hello!", "class" => "admin"
181
+ expected = %(<input class="admin" id="title" name="title" type="text" value="Hello!" />)
182
+ assert_dom_equal expected, actual
183
+ end
184
+
185
+ def test_text_field_tag_size_symbol
186
+ actual = text_field_tag "title", "Hello!", :size => 75
187
+ expected = %(<input id="title" name="title" size="75" type="text" value="Hello!" />)
188
+ assert_dom_equal expected, actual
189
+ end
190
+
191
+ def test_text_field_tag_size_string
192
+ actual = text_field_tag "title", "Hello!", "size" => "75"
193
+ expected = %(<input id="title" name="title" size="75" type="text" value="Hello!" />)
194
+ assert_dom_equal expected, actual
195
+ end
196
+
197
+ def test_text_field_tag_maxlength_symbol
198
+ actual = text_field_tag "title", "Hello!", :maxlength => 75
199
+ expected = %(<input id="title" name="title" maxlength="75" type="text" value="Hello!" />)
200
+ assert_dom_equal expected, actual
201
+ end
202
+
203
+ def test_text_field_tag_maxlength_string
204
+ actual = text_field_tag "title", "Hello!", "maxlength" => "75"
205
+ expected = %(<input id="title" name="title" maxlength="75" type="text" value="Hello!" />)
206
+ assert_dom_equal expected, actual
207
+ end
208
+
209
+ def test_text_field_disabled
210
+ actual = text_field_tag "title", "Hello!", :disabled => :true
211
+ expected = %(<input id="title" name="title" disabled="disabled" type="text" value="Hello!" />)
212
+ assert_dom_equal expected, actual
213
+ end
214
+
215
+ def test_text_field_tag_with_multiple_options
216
+ actual = text_field_tag "title", "Hello!", :size => 70, :maxlength => 80
217
+ expected = %(<input id="title" name="title" size="70" maxlength="80" type="text" value="Hello!" />)
218
+ assert_dom_equal expected, actual
219
+ end
220
+
221
+ def test_text_field_tag_id_sanitized
222
+ input_elem = root_elem(text_field_tag("item[][title]"))
223
+ assert_match VALID_HTML_ID, input_elem['id']
224
+ end
225
+
226
+ def test_label_tag_without_text
227
+ actual = label_tag "title"
228
+ expected = %(<label for="title">Title</label>)
229
+ assert_dom_equal expected, actual
230
+ end
231
+
232
+ def test_label_tag_with_symbol
233
+ actual = label_tag :title
234
+ expected = %(<label for="title">Title</label>)
235
+ assert_dom_equal expected, actual
236
+ end
237
+
238
+ def test_label_tag_with_text
239
+ actual = label_tag "title", "My Title"
240
+ expected = %(<label for="title">My Title</label>)
241
+ assert_dom_equal expected, actual
242
+ end
243
+
244
+ def test_label_tag_class_string
245
+ actual = label_tag "title", "My Title", "class" => "small_label"
246
+ expected = %(<label for="title" class="small_label">My Title</label>)
247
+ assert_dom_equal expected, actual
248
+ end
249
+
250
+ def test_label_tag_id_sanitized
251
+ label_elem = root_elem(label_tag("item[title]"))
252
+ assert_match VALID_HTML_ID, label_elem['for']
253
+ end
254
+
255
+ def test_boolean_options
256
+ 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")
257
+ assert_dom_equal %(<input checked="checked" id="admin" name="admin" type="checkbox" value="1" />), check_box_tag("admin", 1, true, :disabled => false, :readonly => nil)
258
+ assert_dom_equal %(<input type="checkbox" />), tag(:input, :type => "checkbox", :checked => false)
259
+ assert_dom_equal %(<select id="people" multiple="multiple" name="people[]"><option>david</option></select>), select_tag("people", "<option>david</option>", :multiple => true)
260
+ assert_dom_equal %(<select id="people_" multiple="multiple" name="people[]"><option>david</option></select>), select_tag("people[]", "<option>david</option>", :multiple => true)
261
+ assert_dom_equal %(<select id="people" name="people"><option>david</option></select>), select_tag("people", "<option>david</option>", :multiple => nil)
262
+ end
263
+
264
+ def test_stringify_symbol_keys
265
+ actual = text_field_tag "title", "Hello!", :id => "admin"
266
+ expected = %(<input id="admin" name="title" type="text" value="Hello!" />)
267
+ assert_dom_equal expected, actual
268
+ end
269
+
270
+ def test_submit_tag
271
+ assert_dom_equal(
272
+ %(<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" />),
273
+ submit_tag("Save", :disable_with => "Saving...", :onclick => "alert('hello!')")
274
+ )
275
+ end
276
+
277
+ def test_submit_tag_with_no_onclick_options
278
+ assert_dom_equal(
279
+ %(<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" />),
280
+ submit_tag("Save", :disable_with => "Saving...")
281
+ )
282
+ end
283
+
284
+ def test_submit_tag_with_confirmation
285
+ assert_dom_equal(
286
+ %(<input name='commit' type='submit' value='Save' onclick="if (!confirm('Are you sure?')) return false; return true;"/>),
287
+ submit_tag("Save", :confirm => "Are you sure?")
288
+ )
289
+ end
290
+
291
+ def test_submit_tag_with_confirmation_and_with_disable_with
292
+ assert_dom_equal(
293
+ %(<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" />),
294
+ submit_tag("Save", :disable_with => "Saving...", :confirm => "Are you sure?")
295
+ )
296
+ end
297
+
298
+ def test_image_submit_tag_with_confirmation
299
+ assert_dom_equal(
300
+ %(<input type="image" src="/images/save.gif" onclick="return confirm('Are you sure?');"/>),
301
+ image_submit_tag("save.gif", :confirm => "Are you sure?")
302
+ )
303
+ end
304
+
305
+ def test_pass
306
+ assert_equal 1, 1
307
+ end
308
+
309
+ def test_field_set_tag_in_erb
310
+ __in_erb_template = ''
311
+ field_set_tag("Your details") { concat "Hello world!" }
312
+
313
+ expected = %(<fieldset><legend>Your details</legend>Hello world!</fieldset>)
314
+ assert_dom_equal expected, output_buffer
315
+
316
+ self.output_buffer = ''
317
+ field_set_tag { concat "Hello world!" }
318
+
319
+ expected = %(<fieldset>Hello world!</fieldset>)
320
+ assert_dom_equal expected, output_buffer
321
+
322
+ self.output_buffer = ''
323
+ field_set_tag('') { concat "Hello world!" }
324
+
325
+ expected = %(<fieldset>Hello world!</fieldset>)
326
+ assert_dom_equal expected, output_buffer
327
+
328
+ self.output_buffer = ''
329
+ field_set_tag('', :class => 'format') { concat "Hello world!" }
330
+
331
+ expected = %(<fieldset class="format">Hello world!</fieldset>)
332
+ assert_dom_equal expected, output_buffer
333
+ end
334
+
335
+ def protect_against_forgery?
336
+ false
337
+ end
338
+
339
+ private
340
+
341
+ def root_elem(rendered_content)
342
+ HTML::Document.new(rendered_content).root.children[0]
343
+ end
344
+ 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