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,43 @@
1
+ require 'abstract_unit'
2
+
3
+ class Address
4
+
5
+ def Address.count(conditions = nil, join = nil)
6
+ nil
7
+ end
8
+
9
+ def Address.find_all(arg1, arg2, arg3, arg4)
10
+ []
11
+ end
12
+
13
+ def self.find(*args)
14
+ []
15
+ end
16
+ end
17
+
18
+ class AddressesTestController < ActionController::Base
19
+ def self.controller_name; "addresses"; end
20
+ def self.controller_path; "addresses"; end
21
+ end
22
+
23
+ AddressesTestController.view_paths = [ File.dirname(__FILE__) + "/../fixtures/" ]
24
+
25
+ class AddressesTest < Test::Unit::TestCase
26
+ def setup
27
+ @controller = AddressesTestController.new
28
+
29
+ # enable a logger so that (e.g.) the benchmarking stuff runs, so we can get
30
+ # a more accurate simulation of what happens in "real life".
31
+ @controller.logger = Logger.new(nil)
32
+
33
+ @request = ActionController::TestRequest.new
34
+ @response = ActionController::TestResponse.new
35
+
36
+ @request.host = "www.nextangle.com"
37
+ end
38
+
39
+ def test_list
40
+ get :list
41
+ assert_equal "We only need to get this far!", @response.body.chomp
42
+ end
43
+ end
@@ -0,0 +1,331 @@
1
+ #--
2
+ # Copyright (c) 2006 Assaf Arkin (http://labnotes.org)
3
+ # Under MIT and/or CC By license.
4
+ #++
5
+
6
+ require 'abstract_unit'
7
+ require 'controller/fake_controllers'
8
+
9
+
10
+ unless defined?(ActionMailer)
11
+ begin
12
+ $:.unshift(File.dirname(__FILE__) + "/../../../actionmailer/lib")
13
+ require 'action_mailer'
14
+ rescue LoadError
15
+ require 'rubygems'
16
+ gem 'actionmailer'
17
+ end
18
+ end
19
+
20
+ class AssertSelectTest < Test::Unit::TestCase
21
+ class AssertSelectController < ActionController::Base
22
+ def response_with=(content)
23
+ @content = content
24
+ end
25
+
26
+ def response_with(&block)
27
+ @update = block
28
+ end
29
+
30
+ def html()
31
+ render :text=>@content, :layout=>false, :content_type=>Mime::HTML
32
+ @content = nil
33
+ end
34
+
35
+ def xml()
36
+ render :text=>@content, :layout=>false, :content_type=>Mime::XML
37
+ @content = nil
38
+ end
39
+
40
+ def rescue_action(e)
41
+ raise e
42
+ end
43
+ end
44
+
45
+ class AssertSelectMailer < ActionMailer::Base
46
+ def test(html)
47
+ recipients "test <test@test.host>"
48
+ from "test@test.host"
49
+ subject "Test e-mail"
50
+ part :content_type=>"text/html", :body=>html
51
+ end
52
+ end
53
+
54
+ AssertionFailedError = Test::Unit::AssertionFailedError
55
+
56
+ def setup
57
+ @controller = AssertSelectController.new
58
+ @request = ActionController::TestRequest.new
59
+ @response = ActionController::TestResponse.new
60
+ ActionMailer::Base.delivery_method = :test
61
+ ActionMailer::Base.perform_deliveries = true
62
+ ActionMailer::Base.deliveries = []
63
+ end
64
+
65
+
66
+ def teardown
67
+ ActionMailer::Base.deliveries.clear
68
+ end
69
+
70
+ def assert_failure(message, &block)
71
+ e = assert_raises(AssertionFailedError, &block)
72
+ assert_match(message, e.message) if Regexp === message
73
+ assert_equal(message, e.message) if String === message
74
+ end
75
+
76
+ #
77
+ # Test assert select.
78
+ #
79
+
80
+ def test_assert_select
81
+ render_html %Q{<div id="1"></div><div id="2"></div>}
82
+ assert_select "div", 2
83
+ assert_failure(/Expected at least 3 elements matching \"div\", found 2/) { assert_select "div", 3 }
84
+ assert_failure(/Expected at least 1 element matching \"p\", found 0/) { assert_select "p" }
85
+ end
86
+
87
+
88
+ def test_equality_true_false
89
+ render_html %Q{<div id="1"></div><div id="2"></div>}
90
+ assert_nothing_raised { assert_select "div" }
91
+ assert_raises(AssertionFailedError) { assert_select "p" }
92
+ assert_nothing_raised { assert_select "div", true }
93
+ assert_raises(AssertionFailedError) { assert_select "p", true }
94
+ assert_raises(AssertionFailedError) { assert_select "div", false }
95
+ assert_nothing_raised { assert_select "p", false }
96
+ end
97
+
98
+
99
+ def test_equality_string_and_regexp
100
+ render_html %Q{<div id="1">foo</div><div id="2">foo</div>}
101
+ assert_nothing_raised { assert_select "div", "foo" }
102
+ assert_raises(AssertionFailedError) { assert_select "div", "bar" }
103
+ assert_nothing_raised { assert_select "div", :text=>"foo" }
104
+ assert_raises(AssertionFailedError) { assert_select "div", :text=>"bar" }
105
+ assert_nothing_raised { assert_select "div", /(foo|bar)/ }
106
+ assert_raises(AssertionFailedError) { assert_select "div", /foobar/ }
107
+ assert_nothing_raised { assert_select "div", :text=>/(foo|bar)/ }
108
+ assert_raises(AssertionFailedError) { assert_select "div", :text=>/foobar/ }
109
+ assert_raises(AssertionFailedError) { assert_select "p", :text=>/foobar/ }
110
+ end
111
+
112
+
113
+ def test_equality_of_html
114
+ render_html %Q{<p>\n<em>"This is <strong>not</strong> a big problem,"</em> he said.\n</p>}
115
+ text = "\"This is not a big problem,\" he said."
116
+ html = "<em>\"This is <strong>not</strong> a big problem,\"</em> he said."
117
+ assert_nothing_raised { assert_select "p", text }
118
+ assert_raises(AssertionFailedError) { assert_select "p", html }
119
+ assert_nothing_raised { assert_select "p", :html=>html }
120
+ assert_raises(AssertionFailedError) { assert_select "p", :html=>text }
121
+ # No stripping for pre.
122
+ render_html %Q{<pre>\n<em>"This is <strong>not</strong> a big problem,"</em> he said.\n</pre>}
123
+ text = "\n\"This is not a big problem,\" he said.\n"
124
+ html = "\n<em>\"This is <strong>not</strong> a big problem,\"</em> he said.\n"
125
+ assert_nothing_raised { assert_select "pre", text }
126
+ assert_raises(AssertionFailedError) { assert_select "pre", html }
127
+ assert_nothing_raised { assert_select "pre", :html=>html }
128
+ assert_raises(AssertionFailedError) { assert_select "pre", :html=>text }
129
+ end
130
+
131
+
132
+ def test_counts
133
+ render_html %Q{<div id="1">foo</div><div id="2">foo</div>}
134
+ assert_nothing_raised { assert_select "div", 2 }
135
+ assert_failure(/Expected at least 3 elements matching \"div\", found 2/) do
136
+ assert_select "div", 3
137
+ end
138
+ assert_nothing_raised { assert_select "div", 1..2 }
139
+ assert_failure(/Expected between 3 and 4 elements matching \"div\", found 2/) do
140
+ assert_select "div", 3..4
141
+ end
142
+ assert_nothing_raised { assert_select "div", :count=>2 }
143
+ assert_failure(/Expected at least 3 elements matching \"div\", found 2/) do
144
+ assert_select "div", :count=>3
145
+ end
146
+ assert_nothing_raised { assert_select "div", :minimum=>1 }
147
+ assert_nothing_raised { assert_select "div", :minimum=>2 }
148
+ assert_failure(/Expected at least 3 elements matching \"div\", found 2/) do
149
+ assert_select "div", :minimum=>3
150
+ end
151
+ assert_nothing_raised { assert_select "div", :maximum=>2 }
152
+ assert_nothing_raised { assert_select "div", :maximum=>3 }
153
+ assert_failure(/Expected at most 1 element matching \"div\", found 2/) do
154
+ assert_select "div", :maximum=>1
155
+ end
156
+ assert_nothing_raised { assert_select "div", :minimum=>1, :maximum=>2 }
157
+ assert_failure(/Expected between 3 and 4 elements matching \"div\", found 2/) do
158
+ assert_select "div", :minimum=>3, :maximum=>4
159
+ end
160
+ end
161
+
162
+
163
+ def test_substitution_values
164
+ render_html %Q{<div id="1">foo</div><div id="2">foo</div>}
165
+ assert_select "div#?", /\d+/ do |elements|
166
+ assert_equal 2, elements.size
167
+ end
168
+ assert_select "div" do
169
+ assert_select "div#?", /\d+/ do |elements|
170
+ assert_equal 2, elements.size
171
+ assert_select "#1"
172
+ assert_select "#2"
173
+ end
174
+ end
175
+ end
176
+
177
+
178
+ def test_nested_assert_select
179
+ render_html %Q{<div id="1">foo</div><div id="2">foo</div>}
180
+ assert_select "div" do |elements|
181
+ assert_equal 2, elements.size
182
+ assert_select elements[0], "#1"
183
+ assert_select elements[1], "#2"
184
+ end
185
+ assert_select "div" do
186
+ assert_select "div" do |elements|
187
+ assert_equal 2, elements.size
188
+ # Testing in a group is one thing
189
+ assert_select "#1,#2"
190
+ # Testing individually is another.
191
+ assert_select "#1"
192
+ assert_select "#2"
193
+ assert_select "#3", false
194
+ end
195
+ end
196
+
197
+ assert_failure(/Expected at least 1 element matching \"#4\", found 0\./) do
198
+ assert_select "div" do
199
+ assert_select "#4"
200
+ end
201
+ end
202
+ end
203
+
204
+
205
+ def test_assert_select_text_match
206
+ render_html %Q{<div id="1"><span>foo</span></div><div id="2"><span>bar</span></div>}
207
+ assert_select "div" do
208
+ assert_nothing_raised { assert_select "div", "foo" }
209
+ assert_nothing_raised { assert_select "div", "bar" }
210
+ assert_nothing_raised { assert_select "div", /\w*/ }
211
+ assert_nothing_raised { assert_select "div", /\w*/, :count=>2 }
212
+ assert_raises(AssertionFailedError) { assert_select "div", :text=>"foo", :count=>2 }
213
+ assert_nothing_raised { assert_select "div", :html=>"<span>bar</span>" }
214
+ assert_nothing_raised { assert_select "div", :html=>"<span>bar</span>" }
215
+ assert_nothing_raised { assert_select "div", :html=>/\w*/ }
216
+ assert_nothing_raised { assert_select "div", :html=>/\w*/, :count=>2 }
217
+ assert_raises(AssertionFailedError) { assert_select "div", :html=>"<span>foo</span>", :count=>2 }
218
+ end
219
+ end
220
+
221
+ #
222
+ # Test css_select.
223
+ #
224
+
225
+
226
+ def test_css_select
227
+ render_html %Q{<div id="1"></div><div id="2"></div>}
228
+ assert 2, css_select("div").size
229
+ assert 0, css_select("p").size
230
+ end
231
+
232
+
233
+ def test_nested_css_select
234
+ render_html %Q{<div id="1">foo</div><div id="2">foo</div>}
235
+ assert_select "div#?", /\d+/ do |elements|
236
+ assert_equal 1, css_select(elements[0], "div").size
237
+ assert_equal 1, css_select(elements[1], "div").size
238
+ end
239
+ assert_select "div" do
240
+ assert_equal 2, css_select("div").size
241
+ css_select("div").each do |element|
242
+ # Testing as a group is one thing
243
+ assert !css_select("#1,#2").empty?
244
+ # Testing individually is another
245
+ assert !css_select("#1").empty?
246
+ assert !css_select("#2").empty?
247
+ end
248
+ end
249
+ end
250
+
251
+ def test_feed_item_encoded
252
+ render_xml <<-EOF
253
+ <rss version="2.0">
254
+ <channel>
255
+ <item>
256
+ <description>
257
+ <![CDATA[
258
+ <p>Test 1</p>
259
+ ]]>
260
+ </description>
261
+ </item>
262
+ <item>
263
+ <description>
264
+ <![CDATA[
265
+ <p>Test 2</p>
266
+ ]]>
267
+ </description>
268
+ </item>
269
+ </channel>
270
+ </rss>
271
+ EOF
272
+ assert_select "channel item description" do
273
+ # Test element regardless of wrapper.
274
+ assert_select_encoded do
275
+ assert_select "p", :count=>2, :text=>/Test/
276
+ end
277
+ # Test through encoded wrapper.
278
+ assert_select_encoded do
279
+ assert_select "encoded p", :count=>2, :text=>/Test/
280
+ end
281
+ # Use :root instead (recommended)
282
+ assert_select_encoded do
283
+ assert_select ":root p", :count=>2, :text=>/Test/
284
+ end
285
+ # Test individually.
286
+ assert_select "description" do |elements|
287
+ assert_select_encoded elements[0] do
288
+ assert_select "p", "Test 1"
289
+ end
290
+ assert_select_encoded elements[1] do
291
+ assert_select "p", "Test 2"
292
+ end
293
+ end
294
+ end
295
+
296
+ # Test that we only un-encode element itself.
297
+ assert_select "channel item" do
298
+ assert_select_encoded do
299
+ assert_select "p", 0
300
+ end
301
+ end
302
+ end
303
+
304
+
305
+ #
306
+ # Test assert_select_email
307
+ #
308
+
309
+ def test_assert_select_email
310
+ assert_raises(AssertionFailedError) { assert_select_email {} }
311
+ AssertSelectMailer.deliver_test "<div><p>foo</p><p>bar</p></div>"
312
+ assert_select_email do
313
+ assert_select "div:root" do
314
+ assert_select "p:first-child", "foo"
315
+ assert_select "p:last-child", "bar"
316
+ end
317
+ end
318
+ end
319
+
320
+
321
+ protected
322
+ def render_html(html)
323
+ @controller.response_with = html
324
+ get :html
325
+ end
326
+
327
+ def render_xml(xml)
328
+ @controller.response_with = xml
329
+ get :xml
330
+ end
331
+ end
@@ -0,0 +1,219 @@
1
+ require 'abstract_unit'
2
+ require 'pp' # require 'pp' early to prevent hidden_methods from not picking up the pretty-print methods until too late
3
+
4
+ # Provide some controller to run the tests on.
5
+ module Submodule
6
+ class ContainedEmptyController < ActionController::Base
7
+ end
8
+ class ContainedNonEmptyController < ActionController::Base
9
+ def public_action
10
+ render :nothing => true
11
+ end
12
+
13
+ hide_action :hidden_action
14
+ def hidden_action
15
+ raise "Noooo!"
16
+ end
17
+
18
+ def another_hidden_action
19
+ end
20
+ hide_action :another_hidden_action
21
+ end
22
+ class SubclassedController < ContainedNonEmptyController
23
+ hide_action :public_action # Hiding it here should not affect the superclass.
24
+ end
25
+ end
26
+ class EmptyController < ActionController::Base
27
+ end
28
+ class NonEmptyController < ActionController::Base
29
+ def public_action
30
+ end
31
+
32
+ hide_action :hidden_action
33
+ def hidden_action
34
+ end
35
+ end
36
+
37
+ class MethodMissingController < ActionController::Base
38
+
39
+ hide_action :shouldnt_be_called
40
+ def shouldnt_be_called
41
+ raise "NO WAY!"
42
+ end
43
+
44
+ protected
45
+
46
+ def method_missing(selector)
47
+ render :text => selector.to_s
48
+ end
49
+
50
+ end
51
+
52
+ class DefaultUrlOptionsController < ActionController::Base
53
+ def default_url_options_action
54
+ end
55
+
56
+ def default_url_options(options = nil)
57
+ { :host => 'www.override.com', :action => 'new', :bacon => 'chunky' }
58
+ end
59
+ end
60
+
61
+ class ControllerClassTests < Test::Unit::TestCase
62
+ def test_controller_path
63
+ assert_equal 'empty', EmptyController.controller_path
64
+ assert_equal EmptyController.controller_path, EmptyController.new.controller_path
65
+ assert_equal 'submodule/contained_empty', Submodule::ContainedEmptyController.controller_path
66
+ assert_equal Submodule::ContainedEmptyController.controller_path, Submodule::ContainedEmptyController.new.controller_path
67
+ end
68
+ def test_controller_name
69
+ assert_equal 'empty', EmptyController.controller_name
70
+ assert_equal 'contained_empty', Submodule::ContainedEmptyController.controller_name
71
+ end
72
+ end
73
+
74
+ class ControllerInstanceTests < Test::Unit::TestCase
75
+ def setup
76
+ @empty = EmptyController.new
77
+ @contained = Submodule::ContainedEmptyController.new
78
+ @empty_controllers = [@empty, @contained, Submodule::SubclassedController.new]
79
+
80
+ @non_empty_controllers = [NonEmptyController.new,
81
+ Submodule::ContainedNonEmptyController.new]
82
+ end
83
+
84
+ def test_action_methods
85
+ @empty_controllers.each do |c|
86
+ hide_mocha_methods_from_controller(c)
87
+ assert_equal Set.new, c.send!(:action_methods), "#{c.controller_path} should be empty!"
88
+ end
89
+ @non_empty_controllers.each do |c|
90
+ hide_mocha_methods_from_controller(c)
91
+ assert_equal Set.new(%w(public_action)), c.send!(:action_methods), "#{c.controller_path} should not be empty!"
92
+ end
93
+ end
94
+
95
+ protected
96
+ # Mocha adds some public instance methods to Object that would be
97
+ # considered actions, so explicitly hide_action them.
98
+ def hide_mocha_methods_from_controller(controller)
99
+ mocha_methods = [
100
+ :expects, :mocha, :mocha_inspect, :reset_mocha, :stubba_object,
101
+ :stubba_method, :stubs, :verify, :__metaclass__, :__is_a__, :to_matcher,
102
+ ]
103
+ controller.class.send!(:hide_action, *mocha_methods)
104
+ end
105
+ end
106
+
107
+
108
+ class PerformActionTest < Test::Unit::TestCase
109
+ class MockLogger
110
+ attr_reader :logged
111
+
112
+ def initialize
113
+ @logged = []
114
+ end
115
+
116
+ def method_missing(method, *args)
117
+ @logged << args.first
118
+ end
119
+ end
120
+
121
+ def use_controller(controller_class)
122
+ @controller = controller_class.new
123
+
124
+ # enable a logger so that (e.g.) the benchmarking stuff runs, so we can get
125
+ # a more accurate simulation of what happens in "real life".
126
+ @controller.logger = Logger.new(nil)
127
+
128
+ @request = ActionController::TestRequest.new
129
+ @response = ActionController::TestResponse.new
130
+
131
+ @request.host = "www.nextangle.com"
132
+ end
133
+
134
+ def test_get_on_priv_should_show_selector
135
+ use_controller MethodMissingController
136
+ get :shouldnt_be_called
137
+ assert_response :success
138
+ assert_equal 'shouldnt_be_called', @response.body
139
+ end
140
+
141
+ def test_method_missing_is_not_an_action_name
142
+ use_controller MethodMissingController
143
+ assert ! @controller.send!(:action_methods).include?('method_missing')
144
+
145
+ get :method_missing
146
+ assert_response :success
147
+ assert_equal 'method_missing', @response.body
148
+ end
149
+
150
+ def test_get_on_hidden_should_fail
151
+ use_controller NonEmptyController
152
+ get :hidden_action
153
+ assert_response 404
154
+
155
+ get :another_hidden_action
156
+ assert_response 404
157
+ end
158
+
159
+ def test_namespaced_action_should_log_module_name
160
+ use_controller Submodule::ContainedNonEmptyController
161
+ @controller.logger = MockLogger.new
162
+ get :public_action
163
+ assert_match /Processing\sSubmodule::ContainedNonEmptyController#public_action/, @controller.logger.logged[1]
164
+ end
165
+ end
166
+
167
+ class DefaultUrlOptionsTest < Test::Unit::TestCase
168
+ def setup
169
+ @controller = DefaultUrlOptionsController.new
170
+
171
+ @request = ActionController::TestRequest.new
172
+ @response = ActionController::TestResponse.new
173
+
174
+ @request.host = 'www.example.com'
175
+ end
176
+
177
+ def test_default_url_options_are_used_if_set
178
+ ActionController::Routing::Routes.draw do |map|
179
+ map.default_url_options 'default_url_options', :controller => 'default_url_options'
180
+ map.connect ':controller/:action/:id'
181
+ end
182
+
183
+ get :default_url_options_action # Make a dummy request so that the controller is initialized properly.
184
+
185
+ assert_equal 'http://www.override.com/default_url_options/new?bacon=chunky', @controller.url_for(:controller => 'default_url_options')
186
+ assert_equal 'http://www.override.com/default_url_options?bacon=chunky', @controller.send(:default_url_options_url)
187
+ ensure
188
+ ActionController::Routing::Routes.load!
189
+ end
190
+ end
191
+
192
+ class EmptyUrlOptionsTest < Test::Unit::TestCase
193
+ def setup
194
+ @controller = NonEmptyController.new
195
+
196
+ @request = ActionController::TestRequest.new
197
+ @response = ActionController::TestResponse.new
198
+
199
+ @request.host = 'www.example.com'
200
+ end
201
+
202
+ def test_ensure_url_for_works_as_expected_when_called_with_no_options_if_default_url_options_is_not_set
203
+ get :public_action
204
+ assert_equal "http://www.example.com/non_empty/public_action", @controller.url_for
205
+ end
206
+ end
207
+
208
+ class EnsureNamedRoutesWorksTicket22BugTest < Test::Unit::TestCase
209
+ def test_named_routes_still_work
210
+ ActionController::Routing::Routes.draw do |map|
211
+ map.resources :things
212
+ end
213
+ EmptyController.send :include, ActionController::UrlWriter
214
+
215
+ assert_equal '/things', EmptyController.new.send(:things_path)
216
+ ensure
217
+ ActionController::Routing::Routes.load!
218
+ end
219
+ end