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,543 @@
1
+ require 'abstract_unit'
2
+
3
+ # a controller class to facilitate the tests
4
+ class ActionPackAssertionsController < ActionController::Base
5
+
6
+ # this does absolutely nothing
7
+ def nothing() head :ok end
8
+
9
+ # a standard template
10
+ def hello_world() render :template => "test/hello_world"; end
11
+
12
+ # a standard template
13
+ def hello_xml_world() render :template => "test/hello_xml_world"; end
14
+
15
+ # a standard partial
16
+ def partial() render :partial => 'test/partial'; end
17
+
18
+ # a redirect to an internal location
19
+ def redirect_internal() redirect_to "/nothing"; end
20
+
21
+ def redirect_to_action() redirect_to :action => "flash_me", :id => 1, :params => { "panda" => "fun" }; end
22
+
23
+ def redirect_to_controller() redirect_to :controller => "elsewhere", :action => "flash_me"; end
24
+
25
+ def redirect_to_controller_with_symbol() redirect_to :controller => :elsewhere, :action => :flash_me; end
26
+
27
+ def redirect_to_path() redirect_to '/some/path' end
28
+
29
+ def redirect_to_named_route() redirect_to route_one_url end
30
+
31
+ # a redirect to an external location
32
+ def redirect_external() redirect_to "http://www.rubyonrails.org"; end
33
+
34
+ # a 404
35
+ def response404() head '404 AWOL' end
36
+
37
+ # a 500
38
+ def response500() head '500 Sorry' end
39
+
40
+ # a fictional 599
41
+ def response599() head '599 Whoah!' end
42
+
43
+ # putting stuff in the flash
44
+ def flash_me
45
+ flash['hello'] = 'my name is inigo montoya...'
46
+ render :text => "Inconceivable!"
47
+ end
48
+
49
+ # we have a flash, but nothing is in it
50
+ def flash_me_naked
51
+ flash.clear
52
+ render :text => "wow!"
53
+ end
54
+
55
+ # assign some template instance variables
56
+ def assign_this
57
+ @howdy = "ho"
58
+ render :inline => "Mr. Henke"
59
+ end
60
+
61
+ def render_based_on_parameters
62
+ render :text => "Mr. #{params[:name]}"
63
+ end
64
+
65
+ def render_url
66
+ render :text => "<div>#{url_for(:action => 'flash_me', :only_path => true)}</div>"
67
+ end
68
+
69
+ def render_text_with_custom_content_type
70
+ render :text => "Hello!", :content_type => Mime::RSS
71
+ end
72
+
73
+ # puts something in the session
74
+ def session_stuffing
75
+ session['xmas'] = 'turkey'
76
+ render :text => "ho ho ho"
77
+ end
78
+
79
+ # raises exception on get requests
80
+ def raise_on_get
81
+ raise "get" if request.get?
82
+ render :text => "request method: #{request.env['REQUEST_METHOD']}"
83
+ end
84
+
85
+ # raises exception on post requests
86
+ def raise_on_post
87
+ raise "post" if request.post?
88
+ render :text => "request method: #{request.env['REQUEST_METHOD']}"
89
+ end
90
+
91
+ def get_valid_record
92
+ @record = Class.new do
93
+ def valid?
94
+ true
95
+ end
96
+
97
+ def errors
98
+ Class.new do
99
+ def full_messages; []; end
100
+ end.new
101
+ end
102
+
103
+ end.new
104
+
105
+ render :nothing => true
106
+ end
107
+
108
+
109
+ def get_invalid_record
110
+ @record = Class.new do
111
+
112
+ def valid?
113
+ false
114
+ end
115
+
116
+ def errors
117
+ Class.new do
118
+ def full_messages; ['...stuff...']; end
119
+ end.new
120
+ end
121
+ end.new
122
+
123
+ render :nothing => true
124
+ end
125
+
126
+ # 911
127
+ def rescue_action(e) raise; end
128
+ end
129
+
130
+ # Used to test that assert_response includes the exception message
131
+ # in the failure message when an action raises and assert_response
132
+ # is expecting something other than an error.
133
+ class AssertResponseWithUnexpectedErrorController < ActionController::Base
134
+ def index
135
+ raise 'FAIL'
136
+ end
137
+
138
+ def show
139
+ render :text => "Boom", :status => 500
140
+ end
141
+ end
142
+
143
+ class UserController < ActionController::Base
144
+ end
145
+
146
+ module Admin
147
+ class InnerModuleController < ActionController::Base
148
+ def index
149
+ render :nothing => true
150
+ end
151
+
152
+ def redirect_to_index
153
+ redirect_to admin_inner_module_path
154
+ end
155
+
156
+ def redirect_to_absolute_controller
157
+ redirect_to :controller => '/content'
158
+ end
159
+
160
+ def redirect_to_fellow_controller
161
+ redirect_to :controller => 'user'
162
+ end
163
+
164
+ def redirect_to_top_level_named_route
165
+ redirect_to top_level_url(:id => "foo")
166
+ end
167
+ end
168
+ end
169
+
170
+ # a test case to exercise the new capabilities TestRequest & TestResponse
171
+ class ActionPackAssertionsControllerTest < ActionController::TestCase
172
+ # let's get this party started
173
+ def setup
174
+ ActionController::Routing::Routes.reload
175
+ ActionController::Routing.use_controllers!(%w(action_pack_assertions admin/inner_module user content admin/user))
176
+ end
177
+
178
+ def teardown
179
+ ActionController::Routing::Routes.reload
180
+ end
181
+
182
+ # -- assertion-based testing ------------------------------------------------
183
+
184
+ def test_assert_tag_and_url_for
185
+ get :render_url
186
+ assert_tag :content => "/action_pack_assertions/flash_me"
187
+ end
188
+
189
+ # test the get method, make sure the request really was a get
190
+ def test_get
191
+ assert_raise(RuntimeError) { get :raise_on_get }
192
+ get :raise_on_post
193
+ assert_equal @response.body, 'request method: GET'
194
+ end
195
+
196
+ # test the get method, make sure the request really was a get
197
+ def test_post
198
+ assert_raise(RuntimeError) { post :raise_on_post }
199
+ post :raise_on_get
200
+ assert_equal @response.body, 'request method: POST'
201
+ end
202
+
203
+ # the following test fails because the request_method is now cached on the request instance
204
+ # test the get/post switch within one test action
205
+ # def test_get_post_switch
206
+ # post :raise_on_get
207
+ # assert_equal @response.body, 'request method: POST'
208
+ # get :raise_on_post
209
+ # assert_equal @response.body, 'request method: GET'
210
+ # post :raise_on_get
211
+ # assert_equal @response.body, 'request method: POST'
212
+ # get :raise_on_post
213
+ # assert_equal @response.body, 'request method: GET'
214
+ # end
215
+
216
+ # test the redirection to a named route
217
+ def test_assert_redirect_to_named_route
218
+ with_routing do |set|
219
+ set.draw do |map|
220
+ map.route_one 'route_one', :controller => 'action_pack_assertions', :action => 'nothing'
221
+ map.connect ':controller/:action/:id'
222
+ end
223
+ set.install_helpers
224
+
225
+ process :redirect_to_named_route
226
+ assert_redirected_to 'http://test.host/route_one'
227
+ assert_redirected_to route_one_url
228
+ end
229
+ end
230
+
231
+ def test_assert_redirect_to_named_route_failure
232
+ with_routing do |set|
233
+ set.draw do |map|
234
+ map.route_one 'route_one', :controller => 'action_pack_assertions', :action => 'nothing', :id => 'one'
235
+ map.route_two 'route_two', :controller => 'action_pack_assertions', :action => 'nothing', :id => 'two'
236
+ map.connect ':controller/:action/:id'
237
+ end
238
+ process :redirect_to_named_route
239
+ assert_raise(ActiveSupport::TestCase::Assertion) do
240
+ assert_redirected_to 'http://test.host/route_two'
241
+ end
242
+ assert_raise(ActiveSupport::TestCase::Assertion) do
243
+ assert_redirected_to :controller => 'action_pack_assertions', :action => 'nothing', :id => 'two'
244
+ end
245
+ assert_raise(ActiveSupport::TestCase::Assertion) do
246
+ assert_redirected_to route_two_url
247
+ end
248
+ end
249
+ end
250
+
251
+ def test_assert_redirect_to_nested_named_route
252
+ with_routing do |set|
253
+ set.draw do |map|
254
+ map.admin_inner_module 'admin/inner_module', :controller => 'admin/inner_module', :action => 'index'
255
+ map.connect ':controller/:action/:id'
256
+ end
257
+ @controller = Admin::InnerModuleController.new
258
+ process :redirect_to_index
259
+ # redirection is <{"action"=>"index", "controller"=>"admin/admin/inner_module"}>
260
+ assert_redirected_to admin_inner_module_path
261
+ end
262
+ end
263
+
264
+ def test_assert_redirected_to_top_level_named_route_from_nested_controller
265
+ with_routing do |set|
266
+ set.draw do |map|
267
+ map.top_level '/action_pack_assertions/:id', :controller => 'action_pack_assertions', :action => 'index'
268
+ map.connect ':controller/:action/:id'
269
+ end
270
+ @controller = Admin::InnerModuleController.new
271
+ process :redirect_to_top_level_named_route
272
+ # assert_redirected_to "http://test.host/action_pack_assertions/foo" would pass because of exact match early return
273
+ assert_redirected_to "/action_pack_assertions/foo"
274
+ end
275
+ end
276
+
277
+ def test_assert_redirected_to_top_level_named_route_with_same_controller_name_in_both_namespaces
278
+ with_routing do |set|
279
+ set.draw do |map|
280
+ # this controller exists in the admin namespace as well which is the only difference from previous test
281
+ map.top_level '/user/:id', :controller => 'user', :action => 'index'
282
+ map.connect ':controller/:action/:id'
283
+ end
284
+ @controller = Admin::InnerModuleController.new
285
+ process :redirect_to_top_level_named_route
286
+ # assert_redirected_to top_level_url('foo') would pass because of exact match early return
287
+ assert_redirected_to top_level_path('foo')
288
+ end
289
+ end
290
+
291
+ # -- standard request/response object testing --------------------------------
292
+
293
+ # make sure that the template objects exist
294
+ def test_template_objects_alive
295
+ process :assign_this
296
+ assert !@response.has_template_object?('hi')
297
+ assert @response.has_template_object?('howdy')
298
+ end
299
+
300
+ # make sure we don't have template objects when we shouldn't
301
+ def test_template_object_missing
302
+ process :nothing
303
+ assert_nil @response.template_objects['howdy']
304
+ end
305
+
306
+ # check the empty flashing
307
+ def test_flash_me_naked
308
+ process :flash_me_naked
309
+ assert !@response.has_flash?
310
+ assert !@response.has_flash_with_contents?
311
+ end
312
+
313
+ # check if we have flash objects
314
+ def test_flash_haves
315
+ process :flash_me
316
+ assert @response.has_flash?
317
+ assert @response.has_flash_with_contents?
318
+ assert @response.has_flash_object?('hello')
319
+ end
320
+
321
+ # ensure we don't have flash objects
322
+ def test_flash_have_nots
323
+ process :nothing
324
+ assert !@response.has_flash?
325
+ assert !@response.has_flash_with_contents?
326
+ assert_nil @response.flash['hello']
327
+ end
328
+
329
+ # check if we were rendered by a file-based template?
330
+ def test_rendered_action
331
+ process :nothing
332
+ assert_nil @response.rendered[:template]
333
+
334
+ process :hello_world
335
+ assert @response.rendered[:template]
336
+ assert 'hello_world', @response.rendered[:template].to_s
337
+ end
338
+
339
+ def test_assert_template_with_partial
340
+ get :partial
341
+ assert_template :partial => '_partial'
342
+ end
343
+
344
+ def test_assert_template_with_nil
345
+ get :nothing
346
+ assert_template nil
347
+ end
348
+
349
+ def test_assert_template_with_string
350
+ get :hello_world
351
+ assert_template 'hello_world'
352
+ end
353
+
354
+ def test_assert_template_with_symbol
355
+ get :hello_world
356
+ assert_template :hello_world
357
+ end
358
+
359
+ def test_assert_template_with_bad_argument
360
+ assert_raise(ArgumentError) { assert_template 1 }
361
+ end
362
+
363
+ # check the redirection location
364
+ def test_redirection_location
365
+ process :redirect_internal
366
+ assert_equal 'http://test.host/nothing', @response.redirect_url
367
+
368
+ process :redirect_external
369
+ assert_equal 'http://www.rubyonrails.org', @response.redirect_url
370
+ end
371
+
372
+ def test_no_redirect_url
373
+ process :nothing
374
+ assert_nil @response.redirect_url
375
+ end
376
+
377
+
378
+ # check server errors
379
+ def test_server_error_response_code
380
+ process :response500
381
+ assert @response.server_error?
382
+
383
+ process :response599
384
+ assert @response.server_error?
385
+
386
+ process :response404
387
+ assert !@response.server_error?
388
+ end
389
+
390
+ # check a 404 response code
391
+ def test_missing_response_code
392
+ process :response404
393
+ assert @response.missing?
394
+ end
395
+
396
+ # check client errors
397
+ def test_client_error_response_code
398
+ process :response404
399
+ assert @response.client_error?
400
+ end
401
+
402
+ # check to see if our redirection matches a pattern
403
+ def test_redirect_url_match
404
+ process :redirect_external
405
+ assert @response.redirect?
406
+ assert @response.redirect_url_match?("rubyonrails")
407
+ assert @response.redirect_url_match?(/rubyonrails/)
408
+ assert !@response.redirect_url_match?("phpoffrails")
409
+ assert !@response.redirect_url_match?(/perloffrails/)
410
+ end
411
+
412
+ # check for a redirection
413
+ def test_redirection
414
+ process :redirect_internal
415
+ assert @response.redirect?
416
+
417
+ process :redirect_external
418
+ assert @response.redirect?
419
+
420
+ process :nothing
421
+ assert !@response.redirect?
422
+ end
423
+
424
+ # check a successful response code
425
+ def test_successful_response_code
426
+ process :nothing
427
+ assert @response.success?
428
+ end
429
+
430
+ # a basic check to make sure we have a TestResponse object
431
+ def test_has_response
432
+ process :nothing
433
+ assert_kind_of ActionController::TestResponse, @response
434
+ end
435
+
436
+ def test_render_based_on_parameters
437
+ process :render_based_on_parameters, "name" => "David"
438
+ assert_equal "Mr. David", @response.body
439
+ end
440
+
441
+
442
+ def test_assert_redirection_fails_with_incorrect_controller
443
+ process :redirect_to_controller
444
+ assert_raise(ActiveSupport::TestCase::Assertion) do
445
+ assert_redirected_to :controller => "action_pack_assertions", :action => "flash_me"
446
+ end
447
+ end
448
+
449
+ def test_assert_redirection_with_extra_controller_option
450
+ get :redirect_to_action
451
+ assert_redirected_to :controller => 'action_pack_assertions', :action => "flash_me", :id => 1, :params => { :panda => 'fun' }
452
+ end
453
+
454
+ def test_redirected_to_url_leading_slash
455
+ process :redirect_to_path
456
+ assert_redirected_to '/some/path'
457
+ end
458
+
459
+ def test_redirected_to_url_no_leadling_slash
460
+ process :redirect_to_path
461
+ assert_redirected_to 'some/path'
462
+ end
463
+
464
+ def test_redirected_to_url_full_url
465
+ process :redirect_to_path
466
+ assert_redirected_to 'http://test.host/some/path'
467
+ end
468
+
469
+ def test_assert_redirection_with_symbol
470
+ process :redirect_to_controller_with_symbol
471
+ assert_nothing_raised {
472
+ assert_redirected_to :controller => "elsewhere", :action => "flash_me"
473
+ }
474
+ process :redirect_to_controller_with_symbol
475
+ assert_nothing_raised {
476
+ assert_redirected_to :controller => :elsewhere, :action => :flash_me
477
+ }
478
+ end
479
+
480
+ def test_redirected_to_with_nested_controller
481
+ @controller = Admin::InnerModuleController.new
482
+ get :redirect_to_absolute_controller
483
+ assert_redirected_to :controller => '/content'
484
+
485
+ get :redirect_to_fellow_controller
486
+ assert_redirected_to :controller => 'admin/user'
487
+ end
488
+
489
+ def test_assert_valid
490
+ get :get_valid_record
491
+ assert_deprecated { assert_valid assigns('record') }
492
+ end
493
+
494
+ def test_assert_valid_failing
495
+ get :get_invalid_record
496
+
497
+ begin
498
+ assert_deprecated { assert_valid assigns('record') }
499
+ assert false
500
+ rescue ActiveSupport::TestCase::Assertion => e
501
+ end
502
+ end
503
+
504
+ def test_assert_response_uses_exception_message
505
+ @controller = AssertResponseWithUnexpectedErrorController.new
506
+ get :index
507
+ assert_response :success
508
+ flunk 'Expected non-success response'
509
+ rescue ActiveSupport::TestCase::Assertion => e
510
+ assert e.message.include?('FAIL')
511
+ end
512
+
513
+ def test_assert_response_failure_response_with_no_exception
514
+ @controller = AssertResponseWithUnexpectedErrorController.new
515
+ get :show
516
+ assert_response :success
517
+ flunk 'Expected non-success response'
518
+ rescue ActiveSupport::TestCase::Assertion
519
+ # success
520
+ rescue
521
+ flunk "assert_response failed to handle failure response with missing, but optional, exception."
522
+ end
523
+ end
524
+
525
+ class ActionPackHeaderTest < ActionController::TestCase
526
+ tests ActionPackAssertionsController
527
+
528
+ def test_rendering_xml_sets_content_type
529
+ process :hello_xml_world
530
+ assert_equal('application/xml; charset=utf-8', @response.headers['Content-Type'])
531
+ end
532
+
533
+ def test_rendering_xml_respects_content_type
534
+ @response.headers['type'] = 'application/pdf'
535
+ process :hello_xml_world
536
+ assert_equal('application/pdf; charset=utf-8', @response.headers['Content-Type'])
537
+ end
538
+
539
+ def test_render_text_with_custom_content_type
540
+ get :render_text_with_custom_content_type
541
+ assert_equal 'application/rss+xml; charset=utf-8', @response.headers['Content-Type']
542
+ end
543
+ end
@@ -0,0 +1,37 @@
1
+ require 'abstract_unit'
2
+
3
+ class Address
4
+ def Address.count(conditions = nil, join = nil)
5
+ nil
6
+ end
7
+
8
+ def Address.find_all(arg1, arg2, arg3, arg4)
9
+ []
10
+ end
11
+
12
+ def self.find(*args)
13
+ []
14
+ end
15
+ end
16
+
17
+ class AddressesTestController < ActionController::Base
18
+ def self.controller_name; "addresses"; end
19
+ def self.controller_path; "addresses"; end
20
+ end
21
+
22
+ class AddressesTest < ActionController::TestCase
23
+ tests AddressesTestController
24
+
25
+ def setup
26
+ # enable a logger so that (e.g.) the benchmarking stuff runs, so we can get
27
+ # a more accurate simulation of what happens in "real life".
28
+ @controller.logger = Logger.new(nil)
29
+
30
+ @request.host = "www.nextangle.com"
31
+ end
32
+
33
+ def test_list
34
+ get :list
35
+ assert_equal "We only need to get this far!", @response.body.chomp
36
+ end
37
+ end