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,139 @@
1
+ require 'abstract_unit'
2
+
3
+ class Comment
4
+ attr_reader :id
5
+ def save; @id = 1 end
6
+ def new_record?; @id.nil? end
7
+ def name
8
+ @id.nil? ? 'new comment' : "comment ##{@id}"
9
+ end
10
+ end
11
+
12
+ class Comment::Nested < Comment; end
13
+
14
+ class Test::Unit::TestCase
15
+ protected
16
+ def comments_url
17
+ 'http://www.example.com/comments'
18
+ end
19
+
20
+ def comment_url(comment)
21
+ "http://www.example.com/comments/#{comment.id}"
22
+ end
23
+ end
24
+
25
+
26
+ class RecordIdentifierTest < Test::Unit::TestCase
27
+ include ActionController::RecordIdentifier
28
+
29
+ def setup
30
+ @klass = Comment
31
+ @record = @klass.new
32
+ @singular = 'comment'
33
+ @plural = 'comments'
34
+ end
35
+
36
+ def test_dom_id_with_new_record
37
+ assert_equal "new_#{@singular}", dom_id(@record)
38
+ end
39
+
40
+ def test_dom_id_with_new_record_and_prefix
41
+ assert_equal "custom_prefix_#{@singular}", dom_id(@record, :custom_prefix)
42
+ end
43
+
44
+ def test_dom_id_with_saved_record
45
+ @record.save
46
+ assert_equal "#{@singular}_1", dom_id(@record)
47
+ end
48
+
49
+ def test_dom_id_with_prefix
50
+ @record.save
51
+ assert_equal "edit_#{@singular}_1", dom_id(@record, :edit)
52
+ end
53
+
54
+ def test_partial_path
55
+ expected = "#{@plural}/#{@singular}"
56
+ assert_equal expected, partial_path(@record)
57
+ assert_equal expected, partial_path(Comment)
58
+ end
59
+
60
+ def test_partial_path_with_namespaced_controller_path
61
+ expected = "admin/#{@plural}/#{@singular}"
62
+ assert_equal expected, partial_path(@record, "admin/posts")
63
+ assert_equal expected, partial_path(@klass, "admin/posts")
64
+ end
65
+
66
+ def test_partial_path_with_not_namespaced_controller_path
67
+ expected = "#{@plural}/#{@singular}"
68
+ assert_equal expected, partial_path(@record, "posts")
69
+ assert_equal expected, partial_path(@klass, "posts")
70
+ end
71
+
72
+ def test_dom_class
73
+ assert_equal @singular, dom_class(@record)
74
+ end
75
+
76
+ def test_dom_class_with_prefix
77
+ assert_equal "custom_prefix_#{@singular}", dom_class(@record, :custom_prefix)
78
+ end
79
+
80
+ def test_singular_class_name
81
+ assert_equal @singular, singular_class_name(@record)
82
+ end
83
+
84
+ def test_singular_class_name_for_class
85
+ assert_equal @singular, singular_class_name(@klass)
86
+ end
87
+
88
+ def test_plural_class_name
89
+ assert_equal @plural, plural_class_name(@record)
90
+ end
91
+
92
+ def test_plural_class_name_for_class
93
+ assert_equal @plural, plural_class_name(@klass)
94
+ end
95
+
96
+ private
97
+ def method_missing(method, *args)
98
+ RecordIdentifier.send(method, *args)
99
+ end
100
+ end
101
+
102
+ class NestedRecordIdentifierTest < RecordIdentifierTest
103
+ def setup
104
+ @klass = Comment::Nested
105
+ @record = @klass.new
106
+ @singular = 'comment_nested'
107
+ @plural = 'comment_nesteds'
108
+ end
109
+
110
+ def test_partial_path
111
+ expected = "comment/nesteds/nested"
112
+ assert_equal expected, partial_path(@record)
113
+ assert_equal expected, partial_path(Comment::Nested)
114
+ end
115
+
116
+ def test_partial_path_with_namespaced_controller_path
117
+ expected = "admin/comment/nesteds/nested"
118
+ assert_equal expected, partial_path(@record, "admin/posts")
119
+ assert_equal expected, partial_path(@klass, "admin/posts")
120
+ end
121
+
122
+ def test_partial_path_with_deeper_namespaced_controller_path
123
+ expected = "deeper/admin/comment/nesteds/nested"
124
+ assert_equal expected, partial_path(@record, "deeper/admin/posts")
125
+ assert_equal expected, partial_path(@klass, "deeper/admin/posts")
126
+ end
127
+
128
+ def test_partial_path_with_even_deeper_namespaced_controller_path
129
+ expected = "even/more/deeper/admin/comment/nesteds/nested"
130
+ assert_equal expected, partial_path(@record, "even/more/deeper/admin/posts")
131
+ assert_equal expected, partial_path(@klass, "even/more/deeper/admin/posts")
132
+ end
133
+
134
+ def test_partial_path_with_not_namespaced_controller_path
135
+ expected = "comment/nesteds/nested"
136
+ assert_equal expected, partial_path(@record, "posts")
137
+ assert_equal expected, partial_path(@klass, "posts")
138
+ end
139
+ end
@@ -0,0 +1,285 @@
1
+ require 'abstract_unit'
2
+
3
+ class WorkshopsController < ActionController::Base
4
+ end
5
+
6
+ class Workshop
7
+ attr_accessor :id, :new_record
8
+
9
+ def initialize(id, new_record)
10
+ @id, @new_record = id, new_record
11
+ end
12
+
13
+ def new_record?
14
+ @new_record
15
+ end
16
+
17
+ def to_s
18
+ id.to_s
19
+ end
20
+ end
21
+
22
+ class RedirectController < ActionController::Base
23
+ def simple_redirect
24
+ redirect_to :action => "hello_world"
25
+ end
26
+
27
+ def redirect_with_status
28
+ redirect_to({:action => "hello_world", :status => 301})
29
+ end
30
+
31
+ def redirect_with_status_hash
32
+ redirect_to({:action => "hello_world"}, {:status => 301})
33
+ end
34
+
35
+ def url_redirect_with_status
36
+ redirect_to("http://www.example.com", :status => :moved_permanently)
37
+ end
38
+
39
+ def url_redirect_with_status_hash
40
+ redirect_to("http://www.example.com", {:status => 301})
41
+ end
42
+
43
+ def relative_url_redirect_with_status
44
+ redirect_to("/things/stuff", :status => :found)
45
+ end
46
+
47
+ def relative_url_redirect_with_status_hash
48
+ redirect_to("/things/stuff", {:status => 301})
49
+ end
50
+
51
+ def redirect_to_back_with_status
52
+ redirect_to :back, :status => 307
53
+ end
54
+
55
+ def host_redirect
56
+ redirect_to :action => "other_host", :only_path => false, :host => 'other.test.host'
57
+ end
58
+
59
+ def module_redirect
60
+ redirect_to :controller => 'module_test/module_redirect', :action => "hello_world"
61
+ end
62
+
63
+ def redirect_with_assigns
64
+ @hello = "world"
65
+ redirect_to :action => "hello_world"
66
+ end
67
+
68
+ def redirect_to_url
69
+ redirect_to "http://www.rubyonrails.org/"
70
+ end
71
+
72
+ def redirect_to_url_with_unescaped_query_string
73
+ redirect_to "http://dev.rubyonrails.org/query?status=new"
74
+ end
75
+
76
+ def redirect_to_url_with_complex_scheme
77
+ redirect_to "x-test+scheme.complex:redirect"
78
+ end
79
+
80
+ def redirect_to_back
81
+ redirect_to :back
82
+ end
83
+
84
+ def redirect_to_existing_record
85
+ redirect_to Workshop.new(5, false)
86
+ end
87
+
88
+ def redirect_to_new_record
89
+ redirect_to Workshop.new(5, true)
90
+ end
91
+
92
+ def redirect_to_nil
93
+ redirect_to nil
94
+ end
95
+
96
+ def rescue_errors(e) raise e end
97
+
98
+ def rescue_action(e) raise end
99
+
100
+ protected
101
+ def dashbord_url(id, message)
102
+ url_for :action => "dashboard", :params => { "id" => id, "message" => message }
103
+ end
104
+ end
105
+
106
+ class RedirectTest < ActionController::TestCase
107
+ tests RedirectController
108
+
109
+ def test_simple_redirect
110
+ get :simple_redirect
111
+ assert_response :redirect
112
+ assert_equal "http://test.host/redirect/hello_world", redirect_to_url
113
+ end
114
+
115
+ def test_redirect_with_no_status
116
+ get :simple_redirect
117
+ assert_response 302
118
+ assert_equal "http://test.host/redirect/hello_world", redirect_to_url
119
+ end
120
+
121
+ def test_redirect_with_status
122
+ get :redirect_with_status
123
+ assert_response 301
124
+ assert_equal "http://test.host/redirect/hello_world", redirect_to_url
125
+ end
126
+
127
+ def test_redirect_with_status_hash
128
+ get :redirect_with_status_hash
129
+ assert_response 301
130
+ assert_equal "http://test.host/redirect/hello_world", redirect_to_url
131
+ end
132
+
133
+ def test_url_redirect_with_status
134
+ get :url_redirect_with_status
135
+ assert_response 301
136
+ assert_equal "http://www.example.com", redirect_to_url
137
+ end
138
+
139
+ def test_url_redirect_with_status_hash
140
+ get :url_redirect_with_status_hash
141
+ assert_response 301
142
+ assert_equal "http://www.example.com", redirect_to_url
143
+ end
144
+
145
+
146
+ def test_relative_url_redirect_with_status
147
+ get :relative_url_redirect_with_status
148
+ assert_response 302
149
+ assert_equal "http://test.host/things/stuff", redirect_to_url
150
+ end
151
+
152
+ def test_relative_url_redirect_with_status_hash
153
+ get :relative_url_redirect_with_status_hash
154
+ assert_response 301
155
+ assert_equal "http://test.host/things/stuff", redirect_to_url
156
+ end
157
+
158
+ def test_redirect_to_back_with_status
159
+ @request.env["HTTP_REFERER"] = "http://www.example.com/coming/from"
160
+ get :redirect_to_back_with_status
161
+ assert_response 307
162
+ assert_equal "http://www.example.com/coming/from", redirect_to_url
163
+ end
164
+
165
+ def test_simple_redirect_using_options
166
+ get :host_redirect
167
+ assert_response :redirect
168
+ assert_redirected_to :action => "other_host", :only_path => false, :host => 'other.test.host'
169
+ end
170
+
171
+ def test_module_redirect
172
+ get :module_redirect
173
+ assert_response :redirect
174
+ assert_redirected_to "http://test.host/module_test/module_redirect/hello_world"
175
+ end
176
+
177
+ def test_module_redirect_using_options
178
+ get :module_redirect
179
+ assert_response :redirect
180
+ assert_redirected_to :controller => 'module_test/module_redirect', :action => 'hello_world'
181
+ end
182
+
183
+ def test_redirect_with_assigns
184
+ get :redirect_with_assigns
185
+ assert_response :redirect
186
+ assert_equal "world", assigns["hello"]
187
+ end
188
+
189
+ def test_redirect_to_url
190
+ get :redirect_to_url
191
+ assert_response :redirect
192
+ assert_redirected_to "http://www.rubyonrails.org/"
193
+ end
194
+
195
+ def test_redirect_to_url_with_unescaped_query_string
196
+ get :redirect_to_url_with_unescaped_query_string
197
+ assert_response :redirect
198
+ assert_redirected_to "http://dev.rubyonrails.org/query?status=new"
199
+ end
200
+
201
+ def test_redirect_to_url_with_complex_scheme
202
+ get :redirect_to_url_with_complex_scheme
203
+ assert_response :redirect
204
+ assert_equal "x-test+scheme.complex:redirect", redirect_to_url
205
+ end
206
+
207
+ def test_redirect_to_back
208
+ @request.env["HTTP_REFERER"] = "http://www.example.com/coming/from"
209
+ get :redirect_to_back
210
+ assert_response :redirect
211
+ assert_equal "http://www.example.com/coming/from", redirect_to_url
212
+ end
213
+
214
+ def test_redirect_to_back_with_no_referer
215
+ assert_raise(ActionController::RedirectBackError) {
216
+ @request.env["HTTP_REFERER"] = nil
217
+ get :redirect_to_back
218
+ }
219
+ end
220
+
221
+ def test_redirect_to_record
222
+ ActionController::Routing::Routes.draw do |map|
223
+ map.resources :workshops
224
+ map.connect ':controller/:action/:id'
225
+ end
226
+
227
+ get :redirect_to_existing_record
228
+ assert_equal "http://test.host/workshops/5", redirect_to_url
229
+ assert_redirected_to Workshop.new(5, false)
230
+
231
+ get :redirect_to_new_record
232
+ assert_equal "http://test.host/workshops", redirect_to_url
233
+ assert_redirected_to Workshop.new(5, true)
234
+ end
235
+
236
+ def test_redirect_with_partial_params
237
+ get :module_redirect
238
+
239
+ assert_deprecated(/test_redirect_with_partial_params/) do
240
+ assert_redirected_to :action => 'hello_world'
241
+ end
242
+ end
243
+
244
+ def test_redirect_to_nil
245
+ assert_raise(ActionController::ActionControllerError) do
246
+ get :redirect_to_nil
247
+ end
248
+ end
249
+ end
250
+
251
+ module ModuleTest
252
+ class ModuleRedirectController < ::RedirectController
253
+ def module_redirect
254
+ redirect_to :controller => '/redirect', :action => "hello_world"
255
+ end
256
+ end
257
+
258
+ class ModuleRedirectTest < ActionController::TestCase
259
+ tests ModuleRedirectController
260
+
261
+ def test_simple_redirect
262
+ get :simple_redirect
263
+ assert_response :redirect
264
+ assert_equal "http://test.host/module_test/module_redirect/hello_world", redirect_to_url
265
+ end
266
+
267
+ def test_simple_redirect_using_options
268
+ get :host_redirect
269
+ assert_response :redirect
270
+ assert_redirected_to :action => "other_host", :only_path => false, :host => 'other.test.host'
271
+ end
272
+
273
+ def test_module_redirect
274
+ get :module_redirect
275
+ assert_response :redirect
276
+ assert_equal "http://test.host/redirect/hello_world", redirect_to_url
277
+ end
278
+
279
+ def test_module_redirect_using_options
280
+ get :module_redirect
281
+ assert_response :redirect
282
+ assert_redirected_to :controller => '/redirect', :action => "hello_world"
283
+ end
284
+ end
285
+ end
@@ -0,0 +1,124 @@
1
+ require 'abstract_unit'
2
+
3
+ class ReloaderTests < ActiveSupport::TestCase
4
+ Reloader = ActionController::Reloader
5
+ Dispatcher = ActionController::Dispatcher
6
+
7
+ class MyBody < Array
8
+ def initialize(&block)
9
+ @on_close = block
10
+ end
11
+
12
+ def foo
13
+ "foo"
14
+ end
15
+
16
+ def bar
17
+ "bar"
18
+ end
19
+
20
+ def close
21
+ @on_close.call if @on_close
22
+ end
23
+ end
24
+
25
+ def setup
26
+ @lock = Mutex.new
27
+ end
28
+
29
+ def test_it_reloads_the_application_before_yielding
30
+ Dispatcher.expects(:reload_application)
31
+ Reloader.run(@lock) do
32
+ [200, { "Content-Type" => "text/html" }, [""]]
33
+ end
34
+ end
35
+
36
+ def test_it_locks_before_yielding
37
+ lock = DummyMutex.new
38
+ Dispatcher.expects(:reload_application)
39
+ Reloader.run(lock) do
40
+ assert lock.locked?
41
+ [200, { "Content-Type" => "text/html" }, [""]]
42
+ end
43
+ assert lock.locked?
44
+ end
45
+
46
+ def test_it_unlocks_upon_calling_close_on_body
47
+ lock = DummyMutex.new
48
+ Dispatcher.expects(:reload_application)
49
+ headers, status, body = Reloader.run(lock) do
50
+ [200, { "Content-Type" => "text/html" }, [""]]
51
+ end
52
+ body.close
53
+ assert !lock.locked?
54
+ end
55
+
56
+ def test_it_unlocks_if_app_object_raises_exception
57
+ lock = DummyMutex.new
58
+ Dispatcher.expects(:reload_application)
59
+ assert_raise(RuntimeError) do
60
+ Reloader.run(lock) do
61
+ raise "oh no!"
62
+ end
63
+ end
64
+ assert !lock.locked?
65
+ end
66
+
67
+ def test_returned_body_object_always_responds_to_close
68
+ status, headers, body = Reloader.run(@lock) do
69
+ [200, { "Content-Type" => "text/html" }, [""]]
70
+ end
71
+ assert body.respond_to?(:close)
72
+ end
73
+
74
+ def test_returned_body_object_behaves_like_underlying_object
75
+ status, headers, body = Reloader.run(@lock) do
76
+ b = MyBody.new
77
+ b << "hello"
78
+ b << "world"
79
+ [200, { "Content-Type" => "text/html" }, b]
80
+ end
81
+ assert_equal 2, body.size
82
+ assert_equal "hello", body[0]
83
+ assert_equal "world", body[1]
84
+ assert_equal "foo", body.foo
85
+ assert_equal "bar", body.bar
86
+ end
87
+
88
+ def test_it_calls_close_on_underlying_object_when_close_is_called_on_body
89
+ close_called = false
90
+ status, headers, body = Reloader.run(@lock) do
91
+ b = MyBody.new do
92
+ close_called = true
93
+ end
94
+ [200, { "Content-Type" => "text/html" }, b]
95
+ end
96
+ body.close
97
+ assert close_called
98
+ end
99
+
100
+ def test_returned_body_object_responds_to_all_methods_supported_by_underlying_object
101
+ status, headers, body = Reloader.run(@lock) do
102
+ [200, { "Content-Type" => "text/html" }, MyBody.new]
103
+ end
104
+ assert body.respond_to?(:size)
105
+ assert body.respond_to?(:each)
106
+ assert body.respond_to?(:foo)
107
+ assert body.respond_to?(:bar)
108
+ end
109
+
110
+ def test_it_doesnt_clean_up_the_application_after_call
111
+ Dispatcher.expects(:cleanup_application).never
112
+ status, headers, body = Reloader.run(@lock) do
113
+ [200, { "Content-Type" => "text/html" }, MyBody.new]
114
+ end
115
+ end
116
+
117
+ def test_it_cleans_up_the_application_when_close_is_called_on_body
118
+ Dispatcher.expects(:cleanup_application)
119
+ status, headers, body = Reloader.run(@lock) do
120
+ [200, { "Content-Type" => "text/html" }, MyBody.new]
121
+ end
122
+ body.close
123
+ end
124
+ end