actionpack-rack-upgrade-2 2.3.15

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 (441) hide show
  1. data/CHANGELOG +5250 -0
  2. data/MIT-LICENSE +21 -0
  3. data/README +409 -0
  4. data/RUNNING_UNIT_TESTS +24 -0
  5. data/Rakefile +158 -0
  6. data/install.rb +30 -0
  7. data/lib/action_controller.rb +113 -0
  8. data/lib/action_controller/assertions/dom_assertions.rb +55 -0
  9. data/lib/action_controller/assertions/model_assertions.rb +21 -0
  10. data/lib/action_controller/assertions/response_assertions.rb +169 -0
  11. data/lib/action_controller/assertions/routing_assertions.rb +146 -0
  12. data/lib/action_controller/assertions/selector_assertions.rb +638 -0
  13. data/lib/action_controller/assertions/tag_assertions.rb +127 -0
  14. data/lib/action_controller/base.rb +1425 -0
  15. data/lib/action_controller/benchmarking.rb +107 -0
  16. data/lib/action_controller/caching.rb +71 -0
  17. data/lib/action_controller/caching/actions.rb +177 -0
  18. data/lib/action_controller/caching/fragments.rb +120 -0
  19. data/lib/action_controller/caching/pages.rb +152 -0
  20. data/lib/action_controller/caching/sweeper.rb +45 -0
  21. data/lib/action_controller/caching/sweeping.rb +55 -0
  22. data/lib/action_controller/cgi_ext.rb +15 -0
  23. data/lib/action_controller/cgi_ext/cookie.rb +112 -0
  24. data/lib/action_controller/cgi_ext/query_extension.rb +22 -0
  25. data/lib/action_controller/cgi_ext/stdinput.rb +24 -0
  26. data/lib/action_controller/cgi_process.rb +77 -0
  27. data/lib/action_controller/cookies.rb +197 -0
  28. data/lib/action_controller/dispatcher.rb +133 -0
  29. data/lib/action_controller/failsafe.rb +87 -0
  30. data/lib/action_controller/filters.rb +680 -0
  31. data/lib/action_controller/flash.rb +213 -0
  32. data/lib/action_controller/headers.rb +33 -0
  33. data/lib/action_controller/helpers.rb +225 -0
  34. data/lib/action_controller/http_authentication.rb +309 -0
  35. data/lib/action_controller/integration.rb +708 -0
  36. data/lib/action_controller/layout.rb +286 -0
  37. data/lib/action_controller/middleware_stack.rb +119 -0
  38. data/lib/action_controller/middlewares.rb +14 -0
  39. data/lib/action_controller/mime_responds.rb +193 -0
  40. data/lib/action_controller/mime_type.rb +212 -0
  41. data/lib/action_controller/mime_types.rb +21 -0
  42. data/lib/action_controller/params_parser.rb +77 -0
  43. data/lib/action_controller/performance_test.rb +15 -0
  44. data/lib/action_controller/polymorphic_routes.rb +189 -0
  45. data/lib/action_controller/rack_lint_patch.rb +36 -0
  46. data/lib/action_controller/record_identifier.rb +104 -0
  47. data/lib/action_controller/reloader.rb +54 -0
  48. data/lib/action_controller/request.rb +495 -0
  49. data/lib/action_controller/request_forgery_protection.rb +116 -0
  50. data/lib/action_controller/rescue.rb +183 -0
  51. data/lib/action_controller/resources.rb +682 -0
  52. data/lib/action_controller/response.rb +237 -0
  53. data/lib/action_controller/routing.rb +388 -0
  54. data/lib/action_controller/routing/builder.rb +197 -0
  55. data/lib/action_controller/routing/optimisations.rb +130 -0
  56. data/lib/action_controller/routing/recognition_optimisation.rb +167 -0
  57. data/lib/action_controller/routing/route.rb +265 -0
  58. data/lib/action_controller/routing/route_set.rb +503 -0
  59. data/lib/action_controller/routing/routing_ext.rb +49 -0
  60. data/lib/action_controller/routing/segments.rb +343 -0
  61. data/lib/action_controller/session/abstract_store.rb +276 -0
  62. data/lib/action_controller/session/cookie_store.rb +240 -0
  63. data/lib/action_controller/session/mem_cache_store.rb +60 -0
  64. data/lib/action_controller/session_management.rb +54 -0
  65. data/lib/action_controller/status_codes.rb +88 -0
  66. data/lib/action_controller/streaming.rb +181 -0
  67. data/lib/action_controller/string_coercion.rb +29 -0
  68. data/lib/action_controller/templates/rescues/_request_and_response.erb +24 -0
  69. data/lib/action_controller/templates/rescues/_trace.erb +26 -0
  70. data/lib/action_controller/templates/rescues/diagnostics.erb +11 -0
  71. data/lib/action_controller/templates/rescues/layout.erb +29 -0
  72. data/lib/action_controller/templates/rescues/missing_template.erb +2 -0
  73. data/lib/action_controller/templates/rescues/routing_error.erb +10 -0
  74. data/lib/action_controller/templates/rescues/template_error.erb +21 -0
  75. data/lib/action_controller/templates/rescues/unknown_action.erb +2 -0
  76. data/lib/action_controller/test_case.rb +209 -0
  77. data/lib/action_controller/test_process.rb +580 -0
  78. data/lib/action_controller/translation.rb +13 -0
  79. data/lib/action_controller/uploaded_file.rb +44 -0
  80. data/lib/action_controller/url_rewriter.rb +229 -0
  81. data/lib/action_controller/vendor/html-scanner.rb +16 -0
  82. data/lib/action_controller/vendor/html-scanner/html/document.rb +68 -0
  83. data/lib/action_controller/vendor/html-scanner/html/node.rb +537 -0
  84. data/lib/action_controller/vendor/html-scanner/html/sanitizer.rb +173 -0
  85. data/lib/action_controller/vendor/html-scanner/html/selector.rb +828 -0
  86. data/lib/action_controller/vendor/html-scanner/html/tokenizer.rb +105 -0
  87. data/lib/action_controller/vendor/html-scanner/html/version.rb +11 -0
  88. data/lib/action_controller/verification.rb +130 -0
  89. data/lib/action_pack.rb +24 -0
  90. data/lib/action_pack/version.rb +9 -0
  91. data/lib/action_view.rb +58 -0
  92. data/lib/action_view/base.rb +362 -0
  93. data/lib/action_view/helpers.rb +61 -0
  94. data/lib/action_view/helpers/active_record_helper.rb +305 -0
  95. data/lib/action_view/helpers/asset_tag_helper.rb +695 -0
  96. data/lib/action_view/helpers/atom_feed_helper.rb +198 -0
  97. data/lib/action_view/helpers/benchmark_helper.rb +54 -0
  98. data/lib/action_view/helpers/cache_helper.rb +39 -0
  99. data/lib/action_view/helpers/capture_helper.rb +136 -0
  100. data/lib/action_view/helpers/csrf_helper.rb +14 -0
  101. data/lib/action_view/helpers/date_helper.rb +989 -0
  102. data/lib/action_view/helpers/debug_helper.rb +38 -0
  103. data/lib/action_view/helpers/form_helper.rb +1118 -0
  104. data/lib/action_view/helpers/form_options_helper.rb +599 -0
  105. data/lib/action_view/helpers/form_tag_helper.rb +490 -0
  106. data/lib/action_view/helpers/javascript_helper.rb +208 -0
  107. data/lib/action_view/helpers/number_helper.rb +308 -0
  108. data/lib/action_view/helpers/prototype_helper.rb +1305 -0
  109. data/lib/action_view/helpers/raw_output_helper.rb +9 -0
  110. data/lib/action_view/helpers/record_identification_helper.rb +20 -0
  111. data/lib/action_view/helpers/record_tag_helper.rb +58 -0
  112. data/lib/action_view/helpers/sanitize_helper.rb +251 -0
  113. data/lib/action_view/helpers/scriptaculous_helper.rb +226 -0
  114. data/lib/action_view/helpers/tag_helper.rb +151 -0
  115. data/lib/action_view/helpers/text_helper.rb +597 -0
  116. data/lib/action_view/helpers/translation_helper.rb +67 -0
  117. data/lib/action_view/helpers/url_helper.rb +637 -0
  118. data/lib/action_view/inline_template.rb +19 -0
  119. data/lib/action_view/locale/en.yml +117 -0
  120. data/lib/action_view/partials.rb +241 -0
  121. data/lib/action_view/paths.rb +77 -0
  122. data/lib/action_view/reloadable_template.rb +117 -0
  123. data/lib/action_view/renderable.rb +109 -0
  124. data/lib/action_view/renderable_partial.rb +53 -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.rb +48 -0
  129. data/lib/action_view/template_handlers/builder.rb +17 -0
  130. data/lib/action_view/template_handlers/erb.rb +25 -0
  131. data/lib/action_view/template_handlers/rjs.rb +13 -0
  132. data/lib/action_view/test_case.rb +162 -0
  133. data/lib/actionpack.rb +2 -0
  134. data/test/abstract_unit.rb +78 -0
  135. data/test/active_record_unit.rb +104 -0
  136. data/test/activerecord/active_record_store_test.rb +221 -0
  137. data/test/activerecord/render_partial_with_record_identification_test.rb +188 -0
  138. data/test/adv_attr_test.rb +20 -0
  139. data/test/controller/action_pack_assertions_test.rb +545 -0
  140. data/test/controller/addresses_render_test.rb +37 -0
  141. data/test/controller/assert_select_test.rb +735 -0
  142. data/test/controller/base_test.rb +217 -0
  143. data/test/controller/benchmark_test.rb +32 -0
  144. data/test/controller/caching_test.rb +743 -0
  145. data/test/controller/capture_test.rb +66 -0
  146. data/test/controller/content_type_test.rb +178 -0
  147. data/test/controller/controller_fixtures/app/controllers/admin/user_controller.rb +0 -0
  148. data/test/controller/controller_fixtures/app/controllers/user_controller.rb +0 -0
  149. data/test/controller/controller_fixtures/vendor/plugins/bad_plugin/lib/plugin_controller.rb +0 -0
  150. data/test/controller/cookie_test.rb +208 -0
  151. data/test/controller/deprecation/deprecated_base_methods_test.rb +32 -0
  152. data/test/controller/dispatcher_test.rb +144 -0
  153. data/test/controller/dom_assertions_test.rb +53 -0
  154. data/test/controller/failsafe_test.rb +60 -0
  155. data/test/controller/fake_controllers.rb +33 -0
  156. data/test/controller/fake_models.rb +19 -0
  157. data/test/controller/filter_params_test.rb +52 -0
  158. data/test/controller/filters_test.rb +885 -0
  159. data/test/controller/flash_test.rb +174 -0
  160. data/test/controller/header_test.rb +14 -0
  161. data/test/controller/helper_test.rb +224 -0
  162. data/test/controller/html-scanner/cdata_node_test.rb +15 -0
  163. data/test/controller/html-scanner/document_test.rb +148 -0
  164. data/test/controller/html-scanner/node_test.rb +89 -0
  165. data/test/controller/html-scanner/sanitizer_test.rb +281 -0
  166. data/test/controller/html-scanner/tag_node_test.rb +238 -0
  167. data/test/controller/html-scanner/text_node_test.rb +50 -0
  168. data/test/controller/html-scanner/tokenizer_test.rb +131 -0
  169. data/test/controller/http_basic_authentication_test.rb +113 -0
  170. data/test/controller/http_digest_authentication_test.rb +254 -0
  171. data/test/controller/integration_test.rb +526 -0
  172. data/test/controller/layout_test.rb +215 -0
  173. data/test/controller/localized_templates_test.rb +24 -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/output_escaping_test.rb +19 -0
  179. data/test/controller/polymorphic_routes_test.rb +297 -0
  180. data/test/controller/rack_test.rb +308 -0
  181. data/test/controller/record_identifier_test.rb +139 -0
  182. data/test/controller/redirect_test.rb +285 -0
  183. data/test/controller/reloader_test.rb +125 -0
  184. data/test/controller/render_test.rb +1783 -0
  185. data/test/controller/request/json_params_parsing_test.rb +65 -0
  186. data/test/controller/request/multipart_params_parsing_test.rb +177 -0
  187. data/test/controller/request/query_string_parsing_test.rb +120 -0
  188. data/test/controller/request/test_request_test.rb +35 -0
  189. data/test/controller/request/url_encoded_params_parsing_test.rb +146 -0
  190. data/test/controller/request/xml_params_parsing_test.rb +103 -0
  191. data/test/controller/request_forgery_protection_test.rb +233 -0
  192. data/test/controller/request_test.rb +398 -0
  193. data/test/controller/rescue_test.rb +541 -0
  194. data/test/controller/resources_test.rb +1393 -0
  195. data/test/controller/routing_test.rb +2592 -0
  196. data/test/controller/selector_test.rb +628 -0
  197. data/test/controller/send_file_test.rb +171 -0
  198. data/test/controller/session/abstract_store_test.rb +64 -0
  199. data/test/controller/session/cookie_store_test.rb +354 -0
  200. data/test/controller/session/mem_cache_store_test.rb +187 -0
  201. data/test/controller/session/test_session_test.rb +58 -0
  202. data/test/controller/test_test.rb +700 -0
  203. data/test/controller/translation_test.rb +26 -0
  204. data/test/controller/url_rewriter_test.rb +395 -0
  205. data/test/controller/verification_test.rb +270 -0
  206. data/test/controller/view_paths_test.rb +141 -0
  207. data/test/controller/webservice_test.rb +273 -0
  208. data/test/fixtures/_top_level_partial.html.erb +1 -0
  209. data/test/fixtures/_top_level_partial_only.erb +1 -0
  210. data/test/fixtures/addresses/list.erb +1 -0
  211. data/test/fixtures/alternate_helpers/foo_helper.rb +3 -0
  212. data/test/fixtures/bad_customers/_bad_customer.html.erb +1 -0
  213. data/test/fixtures/companies.yml +24 -0
  214. data/test/fixtures/company.rb +10 -0
  215. data/test/fixtures/content_type/render_default_content_types_for_respond_to.rhtml +1 -0
  216. data/test/fixtures/content_type/render_default_for_rhtml.rhtml +1 -0
  217. data/test/fixtures/content_type/render_default_for_rjs.rjs +1 -0
  218. data/test/fixtures/content_type/render_default_for_rxml.rxml +1 -0
  219. data/test/fixtures/customers/_customer.html.erb +1 -0
  220. data/test/fixtures/db_definitions/sqlite.sql +49 -0
  221. data/test/fixtures/developer.rb +9 -0
  222. data/test/fixtures/developers.yml +21 -0
  223. data/test/fixtures/developers/_developer.erb +1 -0
  224. data/test/fixtures/developers_projects.yml +13 -0
  225. data/test/fixtures/failsafe/500.html +1 -0
  226. data/test/fixtures/fun/games/_game.erb +1 -0
  227. data/test/fixtures/fun/games/hello_world.erb +1 -0
  228. data/test/fixtures/fun/serious/games/_game.erb +1 -0
  229. data/test/fixtures/functional_caching/_partial.erb +3 -0
  230. data/test/fixtures/functional_caching/formatted_fragment_cached.html.erb +3 -0
  231. data/test/fixtures/functional_caching/formatted_fragment_cached.js.rjs +6 -0
  232. data/test/fixtures/functional_caching/formatted_fragment_cached.xml.builder +5 -0
  233. data/test/fixtures/functional_caching/fragment_cached.html.erb +2 -0
  234. data/test/fixtures/functional_caching/html_fragment_cached_with_partial.html.erb +1 -0
  235. data/test/fixtures/functional_caching/inline_fragment_cached.html.erb +2 -0
  236. data/test/fixtures/functional_caching/js_fragment_cached_with_partial.js.rjs +1 -0
  237. data/test/fixtures/good_customers/_good_customer.html.erb +1 -0
  238. data/test/fixtures/helpers/abc_helper.rb +5 -0
  239. data/test/fixtures/helpers/fun/games_helper.rb +3 -0
  240. data/test/fixtures/helpers/fun/pdf_helper.rb +3 -0
  241. data/test/fixtures/layout_tests/abs_path_layout.rhtml +1 -0
  242. data/test/fixtures/layout_tests/alt/hello.rhtml +1 -0
  243. data/test/fixtures/layout_tests/alt/layouts/alt.rhtml +0 -0
  244. data/test/fixtures/layout_tests/layouts/controller_name_space/nested.rhtml +1 -0
  245. data/test/fixtures/layout_tests/layouts/item.rhtml +1 -0
  246. data/test/fixtures/layout_tests/layouts/layout_test.rhtml +1 -0
  247. data/test/fixtures/layout_tests/layouts/multiple_extensions.html.erb +1 -0
  248. data/test/fixtures/layout_tests/layouts/third_party_template_library.mab +1 -0
  249. data/test/fixtures/layout_tests/views/hello.rhtml +1 -0
  250. data/test/fixtures/layouts/_column.html.erb +2 -0
  251. data/test/fixtures/layouts/block_with_layout.erb +3 -0
  252. data/test/fixtures/layouts/builder.builder +3 -0
  253. data/test/fixtures/layouts/default_html.html.erb +1 -0
  254. data/test/fixtures/layouts/partial_with_layout.erb +3 -0
  255. data/test/fixtures/layouts/standard.erb +1 -0
  256. data/test/fixtures/layouts/talk_from_action.erb +2 -0
  257. data/test/fixtures/layouts/xhr.html.erb +2 -0
  258. data/test/fixtures/layouts/yield.erb +2 -0
  259. data/test/fixtures/localized/hello_world.de.html +1 -0
  260. data/test/fixtures/localized/hello_world.en.html +1 -0
  261. data/test/fixtures/mascot.rb +3 -0
  262. data/test/fixtures/mascots.yml +4 -0
  263. data/test/fixtures/mascots/_mascot.html.erb +1 -0
  264. data/test/fixtures/multipart/binary_file +0 -0
  265. data/test/fixtures/multipart/boundary_problem_file +10 -0
  266. data/test/fixtures/multipart/bracketed_param +5 -0
  267. data/test/fixtures/multipart/empty +10 -0
  268. data/test/fixtures/multipart/hello.txt +1 -0
  269. data/test/fixtures/multipart/large_text_file +10 -0
  270. data/test/fixtures/multipart/mixed_files +0 -0
  271. data/test/fixtures/multipart/mona_lisa.jpg +0 -0
  272. data/test/fixtures/multipart/none +9 -0
  273. data/test/fixtures/multipart/single_parameter +5 -0
  274. data/test/fixtures/multipart/text_file +10 -0
  275. data/test/fixtures/override/test/hello_world.erb +1 -0
  276. data/test/fixtures/override2/layouts/test/sub.erb +1 -0
  277. data/test/fixtures/post_test/layouts/post.html.erb +1 -0
  278. data/test/fixtures/post_test/layouts/super_post.iphone.erb +1 -0
  279. data/test/fixtures/post_test/post/index.html.erb +1 -0
  280. data/test/fixtures/post_test/post/index.iphone.erb +1 -0
  281. data/test/fixtures/post_test/super_post/index.html.erb +1 -0
  282. data/test/fixtures/post_test/super_post/index.iphone.erb +1 -0
  283. data/test/fixtures/project.rb +3 -0
  284. data/test/fixtures/projects.yml +7 -0
  285. data/test/fixtures/projects/_project.erb +1 -0
  286. data/test/fixtures/public/404.html +1 -0
  287. data/test/fixtures/public/500.da.html +1 -0
  288. data/test/fixtures/public/500.html +1 -0
  289. data/test/fixtures/public/absolute/test.css +23 -0
  290. data/test/fixtures/public/absolute/test.js +63 -0
  291. data/test/fixtures/public/images/rails.png +0 -0
  292. data/test/fixtures/public/javascripts/application.js +1 -0
  293. data/test/fixtures/public/javascripts/bank.js +1 -0
  294. data/test/fixtures/public/javascripts/controls.js +1 -0
  295. data/test/fixtures/public/javascripts/dragdrop.js +1 -0
  296. data/test/fixtures/public/javascripts/effects.js +1 -0
  297. data/test/fixtures/public/javascripts/prototype.js +1 -0
  298. data/test/fixtures/public/javascripts/robber.js +1 -0
  299. data/test/fixtures/public/javascripts/subdir/subdir.js +1 -0
  300. data/test/fixtures/public/javascripts/version.1.0.js +1 -0
  301. data/test/fixtures/public/stylesheets/bank.css +1 -0
  302. data/test/fixtures/public/stylesheets/robber.css +1 -0
  303. data/test/fixtures/public/stylesheets/subdir/subdir.css +1 -0
  304. data/test/fixtures/public/stylesheets/version.1.0.css +1 -0
  305. data/test/fixtures/quiz/questions/_question.html.erb +1 -0
  306. data/test/fixtures/replies.yml +15 -0
  307. data/test/fixtures/replies/_reply.erb +1 -0
  308. data/test/fixtures/reply.rb +7 -0
  309. data/test/fixtures/respond_to/all_types_with_layout.html.erb +1 -0
  310. data/test/fixtures/respond_to/all_types_with_layout.js.rjs +1 -0
  311. data/test/fixtures/respond_to/custom_constant_handling_without_block.mobile.erb +1 -0
  312. data/test/fixtures/respond_to/iphone_with_html_response_type.html.erb +1 -0
  313. data/test/fixtures/respond_to/iphone_with_html_response_type.iphone.erb +1 -0
  314. data/test/fixtures/respond_to/layouts/missing.html.erb +1 -0
  315. data/test/fixtures/respond_to/layouts/standard.html.erb +1 -0
  316. data/test/fixtures/respond_to/layouts/standard.iphone.erb +1 -0
  317. data/test/fixtures/respond_to/using_defaults.html.erb +1 -0
  318. data/test/fixtures/respond_to/using_defaults.js.rjs +1 -0
  319. data/test/fixtures/respond_to/using_defaults.xml.builder +1 -0
  320. data/test/fixtures/respond_to/using_defaults_with_type_list.html.erb +1 -0
  321. data/test/fixtures/respond_to/using_defaults_with_type_list.js.rjs +1 -0
  322. data/test/fixtures/respond_to/using_defaults_with_type_list.xml.builder +1 -0
  323. data/test/fixtures/scope/test/modgreet.erb +1 -0
  324. data/test/fixtures/session_autoload_test/session_autoload_test/foo.rb +10 -0
  325. data/test/fixtures/shared.html.erb +1 -0
  326. data/test/fixtures/symlink_parent/symlinked_layout.erb +5 -0
  327. data/test/fixtures/test/_counter.html.erb +1 -0
  328. data/test/fixtures/test/_customer.erb +1 -0
  329. data/test/fixtures/test/_customer_counter.erb +1 -0
  330. data/test/fixtures/test/_customer_counter_with_as.erb +1 -0
  331. data/test/fixtures/test/_customer_greeting.erb +1 -0
  332. data/test/fixtures/test/_customer_with_var.erb +1 -0
  333. data/test/fixtures/test/_form.erb +1 -0
  334. data/test/fixtures/test/_from_helper.erb +1 -0
  335. data/test/fixtures/test/_hash_greeting.erb +1 -0
  336. data/test/fixtures/test/_hash_object.erb +2 -0
  337. data/test/fixtures/test/_hello.builder +1 -0
  338. data/test/fixtures/test/_labelling_form.erb +1 -0
  339. data/test/fixtures/test/_layout_for_block_with_args.html.erb +3 -0
  340. data/test/fixtures/test/_layout_for_partial.html.erb +3 -0
  341. data/test/fixtures/test/_local_inspector.html.erb +1 -0
  342. data/test/fixtures/test/_one.html.erb +1 -0
  343. data/test/fixtures/test/_partial.erb +1 -0
  344. data/test/fixtures/test/_partial.html.erb +1 -0
  345. data/test/fixtures/test/_partial.js.erb +1 -0
  346. data/test/fixtures/test/_partial_for_use_in_layout.html.erb +1 -0
  347. data/test/fixtures/test/_partial_only.erb +1 -0
  348. data/test/fixtures/test/_partial_with_only_html_version.html.erb +1 -0
  349. data/test/fixtures/test/_person.erb +2 -0
  350. data/test/fixtures/test/_raise.html.erb +1 -0
  351. data/test/fixtures/test/_two.html.erb +1 -0
  352. data/test/fixtures/test/_utf8_partial.html.erb +1 -0
  353. data/test/fixtures/test/_utf8_partial_magic.html.erb +2 -0
  354. data/test/fixtures/test/action_talk_to_layout.erb +2 -0
  355. data/test/fixtures/test/array_translation.erb +1 -0
  356. data/test/fixtures/test/calling_partial_with_layout.html.erb +1 -0
  357. data/test/fixtures/test/capturing.erb +4 -0
  358. data/test/fixtures/test/content_for.erb +2 -0
  359. data/test/fixtures/test/content_for_concatenated.erb +3 -0
  360. data/test/fixtures/test/content_for_with_parameter.erb +2 -0
  361. data/test/fixtures/test/delete_with_js.rjs +2 -0
  362. data/test/fixtures/test/dont_pick_me +1 -0
  363. data/test/fixtures/test/dot.directory/render_file_with_ivar.erb +1 -0
  364. data/test/fixtures/test/enum_rjs_test.rjs +6 -0
  365. data/test/fixtures/test/formatted_html_erb.html.erb +1 -0
  366. data/test/fixtures/test/formatted_xml_erb.builder +1 -0
  367. data/test/fixtures/test/formatted_xml_erb.html.erb +1 -0
  368. data/test/fixtures/test/formatted_xml_erb.xml.erb +1 -0
  369. data/test/fixtures/test/greeting.erb +1 -0
  370. data/test/fixtures/test/greeting.js.rjs +1 -0
  371. data/test/fixtures/test/hello.builder +4 -0
  372. data/test/fixtures/test/hello_world.da.html.erb +1 -0
  373. data/test/fixtures/test/hello_world.erb +1 -0
  374. data/test/fixtures/test/hello_world.erb~ +1 -0
  375. data/test/fixtures/test/hello_world.pt-BR.html.erb +1 -0
  376. data/test/fixtures/test/hello_world_container.builder +3 -0
  377. data/test/fixtures/test/hello_world_from_rxml.builder +4 -0
  378. data/test/fixtures/test/hello_world_with_layout_false.erb +1 -0
  379. data/test/fixtures/test/hello_xml_world.builder +11 -0
  380. data/test/fixtures/test/hyphen-ated.erb +1 -0
  381. data/test/fixtures/test/implicit_content_type.atom.builder +2 -0
  382. data/test/fixtures/test/list.erb +1 -0
  383. data/test/fixtures/test/malformed/malformed.en.html.erb~ +1 -0
  384. data/test/fixtures/test/malformed/malformed.erb~ +1 -0
  385. data/test/fixtures/test/malformed/malformed.html.erb~ +1 -0
  386. data/test/fixtures/test/nested_layout.erb +3 -0
  387. data/test/fixtures/test/non_erb_block_content_for.builder +4 -0
  388. data/test/fixtures/test/potential_conflicts.erb +4 -0
  389. data/test/fixtures/test/render_explicit_html_template.js.rjs +1 -0
  390. data/test/fixtures/test/render_file_from_template.html.erb +1 -0
  391. data/test/fixtures/test/render_file_with_ivar.erb +1 -0
  392. data/test/fixtures/test/render_file_with_locals.erb +1 -0
  393. data/test/fixtures/test/render_implicit_html_template.js.rjs +1 -0
  394. data/test/fixtures/test/render_implicit_html_template_from_xhr_request.da.html.erb +1 -0
  395. data/test/fixtures/test/render_implicit_html_template_from_xhr_request.html.erb +1 -0
  396. data/test/fixtures/test/render_implicit_js_template_without_layout.js.erb +1 -0
  397. data/test/fixtures/test/render_to_string_test.erb +1 -0
  398. data/test/fixtures/test/scoped_array_translation.erb +1 -0
  399. data/test/fixtures/test/sub_template_raise.html.erb +1 -0
  400. data/test/fixtures/test/template.erb +1 -0
  401. data/test/fixtures/test/translation.erb +1 -0
  402. data/test/fixtures/test/update_element_with_capture.erb +9 -0
  403. data/test/fixtures/test/using_layout_around_block.html.erb +1 -0
  404. data/test/fixtures/test/using_layout_around_block_with_args.html.erb +1 -0
  405. data/test/fixtures/test/utf8.html.erb +4 -0
  406. data/test/fixtures/test/utf8_magic.html.erb +5 -0
  407. data/test/fixtures/test/utf8_magic_with_bare_partial.html.erb +5 -0
  408. data/test/fixtures/topic.rb +3 -0
  409. data/test/fixtures/topics.yml +22 -0
  410. data/test/fixtures/topics/_topic.html.erb +1 -0
  411. data/test/template/active_record_helper_i18n_test.rb +51 -0
  412. data/test/template/active_record_helper_test.rb +302 -0
  413. data/test/template/asset_tag_helper_test.rb +770 -0
  414. data/test/template/atom_feed_helper_test.rb +315 -0
  415. data/test/template/benchmark_helper_test.rb +86 -0
  416. data/test/template/compiled_templates_test.rb +204 -0
  417. data/test/template/date_helper_i18n_test.rb +121 -0
  418. data/test/template/date_helper_test.rb +2603 -0
  419. data/test/template/erb_util_test.rb +36 -0
  420. data/test/template/form_helper_test.rb +1447 -0
  421. data/test/template/form_options_helper_i18n_test.rb +27 -0
  422. data/test/template/form_options_helper_test.rb +811 -0
  423. data/test/template/form_tag_helper_test.rb +356 -0
  424. data/test/template/javascript_helper_test.rb +106 -0
  425. data/test/template/number_helper_i18n_test.rb +69 -0
  426. data/test/template/number_helper_test.rb +132 -0
  427. data/test/template/prototype_helper_test.rb +639 -0
  428. data/test/template/raw_output_helper_test.rb +21 -0
  429. data/test/template/record_tag_helper_test.rb +58 -0
  430. data/test/template/render_test.rb +329 -0
  431. data/test/template/sanitize_helper_test.rb +57 -0
  432. data/test/template/scriptaculous_helper_test.rb +90 -0
  433. data/test/template/tag_helper_test.rb +98 -0
  434. data/test/template/template_test.rb +32 -0
  435. data/test/template/test_test.rb +54 -0
  436. data/test/template/text_helper_test.rb +597 -0
  437. data/test/template/translation_helper_test.rb +95 -0
  438. data/test/template/url_helper_test.rb +641 -0
  439. data/test/testing_sandbox.rb +15 -0
  440. data/test/view/test_case_test.rb +176 -0
  441. metadata +519 -0
@@ -0,0 +1,104 @@
1
+ require 'abstract_unit'
2
+
3
+ # Define the essentials
4
+ class ActiveRecordTestConnector
5
+ cattr_accessor :able_to_connect
6
+ cattr_accessor :connected
7
+
8
+ # Set our defaults
9
+ self.connected = false
10
+ self.able_to_connect = true
11
+ end
12
+
13
+ # Try to grab AR
14
+ if defined?(ActiveRecord) && defined?(Fixtures)
15
+ $stderr.puts 'Active Record is already loaded, running tests'
16
+ else
17
+ $stderr.print 'Attempting to load Active Record... '
18
+ begin
19
+ PATH_TO_AR = File.expand_path('../../../activerecord/lib', __FILE__)
20
+ raise LoadError, "#{PATH_TO_AR} doesn't exist" unless File.directory?(PATH_TO_AR)
21
+ $LOAD_PATH.unshift PATH_TO_AR
22
+ require 'active_record'
23
+ require 'active_record/fixtures'
24
+ $stderr.puts 'success'
25
+ rescue LoadError => e
26
+ $stderr.print "failed. Skipping Active Record assertion tests: #{e}"
27
+ ActiveRecordTestConnector.able_to_connect = false
28
+ end
29
+ end
30
+ $stderr.flush
31
+
32
+
33
+ # Define the rest of the connector
34
+ class ActiveRecordTestConnector
35
+ class << self
36
+ def setup
37
+ unless self.connected || !self.able_to_connect
38
+ setup_connection
39
+ load_schema
40
+ require_fixture_models
41
+ self.connected = true
42
+ end
43
+ rescue Exception => e # errors from ActiveRecord setup
44
+ $stderr.puts "\nSkipping ActiveRecord assertion tests: #{e}"
45
+ #$stderr.puts " #{e.backtrace.join("\n ")}\n"
46
+ self.able_to_connect = false
47
+ end
48
+
49
+ private
50
+ def setup_connection
51
+ if Object.const_defined?(:ActiveRecord)
52
+ defaults = { :database => ':memory:' }
53
+ begin
54
+ adapter = defined?(JRUBY_VERSION) ? 'jdbcsqlite3' : 'sqlite3'
55
+ options = defaults.merge :adapter => adapter, :timeout => 500
56
+ ActiveRecord::Base.establish_connection(options)
57
+ ActiveRecord::Base.configurations = { 'sqlite3_ar_integration' => options }
58
+ ActiveRecord::Base.connection
59
+ rescue Exception # errors from establishing a connection
60
+ $stderr.puts 'SQLite 3 unavailable; trying SQLite 2.'
61
+ options = defaults.merge :adapter => 'sqlite'
62
+ ActiveRecord::Base.establish_connection(options)
63
+ ActiveRecord::Base.configurations = { 'sqlite2_ar_integration' => options }
64
+ ActiveRecord::Base.connection
65
+ end
66
+
67
+ Object.send(:const_set, :QUOTED_TYPE, ActiveRecord::Base.connection.quote_column_name('type')) unless Object.const_defined?(:QUOTED_TYPE)
68
+ else
69
+ raise "Can't setup connection since ActiveRecord isn't loaded."
70
+ end
71
+ end
72
+
73
+ # Load actionpack sqlite tables
74
+ def load_schema
75
+ File.read(File.dirname(__FILE__) + "/fixtures/db_definitions/sqlite.sql").split(';').each do |sql|
76
+ ActiveRecord::Base.connection.execute(sql) unless sql.blank?
77
+ end
78
+ end
79
+
80
+ def require_fixture_models
81
+ Dir.glob(File.dirname(__FILE__) + "/fixtures/*.rb").each {|f| require f}
82
+ end
83
+ end
84
+ end
85
+
86
+ class ActiveRecordTestCase < ActionController::TestCase
87
+ include ActiveRecord::TestFixtures
88
+
89
+ # Set our fixture path
90
+ if ActiveRecordTestConnector.able_to_connect
91
+ self.fixture_path = [FIXTURE_LOAD_PATH]
92
+ self.use_transactional_fixtures = false
93
+ end
94
+
95
+ def self.fixtures(*args)
96
+ super if ActiveRecordTestConnector.connected
97
+ end
98
+
99
+ def run(*args)
100
+ super if ActiveRecordTestConnector.connected
101
+ end
102
+ end
103
+
104
+ ActiveRecordTestConnector.setup
@@ -0,0 +1,221 @@
1
+ require 'active_record_unit'
2
+
3
+ class ActiveRecordStoreTest < ActionController::IntegrationTest
4
+ DispatcherApp = ActionController::Dispatcher.new
5
+ SessionApp = ActiveRecord::SessionStore.new(DispatcherApp,
6
+ :key => '_session_id')
7
+ SessionAppWithFixation = ActiveRecord::SessionStore.new(DispatcherApp,
8
+ :key => '_session_id', :cookie_only => false)
9
+
10
+ class TestController < ActionController::Base
11
+ def no_session_access
12
+ head :ok
13
+ end
14
+
15
+ def set_session_value
16
+ session[:foo] = params[:foo] || "bar"
17
+ head :ok
18
+ end
19
+
20
+ def get_session_value
21
+ render :text => "foo: #{session[:foo].inspect}"
22
+ end
23
+
24
+ def get_session_id
25
+ render :text => "#{request.session_options[:id]}"
26
+ end
27
+
28
+ def call_reset_session
29
+ session[:foo]
30
+ reset_session
31
+ session[:foo] = "baz"
32
+ head :ok
33
+ end
34
+
35
+ def rescue_action(e) raise end
36
+ end
37
+
38
+ def setup
39
+ ActiveRecord::SessionStore.session_class.create_table!
40
+ @integration_session = open_session(SessionApp)
41
+ end
42
+
43
+ def teardown
44
+ ActiveRecord::SessionStore.session_class.drop_table!
45
+ end
46
+
47
+ %w{ session sql_bypass }.each do |class_name|
48
+ define_method("test_setting_and_getting_session_value_with_#{class_name}_store") do
49
+ with_store class_name do
50
+ with_test_route_set do
51
+ get '/set_session_value'
52
+ assert_response :success
53
+ assert cookies['_session_id']
54
+
55
+ get '/get_session_value'
56
+ assert_response :success
57
+ assert_equal 'foo: "bar"', response.body
58
+
59
+ get '/set_session_value', :foo => "baz"
60
+ assert_response :success
61
+ assert cookies['_session_id']
62
+
63
+ get '/get_session_value'
64
+ assert_response :success
65
+ assert_equal 'foo: "baz"', response.body
66
+ end
67
+ end
68
+ end
69
+ end
70
+
71
+ def test_getting_nil_session_value
72
+ with_test_route_set do
73
+ get '/get_session_value'
74
+ assert_response :success
75
+ assert_equal 'foo: nil', response.body
76
+ end
77
+ end
78
+
79
+ def test_setting_session_value_after_session_reset
80
+ with_test_route_set do
81
+ get '/set_session_value'
82
+ assert_response :success
83
+ assert cookies['_session_id']
84
+ session_id = cookies['_session_id']
85
+
86
+ get '/call_reset_session'
87
+ assert_response :success
88
+ assert_not_equal [], headers['Set-Cookie']
89
+
90
+ get '/get_session_value'
91
+ assert_response :success
92
+ assert_equal 'foo: "baz"', response.body
93
+
94
+ get '/get_session_id'
95
+ assert_response :success
96
+ assert_not_equal session_id, response.body
97
+ end
98
+ end
99
+
100
+ def test_getting_session_id
101
+ with_test_route_set do
102
+ get '/set_session_value'
103
+ assert_response :success
104
+ assert cookies['_session_id']
105
+ session_id = cookies['_session_id']
106
+
107
+ get '/get_session_id'
108
+ assert_response :success
109
+ assert_equal session_id, response.body
110
+ end
111
+ end
112
+
113
+ def test_getting_session_value
114
+ with_test_route_set do
115
+ get '/set_session_value'
116
+ assert_response :success
117
+ assert cookies['_session_id']
118
+
119
+ get '/get_session_value'
120
+ assert_response :success
121
+ assert_equal nil, headers['Set-Cookie'], "should not resend the cookie again if session_id cookie is already exists"
122
+ session_id = cookies["_session_id"]
123
+
124
+ get '/call_reset_session'
125
+ assert_response :success
126
+ assert_not_equal [], headers['Set-Cookie']
127
+
128
+ cookies["_session_id"] = session_id # replace our new session_id with our old, pre-reset session_id
129
+
130
+ get '/get_session_value'
131
+ assert_response :success
132
+ assert_equal 'foo: nil', response.body, "data for this session should have been obliterated from the database"
133
+ end
134
+ end
135
+
136
+ def test_getting_from_nonexistent_session
137
+ with_test_route_set do
138
+ get '/get_session_value'
139
+ assert_response :success
140
+ assert_equal 'foo: nil', response.body
141
+ assert_nil cookies['_session_id'], "should only create session on write, not read"
142
+ end
143
+ end
144
+
145
+ def test_prevents_session_fixation
146
+ with_test_route_set do
147
+ get '/set_session_value'
148
+ assert_response :success
149
+ assert cookies['_session_id']
150
+
151
+ get '/get_session_value'
152
+ assert_response :success
153
+ assert_equal 'foo: "bar"', response.body
154
+ session_id = cookies['_session_id']
155
+ assert session_id
156
+
157
+ reset!
158
+
159
+ get '/set_session_value', :_session_id => session_id, :foo => "baz"
160
+ assert_response :success
161
+ assert_equal nil, cookies['_session_id']
162
+
163
+ get '/get_session_value', :_session_id => session_id
164
+ assert_response :success
165
+ assert_equal 'foo: nil', response.body
166
+ assert_equal nil, cookies['_session_id']
167
+ end
168
+ end
169
+
170
+ def test_allows_session_fixation
171
+ @integration_session = open_session(SessionAppWithFixation)
172
+
173
+ with_test_route_set do
174
+ get '/set_session_value'
175
+ assert_response :success
176
+ assert cookies['_session_id']
177
+
178
+ get '/get_session_value'
179
+ assert_response :success
180
+ assert_equal 'foo: "bar"', response.body
181
+ session_id = cookies['_session_id']
182
+ assert session_id
183
+
184
+ reset!
185
+ @integration_session = open_session(SessionAppWithFixation)
186
+
187
+ get '/set_session_value', :_session_id => session_id, :foo => "baz"
188
+ assert_response :success
189
+ assert_equal session_id, cookies['_session_id']
190
+
191
+ get '/get_session_value', :_session_id => session_id
192
+ assert_response :success
193
+ assert_equal 'foo: "baz"', response.body
194
+ assert_equal session_id, cookies['_session_id']
195
+ end
196
+ end
197
+
198
+ private
199
+ def with_test_route_set
200
+ with_routing do |set|
201
+ set.draw do |map|
202
+ map.with_options :controller => "active_record_store_test/test" do |c|
203
+ c.connect "/:action"
204
+ end
205
+ end
206
+ yield
207
+ end
208
+ end
209
+
210
+ def with_store(class_name)
211
+ begin
212
+ session_class = ActiveRecord::SessionStore.session_class
213
+ ActiveRecord::SessionStore.session_class = "ActiveRecord::SessionStore::#{class_name.camelize}".constantize
214
+ yield
215
+ rescue
216
+ ActiveRecord::SessionStore.session_class = session_class
217
+ raise
218
+ end
219
+ end
220
+
221
+ end
@@ -0,0 +1,188 @@
1
+ require 'active_record_unit'
2
+
3
+ class RenderPartialWithRecordIdentificationController < ActionController::Base
4
+ def render_with_has_many_and_belongs_to_association
5
+ @developer = Developer.find(1)
6
+ render :partial => @developer.projects
7
+ end
8
+
9
+ def render_with_has_many_association
10
+ @topic = Topic.find(1)
11
+ render :partial => @topic.replies
12
+ end
13
+
14
+ def render_with_named_scope
15
+ render :partial => Reply.base
16
+ end
17
+
18
+ def render_with_has_many_through_association
19
+ @developer = Developer.find(:first)
20
+ render :partial => @developer.topics
21
+ end
22
+
23
+ def render_with_has_one_association
24
+ @company = Company.find(1)
25
+ render :partial => @company.mascot
26
+ end
27
+
28
+ def render_with_belongs_to_association
29
+ @reply = Reply.find(1)
30
+ render :partial => @reply.topic
31
+ end
32
+
33
+ def render_with_record
34
+ @developer = Developer.find(:first)
35
+ render :partial => @developer
36
+ end
37
+
38
+ def render_with_record_collection
39
+ @developers = Developer.find(:all)
40
+ render :partial => @developers
41
+ end
42
+
43
+ def render_with_record_collection_and_spacer_template
44
+ @developer = Developer.find(1)
45
+ render :partial => @developer.projects, :spacer_template => 'test/partial_only'
46
+ end
47
+ end
48
+
49
+ class RenderPartialWithRecordIdentificationTest < ActiveRecordTestCase
50
+ tests RenderPartialWithRecordIdentificationController
51
+ fixtures :developers, :projects, :developers_projects, :topics, :replies, :companies, :mascots
52
+
53
+ def test_rendering_partial_with_has_many_and_belongs_to_association
54
+ get :render_with_has_many_and_belongs_to_association
55
+ assert_template 'projects/_project'
56
+ assert_equal assigns(:developer).projects.map(&:name).join, @response.body
57
+ end
58
+
59
+ def test_rendering_partial_with_has_many_association
60
+ get :render_with_has_many_association
61
+ assert_template 'replies/_reply'
62
+ assert_equal 'Birdman is better!', @response.body
63
+ end
64
+
65
+ def test_rendering_partial_with_named_scope
66
+ get :render_with_named_scope
67
+ assert_template 'replies/_reply'
68
+ assert_equal 'Birdman is better!Nuh uh!', @response.body
69
+ end
70
+
71
+ def test_render_with_record
72
+ get :render_with_record
73
+ assert_template 'developers/_developer'
74
+ assert_equal 'David', @response.body
75
+ end
76
+
77
+ def test_render_with_record_collection
78
+ get :render_with_record_collection
79
+ assert_template 'developers/_developer'
80
+ assert_equal 'DavidJamisfixture_3fixture_4fixture_5fixture_6fixture_7fixture_8fixture_9fixture_10Jamis', @response.body
81
+ end
82
+
83
+ def test_render_with_record_collection_and_spacer_template
84
+ get :render_with_record_collection_and_spacer_template
85
+ assert_equal assigns(:developer).projects.map(&:name).join('only partial'), @response.body
86
+ end
87
+
88
+ def test_rendering_partial_with_has_one_association
89
+ mascot = Company.find(1).mascot
90
+ get :render_with_has_one_association
91
+ assert_template 'mascots/_mascot'
92
+ assert_equal mascot.name, @response.body
93
+ end
94
+ end
95
+
96
+ class RenderPartialWithRecordIdentificationController < ActionController::Base
97
+ def render_with_has_many_and_belongs_to_association
98
+ @developer = Developer.find(1)
99
+ render :partial => @developer.projects
100
+ end
101
+
102
+ def render_with_has_many_association
103
+ @topic = Topic.find(1)
104
+ render :partial => @topic.replies
105
+ end
106
+
107
+ def render_with_has_many_through_association
108
+ @developer = Developer.find(:first)
109
+ render :partial => @developer.topics
110
+ end
111
+
112
+ def render_with_belongs_to_association
113
+ @reply = Reply.find(1)
114
+ render :partial => @reply.topic
115
+ end
116
+
117
+ def render_with_record
118
+ @developer = Developer.find(:first)
119
+ render :partial => @developer
120
+ end
121
+
122
+ def render_with_record_collection
123
+ @developers = Developer.find(:all)
124
+ render :partial => @developers
125
+ end
126
+ end
127
+
128
+ class Game < Struct.new(:name, :id)
129
+ def to_param
130
+ id.to_s
131
+ end
132
+ end
133
+
134
+ module Fun
135
+ class NestedController < ActionController::Base
136
+ def render_with_record_in_nested_controller
137
+ render :partial => Game.new("Pong")
138
+ end
139
+
140
+ def render_with_record_collection_in_nested_controller
141
+ render :partial => [ Game.new("Pong"), Game.new("Tank") ]
142
+ end
143
+ end
144
+
145
+ module Serious
146
+ class NestedDeeperController < ActionController::Base
147
+ def render_with_record_in_deeper_nested_controller
148
+ render :partial => Game.new("Chess")
149
+ end
150
+
151
+ def render_with_record_collection_in_deeper_nested_controller
152
+ render :partial => [ Game.new("Chess"), Game.new("Sudoku"), Game.new("Solitaire") ]
153
+ end
154
+ end
155
+ end
156
+ end
157
+
158
+ class RenderPartialWithRecordIdentificationAndNestedControllersTest < ActiveRecordTestCase
159
+ tests Fun::NestedController
160
+
161
+ def test_render_with_record_in_nested_controller
162
+ get :render_with_record_in_nested_controller
163
+ assert_template 'fun/games/_game'
164
+ assert_equal 'Pong', @response.body
165
+ end
166
+
167
+ def test_render_with_record_collection_in_nested_controller
168
+ get :render_with_record_collection_in_nested_controller
169
+ assert_template 'fun/games/_game'
170
+ assert_equal 'PongTank', @response.body
171
+ end
172
+ end
173
+
174
+ class RenderPartialWithRecordIdentificationAndNestedDeeperControllersTest < ActiveRecordTestCase
175
+ tests Fun::Serious::NestedDeeperController
176
+
177
+ def test_render_with_record_in_deeper_nested_controller
178
+ get :render_with_record_in_deeper_nested_controller
179
+ assert_template 'fun/serious/games/_game'
180
+ assert_equal 'Chess', @response.body
181
+ end
182
+
183
+ def test_render_with_record_collection_in_deeper_nested_controller
184
+ get :render_with_record_collection_in_deeper_nested_controller
185
+ assert_template 'fun/serious/games/_game'
186
+ assert_equal 'ChessSudokuSolitaire', @response.body
187
+ end
188
+ end