actionpack 2.3.18 → 3.0.0.beta

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of actionpack might be problematic. Click here for more details.

Files changed (513) hide show
  1. data/CHANGELOG +15 -64
  2. data/README +39 -48
  3. data/lib/abstract_controller.rb +22 -0
  4. data/lib/abstract_controller/base.rb +191 -0
  5. data/lib/abstract_controller/callbacks.rb +113 -0
  6. data/lib/abstract_controller/collector.rb +30 -0
  7. data/lib/abstract_controller/compatibility.rb +18 -0
  8. data/lib/abstract_controller/helpers.rb +163 -0
  9. data/lib/abstract_controller/layouts.rb +413 -0
  10. data/lib/abstract_controller/localized_cache.rb +49 -0
  11. data/lib/abstract_controller/logger.rb +13 -0
  12. data/lib/abstract_controller/rendering.rb +238 -0
  13. data/lib/{action_controller → abstract_controller}/translation.rb +1 -1
  14. data/lib/action_controller.rb +68 -102
  15. data/lib/action_controller/base.rb +77 -1409
  16. data/lib/action_controller/caching.rb +58 -45
  17. data/lib/action_controller/caching/actions.rb +100 -114
  18. data/lib/action_controller/caching/fragments.rb +17 -19
  19. data/lib/action_controller/caching/pages.rb +12 -6
  20. data/lib/action_controller/caching/sweeping.rb +42 -0
  21. data/lib/action_controller/deprecated.rb +5 -0
  22. data/lib/action_controller/deprecated/dispatcher.rb +28 -0
  23. data/lib/action_controller/deprecated/integration_test.rb +2 -0
  24. data/lib/action_controller/deprecated/performance_test.rb +1 -0
  25. data/lib/action_controller/metal.rb +125 -0
  26. data/lib/action_controller/metal/compatibility.rb +141 -0
  27. data/lib/action_controller/metal/conditional_get.rb +86 -0
  28. data/lib/action_controller/metal/configuration.rb +28 -0
  29. data/lib/action_controller/metal/cookies.rb +17 -0
  30. data/lib/action_controller/metal/exceptions.rb +46 -0
  31. data/lib/action_controller/metal/flash.rb +28 -0
  32. data/lib/action_controller/metal/head.rb +33 -0
  33. data/lib/action_controller/metal/helpers.rb +116 -0
  34. data/lib/action_controller/metal/hide_actions.rb +50 -0
  35. data/lib/action_controller/{http_authentication.rb → metal/http_authentication.rb} +18 -15
  36. data/lib/action_controller/metal/instrumentation.rb +99 -0
  37. data/lib/action_controller/metal/mime_responds.rb +300 -0
  38. data/lib/action_controller/metal/rack_delegation.rb +35 -0
  39. data/lib/action_controller/metal/redirecting.rb +90 -0
  40. data/lib/action_controller/metal/renderers.rb +95 -0
  41. data/lib/action_controller/metal/rendering.rb +69 -0
  42. data/lib/action_controller/metal/request_forgery_protection.rb +115 -0
  43. data/lib/action_controller/metal/rescue.rb +13 -0
  44. data/lib/action_controller/metal/responder.rb +220 -0
  45. data/lib/action_controller/{session_management.rb → metal/session_management.rb} +5 -14
  46. data/lib/action_controller/{streaming.rb → metal/streaming.rb} +13 -12
  47. data/lib/action_controller/metal/testing.rb +42 -0
  48. data/lib/action_controller/metal/url_for.rb +157 -0
  49. data/lib/action_controller/{verification.rb → metal/verification.rb} +41 -41
  50. data/lib/action_controller/middleware.rb +38 -0
  51. data/lib/action_controller/polymorphic_routes.rb +20 -26
  52. data/lib/action_controller/railtie.rb +30 -0
  53. data/lib/action_controller/railties/subscriber.rb +63 -0
  54. data/lib/action_controller/record_identifier.rb +3 -16
  55. data/lib/action_controller/test_case.rb +156 -18
  56. data/lib/action_controller/url_rewriter.rb +47 -200
  57. data/lib/action_controller/vendor/html-scanner.rb +16 -12
  58. data/lib/action_controller/vendor/html-scanner/html/node.rb +1 -1
  59. data/lib/action_controller/vendor/html-scanner/html/sanitizer.rb +12 -9
  60. data/lib/action_dispatch.rb +88 -0
  61. data/lib/action_dispatch/http/cache.rb +123 -0
  62. data/lib/action_dispatch/http/filter_parameters.rb +98 -0
  63. data/lib/{action_controller → action_dispatch/http}/headers.rb +8 -8
  64. data/lib/action_dispatch/http/mime_negotiation.rb +101 -0
  65. data/lib/{action_controller → action_dispatch/http}/mime_type.rb +30 -11
  66. data/lib/{action_controller → action_dispatch/http}/mime_types.rb +5 -3
  67. data/lib/action_dispatch/http/parameters.rb +49 -0
  68. data/lib/action_dispatch/http/request.rb +223 -0
  69. data/lib/action_dispatch/http/response.rb +209 -0
  70. data/lib/action_dispatch/http/upload.rb +48 -0
  71. data/lib/action_dispatch/http/url.rb +129 -0
  72. data/lib/action_dispatch/middleware/callbacks.rb +50 -0
  73. data/lib/action_dispatch/middleware/cascade.rb +29 -0
  74. data/lib/action_dispatch/middleware/cookies.rb +216 -0
  75. data/lib/{action_controller → action_dispatch/middleware}/flash.rb +51 -90
  76. data/lib/action_dispatch/middleware/head.rb +18 -0
  77. data/lib/action_dispatch/middleware/params_parser.rb +78 -0
  78. data/lib/action_dispatch/middleware/rescue.rb +26 -0
  79. data/lib/action_dispatch/middleware/session/abstract_store.rb +209 -0
  80. data/lib/{action_controller → action_dispatch/middleware}/session/cookie_store.rb +56 -60
  81. data/lib/action_dispatch/middleware/session/mem_cache_store.rb +47 -0
  82. data/lib/action_dispatch/middleware/show_exceptions.rb +173 -0
  83. data/lib/{action_controller/middleware_stack.rb → action_dispatch/middleware/stack.rb} +23 -13
  84. data/lib/action_dispatch/middleware/static.rb +44 -0
  85. data/lib/{action_controller → action_dispatch/middleware}/templates/rescues/_request_and_response.erb +10 -3
  86. data/lib/{action_controller → action_dispatch/middleware}/templates/rescues/_trace.erb +4 -4
  87. data/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb +10 -0
  88. data/lib/{action_controller → action_dispatch/middleware}/templates/rescues/layout.erb +2 -2
  89. data/lib/{action_controller → action_dispatch/middleware}/templates/rescues/missing_template.erb +0 -0
  90. data/lib/{action_controller → action_dispatch/middleware}/templates/rescues/routing_error.erb +0 -0
  91. data/lib/{action_controller → action_dispatch/middleware}/templates/rescues/template_error.erb +3 -3
  92. data/lib/{action_controller → action_dispatch/middleware}/templates/rescues/unknown_action.erb +0 -0
  93. data/lib/action_dispatch/railtie.rb +15 -0
  94. data/lib/action_dispatch/routing.rb +217 -0
  95. data/lib/action_dispatch/routing/deprecated_mapper.rb +877 -0
  96. data/lib/action_dispatch/routing/mapper.rb +649 -0
  97. data/lib/action_dispatch/routing/route.rb +55 -0
  98. data/lib/action_dispatch/routing/route_set.rb +445 -0
  99. data/lib/action_dispatch/testing/assertions.rb +21 -0
  100. data/lib/action_dispatch/testing/assertions/dom.rb +37 -0
  101. data/lib/{action_controller/assertions/model_assertions.rb → action_dispatch/testing/assertions/model.rb} +2 -4
  102. data/lib/action_dispatch/testing/assertions/response.rb +154 -0
  103. data/lib/{action_controller/assertions/routing_assertions.rb → action_dispatch/testing/assertions/routing.rb} +72 -34
  104. data/lib/{action_controller/assertions/selector_assertions.rb → action_dispatch/testing/assertions/selector.rb} +14 -11
  105. data/lib/{action_controller/assertions/tag_assertions.rb → action_dispatch/testing/assertions/tag.rb} +25 -14
  106. data/lib/{action_controller → action_dispatch/testing}/integration.rb +173 -406
  107. data/lib/action_dispatch/testing/performance_test.rb +17 -0
  108. data/lib/action_dispatch/testing/test_process.rb +42 -0
  109. data/lib/action_dispatch/testing/test_request.rb +83 -0
  110. data/lib/action_dispatch/testing/test_response.rb +136 -0
  111. data/lib/action_pack/version.rb +3 -3
  112. data/lib/action_view.rb +29 -26
  113. data/lib/action_view/base.rb +101 -148
  114. data/lib/action_view/context.rb +44 -0
  115. data/lib/action_view/helpers.rb +6 -4
  116. data/lib/action_view/helpers/{active_record_helper.rb → active_model_helper.rb} +63 -63
  117. data/lib/action_view/helpers/asset_tag_helper.rb +166 -31
  118. data/lib/action_view/helpers/cache_helper.rb +1 -1
  119. data/lib/action_view/helpers/capture_helper.rb +40 -8
  120. data/lib/action_view/helpers/csrf_helper.rb +2 -4
  121. data/lib/action_view/helpers/date_helper.rb +14 -15
  122. data/lib/action_view/helpers/form_helper.rb +121 -24
  123. data/lib/action_view/helpers/form_options_helper.rb +26 -25
  124. data/lib/action_view/helpers/form_tag_helper.rb +42 -33
  125. data/lib/action_view/helpers/javascript_helper.rb +1 -109
  126. data/lib/action_view/helpers/number_helper.rb +4 -1
  127. data/lib/action_view/helpers/prototype_helper.rb +75 -499
  128. data/lib/action_view/helpers/raw_output_helper.rb +1 -1
  129. data/lib/action_view/helpers/record_tag_helper.rb +3 -3
  130. data/lib/action_view/helpers/sanitize_helper.rb +3 -2
  131. data/lib/action_view/helpers/scriptaculous_helper.rb +89 -53
  132. data/lib/action_view/helpers/tag_helper.rb +12 -13
  133. data/lib/action_view/helpers/text_helper.rb +33 -38
  134. data/lib/action_view/helpers/translation_helper.rb +11 -35
  135. data/lib/action_view/helpers/url_helper.rb +140 -134
  136. data/lib/action_view/locale/en.yml +34 -28
  137. data/lib/action_view/paths.rb +27 -24
  138. data/lib/action_view/railtie.rb +17 -0
  139. data/lib/action_view/railties/subscriber.rb +24 -0
  140. data/lib/action_view/{partials.rb → render/partials.rb} +161 -51
  141. data/lib/action_view/render/rendering.rb +117 -0
  142. data/lib/action_view/template.rb +88 -217
  143. data/lib/action_view/template/error.rb +105 -0
  144. data/lib/action_view/template/handler.rb +41 -0
  145. data/lib/action_view/template/handlers.rb +54 -0
  146. data/lib/action_view/{template_handlers → template/handlers}/builder.rb +6 -6
  147. data/lib/action_view/template/handlers/erb.rb +58 -0
  148. data/lib/action_view/{template_handlers → template/handlers}/rjs.rb +8 -3
  149. data/lib/action_view/template/resolver.rb +164 -0
  150. data/lib/action_view/template/text.rb +40 -0
  151. data/lib/action_view/test_case.rb +18 -18
  152. metadata +165 -420
  153. data/RUNNING_UNIT_TESTS +0 -24
  154. data/Rakefile +0 -158
  155. data/install.rb +0 -30
  156. data/lib/action_controller/assertions/dom_assertions.rb +0 -55
  157. data/lib/action_controller/assertions/response_assertions.rb +0 -169
  158. data/lib/action_controller/benchmarking.rb +0 -107
  159. data/lib/action_controller/caching/sweeper.rb +0 -45
  160. data/lib/action_controller/cgi_ext.rb +0 -15
  161. data/lib/action_controller/cgi_ext/cookie.rb +0 -112
  162. data/lib/action_controller/cgi_ext/query_extension.rb +0 -22
  163. data/lib/action_controller/cgi_ext/stdinput.rb +0 -24
  164. data/lib/action_controller/cgi_process.rb +0 -77
  165. data/lib/action_controller/cookies.rb +0 -197
  166. data/lib/action_controller/dispatcher.rb +0 -133
  167. data/lib/action_controller/failsafe.rb +0 -87
  168. data/lib/action_controller/filters.rb +0 -680
  169. data/lib/action_controller/helpers.rb +0 -225
  170. data/lib/action_controller/layout.rb +0 -286
  171. data/lib/action_controller/middlewares.rb +0 -14
  172. data/lib/action_controller/mime_responds.rb +0 -193
  173. data/lib/action_controller/params_parser.rb +0 -77
  174. data/lib/action_controller/performance_test.rb +0 -15
  175. data/lib/action_controller/rack_lint_patch.rb +0 -36
  176. data/lib/action_controller/reloader.rb +0 -54
  177. data/lib/action_controller/request.rb +0 -518
  178. data/lib/action_controller/request_forgery_protection.rb +0 -116
  179. data/lib/action_controller/rescue.rb +0 -183
  180. data/lib/action_controller/resources.rb +0 -682
  181. data/lib/action_controller/response.rb +0 -237
  182. data/lib/action_controller/routing.rb +0 -388
  183. data/lib/action_controller/routing/builder.rb +0 -197
  184. data/lib/action_controller/routing/optimisations.rb +0 -130
  185. data/lib/action_controller/routing/recognition_optimisation.rb +0 -167
  186. data/lib/action_controller/routing/route.rb +0 -265
  187. data/lib/action_controller/routing/route_set.rb +0 -503
  188. data/lib/action_controller/routing/routing_ext.rb +0 -49
  189. data/lib/action_controller/routing/segments.rb +0 -343
  190. data/lib/action_controller/session/abstract_store.rb +0 -276
  191. data/lib/action_controller/session/mem_cache_store.rb +0 -60
  192. data/lib/action_controller/status_codes.rb +0 -88
  193. data/lib/action_controller/string_coercion.rb +0 -29
  194. data/lib/action_controller/templates/rescues/diagnostics.erb +0 -11
  195. data/lib/action_controller/test_process.rb +0 -580
  196. data/lib/action_controller/uploaded_file.rb +0 -44
  197. data/lib/action_view/helpers/benchmark_helper.rb +0 -54
  198. data/lib/action_view/inline_template.rb +0 -19
  199. data/lib/action_view/reloadable_template.rb +0 -117
  200. data/lib/action_view/renderable.rb +0 -109
  201. data/lib/action_view/renderable_partial.rb +0 -53
  202. data/lib/action_view/template_error.rb +0 -99
  203. data/lib/action_view/template_handler.rb +0 -34
  204. data/lib/action_view/template_handlers.rb +0 -48
  205. data/lib/action_view/template_handlers/erb.rb +0 -25
  206. data/lib/actionpack.rb +0 -2
  207. data/test/abstract_unit.rb +0 -78
  208. data/test/active_record_unit.rb +0 -104
  209. data/test/activerecord/active_record_store_test.rb +0 -221
  210. data/test/activerecord/render_partial_with_record_identification_test.rb +0 -188
  211. data/test/adv_attr_test.rb +0 -20
  212. data/test/controller/action_pack_assertions_test.rb +0 -545
  213. data/test/controller/addresses_render_test.rb +0 -37
  214. data/test/controller/assert_select_test.rb +0 -735
  215. data/test/controller/base_test.rb +0 -217
  216. data/test/controller/benchmark_test.rb +0 -32
  217. data/test/controller/caching_test.rb +0 -743
  218. data/test/controller/capture_test.rb +0 -66
  219. data/test/controller/content_type_test.rb +0 -178
  220. data/test/controller/controller_fixtures/app/controllers/admin/user_controller.rb +0 -0
  221. data/test/controller/controller_fixtures/app/controllers/user_controller.rb +0 -0
  222. data/test/controller/controller_fixtures/vendor/plugins/bad_plugin/lib/plugin_controller.rb +0 -0
  223. data/test/controller/cookie_test.rb +0 -208
  224. data/test/controller/deprecation/deprecated_base_methods_test.rb +0 -32
  225. data/test/controller/dispatcher_test.rb +0 -144
  226. data/test/controller/dom_assertions_test.rb +0 -53
  227. data/test/controller/failsafe_test.rb +0 -60
  228. data/test/controller/fake_controllers.rb +0 -33
  229. data/test/controller/fake_models.rb +0 -19
  230. data/test/controller/filter_params_test.rb +0 -52
  231. data/test/controller/filters_test.rb +0 -885
  232. data/test/controller/flash_test.rb +0 -174
  233. data/test/controller/header_test.rb +0 -14
  234. data/test/controller/helper_test.rb +0 -224
  235. data/test/controller/html-scanner/cdata_node_test.rb +0 -15
  236. data/test/controller/html-scanner/document_test.rb +0 -148
  237. data/test/controller/html-scanner/node_test.rb +0 -89
  238. data/test/controller/html-scanner/sanitizer_test.rb +0 -300
  239. data/test/controller/html-scanner/tag_node_test.rb +0 -238
  240. data/test/controller/html-scanner/text_node_test.rb +0 -50
  241. data/test/controller/html-scanner/tokenizer_test.rb +0 -131
  242. data/test/controller/http_basic_authentication_test.rb +0 -113
  243. data/test/controller/http_digest_authentication_test.rb +0 -254
  244. data/test/controller/integration_test.rb +0 -526
  245. data/test/controller/layout_test.rb +0 -215
  246. data/test/controller/localized_templates_test.rb +0 -24
  247. data/test/controller/logging_test.rb +0 -46
  248. data/test/controller/middleware_stack_test.rb +0 -90
  249. data/test/controller/mime_responds_test.rb +0 -536
  250. data/test/controller/mime_type_test.rb +0 -93
  251. data/test/controller/output_escaping_test.rb +0 -19
  252. data/test/controller/polymorphic_routes_test.rb +0 -297
  253. data/test/controller/rack_test.rb +0 -308
  254. data/test/controller/record_identifier_test.rb +0 -139
  255. data/test/controller/redirect_test.rb +0 -285
  256. data/test/controller/reloader_test.rb +0 -125
  257. data/test/controller/render_test.rb +0 -1783
  258. data/test/controller/request/json_params_parsing_test.rb +0 -65
  259. data/test/controller/request/multipart_params_parsing_test.rb +0 -177
  260. data/test/controller/request/query_string_parsing_test.rb +0 -129
  261. data/test/controller/request/test_request_test.rb +0 -35
  262. data/test/controller/request/url_encoded_params_parsing_test.rb +0 -146
  263. data/test/controller/request/xml_params_parsing_test.rb +0 -103
  264. data/test/controller/request_forgery_protection_test.rb +0 -233
  265. data/test/controller/request_test.rb +0 -398
  266. data/test/controller/rescue_test.rb +0 -541
  267. data/test/controller/resources_test.rb +0 -1393
  268. data/test/controller/routing_test.rb +0 -2592
  269. data/test/controller/selector_test.rb +0 -628
  270. data/test/controller/send_file_test.rb +0 -171
  271. data/test/controller/session/abstract_store_test.rb +0 -64
  272. data/test/controller/session/cookie_store_test.rb +0 -354
  273. data/test/controller/session/mem_cache_store_test.rb +0 -187
  274. data/test/controller/session/test_session_test.rb +0 -58
  275. data/test/controller/test_test.rb +0 -700
  276. data/test/controller/translation_test.rb +0 -26
  277. data/test/controller/url_rewriter_test.rb +0 -395
  278. data/test/controller/verification_test.rb +0 -270
  279. data/test/controller/view_paths_test.rb +0 -141
  280. data/test/controller/webservice_test.rb +0 -273
  281. data/test/fixtures/_top_level_partial.html.erb +0 -1
  282. data/test/fixtures/_top_level_partial_only.erb +0 -1
  283. data/test/fixtures/addresses/list.erb +0 -1
  284. data/test/fixtures/alternate_helpers/foo_helper.rb +0 -3
  285. data/test/fixtures/bad_customers/_bad_customer.html.erb +0 -1
  286. data/test/fixtures/companies.yml +0 -24
  287. data/test/fixtures/company.rb +0 -10
  288. data/test/fixtures/content_type/render_default_content_types_for_respond_to.rhtml +0 -1
  289. data/test/fixtures/content_type/render_default_for_rhtml.rhtml +0 -1
  290. data/test/fixtures/content_type/render_default_for_rjs.rjs +0 -1
  291. data/test/fixtures/content_type/render_default_for_rxml.rxml +0 -1
  292. data/test/fixtures/customers/_customer.html.erb +0 -1
  293. data/test/fixtures/db_definitions/sqlite.sql +0 -49
  294. data/test/fixtures/developer.rb +0 -9
  295. data/test/fixtures/developers.yml +0 -21
  296. data/test/fixtures/developers/_developer.erb +0 -1
  297. data/test/fixtures/developers_projects.yml +0 -13
  298. data/test/fixtures/failsafe/500.html +0 -1
  299. data/test/fixtures/fun/games/_game.erb +0 -1
  300. data/test/fixtures/fun/games/hello_world.erb +0 -1
  301. data/test/fixtures/fun/serious/games/_game.erb +0 -1
  302. data/test/fixtures/functional_caching/_partial.erb +0 -3
  303. data/test/fixtures/functional_caching/formatted_fragment_cached.html.erb +0 -3
  304. data/test/fixtures/functional_caching/formatted_fragment_cached.js.rjs +0 -6
  305. data/test/fixtures/functional_caching/formatted_fragment_cached.xml.builder +0 -5
  306. data/test/fixtures/functional_caching/fragment_cached.html.erb +0 -2
  307. data/test/fixtures/functional_caching/html_fragment_cached_with_partial.html.erb +0 -1
  308. data/test/fixtures/functional_caching/inline_fragment_cached.html.erb +0 -2
  309. data/test/fixtures/functional_caching/js_fragment_cached_with_partial.js.rjs +0 -1
  310. data/test/fixtures/good_customers/_good_customer.html.erb +0 -1
  311. data/test/fixtures/helpers/abc_helper.rb +0 -5
  312. data/test/fixtures/helpers/fun/games_helper.rb +0 -3
  313. data/test/fixtures/helpers/fun/pdf_helper.rb +0 -3
  314. data/test/fixtures/layout_tests/abs_path_layout.rhtml +0 -1
  315. data/test/fixtures/layout_tests/alt/hello.rhtml +0 -1
  316. data/test/fixtures/layout_tests/alt/layouts/alt.rhtml +0 -0
  317. data/test/fixtures/layout_tests/layouts/controller_name_space/nested.rhtml +0 -1
  318. data/test/fixtures/layout_tests/layouts/item.rhtml +0 -1
  319. data/test/fixtures/layout_tests/layouts/layout_test.rhtml +0 -1
  320. data/test/fixtures/layout_tests/layouts/multiple_extensions.html.erb +0 -1
  321. data/test/fixtures/layout_tests/layouts/third_party_template_library.mab +0 -1
  322. data/test/fixtures/layout_tests/views/hello.rhtml +0 -1
  323. data/test/fixtures/layouts/_column.html.erb +0 -2
  324. data/test/fixtures/layouts/block_with_layout.erb +0 -3
  325. data/test/fixtures/layouts/builder.builder +0 -3
  326. data/test/fixtures/layouts/default_html.html.erb +0 -1
  327. data/test/fixtures/layouts/partial_with_layout.erb +0 -3
  328. data/test/fixtures/layouts/standard.erb +0 -1
  329. data/test/fixtures/layouts/talk_from_action.erb +0 -2
  330. data/test/fixtures/layouts/xhr.html.erb +0 -2
  331. data/test/fixtures/layouts/yield.erb +0 -2
  332. data/test/fixtures/localized/hello_world.de.html +0 -1
  333. data/test/fixtures/localized/hello_world.en.html +0 -1
  334. data/test/fixtures/mascot.rb +0 -3
  335. data/test/fixtures/mascots.yml +0 -4
  336. data/test/fixtures/mascots/_mascot.html.erb +0 -1
  337. data/test/fixtures/multipart/binary_file +0 -0
  338. data/test/fixtures/multipart/boundary_problem_file +0 -10
  339. data/test/fixtures/multipart/bracketed_param +0 -5
  340. data/test/fixtures/multipart/empty +0 -10
  341. data/test/fixtures/multipart/hello.txt +0 -1
  342. data/test/fixtures/multipart/large_text_file +0 -10
  343. data/test/fixtures/multipart/mixed_files +0 -0
  344. data/test/fixtures/multipart/mona_lisa.jpg +0 -0
  345. data/test/fixtures/multipart/none +0 -9
  346. data/test/fixtures/multipart/single_parameter +0 -5
  347. data/test/fixtures/multipart/text_file +0 -10
  348. data/test/fixtures/override/test/hello_world.erb +0 -1
  349. data/test/fixtures/override2/layouts/test/sub.erb +0 -1
  350. data/test/fixtures/post_test/layouts/post.html.erb +0 -1
  351. data/test/fixtures/post_test/layouts/super_post.iphone.erb +0 -1
  352. data/test/fixtures/post_test/post/index.html.erb +0 -1
  353. data/test/fixtures/post_test/post/index.iphone.erb +0 -1
  354. data/test/fixtures/post_test/super_post/index.html.erb +0 -1
  355. data/test/fixtures/post_test/super_post/index.iphone.erb +0 -1
  356. data/test/fixtures/project.rb +0 -3
  357. data/test/fixtures/projects.yml +0 -7
  358. data/test/fixtures/projects/_project.erb +0 -1
  359. data/test/fixtures/public/404.html +0 -1
  360. data/test/fixtures/public/500.da.html +0 -1
  361. data/test/fixtures/public/500.html +0 -1
  362. data/test/fixtures/public/absolute/test.css +0 -23
  363. data/test/fixtures/public/absolute/test.js +0 -63
  364. data/test/fixtures/public/images/rails.png +0 -0
  365. data/test/fixtures/public/javascripts/application.js +0 -1
  366. data/test/fixtures/public/javascripts/bank.js +0 -1
  367. data/test/fixtures/public/javascripts/controls.js +0 -1
  368. data/test/fixtures/public/javascripts/dragdrop.js +0 -1
  369. data/test/fixtures/public/javascripts/effects.js +0 -1
  370. data/test/fixtures/public/javascripts/prototype.js +0 -1
  371. data/test/fixtures/public/javascripts/robber.js +0 -1
  372. data/test/fixtures/public/javascripts/subdir/subdir.js +0 -1
  373. data/test/fixtures/public/javascripts/version.1.0.js +0 -1
  374. data/test/fixtures/public/stylesheets/bank.css +0 -1
  375. data/test/fixtures/public/stylesheets/robber.css +0 -1
  376. data/test/fixtures/public/stylesheets/subdir/subdir.css +0 -1
  377. data/test/fixtures/public/stylesheets/version.1.0.css +0 -1
  378. data/test/fixtures/quiz/questions/_question.html.erb +0 -1
  379. data/test/fixtures/replies.yml +0 -15
  380. data/test/fixtures/replies/_reply.erb +0 -1
  381. data/test/fixtures/reply.rb +0 -7
  382. data/test/fixtures/respond_to/all_types_with_layout.html.erb +0 -1
  383. data/test/fixtures/respond_to/all_types_with_layout.js.rjs +0 -1
  384. data/test/fixtures/respond_to/custom_constant_handling_without_block.mobile.erb +0 -1
  385. data/test/fixtures/respond_to/iphone_with_html_response_type.html.erb +0 -1
  386. data/test/fixtures/respond_to/iphone_with_html_response_type.iphone.erb +0 -1
  387. data/test/fixtures/respond_to/layouts/missing.html.erb +0 -1
  388. data/test/fixtures/respond_to/layouts/standard.html.erb +0 -1
  389. data/test/fixtures/respond_to/layouts/standard.iphone.erb +0 -1
  390. data/test/fixtures/respond_to/using_defaults.html.erb +0 -1
  391. data/test/fixtures/respond_to/using_defaults.js.rjs +0 -1
  392. data/test/fixtures/respond_to/using_defaults.xml.builder +0 -1
  393. data/test/fixtures/respond_to/using_defaults_with_type_list.html.erb +0 -1
  394. data/test/fixtures/respond_to/using_defaults_with_type_list.js.rjs +0 -1
  395. data/test/fixtures/respond_to/using_defaults_with_type_list.xml.builder +0 -1
  396. data/test/fixtures/scope/test/modgreet.erb +0 -1
  397. data/test/fixtures/session_autoload_test/session_autoload_test/foo.rb +0 -10
  398. data/test/fixtures/shared.html.erb +0 -1
  399. data/test/fixtures/symlink_parent/symlinked_layout.erb +0 -5
  400. data/test/fixtures/test/_counter.html.erb +0 -1
  401. data/test/fixtures/test/_customer.erb +0 -1
  402. data/test/fixtures/test/_customer_counter.erb +0 -1
  403. data/test/fixtures/test/_customer_counter_with_as.erb +0 -1
  404. data/test/fixtures/test/_customer_greeting.erb +0 -1
  405. data/test/fixtures/test/_customer_with_var.erb +0 -1
  406. data/test/fixtures/test/_form.erb +0 -1
  407. data/test/fixtures/test/_from_helper.erb +0 -1
  408. data/test/fixtures/test/_hash_greeting.erb +0 -1
  409. data/test/fixtures/test/_hash_object.erb +0 -2
  410. data/test/fixtures/test/_hello.builder +0 -1
  411. data/test/fixtures/test/_labelling_form.erb +0 -1
  412. data/test/fixtures/test/_layout_for_block_with_args.html.erb +0 -3
  413. data/test/fixtures/test/_layout_for_partial.html.erb +0 -3
  414. data/test/fixtures/test/_local_inspector.html.erb +0 -1
  415. data/test/fixtures/test/_one.html.erb +0 -1
  416. data/test/fixtures/test/_partial.erb +0 -1
  417. data/test/fixtures/test/_partial.html.erb +0 -1
  418. data/test/fixtures/test/_partial.js.erb +0 -1
  419. data/test/fixtures/test/_partial_for_use_in_layout.html.erb +0 -1
  420. data/test/fixtures/test/_partial_only.erb +0 -1
  421. data/test/fixtures/test/_partial_with_only_html_version.html.erb +0 -1
  422. data/test/fixtures/test/_person.erb +0 -2
  423. data/test/fixtures/test/_raise.html.erb +0 -1
  424. data/test/fixtures/test/_two.html.erb +0 -1
  425. data/test/fixtures/test/_utf8_partial.html.erb +0 -1
  426. data/test/fixtures/test/_utf8_partial_magic.html.erb +0 -2
  427. data/test/fixtures/test/action_talk_to_layout.erb +0 -2
  428. data/test/fixtures/test/array_translation.erb +0 -1
  429. data/test/fixtures/test/calling_partial_with_layout.html.erb +0 -1
  430. data/test/fixtures/test/capturing.erb +0 -4
  431. data/test/fixtures/test/content_for.erb +0 -2
  432. data/test/fixtures/test/content_for_concatenated.erb +0 -3
  433. data/test/fixtures/test/content_for_with_parameter.erb +0 -2
  434. data/test/fixtures/test/delete_with_js.rjs +0 -2
  435. data/test/fixtures/test/dont_pick_me +0 -1
  436. data/test/fixtures/test/dot.directory/render_file_with_ivar.erb +0 -1
  437. data/test/fixtures/test/enum_rjs_test.rjs +0 -6
  438. data/test/fixtures/test/formatted_html_erb.html.erb +0 -1
  439. data/test/fixtures/test/formatted_xml_erb.builder +0 -1
  440. data/test/fixtures/test/formatted_xml_erb.html.erb +0 -1
  441. data/test/fixtures/test/formatted_xml_erb.xml.erb +0 -1
  442. data/test/fixtures/test/greeting.erb +0 -1
  443. data/test/fixtures/test/greeting.js.rjs +0 -1
  444. data/test/fixtures/test/hello.builder +0 -4
  445. data/test/fixtures/test/hello_world.da.html.erb +0 -1
  446. data/test/fixtures/test/hello_world.erb +0 -1
  447. data/test/fixtures/test/hello_world.erb~ +0 -1
  448. data/test/fixtures/test/hello_world.pt-BR.html.erb +0 -1
  449. data/test/fixtures/test/hello_world_container.builder +0 -3
  450. data/test/fixtures/test/hello_world_from_rxml.builder +0 -4
  451. data/test/fixtures/test/hello_world_with_layout_false.erb +0 -1
  452. data/test/fixtures/test/hello_xml_world.builder +0 -11
  453. data/test/fixtures/test/hyphen-ated.erb +0 -1
  454. data/test/fixtures/test/implicit_content_type.atom.builder +0 -2
  455. data/test/fixtures/test/list.erb +0 -1
  456. data/test/fixtures/test/malformed/malformed.en.html.erb~ +0 -1
  457. data/test/fixtures/test/malformed/malformed.erb~ +0 -1
  458. data/test/fixtures/test/malformed/malformed.html.erb~ +0 -1
  459. data/test/fixtures/test/nested_layout.erb +0 -3
  460. data/test/fixtures/test/non_erb_block_content_for.builder +0 -4
  461. data/test/fixtures/test/potential_conflicts.erb +0 -4
  462. data/test/fixtures/test/render_explicit_html_template.js.rjs +0 -1
  463. data/test/fixtures/test/render_file_from_template.html.erb +0 -1
  464. data/test/fixtures/test/render_file_with_ivar.erb +0 -1
  465. data/test/fixtures/test/render_file_with_locals.erb +0 -1
  466. data/test/fixtures/test/render_implicit_html_template.js.rjs +0 -1
  467. data/test/fixtures/test/render_implicit_html_template_from_xhr_request.da.html.erb +0 -1
  468. data/test/fixtures/test/render_implicit_html_template_from_xhr_request.html.erb +0 -1
  469. data/test/fixtures/test/render_implicit_js_template_without_layout.js.erb +0 -1
  470. data/test/fixtures/test/render_to_string_test.erb +0 -1
  471. data/test/fixtures/test/scoped_array_translation.erb +0 -1
  472. data/test/fixtures/test/sub_template_raise.html.erb +0 -1
  473. data/test/fixtures/test/template.erb +0 -1
  474. data/test/fixtures/test/translation.erb +0 -1
  475. data/test/fixtures/test/update_element_with_capture.erb +0 -9
  476. data/test/fixtures/test/using_layout_around_block.html.erb +0 -1
  477. data/test/fixtures/test/using_layout_around_block_with_args.html.erb +0 -1
  478. data/test/fixtures/test/utf8.html.erb +0 -4
  479. data/test/fixtures/test/utf8_magic.html.erb +0 -5
  480. data/test/fixtures/test/utf8_magic_with_bare_partial.html.erb +0 -5
  481. data/test/fixtures/topic.rb +0 -3
  482. data/test/fixtures/topics.yml +0 -22
  483. data/test/fixtures/topics/_topic.html.erb +0 -1
  484. data/test/template/active_record_helper_i18n_test.rb +0 -51
  485. data/test/template/active_record_helper_test.rb +0 -302
  486. data/test/template/asset_tag_helper_test.rb +0 -770
  487. data/test/template/atom_feed_helper_test.rb +0 -315
  488. data/test/template/benchmark_helper_test.rb +0 -86
  489. data/test/template/compiled_templates_test.rb +0 -204
  490. data/test/template/date_helper_i18n_test.rb +0 -121
  491. data/test/template/date_helper_test.rb +0 -2603
  492. data/test/template/erb_util_test.rb +0 -36
  493. data/test/template/form_helper_test.rb +0 -1447
  494. data/test/template/form_options_helper_i18n_test.rb +0 -27
  495. data/test/template/form_options_helper_test.rb +0 -811
  496. data/test/template/form_tag_helper_test.rb +0 -356
  497. data/test/template/javascript_helper_test.rb +0 -106
  498. data/test/template/number_helper_i18n_test.rb +0 -69
  499. data/test/template/number_helper_test.rb +0 -132
  500. data/test/template/prototype_helper_test.rb +0 -639
  501. data/test/template/raw_output_helper_test.rb +0 -21
  502. data/test/template/record_tag_helper_test.rb +0 -58
  503. data/test/template/render_test.rb +0 -329
  504. data/test/template/sanitize_helper_test.rb +0 -57
  505. data/test/template/scriptaculous_helper_test.rb +0 -90
  506. data/test/template/tag_helper_test.rb +0 -98
  507. data/test/template/template_test.rb +0 -32
  508. data/test/template/test_test.rb +0 -54
  509. data/test/template/text_helper_test.rb +0 -601
  510. data/test/template/translation_helper_test.rb +0 -95
  511. data/test/template/url_helper_test.rb +0 -641
  512. data/test/testing_sandbox.rb +0 -15
  513. data/test/view/test_case_test.rb +0 -176
@@ -0,0 +1,21 @@
1
+ module ActionDispatch
2
+ module Assertions
3
+ autoload :DomAssertions, 'action_dispatch/testing/assertions/dom'
4
+ autoload :ModelAssertions, 'action_dispatch/testing/assertions/model'
5
+ autoload :ResponseAssertions, 'action_dispatch/testing/assertions/response'
6
+ autoload :RoutingAssertions, 'action_dispatch/testing/assertions/routing'
7
+ autoload :SelectorAssertions, 'action_dispatch/testing/assertions/selector'
8
+ autoload :TagAssertions, 'action_dispatch/testing/assertions/tag'
9
+
10
+ extend ActiveSupport::Concern
11
+
12
+ included do
13
+ include DomAssertions
14
+ include ModelAssertions
15
+ include ResponseAssertions
16
+ include RoutingAssertions
17
+ include SelectorAssertions
18
+ include TagAssertions
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,37 @@
1
+ require 'action_controller/vendor/html-scanner'
2
+
3
+ module ActionDispatch
4
+ module Assertions
5
+ module DomAssertions
6
+ # Test two HTML strings for equivalency (e.g., identical up to reordering of attributes)
7
+ #
8
+ # ==== Examples
9
+ #
10
+ # # assert that the referenced method generates the appropriate HTML string
11
+ # assert_dom_equal '<a href="http://www.example.com">Apples</a>', link_to("Apples", "http://www.example.com")
12
+ #
13
+ def assert_dom_equal(expected, actual, message = "")
14
+ expected_dom = HTML::Document.new(expected).root
15
+ actual_dom = HTML::Document.new(actual).root
16
+ full_message = build_message(message, "<?> expected to be == to\n<?>.", expected_dom.to_s, actual_dom.to_s)
17
+
18
+ assert_block(full_message) { expected_dom == actual_dom }
19
+ end
20
+
21
+ # The negated form of +assert_dom_equivalent+.
22
+ #
23
+ # ==== Examples
24
+ #
25
+ # # assert that the referenced method does not generate the specified HTML string
26
+ # assert_dom_not_equal '<a href="http://www.example.com">Apples</a>', link_to("Oranges", "http://www.example.com")
27
+ #
28
+ def assert_dom_not_equal(expected, actual, message = "")
29
+ expected_dom = HTML::Document.new(expected).root
30
+ actual_dom = HTML::Document.new(actual).root
31
+ full_message = build_message(message, "<?> expected to be != to\n<?>.", expected_dom.to_s, actual_dom.to_s)
32
+
33
+ assert_block(full_message) { expected_dom != actual_dom }
34
+ end
35
+ end
36
+ end
37
+ end
@@ -1,4 +1,4 @@
1
- module ActionController
1
+ module ActionDispatch
2
2
  module Assertions
3
3
  module ModelAssertions
4
4
  # Ensures that the passed record is valid by Active Record standards and
@@ -12,9 +12,7 @@ module ActionController
12
12
  #
13
13
  def assert_valid(record)
14
14
  ::ActiveSupport::Deprecation.warn("assert_valid is deprecated. Use assert record.valid? instead", caller)
15
- clean_backtrace do
16
- assert record.valid?, record.errors.full_messages.join("\n")
17
- end
15
+ assert record.valid?, record.errors.full_messages.join("\n")
18
16
  end
19
17
  end
20
18
  end
@@ -0,0 +1,154 @@
1
+ module ActionDispatch
2
+ module Assertions
3
+ # A small suite of assertions that test responses from Rails applications.
4
+ module ResponseAssertions
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ # TODO: Need to pull in AV::Template monkey patches that track which
9
+ # templates are rendered. assert_template should probably be part
10
+ # of AV instead of AD.
11
+ require 'action_view/test_case'
12
+ end
13
+
14
+ # Asserts that the response is one of the following types:
15
+ #
16
+ # * <tt>:success</tt> - Status code was 200
17
+ # * <tt>:redirect</tt> - Status code was in the 300-399 range
18
+ # * <tt>:missing</tt> - Status code was 404
19
+ # * <tt>:error</tt> - Status code was in the 500-599 range
20
+ #
21
+ # You can also pass an explicit status number like assert_response(501)
22
+ # or its symbolic equivalent assert_response(:not_implemented).
23
+ # See ActionDispatch::StatusCodes for a full list.
24
+ #
25
+ # ==== Examples
26
+ #
27
+ # # assert that the response was a redirection
28
+ # assert_response :redirect
29
+ #
30
+ # # assert that the response code was status code 401 (unauthorized)
31
+ # assert_response 401
32
+ #
33
+ def assert_response(type, message = nil)
34
+ validate_request!
35
+
36
+ if [ :success, :missing, :redirect, :error ].include?(type) && @response.send("#{type}?")
37
+ assert_block("") { true } # to count the assertion
38
+ elsif type.is_a?(Fixnum) && @response.response_code == type
39
+ assert_block("") { true } # to count the assertion
40
+ elsif type.is_a?(Symbol) && @response.response_code == Rack::Utils::SYMBOL_TO_STATUS_CODE[type]
41
+ assert_block("") { true } # to count the assertion
42
+ else
43
+ assert_block(build_message(message, "Expected response to be a <?>, but was <?>", type, @response.response_code)) { false }
44
+ end
45
+ end
46
+
47
+ # Assert that the redirection options passed in match those of the redirect called in the latest action.
48
+ # This match can be partial, such that assert_redirected_to(:controller => "weblog") will also
49
+ # match the redirection of redirect_to(:controller => "weblog", :action => "show") and so on.
50
+ #
51
+ # ==== Examples
52
+ #
53
+ # # assert that the redirection was to the "index" action on the WeblogController
54
+ # assert_redirected_to :controller => "weblog", :action => "index"
55
+ #
56
+ # # assert that the redirection was to the named route login_url
57
+ # assert_redirected_to login_url
58
+ #
59
+ # # assert that the redirection was to the url for @customer
60
+ # assert_redirected_to @customer
61
+ #
62
+ def assert_redirected_to(options = {}, message=nil)
63
+ validate_request!
64
+
65
+ assert_response(:redirect, message)
66
+ return true if options == @response.location
67
+
68
+ redirected_to_after_normalisation = normalize_argument_to_redirection(@response.location)
69
+ options_after_normalisation = normalize_argument_to_redirection(options)
70
+
71
+ if redirected_to_after_normalisation != options_after_normalisation
72
+ flunk "Expected response to be a redirect to <#{options_after_normalisation}> but was a redirect to <#{redirected_to_after_normalisation}>"
73
+ end
74
+ end
75
+
76
+ # Asserts that the request was rendered with the appropriate template file or partials
77
+ #
78
+ # ==== Examples
79
+ #
80
+ # # assert that the "new" view template was rendered
81
+ # assert_template "new"
82
+ #
83
+ # # assert that the "_customer" partial was rendered twice
84
+ # assert_template :partial => '_customer', :count => 2
85
+ #
86
+ # # assert that no partials were rendered
87
+ # assert_template :partial => false
88
+ #
89
+ def assert_template(options = {}, message = nil)
90
+ validate_request!
91
+
92
+ case options
93
+ when NilClass, String
94
+ rendered = (@controller.template.rendered[:template] || []).map { |t| t.identifier }
95
+ msg = build_message(message,
96
+ "expecting <?> but rendering with <?>",
97
+ options, rendered.join(', '))
98
+ assert_block(msg) do
99
+ if options.nil?
100
+ @controller.template.rendered[:template].blank?
101
+ else
102
+ rendered.any? { |t| t.match(options) }
103
+ end
104
+ end
105
+ when Hash
106
+ if expected_partial = options[:partial]
107
+ partials = @controller.template.rendered[:partials]
108
+ if expected_count = options[:count]
109
+ found = partials.detect { |p, _| p.identifier.match(expected_partial) }
110
+ actual_count = found.nil? ? 0 : found.second
111
+ msg = build_message(message,
112
+ "expecting ? to be rendered ? time(s) but rendered ? time(s)",
113
+ expected_partial, expected_count, actual_count)
114
+ assert(actual_count == expected_count.to_i, msg)
115
+ else
116
+ msg = build_message(message,
117
+ "expecting partial <?> but action rendered <?>",
118
+ options[:partial], partials.keys)
119
+ assert(partials.keys.any? { |p| p.identifier.match(expected_partial) }, msg)
120
+ end
121
+ else
122
+ assert @controller.template.rendered[:partials].empty?,
123
+ "Expected no partials to be rendered"
124
+ end
125
+ end
126
+ end
127
+
128
+ private
129
+ # Proxy to to_param if the object will respond to it.
130
+ def parameterize(value)
131
+ value.respond_to?(:to_param) ? value.to_param : value
132
+ end
133
+
134
+ def normalize_argument_to_redirection(fragment)
135
+ after_routing = @controller.url_for(fragment)
136
+ if after_routing =~ %r{^\w+://.*}
137
+ after_routing
138
+ else
139
+ # FIXME - this should probably get removed.
140
+ if after_routing.first != '/'
141
+ after_routing = '/' + after_routing
142
+ end
143
+ @request.protocol + @request.host_with_port + after_routing
144
+ end
145
+ end
146
+
147
+ def validate_request!
148
+ unless @request.is_a?(ActionDispatch::Request)
149
+ raise ArgumentError, "@request must be an ActionDispatch::Request"
150
+ end
151
+ end
152
+ end
153
+ end
154
+ end
@@ -1,4 +1,6 @@
1
- module ActionController
1
+ require 'active_support/core_ext/hash/diff'
2
+
3
+ module ActionDispatch
2
4
  module Assertions
3
5
  # Suite of assertions to test routes generated by Rails and the handling of requests made to them.
4
6
  module RoutingAssertions
@@ -10,29 +12,29 @@ module ActionController
10
12
  # and a :method containing the required HTTP verb.
11
13
  #
12
14
  # # assert that POSTing to /items will call the create action on ItemsController
13
- # assert_recognizes {:controller => 'items', :action => 'create'}, {:path => 'items', :method => :post}
15
+ # assert_recognizes({:controller => 'items', :action => 'create'}, {:path => 'items', :method => :post})
14
16
  #
15
17
  # You can also pass in +extras+ with a hash containing URL parameters that would normally be in the query string. This can be used
16
18
  # to assert that values in the query string string will end up in the params hash correctly. To test query strings you must use the
17
19
  # extras argument, appending the query string on the path directly will not work. For example:
18
20
  #
19
21
  # # assert that a path of '/items/list/1?view=print' returns the correct options
20
- # assert_recognizes {:controller => 'items', :action => 'list', :id => '1', :view => 'print'}, 'items/list/1', { :view => "print" }
22
+ # assert_recognizes({:controller => 'items', :action => 'list', :id => '1', :view => 'print'}, 'items/list/1', { :view => "print" })
21
23
  #
22
24
  # The +message+ parameter allows you to pass in an error message that is displayed upon failure.
23
25
  #
24
26
  # ==== Examples
25
27
  # # Check the default route (i.e., the index action)
26
- # assert_recognizes {:controller => 'items', :action => 'index'}, 'items'
28
+ # assert_recognizes({:controller => 'items', :action => 'index'}, 'items')
27
29
  #
28
30
  # # Test a specific action
29
- # assert_recognizes {:controller => 'items', :action => 'list'}, 'items/list'
31
+ # assert_recognizes({:controller => 'items', :action => 'list'}, 'items/list')
30
32
  #
31
33
  # # Test an action with a parameter
32
- # assert_recognizes {:controller => 'items', :action => 'destroy', :id => '1'}, 'items/destroy/1'
34
+ # assert_recognizes({:controller => 'items', :action => 'destroy', :id => '1'}, 'items/destroy/1')
33
35
  #
34
36
  # # Test a custom route
35
- # assert_recognizes {:controller => 'items', :action => 'show', :id => '1'}, 'view/item1'
37
+ # assert_recognizes({:controller => 'items', :action => 'show', :id => '1'}, 'view/item1')
36
38
  #
37
39
  # # Check a Simply RESTful generated route
38
40
  # assert_recognizes list_items_url, 'items/list'
@@ -44,19 +46,16 @@ module ActionController
44
46
  request_method = nil
45
47
  end
46
48
 
47
- clean_backtrace do
48
- ActionController::Routing::Routes.reload if ActionController::Routing::Routes.empty?
49
- request = recognized_request_for(path, request_method)
49
+ request = recognized_request_for(path, request_method)
50
50
 
51
- expected_options = expected_options.clone
52
- extras.each_key { |key| expected_options.delete key } unless extras.nil?
51
+ expected_options = expected_options.clone
52
+ extras.each_key { |key| expected_options.delete key } unless extras.nil?
53
53
 
54
- expected_options.stringify_keys!
55
- routing_diff = expected_options.diff(request.path_parameters)
56
- msg = build_message(message, "The recognized options <?> did not match <?>, difference: <?>",
57
- request.path_parameters, expected_options, expected_options.diff(request.path_parameters))
58
- assert_block(msg) { request.path_parameters == expected_options }
59
- end
54
+ expected_options.stringify_keys!
55
+ routing_diff = expected_options.diff(request.path_parameters)
56
+ msg = build_message(message, "The recognized options <?> did not match <?>, difference: <?>",
57
+ request.path_parameters, expected_options, expected_options.diff(request.path_parameters))
58
+ assert_block(msg) { request.path_parameters == expected_options }
60
59
  end
61
60
 
62
61
  # Asserts that the provided options can be used to generate the provided path. This is the inverse of +assert_recognizes+.
@@ -78,21 +77,18 @@ module ActionController
78
77
  # # Asserts that the generated route gives us our custom route
79
78
  # assert_generates "changesets/12", { :controller => 'scm', :action => 'show_diff', :revision => "12" }
80
79
  def assert_generates(expected_path, options, defaults={}, extras = {}, message=nil)
81
- clean_backtrace do
82
- expected_path = "/#{expected_path}" unless expected_path[0] == ?/
83
- # Load routes.rb if it hasn't been loaded.
84
- ActionController::Routing::Routes.reload if ActionController::Routing::Routes.empty?
80
+ expected_path = "/#{expected_path}" unless expected_path[0] == ?/
81
+ # Load routes.rb if it hasn't been loaded.
85
82
 
86
- generated_path, extra_keys = ActionController::Routing::Routes.generate_extras(options, defaults)
87
- found_extras = options.reject {|k, v| ! extra_keys.include? k}
83
+ generated_path, extra_keys = ActionController::Routing::Routes.generate_extras(options, defaults)
84
+ found_extras = options.reject {|k, v| ! extra_keys.include? k}
88
85
 
89
- msg = build_message(message, "found extras <?>, not <?>", found_extras, extras)
90
- assert_block(msg) { found_extras == extras }
86
+ msg = build_message(message, "found extras <?>, not <?>", found_extras, extras)
87
+ assert_block(msg) { found_extras == extras }
91
88
 
92
- msg = build_message(message, "The generated path <?> did not match <?>", generated_path,
93
- expected_path)
94
- assert_block(msg) { expected_path == generated_path }
95
- end
89
+ msg = build_message(message, "The generated path <?> did not match <?>", generated_path,
90
+ expected_path)
91
+ assert_block(msg) { expected_path == generated_path }
96
92
  end
97
93
 
98
94
  # Asserts that path and options match both ways; in other words, it verifies that <tt>path</tt> generates
@@ -107,7 +103,7 @@ module ActionController
107
103
  # assert_routing '/home', :controller => 'home', :action => 'index'
108
104
  #
109
105
  # # Test a route generated with a specific controller, action, and parameter (id)
110
- # assert_routing '/entries/show/23', :controller => 'entries', :action => 'show', id => 23
106
+ # assert_routing '/entries/show/23', :controller => 'entries', :action => 'show', :id => 23
111
107
  #
112
108
  # # Assert a basic route (controller + default action), with an error message if it fails
113
109
  # assert_routing '/store', { :controller => 'store', :action => 'index' }, {}, {}, 'Route for store index not generated properly'
@@ -116,7 +112,7 @@ module ActionController
116
112
  # assert_routing 'controller/action/9', {:id => "9", :item => "square"}, {:controller => "controller", :action => "action"}, {}, {:item => "square"}
117
113
  #
118
114
  # # Tests a route with a HTTP method
119
- # assert_routing { :method => 'put', :path => '/product/321' }, { :controller => "product", :action => "update", :id => "321" }
115
+ # assert_routing({ :method => 'put', :path => '/product/321' }, { :controller => "product", :action => "update", :id => "321" })
120
116
  def assert_routing(path, options, defaults={}, extras={}, message=nil)
121
117
  assert_recognizes(options, path, extras, message)
122
118
 
@@ -128,6 +124,46 @@ module ActionController
128
124
  assert_generates(path.is_a?(Hash) ? path[:path] : path, options, defaults, extras, message)
129
125
  end
130
126
 
127
+ # A helper to make it easier to test different route configurations.
128
+ # This method temporarily replaces ActionController::Routing::Routes
129
+ # with a new RouteSet instance.
130
+ #
131
+ # The new instance is yielded to the passed block. Typically the block
132
+ # will create some routes using <tt>map.draw { map.connect ... }</tt>:
133
+ #
134
+ # with_routing do |set|
135
+ # set.draw do |map|
136
+ # map.connect ':controller/:action/:id'
137
+ # assert_equal(
138
+ # ['/content/10/show', {}],
139
+ # map.generate(:controller => 'content', :id => 10, :action => 'show')
140
+ # end
141
+ # end
142
+ # end
143
+ #
144
+ def with_routing
145
+ real_routes = ActionController::Routing::Routes
146
+ ActionController::Routing.module_eval { remove_const :Routes }
147
+
148
+ temporary_routes = ActionController::Routing::RouteSet.new
149
+ ActionController::Routing.module_eval { const_set :Routes, temporary_routes }
150
+
151
+ yield temporary_routes
152
+ ensure
153
+ if ActionController::Routing.const_defined? :Routes
154
+ ActionController::Routing.module_eval { remove_const :Routes }
155
+ end
156
+ ActionController::Routing.const_set(:Routes, real_routes) if real_routes
157
+ end
158
+
159
+ def method_missing(selector, *args, &block)
160
+ if @controller && ActionController::Routing::Routes.named_routes.helpers.include?(selector)
161
+ @controller.send(selector, *args, &block)
162
+ else
163
+ super
164
+ end
165
+ end
166
+
131
167
  private
132
168
  # Recognizes the route for a given path.
133
169
  def recognized_request_for(path, request_method = nil)
@@ -136,9 +172,11 @@ module ActionController
136
172
  # Assume given controller
137
173
  request = ActionController::TestRequest.new
138
174
  request.env["REQUEST_METHOD"] = request_method.to_s.upcase if request_method
139
- request.path = path
175
+ request.path = path
176
+
177
+ params = ActionController::Routing::Routes.recognize_path(path, { :method => request.method })
178
+ request.path_parameters = params.with_indifferent_access
140
179
 
141
- ActionController::Routing::Routes.recognize(request)
142
180
  request
143
181
  end
144
182
  end
@@ -1,9 +1,11 @@
1
+ require 'action_controller/vendor/html-scanner'
2
+
1
3
  #--
2
4
  # Copyright (c) 2006 Assaf Arkin (http://labnotes.org)
3
5
  # Under MIT and/or CC By license.
4
6
  #++
5
7
 
6
- module ActionController
8
+ module ActionDispatch
7
9
  module Assertions
8
10
  unless const_defined?(:NO_STRIP)
9
11
  NO_STRIP = %w{pre script style textarea}
@@ -24,12 +26,6 @@ module ActionController
24
26
  #
25
27
  # Also see HTML::Selector to learn how to use selectors.
26
28
  module SelectorAssertions
27
-
28
- def initialize(*args)
29
- super
30
- @selected = nil
31
- end
32
-
33
29
  # :call-seq:
34
30
  # css_select(selector) => array
35
31
  # css_select(element, selector) => array
@@ -351,14 +347,17 @@ module ActionController
351
347
  #
352
348
  # Use the first argument to narrow down assertions to only statements
353
349
  # of that type. Possible values are <tt>:replace</tt>, <tt>:replace_html</tt>,
354
- # <tt>:show</tt>, <tt>:hide</tt>, <tt>:toggle</tt>, <tt>:remove</tt> and
355
- # <tt>:insert_html</tt>.
350
+ # <tt>:show</tt>, <tt>:hide</tt>, <tt>:toggle</tt>, <tt>:remove</tta>,
351
+ # <tt>:insert_html</tt> and <tt>:redirect</tt>.
356
352
  #
357
353
  # Use the argument <tt>:insert</tt> followed by an insertion position to narrow
358
354
  # down the assertion to only statements that insert elements in that
359
355
  # position. Possible values are <tt>:top</tt>, <tt>:bottom</tt>, <tt>:before</tt>
360
356
  # and <tt>:after</tt>.
361
357
  #
358
+ # Use the argument <tt>:redirect</tt> follwed by a path to check that an statement
359
+ # which redirects to the specified path is generated.
360
+ #
362
361
  # Using the <tt>:remove</tt> statement, you will be able to pass a block, but it will
363
362
  # be ignored as there is no HTML passed for this statement.
364
363
  #
@@ -405,6 +404,9 @@ module ActionController
405
404
  #
406
405
  # # The same, but shorter.
407
406
  # assert_select "ol>li", 4
407
+ #
408
+ # # Checking for a redirect.
409
+ # assert_select_rjs :redirect, root_path
408
410
  def assert_select_rjs(*args, &block)
409
411
  rjs_type = args.first.is_a?(Symbol) ? args.shift : nil
410
412
  id = args.first.is_a?(String) ? args.shift : nil
@@ -522,7 +524,7 @@ module ActionController
522
524
 
523
525
  fix_content = lambda do |node|
524
526
  # Gets around a bug in the Rails 1.1 HTML parser.
525
- node.content.gsub(/<!\[CDATA\[(.*)(\]\]>)?/m) { CGI.escapeHTML($1) }
527
+ node.content.gsub(/<!\[CDATA\[(.*)(\]\]>)?/m) { Rack::Utils.escapeHTML($1) }
526
528
  end
527
529
 
528
530
  selected = elements.map do |element|
@@ -582,7 +584,8 @@ module ActionController
582
584
  :chained_replace => "\\$\\(#{RJS_ANY_ID}\\)\\.replace\\(#{RJS_PATTERN_HTML}\\)",
583
585
  :chained_replace_html => "\\$\\(#{RJS_ANY_ID}\\)\\.update\\(#{RJS_PATTERN_HTML}\\)",
584
586
  :replace_html => "Element\\.update\\(#{RJS_ANY_ID}, #{RJS_PATTERN_HTML}\\)",
585
- :replace => "Element\\.replace\\(#{RJS_ANY_ID}, #{RJS_PATTERN_HTML}\\)"
587
+ :replace => "Element\\.replace\\(#{RJS_ANY_ID}, #{RJS_PATTERN_HTML}\\)",
588
+ :redirect => "window.location.href = #{RJS_ANY_ID}"
586
589
  }
587
590
  [:remove, :show, :hide, :toggle].each do |action|
588
591
  RJS_STATEMENTS[action] = "Element\\.#{action}\\(#{RJS_ANY_ID}\\)"