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,26 @@
1
+ require 'abstract_unit'
2
+
3
+ # class TranslatingController < ActionController::Base
4
+ # end
5
+
6
+ class TranslationControllerTest < Test::Unit::TestCase
7
+ def setup
8
+ @controller = ActionController::Base.new
9
+ end
10
+
11
+ def test_action_controller_base_responds_to_translate
12
+ assert @controller.respond_to?(:translate)
13
+ end
14
+
15
+ def test_action_controller_base_responds_to_t
16
+ assert @controller.respond_to?(:t)
17
+ end
18
+
19
+ def test_action_controller_base_responds_to_localize
20
+ assert @controller.respond_to?(:localize)
21
+ end
22
+
23
+ def test_action_controller_base_responds_to_l
24
+ assert @controller.respond_to?(:l)
25
+ end
26
+ end
@@ -0,0 +1,385 @@
1
+ require 'abstract_unit'
2
+
3
+ ActionController::UrlRewriter
4
+
5
+ class UrlRewriterTests < ActionController::TestCase
6
+ def setup
7
+ @request = ActionController::TestRequest.new
8
+ @params = {}
9
+ @rewriter = ActionController::UrlRewriter.new(@request, @params)
10
+ end
11
+
12
+ def test_port
13
+ assert_equal('http://test.host:1271/c/a/i',
14
+ @rewriter.rewrite(:controller => 'c', :action => 'a', :id => 'i', :port => 1271)
15
+ )
16
+ end
17
+
18
+ def test_protocol_with_and_without_separator
19
+ assert_equal('https://test.host/c/a/i',
20
+ @rewriter.rewrite(:protocol => 'https', :controller => 'c', :action => 'a', :id => 'i')
21
+ )
22
+
23
+ assert_equal('https://test.host/c/a/i',
24
+ @rewriter.rewrite(:protocol => 'https://', :controller => 'c', :action => 'a', :id => 'i')
25
+ )
26
+ end
27
+
28
+ def test_user_name_and_password
29
+ assert_equal(
30
+ 'http://david:secret@test.host/c/a/i',
31
+ @rewriter.rewrite(:user => "david", :password => "secret", :controller => 'c', :action => 'a', :id => 'i')
32
+ )
33
+ end
34
+
35
+ def test_user_name_and_password_with_escape_codes
36
+ assert_equal(
37
+ 'http://openid.aol.com%2Fnextangler:one+two%3F@test.host/c/a/i',
38
+ @rewriter.rewrite(:user => "openid.aol.com/nextangler", :password => "one two?", :controller => 'c', :action => 'a', :id => 'i')
39
+ )
40
+ end
41
+
42
+ def test_anchor
43
+ assert_equal(
44
+ 'http://test.host/c/a/i#anchor',
45
+ @rewriter.rewrite(:controller => 'c', :action => 'a', :id => 'i', :anchor => 'anchor')
46
+ )
47
+ end
48
+
49
+ def test_anchor_should_call_to_param
50
+ assert_equal(
51
+ 'http://test.host/c/a/i#anchor',
52
+ @rewriter.rewrite(:controller => 'c', :action => 'a', :id => 'i', :anchor => Struct.new(:to_param).new('anchor'))
53
+ )
54
+ end
55
+
56
+ def test_anchor_should_be_cgi_escaped
57
+ assert_equal(
58
+ 'http://test.host/c/a/i#anc%2Fhor',
59
+ @rewriter.rewrite(:controller => 'c', :action => 'a', :id => 'i', :anchor => Struct.new(:to_param).new('anc/hor'))
60
+ )
61
+ end
62
+
63
+ def test_overwrite_params
64
+ @params[:controller] = 'hi'
65
+ @params[:action] = 'bye'
66
+ @params[:id] = '2'
67
+
68
+ assert_equal '/hi/hi/2', @rewriter.rewrite(:only_path => true, :overwrite_params => {:action => 'hi'})
69
+ u = @rewriter.rewrite(:only_path => false, :overwrite_params => {:action => 'hi'})
70
+ assert_match %r(/hi/hi/2$), u
71
+ end
72
+
73
+ def test_overwrite_removes_original
74
+ @params[:controller] = 'search'
75
+ @params[:action] = 'list'
76
+ @params[:list_page] = 1
77
+
78
+ assert_equal '/search/list?list_page=2', @rewriter.rewrite(:only_path => true, :overwrite_params => {"list_page" => 2})
79
+ u = @rewriter.rewrite(:only_path => false, :overwrite_params => {:list_page => 2})
80
+ assert_equal 'http://test.host/search/list?list_page=2', u
81
+ end
82
+
83
+ def test_to_str
84
+ @params[:controller] = 'hi'
85
+ @params[:action] = 'bye'
86
+ @request.parameters[:id] = '2'
87
+
88
+ assert_equal 'http://, test.host, /, hi, bye, {"id"=>"2"}', @rewriter.to_str
89
+ end
90
+
91
+ def test_trailing_slash
92
+ options = {:controller => 'foo', :action => 'bar', :id => '3', :only_path => true}
93
+ assert_equal '/foo/bar/3', @rewriter.rewrite(options)
94
+ assert_equal '/foo/bar/3?query=string', @rewriter.rewrite(options.merge({:query => 'string'}))
95
+ options.update({:trailing_slash => true})
96
+ assert_equal '/foo/bar/3/', @rewriter.rewrite(options)
97
+ options.update({:query => 'string'})
98
+ assert_equal '/foo/bar/3/?query=string', @rewriter.rewrite(options)
99
+ end
100
+ end
101
+
102
+ class UrlWriterTests < ActionController::TestCase
103
+ class W
104
+ include ActionController::UrlWriter
105
+ end
106
+
107
+ def teardown
108
+ W.default_url_options.clear
109
+ end
110
+
111
+ def add_host!
112
+ W.default_url_options[:host] = 'www.basecamphq.com'
113
+ end
114
+
115
+ def test_exception_is_thrown_without_host
116
+ assert_raise RuntimeError do
117
+ W.new.url_for :controller => 'c', :action => 'a', :id => 'i'
118
+ end
119
+ end
120
+
121
+ def test_anchor
122
+ assert_equal('/c/a#anchor',
123
+ W.new.url_for(:only_path => true, :controller => 'c', :action => 'a', :anchor => 'anchor')
124
+ )
125
+ end
126
+
127
+ def test_anchor_should_call_to_param
128
+ assert_equal('/c/a#anchor',
129
+ W.new.url_for(:only_path => true, :controller => 'c', :action => 'a', :anchor => Struct.new(:to_param).new('anchor'))
130
+ )
131
+ end
132
+
133
+ def test_anchor_should_be_cgi_escaped
134
+ assert_equal('/c/a#anc%2Fhor',
135
+ W.new.url_for(:only_path => true, :controller => 'c', :action => 'a', :anchor => Struct.new(:to_param).new('anc/hor'))
136
+ )
137
+ end
138
+
139
+ def test_default_host
140
+ add_host!
141
+ assert_equal('http://www.basecamphq.com/c/a/i',
142
+ W.new.url_for(:controller => 'c', :action => 'a', :id => 'i')
143
+ )
144
+ end
145
+
146
+ def test_host_may_be_overridden
147
+ add_host!
148
+ assert_equal('http://37signals.basecamphq.com/c/a/i',
149
+ W.new.url_for(:host => '37signals.basecamphq.com', :controller => 'c', :action => 'a', :id => 'i')
150
+ )
151
+ end
152
+
153
+ def test_port
154
+ add_host!
155
+ assert_equal('http://www.basecamphq.com:3000/c/a/i',
156
+ W.new.url_for(:controller => 'c', :action => 'a', :id => 'i', :port => 3000)
157
+ )
158
+ end
159
+
160
+ def test_protocol
161
+ add_host!
162
+ assert_equal('https://www.basecamphq.com/c/a/i',
163
+ W.new.url_for(:controller => 'c', :action => 'a', :id => 'i', :protocol => 'https')
164
+ )
165
+ end
166
+
167
+ def test_protocol_with_and_without_separator
168
+ add_host!
169
+ assert_equal('https://www.basecamphq.com/c/a/i',
170
+ W.new.url_for(:controller => 'c', :action => 'a', :id => 'i', :protocol => 'https')
171
+ )
172
+ assert_equal('https://www.basecamphq.com/c/a/i',
173
+ W.new.url_for(:controller => 'c', :action => 'a', :id => 'i', :protocol => 'https://')
174
+ )
175
+ end
176
+
177
+ def test_trailing_slash
178
+ add_host!
179
+ options = {:controller => 'foo', :trailing_slash => true, :action => 'bar', :id => '33'}
180
+ assert_equal('http://www.basecamphq.com/foo/bar/33/', W.new.url_for(options) )
181
+ end
182
+
183
+ def test_trailing_slash_with_protocol
184
+ add_host!
185
+ options = { :trailing_slash => true,:protocol => 'https', :controller => 'foo', :action => 'bar', :id => '33'}
186
+ assert_equal('https://www.basecamphq.com/foo/bar/33/', W.new.url_for(options) )
187
+ assert_equal 'https://www.basecamphq.com/foo/bar/33/?query=string', W.new.url_for(options.merge({:query => 'string'}))
188
+ end
189
+
190
+ def test_trailing_slash_with_only_path
191
+ options = {:controller => 'foo', :trailing_slash => true}
192
+ assert_equal '/foo/', W.new.url_for(options.merge({:only_path => true}))
193
+ options.update({:action => 'bar', :id => '33'})
194
+ assert_equal '/foo/bar/33/', W.new.url_for(options.merge({:only_path => true}))
195
+ assert_equal '/foo/bar/33/?query=string', W.new.url_for(options.merge({:query => 'string',:only_path => true}))
196
+ end
197
+
198
+ def test_trailing_slash_with_anchor
199
+ options = {:trailing_slash => true, :controller => 'foo', :action => 'bar', :id => '33', :only_path => true, :anchor=> 'chapter7'}
200
+ assert_equal '/foo/bar/33/#chapter7', W.new.url_for(options)
201
+ assert_equal '/foo/bar/33/?query=string#chapter7', W.new.url_for(options.merge({:query => 'string'}))
202
+ end
203
+
204
+ def test_trailing_slash_with_params
205
+ url = W.new.url_for(:trailing_slash => true, :only_path => true, :controller => 'cont', :action => 'act', :p1 => 'cafe', :p2 => 'link')
206
+ params = extract_params(url)
207
+ assert_equal params[0], { :p1 => 'cafe' }.to_query
208
+ assert_equal params[1], { :p2 => 'link' }.to_query
209
+ end
210
+
211
+ def test_relative_url_root_is_respected
212
+ orig_relative_url_root = ActionController::Base.relative_url_root
213
+ ActionController::Base.relative_url_root = '/subdir'
214
+
215
+ add_host!
216
+ assert_equal('https://www.basecamphq.com/subdir/c/a/i',
217
+ W.new.url_for(:controller => 'c', :action => 'a', :id => 'i', :protocol => 'https')
218
+ )
219
+ ensure
220
+ ActionController::Base.relative_url_root = orig_relative_url_root
221
+ end
222
+
223
+ def test_named_routes
224
+ ActionController::Routing::Routes.draw do |map|
225
+ map.no_args '/this/is/verbose', :controller => 'home', :action => 'index'
226
+ map.home '/home/sweet/home/:user', :controller => 'home', :action => 'index'
227
+ map.connect ':controller/:action/:id'
228
+ end
229
+
230
+ # We need to create a new class in order to install the new named route.
231
+ kls = Class.new { include ActionController::UrlWriter }
232
+ controller = kls.new
233
+ assert controller.respond_to?(:home_url)
234
+ assert_equal 'http://www.basecamphq.com/home/sweet/home/again',
235
+ controller.send(:home_url, :host => 'www.basecamphq.com', :user => 'again')
236
+
237
+ assert_equal("/home/sweet/home/alabama", controller.send(:home_path, :user => 'alabama', :host => 'unused'))
238
+ assert_equal("http://www.basecamphq.com/home/sweet/home/alabama", controller.send(:home_url, :user => 'alabama', :host => 'www.basecamphq.com'))
239
+ assert_equal("http://www.basecamphq.com/this/is/verbose", controller.send(:no_args_url, :host=>'www.basecamphq.com'))
240
+ ensure
241
+ ActionController::Routing::Routes.load!
242
+ end
243
+
244
+ def test_relative_url_root_is_respected_for_named_routes
245
+ orig_relative_url_root = ActionController::Base.relative_url_root
246
+ ActionController::Base.relative_url_root = '/subdir'
247
+
248
+ ActionController::Routing::Routes.draw do |map|
249
+ map.home '/home/sweet/home/:user', :controller => 'home', :action => 'index'
250
+ end
251
+
252
+ kls = Class.new { include ActionController::UrlWriter }
253
+ controller = kls.new
254
+
255
+ assert_equal 'http://www.basecamphq.com/subdir/home/sweet/home/again',
256
+ controller.send(:home_url, :host => 'www.basecamphq.com', :user => 'again')
257
+ ensure
258
+ ActionController::Routing::Routes.load!
259
+ ActionController::Base.relative_url_root = orig_relative_url_root
260
+ end
261
+
262
+ def test_only_path
263
+ ActionController::Routing::Routes.draw do |map|
264
+ map.home '/home/sweet/home/:user', :controller => 'home', :action => 'index'
265
+ map.connect ':controller/:action/:id'
266
+ end
267
+
268
+ # We need to create a new class in order to install the new named route.
269
+ kls = Class.new { include ActionController::UrlWriter }
270
+ controller = kls.new
271
+ assert controller.respond_to?(:home_url)
272
+ assert_equal '/brave/new/world',
273
+ controller.send(:url_for, :controller => 'brave', :action => 'new', :id => 'world', :only_path => true)
274
+
275
+ assert_equal("/home/sweet/home/alabama", controller.send(:home_url, :user => 'alabama', :host => 'unused', :only_path => true))
276
+ assert_equal("/home/sweet/home/alabama", controller.send(:home_path, 'alabama'))
277
+ ensure
278
+ ActionController::Routing::Routes.load!
279
+ end
280
+
281
+ def test_one_parameter
282
+ assert_equal('/c/a?param=val',
283
+ W.new.url_for(:only_path => true, :controller => 'c', :action => 'a', :param => 'val')
284
+ )
285
+ end
286
+
287
+ def test_two_parameters
288
+ url = W.new.url_for(:only_path => true, :controller => 'c', :action => 'a', :p1 => 'X1', :p2 => 'Y2')
289
+ params = extract_params(url)
290
+ assert_equal params[0], { :p1 => 'X1' }.to_query
291
+ assert_equal params[1], { :p2 => 'Y2' }.to_query
292
+ end
293
+
294
+ def test_hash_parameter
295
+ url = W.new.url_for(:only_path => true, :controller => 'c', :action => 'a', :query => {:name => 'Bob', :category => 'prof'})
296
+ params = extract_params(url)
297
+ assert_equal params[0], { 'query[category]' => 'prof' }.to_query
298
+ assert_equal params[1], { 'query[name]' => 'Bob' }.to_query
299
+ end
300
+
301
+ def test_array_parameter
302
+ url = W.new.url_for(:only_path => true, :controller => 'c', :action => 'a', :query => ['Bob', 'prof'])
303
+ params = extract_params(url)
304
+ assert_equal params[0], { 'query[]' => 'Bob' }.to_query
305
+ assert_equal params[1], { 'query[]' => 'prof' }.to_query
306
+ end
307
+
308
+ def test_hash_recursive_parameters
309
+ url = W.new.url_for(:only_path => true, :controller => 'c', :action => 'a', :query => {:person => {:name => 'Bob', :position => 'prof'}, :hobby => 'piercing'})
310
+ params = extract_params(url)
311
+ assert_equal params[0], { 'query[hobby]' => 'piercing' }.to_query
312
+ assert_equal params[1], { 'query[person][name]' => 'Bob' }.to_query
313
+ assert_equal params[2], { 'query[person][position]' => 'prof' }.to_query
314
+ end
315
+
316
+ def test_hash_recursive_and_array_parameters
317
+ url = W.new.url_for(:only_path => true, :controller => 'c', :action => 'a', :id => 101, :query => {:person => {:name => 'Bob', :position => ['prof', 'art director']}, :hobby => 'piercing'})
318
+ assert_match %r(^/c/a/101), url
319
+ params = extract_params(url)
320
+ assert_equal params[0], { 'query[hobby]' => 'piercing' }.to_query
321
+ assert_equal params[1], { 'query[person][name]' => 'Bob' }.to_query
322
+ assert_equal params[2], { 'query[person][position][]' => 'prof' }.to_query
323
+ assert_equal params[3], { 'query[person][position][]' => 'art director' }.to_query
324
+ end
325
+
326
+ def test_path_generation_for_symbol_parameter_keys
327
+ assert_generates("/image", :controller=> :image)
328
+ end
329
+
330
+ def test_named_routes_with_nil_keys
331
+ ActionController::Routing::Routes.clear!
332
+ ActionController::Routing::Routes.draw do |map|
333
+ map.main '', :controller => 'posts', :format => nil
334
+ map.resources :posts
335
+ map.connect ':controller/:action/:id'
336
+ end
337
+ # We need to create a new class in order to install the new named route.
338
+ kls = Class.new { include ActionController::UrlWriter }
339
+ kls.default_url_options[:host] = 'www.basecamphq.com'
340
+
341
+ controller = kls.new
342
+ params = {:action => :index, :controller => :posts, :format => :xml}
343
+ assert_equal("http://www.basecamphq.com/posts.xml", controller.send(:url_for, params))
344
+ params[:format] = nil
345
+ assert_equal("http://www.basecamphq.com/", controller.send(:url_for, params))
346
+ ensure
347
+ ActionController::Routing::Routes.load!
348
+ end
349
+
350
+ def test_formatted_url_methods_are_deprecated
351
+ ActionController::Routing::Routes.draw do |map|
352
+ map.resources :posts
353
+ end
354
+ # We need to create a new class in order to install the new named route.
355
+ kls = Class.new { include ActionController::UrlWriter }
356
+ controller = kls.new
357
+ params = {:id => 1, :format => :xml}
358
+ assert_deprecated do
359
+ assert_equal("/posts/1.xml", controller.send(:formatted_post_path, params))
360
+ end
361
+ assert_deprecated do
362
+ assert_equal("/posts/1.xml", controller.send(:formatted_post_path, 1, :xml))
363
+ end
364
+ ensure
365
+ ActionController::Routing::Routes.load!
366
+ end
367
+
368
+ def test_multiple_includes_maintain_distinct_options
369
+ first_class = Class.new { include ActionController::UrlWriter }
370
+ second_class = Class.new { include ActionController::UrlWriter }
371
+
372
+ first_host, second_host = 'firsthost.com', 'secondhost.com'
373
+
374
+ first_class.default_url_options[:host] = first_host
375
+ second_class.default_url_options[:host] = second_host
376
+
377
+ assert_equal first_class.default_url_options[:host], first_host
378
+ assert_equal second_class.default_url_options[:host], second_host
379
+ end
380
+
381
+ private
382
+ def extract_params(url)
383
+ url.split('?', 2).last.split('&')
384
+ end
385
+ end
@@ -0,0 +1,270 @@
1
+ require 'abstract_unit'
2
+
3
+ class VerificationTest < ActionController::TestCase
4
+ class TestController < ActionController::Base
5
+ verify :only => :guarded_one, :params => "one",
6
+ :add_flash => { :error => 'unguarded' },
7
+ :redirect_to => { :action => "unguarded" }
8
+
9
+ verify :only => :guarded_two, :params => %w( one two ),
10
+ :redirect_to => { :action => "unguarded" }
11
+
12
+ verify :only => :guarded_with_flash, :params => "one",
13
+ :add_flash => { :notice => "prereqs failed" },
14
+ :redirect_to => { :action => "unguarded" }
15
+
16
+ verify :only => :guarded_in_session, :session => "one",
17
+ :redirect_to => { :action => "unguarded" }
18
+
19
+ verify :only => [:multi_one, :multi_two], :session => %w( one two ),
20
+ :redirect_to => { :action => "unguarded" }
21
+
22
+ verify :only => :guarded_by_method, :method => :post,
23
+ :redirect_to => { :action => "unguarded" }
24
+
25
+ verify :only => :guarded_by_xhr, :xhr => true,
26
+ :redirect_to => { :action => "unguarded" }
27
+
28
+ verify :only => :guarded_by_not_xhr, :xhr => false,
29
+ :redirect_to => { :action => "unguarded" }
30
+
31
+ before_filter :unconditional_redirect, :only => :two_redirects
32
+ verify :only => :two_redirects, :method => :post,
33
+ :redirect_to => { :action => "unguarded" }
34
+
35
+ verify :only => :must_be_post, :method => :post, :render => { :status => 405, :text => "Must be post" }, :add_headers => { "Allow" => "POST" }
36
+
37
+ verify :only => :guarded_one_for_named_route_test, :params => "one",
38
+ :redirect_to => :foo_url
39
+
40
+ verify :only => :no_default_action, :params => "santa"
41
+
42
+ verify :only => :guarded_with_back, :method => :post,
43
+ :redirect_to => :back
44
+
45
+ def guarded_one
46
+ render :text => "#{params[:one]}"
47
+ end
48
+
49
+ def guarded_one_for_named_route_test
50
+ render :text => "#{params[:one]}"
51
+ end
52
+
53
+ def guarded_with_flash
54
+ render :text => "#{params[:one]}"
55
+ end
56
+
57
+ def guarded_two
58
+ render :text => "#{params[:one]}:#{params[:two]}"
59
+ end
60
+
61
+ def guarded_in_session
62
+ render :text => "#{session["one"]}"
63
+ end
64
+
65
+ def multi_one
66
+ render :text => "#{session["one"]}:#{session["two"]}"
67
+ end
68
+
69
+ def multi_two
70
+ render :text => "#{session["two"]}:#{session["one"]}"
71
+ end
72
+
73
+ def guarded_by_method
74
+ render :text => "#{request.method}"
75
+ end
76
+
77
+ def guarded_by_xhr
78
+ render :text => "#{request.xhr?}"
79
+ end
80
+
81
+ def guarded_by_not_xhr
82
+ render :text => "#{request.xhr?}"
83
+ end
84
+
85
+ def unguarded
86
+ render :text => "#{params[:one]}"
87
+ end
88
+
89
+ def two_redirects
90
+ render :nothing => true
91
+ end
92
+
93
+ def must_be_post
94
+ render :text => "Was a post!"
95
+ end
96
+
97
+ def guarded_with_back
98
+ render :text => "#{params[:one]}"
99
+ end
100
+
101
+ def no_default_action
102
+ # Will never run
103
+ end
104
+
105
+ protected
106
+ def rescue_action(e) raise end
107
+
108
+ def unconditional_redirect
109
+ redirect_to :action => "unguarded"
110
+ end
111
+ end
112
+
113
+ def setup
114
+ @controller = TestController.new
115
+ @request = ActionController::TestRequest.new
116
+ @response = ActionController::TestResponse.new
117
+ ActionController::Routing::Routes.add_named_route :foo, '/foo', :controller => 'test', :action => 'foo'
118
+ end
119
+
120
+ def test_using_symbol_back_with_no_referrer
121
+ assert_raise(ActionController::RedirectBackError) { get :guarded_with_back }
122
+ end
123
+
124
+ def test_using_symbol_back_redirects_to_referrer
125
+ @request.env["HTTP_REFERER"] = "/foo"
126
+ get :guarded_with_back
127
+ assert_redirected_to '/foo'
128
+ end
129
+
130
+ def test_no_deprecation_warning_for_named_route
131
+ assert_not_deprecated do
132
+ get :guarded_one_for_named_route_test, :two => "not one"
133
+ assert_redirected_to '/foo'
134
+ end
135
+ end
136
+
137
+ def test_guarded_one_with_prereqs
138
+ get :guarded_one, :one => "here"
139
+ assert_equal "here", @response.body
140
+ end
141
+
142
+ def test_guarded_one_without_prereqs
143
+ get :guarded_one
144
+ assert_redirected_to :action => "unguarded"
145
+ assert_equal 'unguarded', flash[:error]
146
+ end
147
+
148
+ def test_guarded_with_flash_with_prereqs
149
+ get :guarded_with_flash, :one => "here"
150
+ assert_equal "here", @response.body
151
+ assert flash.empty?
152
+ end
153
+
154
+ def test_guarded_with_flash_without_prereqs
155
+ get :guarded_with_flash
156
+ assert_redirected_to :action => "unguarded"
157
+ assert_equal "prereqs failed", flash[:notice]
158
+ end
159
+
160
+ def test_guarded_two_with_prereqs
161
+ get :guarded_two, :one => "here", :two => "there"
162
+ assert_equal "here:there", @response.body
163
+ end
164
+
165
+ def test_guarded_two_without_prereqs_one
166
+ get :guarded_two, :two => "there"
167
+ assert_redirected_to :action => "unguarded"
168
+ end
169
+
170
+ def test_guarded_two_without_prereqs_two
171
+ get :guarded_two, :one => "here"
172
+ assert_redirected_to :action => "unguarded"
173
+ end
174
+
175
+ def test_guarded_two_without_prereqs_both
176
+ get :guarded_two
177
+ assert_redirected_to :action => "unguarded"
178
+ end
179
+
180
+ def test_unguarded_with_params
181
+ get :unguarded, :one => "here"
182
+ assert_equal "here", @response.body
183
+ end
184
+
185
+ def test_unguarded_without_params
186
+ get :unguarded
187
+ assert_equal "", @response.body
188
+ end
189
+
190
+ def test_guarded_in_session_with_prereqs
191
+ get :guarded_in_session, {}, "one" => "here"
192
+ assert_equal "here", @response.body
193
+ end
194
+
195
+ def test_guarded_in_session_without_prereqs
196
+ get :guarded_in_session
197
+ assert_redirected_to :action => "unguarded"
198
+ end
199
+
200
+ def test_multi_one_with_prereqs
201
+ get :multi_one, {}, "one" => "here", "two" => "there"
202
+ assert_equal "here:there", @response.body
203
+ end
204
+
205
+ def test_multi_one_without_prereqs
206
+ get :multi_one
207
+ assert_redirected_to :action => "unguarded"
208
+ end
209
+
210
+ def test_multi_two_with_prereqs
211
+ get :multi_two, {}, "one" => "here", "two" => "there"
212
+ assert_equal "there:here", @response.body
213
+ end
214
+
215
+ def test_multi_two_without_prereqs
216
+ get :multi_two
217
+ assert_redirected_to :action => "unguarded"
218
+ end
219
+
220
+ def test_guarded_by_method_with_prereqs
221
+ post :guarded_by_method
222
+ assert_equal "post", @response.body
223
+ end
224
+
225
+ def test_guarded_by_method_without_prereqs
226
+ get :guarded_by_method
227
+ assert_redirected_to :action => "unguarded"
228
+ end
229
+
230
+ def test_guarded_by_xhr_with_prereqs
231
+ xhr :post, :guarded_by_xhr
232
+ assert_equal "true", @response.body
233
+ end
234
+
235
+ def test_guarded_by_xhr_without_prereqs
236
+ get :guarded_by_xhr
237
+ assert_redirected_to :action => "unguarded"
238
+ end
239
+
240
+ def test_guarded_by_not_xhr_with_prereqs
241
+ get :guarded_by_not_xhr
242
+ assert_equal "false", @response.body
243
+ end
244
+
245
+ def test_guarded_by_not_xhr_without_prereqs
246
+ xhr :post, :guarded_by_not_xhr
247
+ assert_redirected_to :action => "unguarded"
248
+ end
249
+
250
+ def test_guarded_post_and_calls_render_succeeds
251
+ post :must_be_post
252
+ assert_equal "Was a post!", @response.body
253
+ end
254
+
255
+ def test_default_failure_should_be_a_bad_request
256
+ post :no_default_action
257
+ assert_response :bad_request
258
+ end
259
+
260
+ def test_guarded_post_and_calls_render_fails_and_sets_allow_header
261
+ get :must_be_post
262
+ assert_response 405
263
+ assert_equal "Must be post", @response.body
264
+ assert_equal "POST", @response.headers["Allow"]
265
+ end
266
+
267
+ def test_second_redirect
268
+ assert_nothing_raised { get :two_redirects }
269
+ end
270
+ end