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,66 @@
1
+ require 'abstract_unit'
2
+
3
+ class CaptureController < ActionController::Base
4
+ def self.controller_name; "test"; end
5
+ def self.controller_path; "test"; end
6
+
7
+ def content_for
8
+ render :layout => "talk_from_action"
9
+ end
10
+
11
+ def content_for_with_parameter
12
+ render :layout => "talk_from_action"
13
+ end
14
+
15
+ def content_for_concatenated
16
+ render :layout => "talk_from_action"
17
+ end
18
+
19
+ def non_erb_block_content_for
20
+ render :layout => "talk_from_action"
21
+ end
22
+
23
+ def rescue_action(e) raise end
24
+ end
25
+
26
+ class CaptureTest < ActionController::TestCase
27
+ tests CaptureController
28
+
29
+ def setup
30
+ # enable a logger so that (e.g.) the benchmarking stuff runs, so we can get
31
+ # a more accurate simulation of what happens in "real life".
32
+ @controller.logger = Logger.new(nil)
33
+
34
+ @request.host = "www.nextangle.com"
35
+ end
36
+
37
+ def test_simple_capture
38
+ get :capturing
39
+ assert_equal "Dreamy days", @response.body.strip
40
+ end
41
+
42
+ def test_content_for
43
+ get :content_for
44
+ assert_equal expected_content_for_output, @response.body
45
+ end
46
+
47
+ def test_should_concatentate_content_for
48
+ get :content_for_concatenated
49
+ assert_equal expected_content_for_output, @response.body
50
+ end
51
+
52
+ def test_should_set_content_for_with_parameter
53
+ get :content_for_with_parameter
54
+ assert_equal expected_content_for_output, @response.body
55
+ end
56
+
57
+ def test_non_erb_block_content_for
58
+ get :non_erb_block_content_for
59
+ assert_equal expected_content_for_output, @response.body
60
+ end
61
+
62
+ private
63
+ def expected_content_for_output
64
+ "<title>Putting stuff in the title!</title>\n\nGreat stuff!"
65
+ end
66
+ end
@@ -0,0 +1,168 @@
1
+ require 'abstract_unit'
2
+
3
+ class ContentTypeController < ActionController::Base
4
+ def render_content_type_from_body
5
+ response.content_type = Mime::RSS
6
+ render :text => "hello world!"
7
+ end
8
+
9
+ def render_defaults
10
+ render :text => "hello world!"
11
+ end
12
+
13
+ def render_content_type_from_render
14
+ render :text => "hello world!", :content_type => Mime::RSS
15
+ end
16
+
17
+ def render_charset_from_body
18
+ response.charset = "utf-16"
19
+ render :text => "hello world!"
20
+ end
21
+
22
+ def render_nil_charset_from_body
23
+ response.charset = nil
24
+ render :text => "hello world!"
25
+ end
26
+
27
+ def render_default_for_rhtml
28
+ end
29
+
30
+ def render_default_for_rxml
31
+ end
32
+
33
+ def render_default_for_rjs
34
+ end
35
+
36
+ def render_change_for_rxml
37
+ response.content_type = Mime::HTML
38
+ render :action => "render_default_for_rxml"
39
+ end
40
+
41
+ def render_default_content_types_for_respond_to
42
+ respond_to do |format|
43
+ format.html { render :text => "hello world!" }
44
+ format.xml { render :action => "render_default_content_types_for_respond_to.rhtml" }
45
+ format.js { render :text => "hello world!" }
46
+ format.rss { render :text => "hello world!", :content_type => Mime::XML }
47
+ end
48
+ end
49
+
50
+ def rescue_action(e) raise end
51
+ end
52
+
53
+ class ContentTypeTest < ActionController::TestCase
54
+ tests ContentTypeController
55
+
56
+ def setup
57
+ # enable a logger so that (e.g.) the benchmarking stuff runs, so we can get
58
+ # a more accurate simulation of what happens in "real life".
59
+ @controller.logger = Logger.new(nil)
60
+ end
61
+
62
+ def test_render_defaults
63
+ get :render_defaults
64
+ assert_equal "utf-8", @response.charset
65
+ assert_equal Mime::HTML, @response.content_type
66
+ end
67
+
68
+ def test_render_changed_charset_default
69
+ ContentTypeController.default_charset = "utf-16"
70
+ get :render_defaults
71
+ assert_equal "utf-16", @response.charset
72
+ assert_equal Mime::HTML, @response.content_type
73
+ ContentTypeController.default_charset = "utf-8"
74
+ end
75
+
76
+ def test_content_type_from_body
77
+ get :render_content_type_from_body
78
+ assert_equal "application/rss+xml", @response.content_type
79
+ assert_equal "utf-8", @response.charset
80
+ end
81
+
82
+ def test_content_type_from_render
83
+ get :render_content_type_from_render
84
+ assert_equal "application/rss+xml", @response.content_type
85
+ assert_equal "utf-8", @response.charset
86
+ end
87
+
88
+ def test_charset_from_body
89
+ get :render_charset_from_body
90
+ assert_equal Mime::HTML, @response.content_type
91
+ assert_equal "utf-16", @response.charset
92
+ end
93
+
94
+ def test_nil_charset_from_body
95
+ get :render_nil_charset_from_body
96
+ assert_equal Mime::HTML, @response.content_type
97
+ assert_equal "utf-8", @response.charset, @response.headers.inspect
98
+ end
99
+
100
+ def test_nil_default_for_rhtml
101
+ ContentTypeController.default_charset = nil
102
+ get :render_default_for_rhtml
103
+ assert_equal Mime::HTML, @response.content_type
104
+ assert_nil @response.charset, @response.headers.inspect
105
+ ensure
106
+ ContentTypeController.default_charset = "utf-8"
107
+ end
108
+
109
+ def test_default_for_rhtml
110
+ get :render_default_for_rhtml
111
+ assert_equal Mime::HTML, @response.content_type
112
+ assert_equal "utf-8", @response.charset
113
+ end
114
+
115
+ def test_default_for_rxml
116
+ get :render_default_for_rxml
117
+ assert_equal Mime::XML, @response.content_type
118
+ assert_equal "utf-8", @response.charset
119
+ end
120
+
121
+ def test_default_for_rjs
122
+ xhr :post, :render_default_for_rjs
123
+ assert_equal Mime::JS, @response.content_type
124
+ assert_equal "utf-8", @response.charset
125
+ end
126
+
127
+ def test_change_for_rxml
128
+ get :render_change_for_rxml
129
+ assert_equal Mime::HTML, @response.content_type
130
+ assert_equal "utf-8", @response.charset
131
+ end
132
+ end
133
+
134
+ class AcceptBasedContentTypeTest < ActionController::TestCase
135
+
136
+ tests ContentTypeController
137
+
138
+ def setup
139
+ ActionController::Base.use_accept_header = true
140
+ end
141
+
142
+ def teardown
143
+ ActionController::Base.use_accept_header = false
144
+ end
145
+
146
+
147
+ def test_render_default_content_types_for_respond_to
148
+ @request.accept = Mime::HTML.to_s
149
+ get :render_default_content_types_for_respond_to
150
+ assert_equal Mime::HTML, @response.content_type
151
+
152
+ @request.accept = Mime::JS.to_s
153
+ get :render_default_content_types_for_respond_to
154
+ assert_equal Mime::JS, @response.content_type
155
+ end
156
+
157
+ def test_render_default_content_types_for_respond_to_with_template
158
+ @request.accept = Mime::XML.to_s
159
+ get :render_default_content_types_for_respond_to
160
+ assert_equal Mime::XML, @response.content_type
161
+ end
162
+
163
+ def test_render_default_content_types_for_respond_to_with_overwrite
164
+ @request.accept = Mime::RSS.to_s
165
+ get :render_default_content_types_for_respond_to
166
+ assert_equal Mime::XML, @response.content_type
167
+ end
168
+ end
@@ -0,0 +1,134 @@
1
+ require 'abstract_unit'
2
+
3
+ class CookieTest < ActionController::TestCase
4
+ class TestController < ActionController::Base
5
+ def authenticate
6
+ cookies["user_name"] = "david"
7
+ end
8
+
9
+ def set_with_with_escapable_characters
10
+ cookies["that & guy"] = "foo & bar => baz"
11
+ end
12
+
13
+ def authenticate_for_fourteen_days
14
+ cookies["user_name"] = { "value" => "david", "expires" => Time.utc(2005, 10, 10,5) }
15
+ end
16
+
17
+ def authenticate_for_fourteen_days_with_symbols
18
+ cookies[:user_name] = { :value => "david", :expires => Time.utc(2005, 10, 10,5) }
19
+ end
20
+
21
+ def set_multiple_cookies
22
+ cookies["user_name"] = { "value" => "david", "expires" => Time.utc(2005, 10, 10,5) }
23
+ cookies["login"] = "XJ-122"
24
+ end
25
+
26
+ def access_frozen_cookies
27
+ cookies["will"] = "work"
28
+ end
29
+
30
+ def logout
31
+ cookies.delete("user_name")
32
+ end
33
+
34
+ def delete_cookie_with_path
35
+ cookies.delete("user_name", :path => '/beaten')
36
+ render :text => "hello world"
37
+ end
38
+
39
+ def authenticate_with_http_only
40
+ cookies["user_name"] = { :value => "david", :httponly => true }
41
+ end
42
+
43
+ def rescue_action(e)
44
+ raise unless ActionView::MissingTemplate # No templates here, and we don't care about the output
45
+ end
46
+ end
47
+
48
+ tests TestController
49
+
50
+ def setup
51
+ @request.host = "www.nextangle.com"
52
+ end
53
+
54
+ def test_setting_cookie
55
+ get :authenticate
56
+ assert_equal ["user_name=david; path=/"], @response.headers["Set-Cookie"]
57
+ assert_equal({"user_name" => "david"}, @response.cookies)
58
+ end
59
+
60
+ def test_setting_with_escapable_characters
61
+ get :set_with_with_escapable_characters
62
+ assert_equal ["that+%26+guy=foo+%26+bar+%3D%3E+baz; path=/"], @response.headers["Set-Cookie"]
63
+ assert_equal({"that & guy" => "foo & bar => baz"}, @response.cookies)
64
+ end
65
+
66
+ def test_setting_cookie_for_fourteen_days
67
+ get :authenticate_for_fourteen_days
68
+ assert_equal ["user_name=david; path=/; expires=Mon, 10-Oct-2005 05:00:00 GMT"], @response.headers["Set-Cookie"]
69
+ assert_equal({"user_name" => "david"}, @response.cookies)
70
+ end
71
+
72
+ def test_setting_cookie_for_fourteen_days_with_symbols
73
+ get :authenticate_for_fourteen_days_with_symbols
74
+ assert_equal ["user_name=david; path=/; expires=Mon, 10-Oct-2005 05:00:00 GMT"], @response.headers["Set-Cookie"]
75
+ assert_equal({"user_name" => "david"}, @response.cookies)
76
+ end
77
+
78
+ def test_setting_cookie_with_http_only
79
+ get :authenticate_with_http_only
80
+ assert_equal ["user_name=david; path=/; HttpOnly"], @response.headers["Set-Cookie"]
81
+ assert_equal({"user_name" => "david"}, @response.cookies)
82
+ end
83
+
84
+ def test_multiple_cookies
85
+ get :set_multiple_cookies
86
+ assert_equal 2, @response.cookies.size
87
+ assert_equal "user_name=david; path=/; expires=Mon, 10-Oct-2005 05:00:00 GMT", @response.headers["Set-Cookie"][0]
88
+ assert_equal "login=XJ-122; path=/", @response.headers["Set-Cookie"][1]
89
+ assert_equal({"login" => "XJ-122", "user_name" => "david"}, @response.cookies)
90
+ end
91
+
92
+ def test_setting_test_cookie
93
+ assert_nothing_raised { get :access_frozen_cookies }
94
+ end
95
+
96
+ def test_expiring_cookie
97
+ get :logout
98
+ assert_equal ["user_name=; path=/; expires=Thu, 01-Jan-1970 00:00:00 GMT"], @response.headers["Set-Cookie"]
99
+ assert_equal({"user_name" => nil}, @response.cookies)
100
+ end
101
+
102
+ def test_cookiejar_accessor
103
+ @request.cookies["user_name"] = "david"
104
+ @controller.request = @request
105
+ jar = ActionController::CookieJar.new(@controller)
106
+ assert_equal "david", jar["user_name"]
107
+ assert_equal nil, jar["something_else"]
108
+ end
109
+
110
+ def test_cookiejar_accessor_with_array_value
111
+ @request.cookies["pages"] = %w{1 2 3}
112
+ @controller.request = @request
113
+ jar = ActionController::CookieJar.new(@controller)
114
+ assert_equal %w{1 2 3}, jar["pages"]
115
+ end
116
+
117
+ def test_cookiejar_delete_removes_item_and_returns_its_value
118
+ @request.cookies["user_name"] = "david"
119
+ @controller.response = @response
120
+ jar = ActionController::CookieJar.new(@controller)
121
+ assert_equal "david", jar.delete("user_name")
122
+ end
123
+
124
+ def test_delete_cookie_with_path
125
+ get :delete_cookie_with_path
126
+ assert_equal ["user_name=; path=/beaten; expires=Thu, 01-Jan-1970 00:00:00 GMT"], @response.headers["Set-Cookie"]
127
+ end
128
+
129
+ def test_cookies_persist_throughout_request
130
+ get :authenticate
131
+ cookies = @controller.send(:cookies)
132
+ assert_equal 'david', cookies['user_name']
133
+ end
134
+ end
@@ -0,0 +1,32 @@
1
+ require 'abstract_unit'
2
+
3
+ class DeprecatedBaseMethodsTest < ActionController::TestCase
4
+ class Target < ActionController::Base
5
+ def home_url(greeting)
6
+ "http://example.com/#{greeting}"
7
+ end
8
+
9
+ def raises_name_error
10
+ this_method_doesnt_exist
11
+ end
12
+
13
+ def rescue_action(e) raise e end
14
+ end
15
+
16
+ tests Target
17
+
18
+ def test_log_error_silences_deprecation_warnings
19
+ get :raises_name_error
20
+ rescue => e
21
+ assert_not_deprecated { @controller.send :log_error, e }
22
+ end
23
+
24
+ if defined? Test::Unit::Error
25
+ def test_assertion_failed_error_silences_deprecation_warnings
26
+ get :raises_name_error
27
+ rescue => e
28
+ error = Test::Unit::Error.new('testing ur doodz', e)
29
+ assert_not_deprecated { error.message }
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,144 @@
1
+ require 'abstract_unit'
2
+
3
+ class DispatcherTest < Test::Unit::TestCase
4
+ Dispatcher = ActionController::Dispatcher
5
+ Reloader = ActionController::Reloader
6
+
7
+ def setup
8
+ ENV['REQUEST_METHOD'] = 'GET'
9
+ reset_dispatcher
10
+ Dispatcher.stubs(:require_dependency)
11
+ end
12
+
13
+ def teardown
14
+ ENV.delete 'REQUEST_METHOD'
15
+ reset_dispatcher
16
+ end
17
+
18
+ def test_clears_dependencies_after_dispatch_if_in_loading_mode
19
+ ActiveSupport::Dependencies.expects(:clear).once
20
+ # Close the response so dependencies kicks in
21
+ dispatch(false).last.close
22
+ end
23
+
24
+ def test_reloads_routes_before_dispatch_if_in_loading_mode
25
+ ActionController::Routing::Routes.expects(:reload).once
26
+ dispatch(false)
27
+ end
28
+
29
+ def test_leaves_dependencies_after_dispatch_if_not_in_loading_mode
30
+ ActionController::Routing::Routes.expects(:reload).never
31
+ ActiveSupport::Dependencies.expects(:clear).never
32
+
33
+ dispatch
34
+ end
35
+
36
+ def test_builds_middleware_stack_only_during_initialization_if_not_in_loading_mode
37
+ dispatcher = create_dispatcher
38
+ assert_not_nil dispatcher.instance_variable_get(:"@app")
39
+ dispatcher.instance_variable_set(:"@app", lambda { |env| })
40
+ dispatcher.expects(:build_middleware_stack).never
41
+ dispatcher.call(nil)
42
+ dispatcher.call(nil)
43
+ end
44
+
45
+ def test_rebuilds_middleware_stack_on_every_request_if_in_loading_mode
46
+ dispatcher = create_dispatcher(false)
47
+ dispatcher.instance_variable_set(:"@app", lambda { |env| })
48
+ dispatcher.expects(:build_middleware_stack).twice
49
+ dispatcher.call(nil)
50
+ Reloader.default_lock.unlock
51
+ dispatcher.call(nil)
52
+ end
53
+
54
+ def test_doesnt_wrap_call_in_reloader_if_not_in_loading_mode
55
+ Reloader.expects(:run).never
56
+ dispatch
57
+ end
58
+
59
+ def test_wraps_call_in_reloader_if_in_loading_mode
60
+ Reloader.expects(:run).once
61
+ dispatch(false)
62
+ end
63
+
64
+ # Stub out dispatch error logger
65
+ class << Dispatcher
66
+ def log_failsafe_exception(status, exception); end
67
+ end
68
+
69
+ def test_failsafe_response
70
+ Dispatcher.any_instance.expects(:dispatch).raises('b00m')
71
+ ActionController::Failsafe.any_instance.expects(:log_failsafe_exception)
72
+
73
+ response = nil
74
+ assert_nothing_raised do
75
+ response = dispatch
76
+ end
77
+ assert_equal 3, response.size
78
+ assert_equal 500, response[0]
79
+ assert_equal({"Content-Type" => "text/html"}, response[1])
80
+ assert_match /500 Internal Server Error/, response[2].join
81
+ end
82
+
83
+ def test_prepare_callbacks
84
+ a = b = c = nil
85
+ Dispatcher.to_prepare { |*args| a = b = c = 1 }
86
+ Dispatcher.to_prepare { |*args| b = c = 2 }
87
+ Dispatcher.to_prepare { |*args| c = 3 }
88
+
89
+ # Ensure to_prepare callbacks are not run when defined
90
+ assert_nil a || b || c
91
+
92
+ # Run callbacks
93
+ Dispatcher.run_prepare_callbacks
94
+
95
+ assert_equal 1, a
96
+ assert_equal 2, b
97
+ assert_equal 3, c
98
+
99
+ # Make sure they are only run once
100
+ a = b = c = nil
101
+ dispatch
102
+ assert_nil a || b || c
103
+ end
104
+
105
+ def test_to_prepare_with_identifier_replaces
106
+ a = b = nil
107
+ Dispatcher.to_prepare(:unique_id) { |*args| a = b = 1 }
108
+ Dispatcher.to_prepare(:unique_id) { |*args| a = 2 }
109
+
110
+ Dispatcher.run_prepare_callbacks
111
+ assert_equal 2, a
112
+ assert_equal nil, b
113
+ end
114
+
115
+ private
116
+ def dispatch(cache_classes = true)
117
+ ActionController::Routing::RouteSet.any_instance.stubs(:call).returns([200, {}, 'response'])
118
+ Dispatcher.define_dispatcher_callbacks(cache_classes)
119
+ Dispatcher.new.call({'rack.input' => StringIO.new('')})
120
+ end
121
+
122
+ def create_dispatcher(cache_classes = true)
123
+ Dispatcher.define_dispatcher_callbacks(cache_classes)
124
+ Dispatcher.new
125
+ end
126
+
127
+ def reset_dispatcher
128
+ Dispatcher.middleware = ActionController::MiddlewareStack.new do |middleware|
129
+ middlewares = File.expand_path(File.join(File.dirname(__FILE__), "../../lib/action_controller/middlewares.rb"))
130
+ middleware.instance_eval(File.read(middlewares))
131
+ end
132
+
133
+ # Clear callbacks as they are redefined by Dispatcher#define_dispatcher_callbacks
134
+ Dispatcher.instance_variable_set("@prepare_dispatch_callbacks", ActiveSupport::Callbacks::CallbackChain.new)
135
+ Dispatcher.instance_variable_set("@before_dispatch_callbacks", ActiveSupport::Callbacks::CallbackChain.new)
136
+ Dispatcher.instance_variable_set("@after_dispatch_callbacks", ActiveSupport::Callbacks::CallbackChain.new)
137
+
138
+ Dispatcher.define_dispatcher_callbacks(true)
139
+ end
140
+
141
+ def assert_subclasses(howmany, klass, message = klass.subclasses.inspect)
142
+ assert_equal howmany, klass.subclasses.size, message
143
+ end
144
+ end
@@ -0,0 +1,53 @@
1
+ require 'abstract_unit'
2
+
3
+ class DomAssertionsTest < ActionView::TestCase
4
+ def setup
5
+ super
6
+ @html_only = '<ul><li>foo</li><li>bar</li></ul>'
7
+ @html_with_meaningless_whitespace = %{
8
+ <ul>
9
+ <li>\tfoo </li>
10
+ <li>
11
+ bar
12
+ </li>
13
+ </ul>
14
+ }
15
+ @more_html_with_meaningless_whitespace = %{<ul>
16
+
17
+ <li>foo</li>
18
+
19
+ <li>bar</li></ul>}
20
+ end
21
+
22
+ test "assert_dom_equal strips meaningless whitespace from expected string" do
23
+ assert_dom_equal @html_with_meaningless_whitespace, @html_only
24
+ end
25
+
26
+ test "assert_dom_equal strips meaningless whitespace from actual string" do
27
+ assert_dom_equal @html_only, @html_with_meaningless_whitespace
28
+ end
29
+
30
+ test "assert_dom_equal strips meaningless whitespace from both expected and actual strings" do
31
+ assert_dom_equal @more_html_with_meaningless_whitespace, @html_with_meaningless_whitespace
32
+ end
33
+
34
+ test "assert_dom_not_equal strips meaningless whitespace from expected string" do
35
+ assert_assertion_fails { assert_dom_not_equal @html_with_meaningless_whitespace, @html_only }
36
+ end
37
+
38
+ test "assert_dom_not_equal strips meaningless whitespace from actual string" do
39
+ assert_assertion_fails { assert_dom_not_equal @html_only, @html_with_meaningless_whitespace }
40
+ end
41
+
42
+ test "assert_dom_not_equal strips meaningless whitespace from both expected and actual strings" do
43
+ assert_assertion_fails do
44
+ assert_dom_not_equal @more_html_with_meaningless_whitespace, @html_with_meaningless_whitespace
45
+ end
46
+ end
47
+
48
+ private
49
+
50
+ def assert_assertion_fails
51
+ assert_raise(ActiveSupport::TestCase::Assertion) { yield }
52
+ end
53
+ end
@@ -0,0 +1,60 @@
1
+ require 'abstract_unit'
2
+ require 'stringio'
3
+ require 'logger'
4
+
5
+ class FailsafeTest < ActionController::TestCase
6
+ FIXTURE_PUBLIC = "#{File.dirname(__FILE__)}/../fixtures/failsafe".freeze
7
+
8
+ def setup
9
+ @old_error_file_path = ActionController::Failsafe.error_file_path
10
+ ActionController::Failsafe.error_file_path = FIXTURE_PUBLIC
11
+ @app = mock
12
+ @log_io = StringIO.new
13
+ @logger = Logger.new(@log_io)
14
+ @failsafe = ActionController::Failsafe.new(@app)
15
+ @failsafe.stubs(:failsafe_logger).returns(@logger)
16
+ end
17
+
18
+ def teardown
19
+ ActionController::Failsafe.error_file_path = @old_error_file_path
20
+ end
21
+
22
+ def app_will_raise_error!
23
+ @app.expects(:call).then.raises(RuntimeError.new("Printer on fire"))
24
+ end
25
+
26
+ def test_calls_app_and_returns_its_return_value
27
+ @app.expects(:call).returns([200, { "Content-Type" => "text/html" }, "ok"])
28
+ assert_equal [200, { "Content-Type" => "text/html" }, "ok"], @failsafe.call({})
29
+ end
30
+
31
+ def test_writes_to_log_file_on_exception
32
+ app_will_raise_error!
33
+ @failsafe.call({})
34
+ assert_match /Printer on fire/, @log_io.string # Logs exception message.
35
+ assert_match /failsafe_test\.rb/, @log_io.string # Logs backtrace.
36
+ end
37
+
38
+ def test_returns_500_internal_server_error_on_exception
39
+ app_will_raise_error!
40
+ response = @failsafe.call({})
41
+ assert_equal 3, response.size # It is a valid Rack response.
42
+ assert_equal 500, response[0] # Status is 500.
43
+ end
44
+
45
+ def test_renders_error_page_file_with_erb
46
+ app_will_raise_error!
47
+ response = @failsafe.call({})
48
+ assert_equal 500, response[0]
49
+ assert_equal "hello my world", response[2].join
50
+ end
51
+
52
+ def test_returns_a_default_message_if_erb_rendering_failed
53
+ app_will_raise_error!
54
+ @failsafe.expects(:render_template).raises(RuntimeError.new("Harddisk is crashing"))
55
+ response = @failsafe.call({})
56
+ assert_equal 500, response[0]
57
+ assert_match /500 Internal Server Error/, response[2].join
58
+ assert_match %r(please read this web application's log file), response[2].join
59
+ end
60
+ end
@@ -0,0 +1,33 @@
1
+ class << Object; alias_method :const_available?, :const_defined?; end
2
+
3
+ class ContentController < Class.new(ActionController::Base)
4
+ end
5
+ class NotAController
6
+ end
7
+ module Admin
8
+ class << self; alias_method :const_available?, :const_defined?; end
9
+ class UserController < Class.new(ActionController::Base); end
10
+ class NewsFeedController < Class.new(ActionController::Base); end
11
+ end
12
+
13
+ # For speed test
14
+ class SpeedController < ActionController::Base; end
15
+ class SearchController < SpeedController; end
16
+ class VideosController < SpeedController; end
17
+ class VideoFileController < SpeedController; end
18
+ class VideoSharesController < SpeedController; end
19
+ class VideoAbusesController < SpeedController; end
20
+ class VideoUploadsController < SpeedController; end
21
+ class VideoVisitsController < SpeedController; end
22
+ class UsersController < SpeedController; end
23
+ class SettingsController < SpeedController; end
24
+ class ChannelsController < SpeedController; end
25
+ class ChannelVideosController < SpeedController; end
26
+ class SessionsController < SpeedController; end
27
+ class LostPasswordsController < SpeedController; end
28
+ class PagesController < SpeedController; end
29
+
30
+ ActionController::Routing::Routes.draw do |map|
31
+ map.route_one 'route_one', :controller => 'elsewhere', :action => 'flash_me'
32
+ map.connect ':controller/:action/:id'
33
+ end