eactionpack 2.1.2

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 (338) hide show
  1. data/CHANGELOG +7 -0
  2. data/MIT-LICENSE +21 -0
  3. data/README +469 -0
  4. data/RUNNING_UNIT_TESTS +24 -0
  5. data/Rakefile +146 -0
  6. data/install.rb +30 -0
  7. data/lib/action_controller.rb +79 -0
  8. data/lib/action_controller/assertions.rb +69 -0
  9. data/lib/action_controller/assertions/dom_assertions.rb +39 -0
  10. data/lib/action_controller/assertions/model_assertions.rb +20 -0
  11. data/lib/action_controller/assertions/response_assertions.rb +172 -0
  12. data/lib/action_controller/assertions/routing_assertions.rb +146 -0
  13. data/lib/action_controller/assertions/selector_assertions.rb +491 -0
  14. data/lib/action_controller/assertions/tag_assertions.rb +130 -0
  15. data/lib/action_controller/base.rb +1288 -0
  16. data/lib/action_controller/benchmarking.rb +94 -0
  17. data/lib/action_controller/caching.rb +72 -0
  18. data/lib/action_controller/caching/actions.rb +144 -0
  19. data/lib/action_controller/caching/fragments.rb +138 -0
  20. data/lib/action_controller/caching/pages.rb +154 -0
  21. data/lib/action_controller/caching/sql_cache.rb +18 -0
  22. data/lib/action_controller/caching/sweeping.rb +97 -0
  23. data/lib/action_controller/cgi_ext.rb +16 -0
  24. data/lib/action_controller/cgi_ext/cookie.rb +110 -0
  25. data/lib/action_controller/cgi_ext/query_extension.rb +22 -0
  26. data/lib/action_controller/cgi_ext/session.rb +73 -0
  27. data/lib/action_controller/cgi_ext/stdinput.rb +24 -0
  28. data/lib/action_controller/cgi_process.rb +223 -0
  29. data/lib/action_controller/components.rb +166 -0
  30. data/lib/action_controller/cookies.rb +96 -0
  31. data/lib/action_controller/dispatcher.rb +162 -0
  32. data/lib/action_controller/filters.rb +642 -0
  33. data/lib/action_controller/flash.rb +172 -0
  34. data/lib/action_controller/headers.rb +31 -0
  35. data/lib/action_controller/helpers.rb +221 -0
  36. data/lib/action_controller/http_authentication.rb +124 -0
  37. data/lib/action_controller/integration.rb +634 -0
  38. data/lib/action_controller/layout.rb +309 -0
  39. data/lib/action_controller/mime_responds.rb +173 -0
  40. data/lib/action_controller/mime_type.rb +186 -0
  41. data/lib/action_controller/mime_types.rb +20 -0
  42. data/lib/action_controller/polymorphic_routes.rb +191 -0
  43. data/lib/action_controller/record_identifier.rb +102 -0
  44. data/lib/action_controller/request.rb +764 -0
  45. data/lib/action_controller/request_forgery_protection.rb +140 -0
  46. data/lib/action_controller/request_profiler.rb +169 -0
  47. data/lib/action_controller/rescue.rb +258 -0
  48. data/lib/action_controller/resources.rb +572 -0
  49. data/lib/action_controller/response.rb +76 -0
  50. data/lib/action_controller/routing.rb +387 -0
  51. data/lib/action_controller/routing/builder.rb +203 -0
  52. data/lib/action_controller/routing/optimisations.rb +120 -0
  53. data/lib/action_controller/routing/recognition_optimisation.rb +162 -0
  54. data/lib/action_controller/routing/route.rb +240 -0
  55. data/lib/action_controller/routing/route_set.rb +436 -0
  56. data/lib/action_controller/routing/routing_ext.rb +46 -0
  57. data/lib/action_controller/routing/segments.rb +283 -0
  58. data/lib/action_controller/session/active_record_store.rb +340 -0
  59. data/lib/action_controller/session/cookie_store.rb +166 -0
  60. data/lib/action_controller/session/drb_server.rb +32 -0
  61. data/lib/action_controller/session/drb_store.rb +35 -0
  62. data/lib/action_controller/session/mem_cache_store.rb +98 -0
  63. data/lib/action_controller/session_management.rb +158 -0
  64. data/lib/action_controller/status_codes.rb +88 -0
  65. data/lib/action_controller/streaming.rb +155 -0
  66. data/lib/action_controller/templates/rescues/_request_and_response.erb +24 -0
  67. data/lib/action_controller/templates/rescues/_trace.erb +26 -0
  68. data/lib/action_controller/templates/rescues/diagnostics.erb +11 -0
  69. data/lib/action_controller/templates/rescues/layout.erb +29 -0
  70. data/lib/action_controller/templates/rescues/missing_template.erb +2 -0
  71. data/lib/action_controller/templates/rescues/routing_error.erb +10 -0
  72. data/lib/action_controller/templates/rescues/template_error.erb +21 -0
  73. data/lib/action_controller/templates/rescues/unknown_action.erb +2 -0
  74. data/lib/action_controller/test_case.rb +83 -0
  75. data/lib/action_controller/test_process.rb +526 -0
  76. data/lib/action_controller/url_rewriter.rb +142 -0
  77. data/lib/action_controller/vendor/html-scanner/html/document.rb +68 -0
  78. data/lib/action_controller/vendor/html-scanner/html/node.rb +537 -0
  79. data/lib/action_controller/vendor/html-scanner/html/sanitizer.rb +173 -0
  80. data/lib/action_controller/vendor/html-scanner/html/selector.rb +828 -0
  81. data/lib/action_controller/vendor/html-scanner/html/tokenizer.rb +105 -0
  82. data/lib/action_controller/vendor/html-scanner/html/version.rb +11 -0
  83. data/lib/action_controller/verification.rb +130 -0
  84. data/lib/action_pack.rb +24 -0
  85. data/lib/action_pack/version.rb +9 -0
  86. data/lib/action_view.rb +44 -0
  87. data/lib/action_view/base.rb +335 -0
  88. data/lib/action_view/helpers/active_record_helper.rb +276 -0
  89. data/lib/action_view/helpers/asset_tag_helper.rb +599 -0
  90. data/lib/action_view/helpers/atom_feed_helper.rb +143 -0
  91. data/lib/action_view/helpers/benchmark_helper.rb +33 -0
  92. data/lib/action_view/helpers/cache_helper.rb +40 -0
  93. data/lib/action_view/helpers/capture_helper.rb +161 -0
  94. data/lib/action_view/helpers/date_helper.rb +711 -0
  95. data/lib/action_view/helpers/debug_helper.rb +31 -0
  96. data/lib/action_view/helpers/form_helper.rb +767 -0
  97. data/lib/action_view/helpers/form_options_helper.rb +458 -0
  98. data/lib/action_view/helpers/form_tag_helper.rb +458 -0
  99. data/lib/action_view/helpers/javascript_helper.rb +148 -0
  100. data/lib/action_view/helpers/number_helper.rb +186 -0
  101. data/lib/action_view/helpers/record_identification_helper.rb +20 -0
  102. data/lib/action_view/helpers/record_tag_helper.rb +59 -0
  103. data/lib/action_view/helpers/sanitize_helper.rb +229 -0
  104. data/lib/action_view/helpers/tag_helper.rb +134 -0
  105. data/lib/action_view/helpers/text_helper.rb +507 -0
  106. data/lib/action_view/helpers/url_helper.rb +573 -0
  107. data/lib/action_view/inline_template.rb +20 -0
  108. data/lib/action_view/partial_template.rb +70 -0
  109. data/lib/action_view/partials.rb +158 -0
  110. data/lib/action_view/template.rb +125 -0
  111. data/lib/action_view/template_error.rb +110 -0
  112. data/lib/action_view/template_finder.rb +176 -0
  113. data/lib/action_view/template_handler.rb +34 -0
  114. data/lib/action_view/template_handlers/builder.rb +27 -0
  115. data/lib/action_view/template_handlers/compilable.rb +128 -0
  116. data/lib/action_view/template_handlers/erb.rb +56 -0
  117. data/lib/action_view/test_case.rb +58 -0
  118. data/lib/actionpack.rb +1 -0
  119. data/test/abstract_unit.rb +36 -0
  120. data/test/active_record_unit.rb +105 -0
  121. data/test/activerecord/active_record_store_test.rb +141 -0
  122. data/test/activerecord/render_partial_with_record_identification_test.rb +191 -0
  123. data/test/adv_attr_test.rb +20 -0
  124. data/test/controller/action_pack_assertions_test.rb +543 -0
  125. data/test/controller/addresses_render_test.rb +43 -0
  126. data/test/controller/assert_select_test.rb +331 -0
  127. data/test/controller/base_test.rb +219 -0
  128. data/test/controller/benchmark_test.rb +32 -0
  129. data/test/controller/caching_test.rb +581 -0
  130. data/test/controller/capture_test.rb +89 -0
  131. data/test/controller/cgi_test.rb +116 -0
  132. data/test/controller/components_test.rb +140 -0
  133. data/test/controller/content_type_test.rb +139 -0
  134. data/test/controller/controller_fixtures/app/controllers/admin/user_controller.rb +0 -0
  135. data/test/controller/controller_fixtures/app/controllers/user_controller.rb +0 -0
  136. data/test/controller/controller_fixtures/vendor/plugins/bad_plugin/lib/plugin_controller.rb +0 -0
  137. data/test/controller/cookie_test.rb +146 -0
  138. data/test/controller/custom_handler_test.rb +45 -0
  139. data/test/controller/deprecation/deprecated_base_methods_test.rb +37 -0
  140. data/test/controller/dispatcher_test.rb +105 -0
  141. data/test/controller/fake_controllers.rb +33 -0
  142. data/test/controller/fake_models.rb +11 -0
  143. data/test/controller/filter_params_test.rb +49 -0
  144. data/test/controller/filters_test.rb +881 -0
  145. data/test/controller/flash_test.rb +146 -0
  146. data/test/controller/header_test.rb +14 -0
  147. data/test/controller/helper_test.rb +210 -0
  148. data/test/controller/html-scanner/cdata_node_test.rb +15 -0
  149. data/test/controller/html-scanner/document_test.rb +148 -0
  150. data/test/controller/html-scanner/node_test.rb +89 -0
  151. data/test/controller/html-scanner/sanitizer_test.rb +269 -0
  152. data/test/controller/html-scanner/tag_node_test.rb +238 -0
  153. data/test/controller/html-scanner/text_node_test.rb +50 -0
  154. data/test/controller/html-scanner/tokenizer_test.rb +131 -0
  155. data/test/controller/http_authentication_test.rb +54 -0
  156. data/test/controller/integration_test.rb +252 -0
  157. data/test/controller/integration_upload_test.rb +43 -0
  158. data/test/controller/layout_test.rb +255 -0
  159. data/test/controller/mime_responds_test.rb +514 -0
  160. data/test/controller/mime_type_test.rb +84 -0
  161. data/test/controller/new_render_test.rb +843 -0
  162. data/test/controller/polymorphic_routes_test.rb +174 -0
  163. data/test/controller/record_identifier_test.rb +139 -0
  164. data/test/controller/redirect_test.rb +289 -0
  165. data/test/controller/render_test.rb +484 -0
  166. data/test/controller/request_forgery_protection_test.rb +305 -0
  167. data/test/controller/request_test.rb +928 -0
  168. data/test/controller/rescue_test.rb +517 -0
  169. data/test/controller/resources_test.rb +873 -0
  170. data/test/controller/routing_test.rb +2464 -0
  171. data/test/controller/selector_test.rb +628 -0
  172. data/test/controller/send_file_test.rb +138 -0
  173. data/test/controller/session/cookie_store_test.rb +258 -0
  174. data/test/controller/session/mem_cache_store_test.rb +181 -0
  175. data/test/controller/session_fixation_test.rb +89 -0
  176. data/test/controller/session_management_test.rb +178 -0
  177. data/test/controller/test_test.rb +695 -0
  178. data/test/controller/url_rewriter_test.rb +310 -0
  179. data/test/controller/verification_test.rb +270 -0
  180. data/test/controller/view_paths_test.rb +140 -0
  181. data/test/controller/webservice_test.rb +229 -0
  182. data/test/fixtures/addresses/list.erb +1 -0
  183. data/test/fixtures/bad_customers/_bad_customer.html.erb +1 -0
  184. data/test/fixtures/companies.yml +24 -0
  185. data/test/fixtures/company.rb +10 -0
  186. data/test/fixtures/content_type/render_default_content_types_for_respond_to.rhtml +1 -0
  187. data/test/fixtures/content_type/render_default_for_js.js.erb +1 -0
  188. data/test/fixtures/content_type/render_default_for_rhtml.rhtml +1 -0
  189. data/test/fixtures/content_type/render_default_for_rxml.rxml +1 -0
  190. data/test/fixtures/customers/_customer.html.erb +1 -0
  191. data/test/fixtures/db_definitions/sqlite.sql +49 -0
  192. data/test/fixtures/developer.rb +9 -0
  193. data/test/fixtures/developers.yml +21 -0
  194. data/test/fixtures/developers_projects.yml +13 -0
  195. data/test/fixtures/fun/games/hello_world.erb +1 -0
  196. data/test/fixtures/functional_caching/_partial.erb +3 -0
  197. data/test/fixtures/functional_caching/fragment_cached.html.erb +2 -0
  198. data/test/fixtures/functional_caching/html_fragment_cached_with_partial.html.erb +1 -0
  199. data/test/fixtures/functional_caching/js_fragment_cached_with_partial.js.rjs +1 -0
  200. data/test/fixtures/good_customers/_good_customer.html.erb +1 -0
  201. data/test/fixtures/helpers/abc_helper.rb +5 -0
  202. data/test/fixtures/helpers/fun/games_helper.rb +3 -0
  203. data/test/fixtures/helpers/fun/pdf_helper.rb +3 -0
  204. data/test/fixtures/layout_tests/alt/hello.rhtml +1 -0
  205. data/test/fixtures/layout_tests/layouts/controller_name_space/nested.rhtml +1 -0
  206. data/test/fixtures/layout_tests/layouts/item.rhtml +1 -0
  207. data/test/fixtures/layout_tests/layouts/layout_test.rhtml +1 -0
  208. data/test/fixtures/layout_tests/layouts/multiple_extensions.html.erb +1 -0
  209. data/test/fixtures/layout_tests/layouts/third_party_template_library.mab +1 -0
  210. data/test/fixtures/layout_tests/views/hello.rhtml +1 -0
  211. data/test/fixtures/layouts/block_with_layout.erb +3 -0
  212. data/test/fixtures/layouts/builder.builder +3 -0
  213. data/test/fixtures/layouts/partial_with_layout.erb +3 -0
  214. data/test/fixtures/layouts/standard.erb +1 -0
  215. data/test/fixtures/layouts/talk_from_action.erb +2 -0
  216. data/test/fixtures/layouts/yield.erb +2 -0
  217. data/test/fixtures/mascot.rb +3 -0
  218. data/test/fixtures/mascots.yml +4 -0
  219. data/test/fixtures/mascots/_mascot.html.erb +1 -0
  220. data/test/fixtures/multipart/binary_file +0 -0
  221. data/test/fixtures/multipart/boundary_problem_file +10 -0
  222. data/test/fixtures/multipart/bracketed_param +5 -0
  223. data/test/fixtures/multipart/large_text_file +10 -0
  224. data/test/fixtures/multipart/mixed_files +0 -0
  225. data/test/fixtures/multipart/mona_lisa.jpg +0 -0
  226. data/test/fixtures/multipart/single_parameter +5 -0
  227. data/test/fixtures/multipart/text_file +10 -0
  228. data/test/fixtures/override/test/hello_world.erb +1 -0
  229. data/test/fixtures/override2/layouts/test/sub.erb +1 -0
  230. data/test/fixtures/post_test/layouts/post.html.erb +1 -0
  231. data/test/fixtures/post_test/layouts/super_post.iphone.erb +1 -0
  232. data/test/fixtures/post_test/post/index.html.erb +1 -0
  233. data/test/fixtures/post_test/post/index.iphone.erb +1 -0
  234. data/test/fixtures/post_test/super_post/index.html.erb +1 -0
  235. data/test/fixtures/post_test/super_post/index.iphone.erb +1 -0
  236. data/test/fixtures/project.rb +3 -0
  237. data/test/fixtures/projects.yml +7 -0
  238. data/test/fixtures/public/404.html +1 -0
  239. data/test/fixtures/public/500.html +1 -0
  240. data/test/fixtures/public/images/rails.png +0 -0
  241. data/test/fixtures/public/javascripts/application.js +1 -0
  242. data/test/fixtures/public/javascripts/bank.js +1 -0
  243. data/test/fixtures/public/javascripts/robber.js +1 -0
  244. data/test/fixtures/public/javascripts/version.1.0.js +1 -0
  245. data/test/fixtures/public/stylesheets/bank.css +1 -0
  246. data/test/fixtures/public/stylesheets/robber.css +1 -0
  247. data/test/fixtures/public/stylesheets/version.1.0.css +1 -0
  248. data/test/fixtures/replies.yml +15 -0
  249. data/test/fixtures/reply.rb +7 -0
  250. data/test/fixtures/respond_to/all_types_with_layout.html.erb +1 -0
  251. data/test/fixtures/respond_to/custom_constant_handling_without_block.mobile.erb +1 -0
  252. data/test/fixtures/respond_to/iphone_with_html_response_type.html.erb +1 -0
  253. data/test/fixtures/respond_to/iphone_with_html_response_type.iphone.erb +1 -0
  254. data/test/fixtures/respond_to/layouts/missing.html.erb +1 -0
  255. data/test/fixtures/respond_to/layouts/standard.html.erb +1 -0
  256. data/test/fixtures/respond_to/layouts/standard.iphone.erb +1 -0
  257. data/test/fixtures/respond_to/using_defaults.html.erb +1 -0
  258. data/test/fixtures/respond_to/using_defaults.js.rjs +1 -0
  259. data/test/fixtures/respond_to/using_defaults.xml.builder +1 -0
  260. data/test/fixtures/respond_to/using_defaults_with_type_list.html.erb +1 -0
  261. data/test/fixtures/respond_to/using_defaults_with_type_list.js.rjs +1 -0
  262. data/test/fixtures/respond_to/using_defaults_with_type_list.xml.builder +1 -0
  263. data/test/fixtures/scope/test/modgreet.erb +1 -0
  264. data/test/fixtures/shared.html.erb +1 -0
  265. data/test/fixtures/symlink_parent/symlinked_layout.erb +5 -0
  266. data/test/fixtures/test/_customer.erb +1 -0
  267. data/test/fixtures/test/_customer_counter.erb +1 -0
  268. data/test/fixtures/test/_customer_greeting.erb +1 -0
  269. data/test/fixtures/test/_form.erb +1 -0
  270. data/test/fixtures/test/_hash_greeting.erb +1 -0
  271. data/test/fixtures/test/_hash_object.erb +2 -0
  272. data/test/fixtures/test/_hello.builder +1 -0
  273. data/test/fixtures/test/_labelling_form.erb +1 -0
  274. data/test/fixtures/test/_layout_for_partial.html.erb +3 -0
  275. data/test/fixtures/test/_partial.erb +1 -0
  276. data/test/fixtures/test/_partial.html.erb +1 -0
  277. data/test/fixtures/test/_partial.js.erb +1 -0
  278. data/test/fixtures/test/_partial_for_use_in_layout.html.erb +1 -0
  279. data/test/fixtures/test/_partial_only.erb +1 -0
  280. data/test/fixtures/test/_person.erb +2 -0
  281. data/test/fixtures/test/_raise.html.erb +1 -0
  282. data/test/fixtures/test/action_talk_to_layout.erb +2 -0
  283. data/test/fixtures/test/block_content_for.erb +2 -0
  284. data/test/fixtures/test/calling_partial_with_layout.html.erb +1 -0
  285. data/test/fixtures/test/capturing.erb +4 -0
  286. data/test/fixtures/test/content_for.erb +2 -0
  287. data/test/fixtures/test/content_for_concatenated.erb +3 -0
  288. data/test/fixtures/test/content_for_with_parameter.erb +2 -0
  289. data/test/fixtures/test/delete_with_js.rjs +2 -0
  290. data/test/fixtures/test/dot.directory/render_file_with_ivar.erb +1 -0
  291. data/test/fixtures/test/enum_rjs_test.rjs +6 -0
  292. data/test/fixtures/test/erb_content_for.erb +2 -0
  293. data/test/fixtures/test/formatted_html_erb.html.erb +1 -0
  294. data/test/fixtures/test/formatted_xml_erb.builder +1 -0
  295. data/test/fixtures/test/formatted_xml_erb.html.erb +1 -0
  296. data/test/fixtures/test/formatted_xml_erb.xml.erb +1 -0
  297. data/test/fixtures/test/greeting.erb +1 -0
  298. data/test/fixtures/test/greeting.js.rjs +1 -0
  299. data/test/fixtures/test/hello.builder +4 -0
  300. data/test/fixtures/test/hello_world.erb +1 -0
  301. data/test/fixtures/test/hello_world_container.builder +3 -0
  302. data/test/fixtures/test/hello_world_from_rxml.builder +4 -0
  303. data/test/fixtures/test/hello_world_with_layout_false.erb +1 -0
  304. data/test/fixtures/test/hello_xml_world.builder +11 -0
  305. data/test/fixtures/test/list.erb +1 -0
  306. data/test/fixtures/test/non_erb_block_content_for.builder +4 -0
  307. data/test/fixtures/test/potential_conflicts.erb +4 -0
  308. data/test/fixtures/test/render_file_from_template.html.erb +1 -0
  309. data/test/fixtures/test/render_file_with_ivar.erb +1 -0
  310. data/test/fixtures/test/render_file_with_locals.erb +1 -0
  311. data/test/fixtures/test/render_to_string_test.erb +1 -0
  312. data/test/fixtures/test/update_element_with_capture.erb +9 -0
  313. data/test/fixtures/test/using_layout_around_block.html.erb +1 -0
  314. data/test/fixtures/topic.rb +3 -0
  315. data/test/fixtures/topics.yml +22 -0
  316. data/test/fixtures/topics/_topic.html.erb +1 -0
  317. data/test/template/active_record_helper_test.rb +268 -0
  318. data/test/template/asset_tag_helper_test.rb +514 -0
  319. data/test/template/atom_feed_helper_test.rb +179 -0
  320. data/test/template/benchmark_helper_test.rb +60 -0
  321. data/test/template/date_helper_test.rb +1791 -0
  322. data/test/template/deprecated_erb_variable_test.rb +9 -0
  323. data/test/template/erb_util_test.rb +24 -0
  324. data/test/template/form_helper_test.rb +885 -0
  325. data/test/template/form_options_helper_test.rb +1333 -0
  326. data/test/template/form_tag_helper_test.rb +272 -0
  327. data/test/template/javascript_helper_test.rb +73 -0
  328. data/test/template/number_helper_test.rb +97 -0
  329. data/test/template/record_tag_helper_test.rb +54 -0
  330. data/test/template/sanitize_helper_test.rb +48 -0
  331. data/test/template/tag_helper_test.rb +77 -0
  332. data/test/template/template_finder_test.rb +73 -0
  333. data/test/template/template_object_test.rb +95 -0
  334. data/test/template/test_test.rb +56 -0
  335. data/test/template/text_helper_test.rb +367 -0
  336. data/test/template/url_helper_test.rb +544 -0
  337. data/test/testing_sandbox.rb +15 -0
  338. metadata +469 -0
@@ -0,0 +1,146 @@
1
+ require 'abstract_unit'
2
+
3
+ class FlashTest < Test::Unit::TestCase
4
+ class TestController < ActionController::Base
5
+ def set_flash
6
+ flash["that"] = "hello"
7
+ render :inline => "hello"
8
+ end
9
+
10
+ def set_flash_now
11
+ flash.now["that"] = "hello"
12
+ flash.now["foo"] ||= "bar"
13
+ flash.now["foo"] ||= "err"
14
+ @flashy = flash.now["that"]
15
+ @flash_copy = {}.update flash
16
+ render :inline => "hello"
17
+ end
18
+
19
+ def attempt_to_use_flash_now
20
+ @flash_copy = {}.update flash
21
+ @flashy = flash["that"]
22
+ render :inline => "hello"
23
+ end
24
+
25
+ def use_flash
26
+ @flash_copy = {}.update flash
27
+ @flashy = flash["that"]
28
+ render :inline => "hello"
29
+ end
30
+
31
+ def use_flash_and_keep_it
32
+ @flash_copy = {}.update flash
33
+ @flashy = flash["that"]
34
+ flash.keep
35
+ render :inline => "hello"
36
+ end
37
+
38
+ def use_flash_and_update_it
39
+ flash.update("this" => "hello again")
40
+ @flash_copy = {}.update flash
41
+ render :inline => "hello"
42
+ end
43
+
44
+ def use_flash_after_reset_session
45
+ flash["that"] = "hello"
46
+ @flashy_that = flash["that"]
47
+ reset_session
48
+ @flashy_that_reset = flash["that"]
49
+ flash["this"] = "good-bye"
50
+ @flashy_this = flash["this"]
51
+ render :inline => "hello"
52
+ end
53
+
54
+ def rescue_action(e)
55
+ raise unless ActionView::MissingTemplate === e
56
+ end
57
+
58
+ # methods for test_sweep_after_halted_filter_chain
59
+ before_filter :halt_and_redir, :only => "filter_halting_action"
60
+
61
+ def std_action
62
+ @flash_copy = {}.update(flash)
63
+ end
64
+
65
+ def filter_halting_action
66
+ @flash_copy = {}.update(flash)
67
+ end
68
+
69
+ def halt_and_redir
70
+ flash["foo"] = "bar"
71
+ redirect_to :action => "std_action"
72
+ @flash_copy = {}.update(flash)
73
+ end
74
+ end
75
+
76
+ def setup
77
+ @request = ActionController::TestRequest.new
78
+ @response = ActionController::TestResponse.new
79
+ @controller = TestController.new
80
+ end
81
+
82
+ def test_flash
83
+ get :set_flash
84
+
85
+ get :use_flash
86
+ assert_equal "hello", @response.template.assigns["flash_copy"]["that"]
87
+ assert_equal "hello", @response.template.assigns["flashy"]
88
+
89
+ get :use_flash
90
+ assert_nil @response.template.assigns["flash_copy"]["that"], "On second flash"
91
+ end
92
+
93
+ def test_keep_flash
94
+ get :set_flash
95
+
96
+ get :use_flash_and_keep_it
97
+ assert_equal "hello", @response.template.assigns["flash_copy"]["that"]
98
+ assert_equal "hello", @response.template.assigns["flashy"]
99
+
100
+ get :use_flash
101
+ assert_equal "hello", @response.template.assigns["flash_copy"]["that"], "On second flash"
102
+
103
+ get :use_flash
104
+ assert_nil @response.template.assigns["flash_copy"]["that"], "On third flash"
105
+ end
106
+
107
+ def test_flash_now
108
+ get :set_flash_now
109
+ assert_equal "hello", @response.template.assigns["flash_copy"]["that"]
110
+ assert_equal "bar" , @response.template.assigns["flash_copy"]["foo"]
111
+ assert_equal "hello", @response.template.assigns["flashy"]
112
+
113
+ get :attempt_to_use_flash_now
114
+ assert_nil @response.template.assigns["flash_copy"]["that"]
115
+ assert_nil @response.template.assigns["flash_copy"]["foo"]
116
+ assert_nil @response.template.assigns["flashy"]
117
+ end
118
+
119
+ def test_update_flash
120
+ get :set_flash
121
+ get :use_flash_and_update_it
122
+ assert_equal "hello", @response.template.assigns["flash_copy"]["that"]
123
+ assert_equal "hello again", @response.template.assigns["flash_copy"]["this"]
124
+ get :use_flash
125
+ assert_nil @response.template.assigns["flash_copy"]["that"], "On second flash"
126
+ assert_equal "hello again", @response.template.assigns["flash_copy"]["this"], "On second flash"
127
+ end
128
+
129
+ def test_flash_after_reset_session
130
+ get :use_flash_after_reset_session
131
+ assert_equal "hello", @response.template.assigns["flashy_that"]
132
+ assert_equal "good-bye", @response.template.assigns["flashy_this"]
133
+ assert_nil @response.template.assigns["flashy_that_reset"]
134
+ end
135
+
136
+ def test_sweep_after_halted_filter_chain
137
+ get :std_action
138
+ assert_nil @response.template.assigns["flash_copy"]["foo"]
139
+ get :filter_halting_action
140
+ assert_equal "bar", @response.template.assigns["flash_copy"]["foo"]
141
+ get :std_action # follow redirection
142
+ assert_equal "bar", @response.template.assigns["flash_copy"]["foo"]
143
+ get :std_action
144
+ assert_nil @response.template.assigns["flash_copy"]["foo"]
145
+ end
146
+ end
@@ -0,0 +1,14 @@
1
+ require 'abstract_unit'
2
+
3
+ class HeaderTest < Test::Unit::TestCase
4
+ def setup
5
+ @headers = ActionController::Http::Headers.new("HTTP_CONTENT_TYPE"=>"text/plain")
6
+ end
7
+
8
+ def test_content_type_works
9
+ assert_equal "text/plain", @headers["Content-Type"]
10
+ assert_equal "text/plain", @headers["content-type"]
11
+ assert_equal "text/plain", @headers["CONTENT_TYPE"]
12
+ assert_equal "text/plain", @headers["HTTP_CONTENT_TYPE"]
13
+ end
14
+ end
@@ -0,0 +1,210 @@
1
+ require 'abstract_unit'
2
+
3
+ ActionController::Helpers::HELPERS_DIR.replace File.dirname(__FILE__) + '/../fixtures/helpers'
4
+
5
+ class TestController < ActionController::Base
6
+ attr_accessor :delegate_attr
7
+ def delegate_method() end
8
+ def rescue_action(e) raise end
9
+ end
10
+
11
+ module Fun
12
+ class GamesController < ActionController::Base
13
+ def render_hello_world
14
+ render :inline => "hello: <%= stratego %>"
15
+ end
16
+
17
+ def rescue_action(e) raise end
18
+ end
19
+
20
+ class PdfController < ActionController::Base
21
+ def test
22
+ render :inline => "test: <%= foobar %>"
23
+ end
24
+
25
+ def rescue_action(e) raise end
26
+ end
27
+ end
28
+
29
+ class ApplicationController < ActionController::Base
30
+ helper :all
31
+ end
32
+
33
+ module LocalAbcHelper
34
+ def a() end
35
+ def b() end
36
+ def c() end
37
+ end
38
+
39
+ class HelperTest < Test::Unit::TestCase
40
+ def setup
41
+ # Increment symbol counter.
42
+ @symbol = (@@counter ||= 'A0').succ!.dup
43
+
44
+ # Generate new controller class.
45
+ controller_class_name = "Helper#{@symbol}Controller"
46
+ eval("class #{controller_class_name} < TestController; end")
47
+ @controller_class = self.class.const_get(controller_class_name)
48
+
49
+ # Set default test helper.
50
+ self.test_helper = LocalAbcHelper
51
+ end
52
+
53
+ def test_deprecated_helper
54
+ assert_equal expected_helper_methods, missing_methods
55
+ assert_nothing_raised { @controller_class.helper TestHelper }
56
+ assert_equal [], missing_methods
57
+ end
58
+
59
+ def test_declare_helper
60
+ require 'abc_helper'
61
+ self.test_helper = AbcHelper
62
+ assert_equal expected_helper_methods, missing_methods
63
+ assert_nothing_raised { @controller_class.helper :abc }
64
+ assert_equal [], missing_methods
65
+ end
66
+
67
+ def test_declare_missing_helper
68
+ assert_equal expected_helper_methods, missing_methods
69
+ assert_raise(MissingSourceFile) { @controller_class.helper :missing }
70
+ end
71
+
72
+ def test_declare_missing_file_from_helper
73
+ require 'broken_helper'
74
+ rescue LoadError => e
75
+ assert_nil(/\bbroken_helper\b/.match(e.to_s)[1])
76
+ end
77
+
78
+ def test_helper_block
79
+ assert_nothing_raised {
80
+ @controller_class.helper { def block_helper_method; end }
81
+ }
82
+ assert master_helper_methods.include?('block_helper_method')
83
+ end
84
+
85
+ def test_helper_block_include
86
+ assert_equal expected_helper_methods, missing_methods
87
+ assert_nothing_raised {
88
+ @controller_class.helper { include HelperTest::TestHelper }
89
+ }
90
+ assert [], missing_methods
91
+ end
92
+
93
+ def test_helper_method
94
+ assert_nothing_raised { @controller_class.helper_method :delegate_method }
95
+ assert master_helper_methods.include?('delegate_method')
96
+ end
97
+
98
+ def test_helper_attr
99
+ assert_nothing_raised { @controller_class.helper_attr :delegate_attr }
100
+ assert master_helper_methods.include?('delegate_attr')
101
+ assert master_helper_methods.include?('delegate_attr=')
102
+ end
103
+
104
+ def test_helper_for_nested_controller
105
+ request = ActionController::TestRequest.new
106
+ response = ActionController::TestResponse.new
107
+ request.action = 'render_hello_world'
108
+
109
+ assert_equal 'hello: Iz guuut!', Fun::GamesController.process(request, response).body
110
+ end
111
+
112
+ def test_helper_for_acronym_controller
113
+ request = ActionController::TestRequest.new
114
+ response = ActionController::TestResponse.new
115
+ request.action = 'test'
116
+
117
+ assert_equal 'test: baz', Fun::PdfController.process(request, response).body
118
+ end
119
+
120
+ def test_all_helpers
121
+ methods = ApplicationController.master_helper_module.instance_methods.map(&:to_s)
122
+
123
+ # abc_helper.rb
124
+ assert methods.include?('bare_a')
125
+
126
+ # fun/games_helper.rb
127
+ assert methods.include?('stratego')
128
+
129
+ # fun/pdf_helper.rb
130
+ assert methods.include?('foobar')
131
+ end
132
+
133
+ def test_helper_proxy
134
+ methods = ApplicationController.helpers.methods.map(&:to_s)
135
+
136
+ # ActionView
137
+ assert methods.include?('pluralize')
138
+
139
+ # abc_helper.rb
140
+ assert methods.include?('bare_a')
141
+
142
+ # fun/games_helper.rb
143
+ assert methods.include?('stratego')
144
+
145
+ # fun/pdf_helper.rb
146
+ assert methods.include?('foobar')
147
+ end
148
+
149
+ private
150
+ def expected_helper_methods
151
+ TestHelper.instance_methods.map(&:to_s)
152
+ end
153
+
154
+ def master_helper_methods
155
+ @controller_class.master_helper_module.instance_methods.map(&:to_s)
156
+ end
157
+
158
+ def missing_methods
159
+ expected_helper_methods - master_helper_methods
160
+ end
161
+
162
+ def test_helper=(helper_module)
163
+ silence_warnings { self.class.const_set('TestHelper', helper_module) }
164
+ end
165
+ end
166
+
167
+
168
+ class IsolatedHelpersTest < Test::Unit::TestCase
169
+ class A < ActionController::Base
170
+ def index
171
+ render :inline => '<%= shout %>'
172
+ end
173
+
174
+ def rescue_action(e) raise end
175
+ end
176
+
177
+ class B < A
178
+ helper { def shout; 'B' end }
179
+
180
+ def index
181
+ render :inline => '<%= shout %>'
182
+ end
183
+ end
184
+
185
+ class C < A
186
+ helper { def shout; 'C' end }
187
+
188
+ def index
189
+ render :inline => '<%= shout %>'
190
+ end
191
+ end
192
+
193
+ def setup
194
+ @request = ActionController::TestRequest.new
195
+ @response = ActionController::TestResponse.new
196
+ @request.action = 'index'
197
+ end
198
+
199
+ def test_helper_in_a
200
+ assert_raise(NameError) { A.process(@request, @response) }
201
+ end
202
+
203
+ def test_helper_in_b
204
+ assert_equal 'B', B.process(@request, @response).body
205
+ end
206
+
207
+ def test_helper_in_c
208
+ assert_equal 'C', C.process(@request, @response).body
209
+ end
210
+ end
@@ -0,0 +1,15 @@
1
+ require 'abstract_unit'
2
+
3
+ class CDATANodeTest < Test::Unit::TestCase
4
+ def setup
5
+ @node = HTML::CDATA.new(nil, 0, 0, "<p>howdy</p>")
6
+ end
7
+
8
+ def test_to_s
9
+ assert_equal "<![CDATA[<p>howdy</p>]]>", @node.to_s
10
+ end
11
+
12
+ def test_content
13
+ assert_equal "<p>howdy</p>", @node.content
14
+ end
15
+ end
@@ -0,0 +1,148 @@
1
+ require 'abstract_unit'
2
+
3
+ class DocumentTest < Test::Unit::TestCase
4
+ def test_handle_doctype
5
+ doc = nil
6
+ assert_nothing_raised do
7
+ doc = HTML::Document.new <<-HTML.strip
8
+ <!DOCTYPE "blah" "blah" "blah">
9
+ <html>
10
+ </html>
11
+ HTML
12
+ end
13
+ assert_equal 3, doc.root.children.length
14
+ assert_equal %{<!DOCTYPE "blah" "blah" "blah">}, doc.root.children[0].content
15
+ assert_match %r{\s+}m, doc.root.children[1].content
16
+ assert_equal "html", doc.root.children[2].name
17
+ end
18
+
19
+ def test_find_img
20
+ doc = HTML::Document.new <<-HTML.strip
21
+ <html>
22
+ <body>
23
+ <p><img src="hello.gif"></p>
24
+ </body>
25
+ </html>
26
+ HTML
27
+ assert doc.find(:tag=>"img", :attributes=>{"src"=>"hello.gif"})
28
+ end
29
+
30
+ def test_find_all
31
+ doc = HTML::Document.new <<-HTML.strip
32
+ <html>
33
+ <body>
34
+ <p class="test"><img src="hello.gif"></p>
35
+ <div class="foo">
36
+ <p class="test">something</p>
37
+ <p>here is <em class="test">more</em></p>
38
+ </div>
39
+ </body>
40
+ </html>
41
+ HTML
42
+ all = doc.find_all :attributes => { :class => "test" }
43
+ assert_equal 3, all.length
44
+ assert_equal [ "p", "p", "em" ], all.map { |n| n.name }
45
+ end
46
+
47
+ def test_find_with_text
48
+ doc = HTML::Document.new <<-HTML.strip
49
+ <html>
50
+ <body>
51
+ <p>Some text</p>
52
+ </body>
53
+ </html>
54
+ HTML
55
+ assert doc.find(:content => "Some text")
56
+ assert doc.find(:tag => "p", :child => { :content => "Some text" })
57
+ assert doc.find(:tag => "p", :child => "Some text")
58
+ assert doc.find(:tag => "p", :content => "Some text")
59
+ end
60
+
61
+ def test_parse_xml
62
+ assert_nothing_raised { HTML::Document.new("<tags><tag/></tags>", true, true) }
63
+ assert_nothing_raised { HTML::Document.new("<outer><link>something</link></outer>", true, true) }
64
+ end
65
+
66
+ def test_parse_document
67
+ doc = HTML::Document.new(<<-HTML)
68
+ <div>
69
+ <h2>blah</h2>
70
+ <table>
71
+ </table>
72
+ </div>
73
+ HTML
74
+ assert_not_nil doc.find(:tag => "div", :children => { :count => 1, :only => { :tag => "table" } })
75
+ end
76
+
77
+ def test_tag_nesting_nothing_to_s
78
+ doc = HTML::Document.new("<tag></tag>")
79
+ assert_equal "<tag></tag>", doc.root.to_s
80
+ end
81
+
82
+ def test_tag_nesting_space_to_s
83
+ doc = HTML::Document.new("<tag> </tag>")
84
+ assert_equal "<tag> </tag>", doc.root.to_s
85
+ end
86
+
87
+ def test_tag_nesting_text_to_s
88
+ doc = HTML::Document.new("<tag>text</tag>")
89
+ assert_equal "<tag>text</tag>", doc.root.to_s
90
+ end
91
+
92
+ def test_tag_nesting_tag_to_s
93
+ doc = HTML::Document.new("<tag><nested /></tag>")
94
+ assert_equal "<tag><nested /></tag>", doc.root.to_s
95
+ end
96
+
97
+ def test_parse_cdata
98
+ doc = HTML::Document.new(<<-HTML)
99
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
100
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
101
+ <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
102
+ <head>
103
+ <title><![CDATA[<br>]]></title>
104
+ </head>
105
+ <body>
106
+ <p>this document has &lt;br&gt; for a title</p>
107
+ </body>
108
+ </html>
109
+ HTML
110
+
111
+ assert_nil doc.find(:tag => "title", :descendant => { :tag => "br" })
112
+ assert doc.find(:tag => "title", :child => "<br>")
113
+ end
114
+
115
+ def test_find_empty_tag
116
+ doc = HTML::Document.new("<div id='map'></div>")
117
+ assert_nil doc.find(:tag => "div", :attributes => { :id => "map" }, :content => /./)
118
+ assert doc.find(:tag => "div", :attributes => { :id => "map" }, :content => /\A\Z/)
119
+ assert doc.find(:tag => "div", :attributes => { :id => "map" }, :content => /^$/)
120
+ assert doc.find(:tag => "div", :attributes => { :id => "map" }, :content => "")
121
+ assert doc.find(:tag => "div", :attributes => { :id => "map" }, :content => nil)
122
+ end
123
+
124
+ def test_parse_invalid_document
125
+ assert_nothing_raised do
126
+ doc = HTML::Document.new("<html>
127
+ <table>
128
+ <tr>
129
+ <td style=\"color: #FFFFFF; height: 17px; onclick=\"window.location.href='http://www.rmeinc.com/about_rme.aspx'\" style=\"cursor:pointer; height: 17px;\"; nowrap onclick=\"window.location.href='http://www.rmeinc.com/about_rme.aspx'\" onmouseout=\"this.bgColor='#0066cc'; this.style.color='#FFFFFF'\" onmouseover=\"this.bgColor='#ffffff'; this.style.color='#0033cc'\">About Us</td>
130
+ </tr>
131
+ </table>
132
+ </html>")
133
+ end
134
+ end
135
+
136
+ def test_invalid_document_raises_exception_when_strict
137
+ assert_raises RuntimeError do
138
+ doc = HTML::Document.new("<html>
139
+ <table>
140
+ <tr>
141
+ <td style=\"color: #FFFFFF; height: 17px; onclick=\"window.location.href='http://www.rmeinc.com/about_rme.aspx'\" style=\"cursor:pointer; height: 17px;\"; nowrap onclick=\"window.location.href='http://www.rmeinc.com/about_rme.aspx'\" onmouseout=\"this.bgColor='#0066cc'; this.style.color='#FFFFFF'\" onmouseover=\"this.bgColor='#ffffff'; this.style.color='#0033cc'\">About Us</td>
142
+ </tr>
143
+ </table>
144
+ </html>", true)
145
+ end
146
+ end
147
+
148
+ end