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,140 @@
1
+ require 'abstract_unit'
2
+
3
+ class ViewLoadPathsTest < Test::Unit::TestCase
4
+
5
+ LOAD_PATH_ROOT = File.join(File.dirname(__FILE__), '..', 'fixtures')
6
+
7
+ ActionController::Base.view_paths = [ LOAD_PATH_ROOT ]
8
+
9
+ class TestController < ActionController::Base
10
+ def self.controller_path() "test" end
11
+ def rescue_action(e) raise end
12
+
13
+ before_filter :add_view_path, :only => :hello_world_at_request_time
14
+
15
+ def hello_world() end
16
+ def hello_world_at_request_time() render(:action => 'hello_world') end
17
+ private
18
+ def add_view_path
19
+ prepend_view_path "#{LOAD_PATH_ROOT}/override"
20
+ end
21
+ end
22
+
23
+ class Test::SubController < ActionController::Base
24
+ layout 'test/sub'
25
+ def hello_world; render(:template => 'test/hello_world'); end
26
+ end
27
+
28
+ def setup
29
+ TestController.view_paths = nil
30
+
31
+ @request = ActionController::TestRequest.new
32
+ @response = ActionController::TestResponse.new
33
+
34
+ @controller = TestController.new
35
+ # Following is needed in order to setup @controller.template object properly
36
+ @controller.send :initialize_template_class, @response
37
+ @controller.send :assign_shortcuts, @request, @response
38
+
39
+ # Track the last warning.
40
+ @old_behavior = ActiveSupport::Deprecation.behavior
41
+ @last_message = nil
42
+ ActiveSupport::Deprecation.behavior = Proc.new { |message, callback| @last_message = message }
43
+ end
44
+
45
+ def teardown
46
+ ActiveSupport::Deprecation.behavior = @old_behavior
47
+ end
48
+
49
+ def test_template_load_path_was_set_correctly
50
+ assert_equal [ LOAD_PATH_ROOT ], @controller.view_paths
51
+ end
52
+
53
+ def test_controller_appends_view_path_correctly
54
+ @controller.append_view_path 'foo'
55
+ assert_equal [LOAD_PATH_ROOT, 'foo'], @controller.view_paths
56
+
57
+ @controller.append_view_path(%w(bar baz))
58
+ assert_equal [LOAD_PATH_ROOT, 'foo', 'bar', 'baz'], @controller.view_paths
59
+ end
60
+
61
+ def test_controller_prepends_view_path_correctly
62
+ @controller.prepend_view_path 'baz'
63
+ assert_equal ['baz', LOAD_PATH_ROOT], @controller.view_paths
64
+
65
+ @controller.prepend_view_path(%w(foo bar))
66
+ assert_equal ['foo', 'bar', 'baz', LOAD_PATH_ROOT], @controller.view_paths
67
+ end
68
+
69
+ def test_template_appends_view_path_correctly
70
+ @controller.instance_variable_set :@template, ActionView::Base.new(TestController.view_paths, {}, @controller)
71
+ class_view_paths = TestController.view_paths
72
+
73
+ @controller.append_view_path 'foo'
74
+ assert_equal [LOAD_PATH_ROOT, 'foo'], @controller.view_paths
75
+
76
+ @controller.append_view_path(%w(bar baz))
77
+ assert_equal [LOAD_PATH_ROOT, 'foo', 'bar', 'baz'], @controller.view_paths
78
+ assert_equal class_view_paths, TestController.view_paths
79
+ end
80
+
81
+ def test_template_prepends_view_path_correctly
82
+ @controller.instance_variable_set :@template, ActionView::Base.new(TestController.view_paths, {}, @controller)
83
+ class_view_paths = TestController.view_paths
84
+
85
+ @controller.prepend_view_path 'baz'
86
+ assert_equal ['baz', LOAD_PATH_ROOT], @controller.view_paths
87
+
88
+ @controller.prepend_view_path(%w(foo bar))
89
+ assert_equal ['foo', 'bar', 'baz', LOAD_PATH_ROOT], @controller.view_paths
90
+ assert_equal class_view_paths, TestController.view_paths
91
+ end
92
+
93
+ def test_view_paths
94
+ get :hello_world
95
+ assert_response :success
96
+ assert_equal "Hello world!", @response.body
97
+ end
98
+
99
+ def test_view_paths_override
100
+ TestController.prepend_view_path "#{LOAD_PATH_ROOT}/override"
101
+ get :hello_world
102
+ assert_response :success
103
+ assert_equal "Hello overridden world!", @response.body
104
+ end
105
+
106
+ def test_view_paths_override_for_layouts_in_controllers_with_a_module
107
+ @controller = Test::SubController.new
108
+ Test::SubController.view_paths = [ "#{LOAD_PATH_ROOT}/override", LOAD_PATH_ROOT, "#{LOAD_PATH_ROOT}/override2" ]
109
+ get :hello_world
110
+ assert_response :success
111
+ assert_equal "layout: Hello overridden world!", @response.body
112
+ end
113
+
114
+ def test_view_paths_override_at_request_time
115
+ get :hello_world_at_request_time
116
+ assert_response :success
117
+ assert_equal "Hello overridden world!", @response.body
118
+ end
119
+
120
+ def test_inheritance
121
+ original_load_paths = ActionController::Base.view_paths
122
+
123
+ self.class.class_eval %{
124
+ class A < ActionController::Base; end
125
+ class B < A; end
126
+ class C < ActionController::Base; end
127
+ }
128
+
129
+ A.view_paths = [ 'a/path' ]
130
+
131
+ assert_equal [ 'a/path' ], A.view_paths
132
+ assert_equal A.view_paths, B.view_paths
133
+ assert_equal original_load_paths, C.view_paths
134
+
135
+ C.view_paths = []
136
+ assert_nothing_raised { C.view_paths << 'c/path' }
137
+ assert_equal ['c/path'], C.view_paths
138
+ end
139
+
140
+ end
@@ -0,0 +1,229 @@
1
+ require 'abstract_unit'
2
+
3
+ class WebServiceTest < Test::Unit::TestCase
4
+ class MockCGI < CGI #:nodoc:
5
+ attr_accessor :stdoutput, :env_table
6
+
7
+ def initialize(env, data = '')
8
+ self.env_table = env
9
+ self.stdoutput = StringIO.new
10
+ super(nil, StringIO.new(data))
11
+ end
12
+ end
13
+
14
+ class TestController < ActionController::Base
15
+ session :off
16
+
17
+ def assign_parameters
18
+ if params[:full]
19
+ render :text => dump_params_keys
20
+ else
21
+ render :text => (params.keys - ['controller', 'action']).sort.join(", ")
22
+ end
23
+ end
24
+
25
+ def dump_params_keys(hash=params)
26
+ hash.keys.sort.inject("") do |s, k|
27
+ value = hash[k]
28
+ value = Hash === value ? "(#{dump_params_keys(value)})" : ""
29
+ s << ", " unless s.empty?
30
+ s << "#{k}#{value}"
31
+ end
32
+ end
33
+
34
+ def rescue_action(e) raise end
35
+ end
36
+
37
+ def setup
38
+ @controller = TestController.new
39
+ @default_param_parsers = ActionController::Base.param_parsers.dup
40
+ end
41
+
42
+ def teardown
43
+ ActionController::Base.param_parsers = @default_param_parsers
44
+ end
45
+
46
+ def test_check_parameters
47
+ process('GET')
48
+ assert_equal '', @controller.response.body
49
+ end
50
+
51
+ def test_post_xml
52
+ process('POST', 'application/xml', '<entry attributed="true"><summary>content...</summary></entry>')
53
+
54
+ assert_equal 'entry', @controller.response.body
55
+ assert @controller.params.has_key?(:entry)
56
+ assert_equal 'content...', @controller.params["entry"]['summary']
57
+ assert_equal 'true', @controller.params["entry"]['attributed']
58
+ end
59
+
60
+ def test_put_xml
61
+ process('PUT', 'application/xml', '<entry attributed="true"><summary>content...</summary></entry>')
62
+
63
+ assert_equal 'entry', @controller.response.body
64
+ assert @controller.params.has_key?(:entry)
65
+ assert_equal 'content...', @controller.params["entry"]['summary']
66
+ assert_equal 'true', @controller.params["entry"]['attributed']
67
+ end
68
+
69
+ def test_put_xml_using_a_type_node
70
+ process('PUT', 'application/xml', '<type attributed="true"><summary>content...</summary></type>')
71
+
72
+ assert_equal 'type', @controller.response.body
73
+ assert @controller.params.has_key?(:type)
74
+ assert_equal 'content...', @controller.params["type"]['summary']
75
+ assert_equal 'true', @controller.params["type"]['attributed']
76
+ end
77
+
78
+ def test_put_xml_using_a_type_node_and_attribute
79
+ process('PUT', 'application/xml', '<type attributed="true"><summary type="boolean">false</summary></type>')
80
+
81
+ assert_equal 'type', @controller.response.body
82
+ assert @controller.params.has_key?(:type)
83
+ assert_equal false, @controller.params["type"]['summary']
84
+ assert_equal 'true', @controller.params["type"]['attributed']
85
+ end
86
+
87
+ def test_post_xml_using_a_type_node
88
+ process('POST', 'application/xml', '<font attributed="true"><type>arial</type></font>')
89
+
90
+ assert_equal 'font', @controller.response.body
91
+ assert @controller.params.has_key?(:font)
92
+ assert_equal 'arial', @controller.params['font']['type']
93
+ assert_equal 'true', @controller.params["font"]['attributed']
94
+ end
95
+
96
+ def test_post_xml_using_a_root_node_named_type
97
+ process('POST', 'application/xml', '<type type="integer">33</type>')
98
+
99
+ assert @controller.params.has_key?(:type)
100
+ assert_equal 33, @controller.params['type']
101
+ end
102
+
103
+ def test_post_xml_using_an_attributted_node_named_type
104
+ ActionController::Base.param_parsers[Mime::XML] = Proc.new { |data| XmlSimple.xml_in(data, 'ForceArray' => false) }
105
+ process('POST', 'application/xml', '<request><type type="string">Arial,12</type><z>3</z></request>')
106
+
107
+ assert_equal 'type, z', @controller.response.body
108
+ assert @controller.params.has_key?(:type)
109
+ assert_equal 'string', @controller.params['type']['type']
110
+ assert_equal 'Arial,12', @controller.params['type']['content']
111
+ assert_equal '3', @controller.params['z']
112
+ end
113
+
114
+ def test_register_and_use_yaml
115
+ ActionController::Base.param_parsers[Mime::YAML] = Proc.new { |d| YAML.load(d) }
116
+ process('POST', 'application/x-yaml', {"entry" => "loaded from yaml"}.to_yaml)
117
+ assert_equal 'entry', @controller.response.body
118
+ assert @controller.params.has_key?(:entry)
119
+ assert_equal 'loaded from yaml', @controller.params["entry"]
120
+ end
121
+
122
+ def test_register_and_use_yaml_as_symbol
123
+ ActionController::Base.param_parsers[Mime::YAML] = :yaml
124
+ process('POST', 'application/x-yaml', {"entry" => "loaded from yaml"}.to_yaml)
125
+ assert_equal 'entry', @controller.response.body
126
+ assert @controller.params.has_key?(:entry)
127
+ assert_equal 'loaded from yaml', @controller.params["entry"]
128
+ end
129
+
130
+ def test_register_and_use_xml_simple
131
+ ActionController::Base.param_parsers[Mime::XML] = Proc.new { |data| XmlSimple.xml_in(data, 'ForceArray' => false) }
132
+ process('POST', 'application/xml', '<request><summary>content...</summary><title>SimpleXml</title></request>' )
133
+ assert_equal 'summary, title', @controller.response.body
134
+ assert @controller.params.has_key?(:summary)
135
+ assert @controller.params.has_key?(:title)
136
+ assert_equal 'content...', @controller.params["summary"]
137
+ assert_equal 'SimpleXml', @controller.params["title"]
138
+ end
139
+
140
+ def test_use_xml_ximple_with_empty_request
141
+ ActionController::Base.param_parsers[Mime::XML] = :xml_simple
142
+ assert_nothing_raised { process('POST', 'application/xml', "") }
143
+ assert_equal "", @controller.response.body
144
+ end
145
+
146
+ def test_dasherized_keys_as_xml
147
+ ActionController::Base.param_parsers[Mime::XML] = :xml_simple
148
+ process('POST', 'application/xml', "<first-key>\n<sub-key>...</sub-key>\n</first-key>", true)
149
+ assert_equal 'action, controller, first_key(sub_key), full', @controller.response.body
150
+ assert_equal "...", @controller.params[:first_key][:sub_key]
151
+ end
152
+
153
+ def test_typecast_as_xml
154
+ ActionController::Base.param_parsers[Mime::XML] = :xml_simple
155
+ process('POST', 'application/xml', <<-XML)
156
+ <data>
157
+ <a type="integer">15</a>
158
+ <b type="boolean">false</b>
159
+ <c type="boolean">true</c>
160
+ <d type="date">2005-03-17</d>
161
+ <e type="datetime">2005-03-17T21:41:07Z</e>
162
+ <f>unparsed</f>
163
+ <g type="integer">1</g>
164
+ <g>hello</g>
165
+ <g type="date">1974-07-25</g>
166
+ </data>
167
+ XML
168
+ params = @controller.params
169
+ assert_equal 15, params[:data][:a]
170
+ assert_equal false, params[:data][:b]
171
+ assert_equal true, params[:data][:c]
172
+ assert_equal Date.new(2005,3,17), params[:data][:d]
173
+ assert_equal Time.utc(2005,3,17,21,41,7), params[:data][:e]
174
+ assert_equal "unparsed", params[:data][:f]
175
+ assert_equal [1, "hello", Date.new(1974,7,25)], params[:data][:g]
176
+ end
177
+
178
+ def test_entities_unescaped_as_xml_simple
179
+ ActionController::Base.param_parsers[Mime::XML] = :xml_simple
180
+ process('POST', 'application/xml', <<-XML)
181
+ <data>&lt;foo &quot;bar&apos;s&quot; &amp; friends&gt;</data>
182
+ XML
183
+ assert_equal %(<foo "bar's" & friends>), @controller.params[:data]
184
+ end
185
+
186
+ def test_typecast_as_yaml
187
+ ActionController::Base.param_parsers[Mime::YAML] = :yaml
188
+ process('POST', 'application/x-yaml', <<-YAML)
189
+ ---
190
+ data:
191
+ a: 15
192
+ b: false
193
+ c: true
194
+ d: 2005-03-17
195
+ e: 2005-03-17T21:41:07Z
196
+ f: unparsed
197
+ g:
198
+ - 1
199
+ - hello
200
+ - 1974-07-25
201
+ YAML
202
+ params = @controller.params
203
+ assert_equal 15, params[:data][:a]
204
+ assert_equal false, params[:data][:b]
205
+ assert_equal true, params[:data][:c]
206
+ assert_equal Date.new(2005,3,17), params[:data][:d]
207
+ assert_equal Time.utc(2005,3,17,21,41,7), params[:data][:e]
208
+ assert_equal "unparsed", params[:data][:f]
209
+ assert_equal [1, "hello", Date.new(1974,7,25)], params[:data][:g]
210
+ end
211
+
212
+ private
213
+
214
+ def process(verb, content_type = 'application/x-www-form-urlencoded', data = '', full=false)
215
+
216
+ cgi = MockCGI.new({
217
+ 'REQUEST_METHOD' => verb,
218
+ 'CONTENT_TYPE' => content_type,
219
+ 'QUERY_STRING' => "action=assign_parameters&controller=webservicetest/test#{"&full=1" if full}",
220
+ "REQUEST_URI" => "/",
221
+ "HTTP_HOST" => 'testdomain.com',
222
+ "CONTENT_LENGTH" => data.size,
223
+ "SERVER_PORT" => "80",
224
+ "HTTPS" => "off"}, data)
225
+
226
+ @controller.send(:process, ActionController::CgiRequest.new(cgi, {}), ActionController::CgiResponse.new(cgi))
227
+ end
228
+
229
+ end
@@ -0,0 +1 @@
1
+ We only need to get this far!
@@ -0,0 +1 @@
1
+ <%= greeting %> bad customer: <%= bad_customer.name %><%= bad_customer_counter %>
@@ -0,0 +1,24 @@
1
+ thirty_seven_signals:
2
+ id: 1
3
+ name: 37Signals
4
+ rating: 4
5
+
6
+ TextDrive:
7
+ id: 2
8
+ name: TextDrive
9
+ rating: 4
10
+
11
+ PlanetArgon:
12
+ id: 3
13
+ name: Planet Argon
14
+ rating: 4
15
+
16
+ Google:
17
+ id: 4
18
+ name: Google
19
+ rating: 4
20
+
21
+ Ionist:
22
+ id: 5
23
+ name: Ioni.st
24
+ rating: 4
@@ -0,0 +1,10 @@
1
+ class Company < ActiveRecord::Base
2
+ has_one :mascot
3
+ attr_protected :rating
4
+ set_sequence_name :companies_nonstd_seq
5
+
6
+ validates_presence_of :name
7
+ def validate
8
+ errors.add('rating', 'rating should not be 2') if rating == 2
9
+ end
10
+ end
@@ -0,0 +1 @@
1
+ alert('hello world!');
@@ -0,0 +1 @@
1
+ <%= 'hello world!' %>
@@ -0,0 +1 @@
1
+ xml.p "Hello world!"
@@ -0,0 +1 @@
1
+ <%= greeting %>: <%= customer.name %>
@@ -0,0 +1,49 @@
1
+ CREATE TABLE 'companies' (
2
+ 'id' INTEGER PRIMARY KEY NOT NULL,
3
+ 'name' TEXT DEFAULT NULL,
4
+ 'rating' INTEGER DEFAULT 1
5
+ );
6
+
7
+ CREATE TABLE 'replies' (
8
+ 'id' INTEGER PRIMARY KEY NOT NULL,
9
+ 'content' text,
10
+ 'created_at' datetime,
11
+ 'updated_at' datetime,
12
+ 'topic_id' integer,
13
+ 'developer_id' integer
14
+ );
15
+
16
+ CREATE TABLE 'topics' (
17
+ 'id' INTEGER PRIMARY KEY NOT NULL,
18
+ 'title' varchar(255),
19
+ 'subtitle' varchar(255),
20
+ 'content' text,
21
+ 'created_at' datetime,
22
+ 'updated_at' datetime
23
+ );
24
+
25
+ CREATE TABLE 'developers' (
26
+ 'id' INTEGER PRIMARY KEY NOT NULL,
27
+ 'name' TEXT DEFAULT NULL,
28
+ 'salary' INTEGER DEFAULT 70000,
29
+ 'created_at' DATETIME DEFAULT NULL,
30
+ 'updated_at' DATETIME DEFAULT NULL
31
+ );
32
+
33
+ CREATE TABLE 'projects' (
34
+ 'id' INTEGER PRIMARY KEY NOT NULL,
35
+ 'name' TEXT DEFAULT NULL
36
+ );
37
+
38
+ CREATE TABLE 'developers_projects' (
39
+ 'developer_id' INTEGER NOT NULL,
40
+ 'project_id' INTEGER NOT NULL,
41
+ 'joined_on' DATE DEFAULT NULL,
42
+ 'access_level' INTEGER DEFAULT 1
43
+ );
44
+
45
+ CREATE TABLE 'mascots' (
46
+ 'id' INTEGER PRIMARY KEY NOT NULL,
47
+ 'company_id' INTEGER NOT NULL,
48
+ 'name' TEXT DEFAULT NULL
49
+ );