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,536 @@
1
+ require 'abstract_unit'
2
+
3
+ class RescueController < ActionController::Base
4
+ class NotAuthorized < StandardError
5
+ end
6
+ class NotAuthorizedToRescueAsString < StandardError
7
+ end
8
+
9
+ class RecordInvalid < StandardError
10
+ end
11
+ class RecordInvalidToRescueAsString < StandardError
12
+ end
13
+
14
+ class NotAllowed < StandardError
15
+ end
16
+ class NotAllowedToRescueAsString < StandardError
17
+ end
18
+
19
+ class InvalidRequest < StandardError
20
+ end
21
+ class InvalidRequestToRescueAsString < StandardError
22
+ end
23
+
24
+ class BadGateway < StandardError
25
+ end
26
+ class BadGatewayToRescueAsString < StandardError
27
+ end
28
+
29
+ class ResourceUnavailable < StandardError
30
+ end
31
+ class ResourceUnavailableToRescueAsString < StandardError
32
+ end
33
+
34
+ # We use a fully-qualified name in some strings, and a relative constant
35
+ # name in some other to test correct handling of both cases.
36
+
37
+ rescue_from NotAuthorized, :with => :deny_access
38
+ rescue_from 'RescueController::NotAuthorizedToRescueAsString', :with => :deny_access
39
+
40
+ rescue_from RecordInvalid, :with => :show_errors
41
+ rescue_from 'RescueController::RecordInvalidToRescueAsString', :with => :show_errors
42
+
43
+ rescue_from NotAllowed, :with => proc { head :forbidden }
44
+ rescue_from 'RescueController::NotAllowedToRescueAsString', :with => proc { head :forbidden }
45
+
46
+ rescue_from InvalidRequest, :with => proc { |exception| render :text => exception.message }
47
+ rescue_from 'InvalidRequestToRescueAsString', :with => proc { |exception| render :text => exception.message }
48
+
49
+ rescue_from BadGateway do
50
+ head :status => 502
51
+ end
52
+ rescue_from 'BadGatewayToRescueAsString' do
53
+ head :status => 502
54
+ end
55
+
56
+ rescue_from ResourceUnavailable do |exception|
57
+ render :text => exception.message
58
+ end
59
+ rescue_from 'ResourceUnavailableToRescueAsString' do |exception|
60
+ render :text => exception.message
61
+ end
62
+
63
+ # This is a Dispatcher exception and should be in ApplicationController.
64
+ rescue_from ActionController::RoutingError do
65
+ render :text => 'no way'
66
+ end
67
+
68
+ before_filter(:only => :before_filter_raises) { raise 'umm nice' }
69
+
70
+ def before_filter_raises
71
+ end
72
+
73
+ def raises
74
+ render :text => 'already rendered'
75
+ raise "don't panic!"
76
+ end
77
+
78
+ def method_not_allowed
79
+ raise ActionController::MethodNotAllowed.new(:get, :head, :put)
80
+ end
81
+
82
+ def not_implemented
83
+ raise ActionController::NotImplemented.new(:get, :put)
84
+ end
85
+
86
+ def not_authorized
87
+ raise NotAuthorized
88
+ end
89
+ def not_authorized_raise_as_string
90
+ raise NotAuthorizedToRescueAsString
91
+ end
92
+
93
+ def not_allowed
94
+ raise NotAllowed
95
+ end
96
+ def not_allowed_raise_as_string
97
+ raise NotAllowedToRescueAsString
98
+ end
99
+
100
+ def invalid_request
101
+ raise InvalidRequest
102
+ end
103
+ def invalid_request_raise_as_string
104
+ raise InvalidRequestToRescueAsString
105
+ end
106
+
107
+ def record_invalid
108
+ raise RecordInvalid
109
+ end
110
+ def record_invalid_raise_as_string
111
+ raise RecordInvalidToRescueAsString
112
+ end
113
+
114
+ def bad_gateway
115
+ raise BadGateway
116
+ end
117
+ def bad_gateway_raise_as_string
118
+ raise BadGatewayToRescueAsString
119
+ end
120
+
121
+ def resource_unavailable
122
+ raise ResourceUnavailable
123
+ end
124
+ def resource_unavailable_raise_as_string
125
+ raise ResourceUnavailableToRescueAsString
126
+ end
127
+
128
+ def missing_template
129
+ end
130
+
131
+ protected
132
+ def deny_access
133
+ head :forbidden
134
+ end
135
+
136
+ def show_errors(exception)
137
+ head :unprocessable_entity
138
+ end
139
+ end
140
+
141
+ class RescueControllerTest < ActionController::TestCase
142
+ FIXTURE_PUBLIC = "#{File.dirname(__FILE__)}/../fixtures".freeze
143
+
144
+ setup :set_all_requests_local
145
+ setup :populate_exception_object
146
+
147
+ def set_all_requests_local
148
+ RescueController.consider_all_requests_local = true
149
+ @request.remote_addr = '1.2.3.4'
150
+ @request.host = 'example.com'
151
+ end
152
+
153
+ def populate_exception_object
154
+ begin
155
+ raise 'foo'
156
+ rescue => @exception
157
+ end
158
+ end
159
+
160
+ def test_rescue_exceptions_raised_by_filters
161
+ with_rails_root FIXTURE_PUBLIC do
162
+ with_all_requests_local false do
163
+ get :before_filter_raises
164
+ end
165
+ end
166
+
167
+ assert_response :internal_server_error
168
+ end
169
+
170
+ def test_rescue_action_locally_if_all_requests_local
171
+ @controller.expects(:local_request?).never
172
+ @controller.expects(:rescue_action_locally).with(@exception)
173
+ @controller.expects(:rescue_action_in_public).never
174
+
175
+ with_all_requests_local do
176
+ @controller.send :rescue_action, @exception
177
+ end
178
+ end
179
+
180
+ def test_rescue_action_locally_if_remote_addr_is_localhost
181
+ @controller.expects(:local_request?).returns(true)
182
+ @controller.expects(:rescue_action_locally).with(@exception)
183
+ @controller.expects(:rescue_action_in_public).never
184
+
185
+ with_all_requests_local false do
186
+ @controller.send :rescue_action, @exception
187
+ end
188
+ end
189
+
190
+ def test_rescue_action_in_public_otherwise
191
+ @controller.expects(:local_request?).returns(false)
192
+ @controller.expects(:rescue_action_locally).never
193
+ @controller.expects(:rescue_action_in_public).with(@exception)
194
+
195
+ with_all_requests_local false do
196
+ @controller.send :rescue_action, @exception
197
+ end
198
+ end
199
+
200
+ def test_rescue_action_in_public_with_localized_error_file
201
+ # Change locale
202
+ old_locale = I18n.locale
203
+ I18n.locale = :da
204
+
205
+ with_rails_root FIXTURE_PUBLIC do
206
+ with_all_requests_local false do
207
+ get :raises
208
+ end
209
+ end
210
+
211
+ assert_response :internal_server_error
212
+ body = File.read("#{FIXTURE_PUBLIC}/public/500.da.html")
213
+ assert_equal body, @response.body
214
+ ensure
215
+ I18n.locale = old_locale
216
+ end
217
+
218
+ def test_rescue_action_in_public_with_error_file
219
+ with_rails_root FIXTURE_PUBLIC do
220
+ with_all_requests_local false do
221
+ get :raises
222
+ end
223
+ end
224
+
225
+ assert_response :internal_server_error
226
+ body = File.read("#{FIXTURE_PUBLIC}/public/500.html")
227
+ assert_equal body, @response.body
228
+ end
229
+
230
+ def test_rescue_action_in_public_without_error_file
231
+ with_rails_root '/tmp' do
232
+ with_all_requests_local false do
233
+ get :raises
234
+ end
235
+ end
236
+
237
+ assert_response :internal_server_error
238
+ assert_equal ' ', @response.body
239
+ end
240
+
241
+ def test_rescue_unknown_action_in_public_with_error_file
242
+ with_rails_root FIXTURE_PUBLIC do
243
+ with_all_requests_local false do
244
+ get :foobar_doesnt_exist
245
+ end
246
+ end
247
+
248
+ assert_response :not_found
249
+ body = File.read("#{FIXTURE_PUBLIC}/public/404.html")
250
+ assert_equal body, @response.body
251
+ end
252
+
253
+ def test_rescue_unknown_action_in_public_without_error_file
254
+ with_rails_root '/tmp' do
255
+ with_all_requests_local false do
256
+ get :foobar_doesnt_exist
257
+ end
258
+ end
259
+
260
+ assert_response :not_found
261
+ assert_equal ' ', @response.body
262
+ end
263
+
264
+ def test_rescue_missing_template_in_public
265
+ with_rails_root FIXTURE_PUBLIC do
266
+ with_all_requests_local true do
267
+ get :missing_template
268
+ end
269
+ end
270
+
271
+ assert_response :internal_server_error
272
+ assert @response.body.include?('missing_template'), "Response should include the template name."
273
+ end
274
+
275
+ def test_rescue_action_locally
276
+ get :raises
277
+ assert_response :internal_server_error
278
+ assert_template 'diagnostics.erb'
279
+ assert @response.body.include?('RescueController#raises'), "Response should include controller and action."
280
+ assert @response.body.include?("don't panic"), "Response should include exception message."
281
+ end
282
+
283
+ def test_local_request_when_remote_addr_is_localhost
284
+ @controller.expects(:request).returns(@request).at_least_once
285
+ with_remote_addr '127.0.0.1' do
286
+ assert @controller.send(:local_request?)
287
+ end
288
+ end
289
+
290
+ def test_local_request_when_remote_addr_isnt_locahost
291
+ @controller.expects(:request).returns(@request)
292
+ with_remote_addr '1.2.3.4' do
293
+ assert !@controller.send(:local_request?)
294
+ end
295
+ end
296
+
297
+ def test_rescue_responses
298
+ responses = ActionController::Base.rescue_responses
299
+
300
+ assert_equal ActionController::Rescue::DEFAULT_RESCUE_RESPONSE, responses.default
301
+ assert_equal ActionController::Rescue::DEFAULT_RESCUE_RESPONSE, responses[Exception.new]
302
+
303
+ assert_equal :not_found, responses[ActionController::RoutingError.name]
304
+ assert_equal :not_found, responses[ActionController::UnknownAction.name]
305
+ assert_equal :not_found, responses['ActiveRecord::RecordNotFound']
306
+ assert_equal :conflict, responses['ActiveRecord::StaleObjectError']
307
+ assert_equal :unprocessable_entity, responses['ActiveRecord::RecordInvalid']
308
+ assert_equal :unprocessable_entity, responses['ActiveRecord::RecordNotSaved']
309
+ assert_equal :method_not_allowed, responses['ActionController::MethodNotAllowed']
310
+ assert_equal :not_implemented, responses['ActionController::NotImplemented']
311
+ end
312
+
313
+ def test_rescue_templates
314
+ templates = ActionController::Base.rescue_templates
315
+
316
+ assert_equal ActionController::Rescue::DEFAULT_RESCUE_TEMPLATE, templates.default
317
+ assert_equal ActionController::Rescue::DEFAULT_RESCUE_TEMPLATE, templates[Exception.new]
318
+
319
+ assert_equal 'missing_template', templates[ActionView::MissingTemplate.name]
320
+ assert_equal 'routing_error', templates[ActionController::RoutingError.name]
321
+ assert_equal 'unknown_action', templates[ActionController::UnknownAction.name]
322
+ assert_equal 'template_error', templates[ActionView::TemplateError.name]
323
+ end
324
+
325
+ def test_not_implemented
326
+ with_all_requests_local false do
327
+ with_rails_public_path(".") do
328
+ head :not_implemented
329
+ end
330
+ end
331
+ assert_response :not_implemented
332
+ assert_equal "GET, PUT", @response.headers['Allow']
333
+ end
334
+
335
+ def test_method_not_allowed
336
+ with_all_requests_local false do
337
+ with_rails_public_path(".") do
338
+ get :method_not_allowed
339
+ end
340
+ end
341
+ assert_response :method_not_allowed
342
+ assert_equal "GET, HEAD, PUT", @response.headers['Allow']
343
+ end
344
+
345
+ def test_rescue_handler
346
+ get :not_authorized
347
+ assert_response :forbidden
348
+ end
349
+ def test_rescue_handler_string
350
+ get :not_authorized_raise_as_string
351
+ assert_response :forbidden
352
+ end
353
+
354
+ def test_rescue_handler_with_argument
355
+ @controller.expects(:show_errors).once.with { |e| e.is_a?(Exception) }
356
+ get :record_invalid
357
+ end
358
+ def test_rescue_handler_with_argument_as_string
359
+ @controller.expects(:show_errors).once.with { |e| e.is_a?(Exception) }
360
+ get :record_invalid_raise_as_string
361
+ end
362
+
363
+ def test_proc_rescue_handler
364
+ get :not_allowed
365
+ assert_response :forbidden
366
+ end
367
+ def test_proc_rescue_handler_as_string
368
+ get :not_allowed_raise_as_string
369
+ assert_response :forbidden
370
+ end
371
+
372
+ def test_proc_rescue_handle_with_argument
373
+ get :invalid_request
374
+ assert_equal "RescueController::InvalidRequest", @response.body
375
+ end
376
+ def test_proc_rescue_handle_with_argument_as_string
377
+ get :invalid_request_raise_as_string
378
+ assert_equal "RescueController::InvalidRequestToRescueAsString", @response.body
379
+ end
380
+
381
+ def test_block_rescue_handler
382
+ get :bad_gateway
383
+ assert_response 502
384
+ end
385
+ def test_block_rescue_handler_as_string
386
+ get :bad_gateway_raise_as_string
387
+ assert_response 502
388
+ end
389
+
390
+ def test_block_rescue_handler_with_argument
391
+ get :resource_unavailable
392
+ assert_equal "RescueController::ResourceUnavailable", @response.body
393
+ end
394
+
395
+ def test_block_rescue_handler_with_argument_as_string
396
+ get :resource_unavailable_raise_as_string
397
+ assert_equal "RescueController::ResourceUnavailableToRescueAsString", @response.body
398
+ end
399
+
400
+ def test_rescue_dispatcher_exceptions
401
+ env = @request.env
402
+ env["action_controller.rescue.request"] = @request
403
+ env["action_controller.rescue.response"] = @response
404
+
405
+ RescueController.call_with_exception(env, ActionController::RoutingError.new("Route not found"))
406
+ assert_equal "no way", @response.body
407
+ end
408
+
409
+ def test_rescue_dispatcher_exceptions_without_request_set
410
+ @request.env['REQUEST_URI'] = '/no_way'
411
+ response = RescueController.call_with_exception(@request.env, ActionController::RoutingError.new("Route not found"))
412
+ assert_kind_of ActionController::Response, response
413
+ assert_equal "no way", response.body
414
+ end
415
+
416
+ protected
417
+ def with_all_requests_local(local = true)
418
+ old_local, ActionController::Base.consider_all_requests_local =
419
+ ActionController::Base.consider_all_requests_local, local
420
+ yield
421
+ ensure
422
+ ActionController::Base.consider_all_requests_local = old_local
423
+ end
424
+
425
+ def with_remote_addr(addr)
426
+ old_remote_addr, @request.remote_addr = @request.remote_addr, addr
427
+ yield
428
+ ensure
429
+ @request.remote_addr = old_remote_addr
430
+ end
431
+
432
+ def with_rails_public_path(rails_root)
433
+ old_rails = Object.const_get(:Rails) rescue nil
434
+ mod = Object.const_set(:Rails, Module.new)
435
+ (class << mod; self; end).instance_eval do
436
+ define_method(:public_path) { "#{rails_root}/public" }
437
+ end
438
+ yield
439
+ ensure
440
+ Object.module_eval { remove_const(:Rails) } if defined?(Rails)
441
+ Object.const_set(:Rails, old_rails) if old_rails
442
+ end
443
+
444
+ def with_rails_root(path = nil,&block)
445
+ old_rails_root = RAILS_ROOT if defined?(RAILS_ROOT)
446
+ if path
447
+ silence_warnings { Object.const_set(:RAILS_ROOT, path) }
448
+ else
449
+ Object.remove_const(:RAILS_ROOT) rescue nil
450
+ end
451
+
452
+ with_rails_public_path(path, &block)
453
+
454
+ ensure
455
+ if old_rails_root
456
+ silence_warnings { Object.const_set(:RAILS_ROOT, old_rails_root) }
457
+ else
458
+ Object.remove_const(:RAILS_ROOT) rescue nil
459
+ end
460
+ end
461
+ end
462
+
463
+ class ExceptionInheritanceRescueController < ActionController::Base
464
+
465
+ class ParentException < StandardError
466
+ end
467
+
468
+ class ChildException < ParentException
469
+ end
470
+
471
+ class GrandchildException < ChildException
472
+ end
473
+
474
+ rescue_from ChildException, :with => lambda { head :ok }
475
+ rescue_from ParentException, :with => lambda { head :created }
476
+ rescue_from GrandchildException, :with => lambda { head :no_content }
477
+
478
+ def raise_parent_exception
479
+ raise ParentException
480
+ end
481
+
482
+ def raise_child_exception
483
+ raise ChildException
484
+ end
485
+
486
+ def raise_grandchild_exception
487
+ raise GrandchildException
488
+ end
489
+ end
490
+
491
+ class ExceptionInheritanceRescueControllerTest < ActionController::TestCase
492
+ def test_bottom_first
493
+ get :raise_grandchild_exception
494
+ assert_response :no_content
495
+ end
496
+
497
+ def test_inheritance_works
498
+ get :raise_child_exception
499
+ assert_response :created
500
+ end
501
+ end
502
+
503
+ class ControllerInheritanceRescueController < ExceptionInheritanceRescueController
504
+ class FirstExceptionInChildController < StandardError
505
+ end
506
+
507
+ class SecondExceptionInChildController < StandardError
508
+ end
509
+
510
+ rescue_from FirstExceptionInChildController, 'SecondExceptionInChildController', :with => lambda { head :gone }
511
+
512
+ def raise_first_exception_in_child_controller
513
+ raise FirstExceptionInChildController
514
+ end
515
+
516
+ def raise_second_exception_in_child_controller
517
+ raise SecondExceptionInChildController
518
+ end
519
+ end
520
+
521
+ class ControllerInheritanceRescueControllerTest < ActionController::TestCase
522
+ def test_first_exception_in_child_controller
523
+ get :raise_first_exception_in_child_controller
524
+ assert_response :gone
525
+ end
526
+
527
+ def test_second_exception_in_child_controller
528
+ get :raise_second_exception_in_child_controller
529
+ assert_response :gone
530
+ end
531
+
532
+ def test_exception_in_parent_controller
533
+ get :raise_parent_exception
534
+ assert_response :created
535
+ end
536
+ end