actionpack_csi 2.3.5.p6

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 (429) hide show
  1. data/CHANGELOG +5184 -0
  2. data/MIT-LICENSE +21 -0
  3. data/README +409 -0
  4. data/RUNNING_UNIT_TESTS +24 -0
  5. data/Rakefile +160 -0
  6. data/install.rb +30 -0
  7. data/lib/action_controller/assertions/dom_assertions.rb +55 -0
  8. data/lib/action_controller/assertions/model_assertions.rb +21 -0
  9. data/lib/action_controller/assertions/response_assertions.rb +160 -0
  10. data/lib/action_controller/assertions/routing_assertions.rb +146 -0
  11. data/lib/action_controller/assertions/selector_assertions.rb +638 -0
  12. data/lib/action_controller/assertions/tag_assertions.rb +127 -0
  13. data/lib/action_controller/base.rb +1423 -0
  14. data/lib/action_controller/benchmarking.rb +107 -0
  15. data/lib/action_controller/caching/actions.rb +177 -0
  16. data/lib/action_controller/caching/fragments.rb +120 -0
  17. data/lib/action_controller/caching/pages.rb +152 -0
  18. data/lib/action_controller/caching/sweeper.rb +45 -0
  19. data/lib/action_controller/caching/sweeping.rb +55 -0
  20. data/lib/action_controller/caching.rb +71 -0
  21. data/lib/action_controller/cgi_ext/cookie.rb +112 -0
  22. data/lib/action_controller/cgi_ext/query_extension.rb +22 -0
  23. data/lib/action_controller/cgi_ext/stdinput.rb +24 -0
  24. data/lib/action_controller/cgi_ext.rb +15 -0
  25. data/lib/action_controller/cgi_process.rb +77 -0
  26. data/lib/action_controller/cookies.rb +95 -0
  27. data/lib/action_controller/dispatcher.rb +133 -0
  28. data/lib/action_controller/failsafe.rb +86 -0
  29. data/lib/action_controller/filters.rb +680 -0
  30. data/lib/action_controller/flash.rb +171 -0
  31. data/lib/action_controller/headers.rb +33 -0
  32. data/lib/action_controller/helpers.rb +225 -0
  33. data/lib/action_controller/http_authentication.rb +309 -0
  34. data/lib/action_controller/integration.rb +692 -0
  35. data/lib/action_controller/layout.rb +286 -0
  36. data/lib/action_controller/middleware_stack.rb +119 -0
  37. data/lib/action_controller/middlewares.rb +14 -0
  38. data/lib/action_controller/mime_responds.rb +193 -0
  39. data/lib/action_controller/mime_type.rb +212 -0
  40. data/lib/action_controller/mime_types.rb +21 -0
  41. data/lib/action_controller/params_parser.rb +77 -0
  42. data/lib/action_controller/performance_test.rb +15 -0
  43. data/lib/action_controller/polymorphic_routes.rb +189 -0
  44. data/lib/action_controller/rack_lint_patch.rb +36 -0
  45. data/lib/action_controller/record_identifier.rb +104 -0
  46. data/lib/action_controller/reloader.rb +54 -0
  47. data/lib/action_controller/request.rb +493 -0
  48. data/lib/action_controller/request_forgery_protection.rb +113 -0
  49. data/lib/action_controller/rescue.rb +183 -0
  50. data/lib/action_controller/resources.rb +682 -0
  51. data/lib/action_controller/response.rb +239 -0
  52. data/lib/action_controller/routing/builder.rb +197 -0
  53. data/lib/action_controller/routing/optimisations.rb +130 -0
  54. data/lib/action_controller/routing/recognition_optimisation.rb +167 -0
  55. data/lib/action_controller/routing/route.rb +265 -0
  56. data/lib/action_controller/routing/route_set.rb +502 -0
  57. data/lib/action_controller/routing/routing_ext.rb +49 -0
  58. data/lib/action_controller/routing/segments.rb +343 -0
  59. data/lib/action_controller/routing.rb +388 -0
  60. data/lib/action_controller/session/abstract_store.rb +181 -0
  61. data/lib/action_controller/session/cookie_store.rb +221 -0
  62. data/lib/action_controller/session/mem_cache_store.rb +51 -0
  63. data/lib/action_controller/session_management.rb +54 -0
  64. data/lib/action_controller/status_codes.rb +88 -0
  65. data/lib/action_controller/streaming.rb +181 -0
  66. data/lib/action_controller/string_coercion.rb +29 -0
  67. data/lib/action_controller/templates/rescues/_request_and_response.erb +24 -0
  68. data/lib/action_controller/templates/rescues/_trace.erb +26 -0
  69. data/lib/action_controller/templates/rescues/diagnostics.erb +11 -0
  70. data/lib/action_controller/templates/rescues/layout.erb +29 -0
  71. data/lib/action_controller/templates/rescues/missing_template.erb +2 -0
  72. data/lib/action_controller/templates/rescues/routing_error.erb +10 -0
  73. data/lib/action_controller/templates/rescues/template_error.erb +21 -0
  74. data/lib/action_controller/templates/rescues/unknown_action.erb +2 -0
  75. data/lib/action_controller/test_case.rb +209 -0
  76. data/lib/action_controller/test_process.rb +580 -0
  77. data/lib/action_controller/translation.rb +13 -0
  78. data/lib/action_controller/uploaded_file.rb +44 -0
  79. data/lib/action_controller/url_rewriter.rb +216 -0
  80. data/lib/action_controller/vendor/html-scanner/html/document.rb +68 -0
  81. data/lib/action_controller/vendor/html-scanner/html/node.rb +537 -0
  82. data/lib/action_controller/vendor/html-scanner/html/sanitizer.rb +173 -0
  83. data/lib/action_controller/vendor/html-scanner/html/selector.rb +828 -0
  84. data/lib/action_controller/vendor/html-scanner/html/tokenizer.rb +105 -0
  85. data/lib/action_controller/vendor/html-scanner/html/version.rb +11 -0
  86. data/lib/action_controller/vendor/html-scanner.rb +16 -0
  87. data/lib/action_controller/verification.rb +130 -0
  88. data/lib/action_controller.rb +113 -0
  89. data/lib/action_pack/version.rb +9 -0
  90. data/lib/action_pack.rb +24 -0
  91. data/lib/action_view/base.rb +362 -0
  92. data/lib/action_view/erb/util.rb +44 -0
  93. data/lib/action_view/helpers/active_record_helper.rb +305 -0
  94. data/lib/action_view/helpers/asset_tag_helper.rb +694 -0
  95. data/lib/action_view/helpers/atom_feed_helper.rb +198 -0
  96. data/lib/action_view/helpers/benchmark_helper.rb +54 -0
  97. data/lib/action_view/helpers/cache_helper.rb +39 -0
  98. data/lib/action_view/helpers/capture_helper.rb +136 -0
  99. data/lib/action_view/helpers/date_helper.rb +988 -0
  100. data/lib/action_view/helpers/debug_helper.rb +38 -0
  101. data/lib/action_view/helpers/form_helper.rb +1074 -0
  102. data/lib/action_view/helpers/form_options_helper.rb +600 -0
  103. data/lib/action_view/helpers/form_tag_helper.rb +487 -0
  104. data/lib/action_view/helpers/javascript_helper.rb +208 -0
  105. data/lib/action_view/helpers/number_helper.rb +308 -0
  106. data/lib/action_view/helpers/prototype_helper.rb +1305 -0
  107. data/lib/action_view/helpers/raw_output_helper.rb +9 -0
  108. data/lib/action_view/helpers/record_identification_helper.rb +20 -0
  109. data/lib/action_view/helpers/record_tag_helper.rb +58 -0
  110. data/lib/action_view/helpers/sanitize_helper.rb +259 -0
  111. data/lib/action_view/helpers/scriptaculous_helper.rb +226 -0
  112. data/lib/action_view/helpers/tag_helper.rb +150 -0
  113. data/lib/action_view/helpers/text_helper.rb +587 -0
  114. data/lib/action_view/helpers/translation_helper.rb +39 -0
  115. data/lib/action_view/helpers/url_helper.rb +639 -0
  116. data/lib/action_view/helpers.rb +59 -0
  117. data/lib/action_view/inline_template.rb +19 -0
  118. data/lib/action_view/locale/en.yml +117 -0
  119. data/lib/action_view/partials.rb +240 -0
  120. data/lib/action_view/paths.rb +69 -0
  121. data/lib/action_view/reloadable_template.rb +117 -0
  122. data/lib/action_view/renderable.rb +95 -0
  123. data/lib/action_view/renderable_partial.rb +47 -0
  124. data/lib/action_view/safe_buffer.rb +28 -0
  125. data/lib/action_view/template.rb +252 -0
  126. data/lib/action_view/template_error.rb +99 -0
  127. data/lib/action_view/template_handler.rb +34 -0
  128. data/lib/action_view/template_handlers/builder.rb +17 -0
  129. data/lib/action_view/template_handlers/erb.rb +22 -0
  130. data/lib/action_view/template_handlers/rjs.rb +13 -0
  131. data/lib/action_view/template_handlers.rb +48 -0
  132. data/lib/action_view/test_case.rb +162 -0
  133. data/lib/action_view.rb +58 -0
  134. data/lib/actionpack.rb +2 -0
  135. data/test/abstract_unit.rb +61 -0
  136. data/test/active_record_unit.rb +104 -0
  137. data/test/activerecord/active_record_store_test.rb +174 -0
  138. data/test/activerecord/render_partial_with_record_identification_test.rb +188 -0
  139. data/test/adv_attr_test.rb +20 -0
  140. data/test/controller/action_pack_assertions_test.rb +543 -0
  141. data/test/controller/addresses_render_test.rb +37 -0
  142. data/test/controller/assert_select_test.rb +734 -0
  143. data/test/controller/base_test.rb +217 -0
  144. data/test/controller/benchmark_test.rb +32 -0
  145. data/test/controller/caching_test.rb +729 -0
  146. data/test/controller/capture_test.rb +66 -0
  147. data/test/controller/content_type_test.rb +168 -0
  148. data/test/controller/controller_fixtures/app/controllers/admin/user_controller.rb +0 -0
  149. data/test/controller/controller_fixtures/app/controllers/user_controller.rb +0 -0
  150. data/test/controller/controller_fixtures/vendor/plugins/bad_plugin/lib/plugin_controller.rb +0 -0
  151. data/test/controller/cookie_test.rb +134 -0
  152. data/test/controller/deprecation/deprecated_base_methods_test.rb +32 -0
  153. data/test/controller/dispatcher_test.rb +144 -0
  154. data/test/controller/dom_assertions_test.rb +53 -0
  155. data/test/controller/failsafe_test.rb +60 -0
  156. data/test/controller/fake_controllers.rb +33 -0
  157. data/test/controller/fake_models.rb +19 -0
  158. data/test/controller/filter_params_test.rb +52 -0
  159. data/test/controller/filters_test.rb +885 -0
  160. data/test/controller/flash_test.rb +147 -0
  161. data/test/controller/header_test.rb +14 -0
  162. data/test/controller/helper_test.rb +224 -0
  163. data/test/controller/html-scanner/cdata_node_test.rb +15 -0
  164. data/test/controller/html-scanner/document_test.rb +148 -0
  165. data/test/controller/html-scanner/node_test.rb +89 -0
  166. data/test/controller/html-scanner/sanitizer_test.rb +274 -0
  167. data/test/controller/html-scanner/tag_node_test.rb +238 -0
  168. data/test/controller/html-scanner/text_node_test.rb +50 -0
  169. data/test/controller/html-scanner/tokenizer_test.rb +131 -0
  170. data/test/controller/http_basic_authentication_test.rb +113 -0
  171. data/test/controller/http_digest_authentication_test.rb +254 -0
  172. data/test/controller/integration_test.rb +483 -0
  173. data/test/controller/layout_test.rb +215 -0
  174. data/test/controller/logging_test.rb +46 -0
  175. data/test/controller/middleware_stack_test.rb +90 -0
  176. data/test/controller/mime_responds_test.rb +536 -0
  177. data/test/controller/mime_type_test.rb +93 -0
  178. data/test/controller/polymorphic_routes_test.rb +297 -0
  179. data/test/controller/rack_test.rb +311 -0
  180. data/test/controller/record_identifier_test.rb +139 -0
  181. data/test/controller/redirect_test.rb +285 -0
  182. data/test/controller/reloader_test.rb +124 -0
  183. data/test/controller/render_test.rb +1762 -0
  184. data/test/controller/request/json_params_parsing_test.rb +65 -0
  185. data/test/controller/request/multipart_params_parsing_test.rb +162 -0
  186. data/test/controller/request/query_string_parsing_test.rb +120 -0
  187. data/test/controller/request/test_request_test.rb +35 -0
  188. data/test/controller/request/url_encoded_params_parsing_test.rb +146 -0
  189. data/test/controller/request/xml_params_parsing_test.rb +103 -0
  190. data/test/controller/request_forgery_protection_test.rb +265 -0
  191. data/test/controller/request_test.rb +395 -0
  192. data/test/controller/rescue_test.rb +536 -0
  193. data/test/controller/resources_test.rb +1393 -0
  194. data/test/controller/routing_test.rb +2591 -0
  195. data/test/controller/selector_test.rb +628 -0
  196. data/test/controller/send_file_test.rb +171 -0
  197. data/test/controller/session/cookie_store_test.rb +216 -0
  198. data/test/controller/session/mem_cache_store_test.rb +127 -0
  199. data/test/controller/session/test_session_test.rb +58 -0
  200. data/test/controller/test_test.rb +700 -0
  201. data/test/controller/translation_test.rb +26 -0
  202. data/test/controller/url_rewriter_test.rb +385 -0
  203. data/test/controller/verification_test.rb +270 -0
  204. data/test/controller/view_paths_test.rb +141 -0
  205. data/test/controller/webservice_test.rb +273 -0
  206. data/test/fixtures/_top_level_partial.html.erb +1 -0
  207. data/test/fixtures/_top_level_partial_only.erb +1 -0
  208. data/test/fixtures/addresses/list.erb +1 -0
  209. data/test/fixtures/alternate_helpers/foo_helper.rb +3 -0
  210. data/test/fixtures/bad_customers/_bad_customer.html.erb +1 -0
  211. data/test/fixtures/companies.yml +24 -0
  212. data/test/fixtures/company.rb +10 -0
  213. data/test/fixtures/content_type/render_default_content_types_for_respond_to.rhtml +1 -0
  214. data/test/fixtures/content_type/render_default_for_rhtml.rhtml +1 -0
  215. data/test/fixtures/content_type/render_default_for_rjs.rjs +1 -0
  216. data/test/fixtures/content_type/render_default_for_rxml.rxml +1 -0
  217. data/test/fixtures/customers/_customer.html.erb +1 -0
  218. data/test/fixtures/db_definitions/sqlite.sql +49 -0
  219. data/test/fixtures/developer.rb +9 -0
  220. data/test/fixtures/developers/_developer.erb +1 -0
  221. data/test/fixtures/developers.yml +21 -0
  222. data/test/fixtures/developers_projects.yml +13 -0
  223. data/test/fixtures/failsafe/500.html +1 -0
  224. data/test/fixtures/fun/games/_game.erb +1 -0
  225. data/test/fixtures/fun/games/hello_world.erb +1 -0
  226. data/test/fixtures/fun/serious/games/_game.erb +1 -0
  227. data/test/fixtures/functional_caching/_partial.erb +3 -0
  228. data/test/fixtures/functional_caching/formatted_fragment_cached.html.erb +3 -0
  229. data/test/fixtures/functional_caching/formatted_fragment_cached.js.rjs +6 -0
  230. data/test/fixtures/functional_caching/formatted_fragment_cached.xml.builder +5 -0
  231. data/test/fixtures/functional_caching/fragment_cached.html.erb +2 -0
  232. data/test/fixtures/functional_caching/html_fragment_cached_with_partial.html.erb +1 -0
  233. data/test/fixtures/functional_caching/inline_fragment_cached.html.erb +2 -0
  234. data/test/fixtures/functional_caching/js_fragment_cached_with_partial.js.rjs +1 -0
  235. data/test/fixtures/good_customers/_good_customer.html.erb +1 -0
  236. data/test/fixtures/helpers/abc_helper.rb +5 -0
  237. data/test/fixtures/helpers/fun/games_helper.rb +3 -0
  238. data/test/fixtures/helpers/fun/pdf_helper.rb +3 -0
  239. data/test/fixtures/layout_tests/abs_path_layout.rhtml +1 -0
  240. data/test/fixtures/layout_tests/alt/hello.rhtml +1 -0
  241. data/test/fixtures/layout_tests/alt/layouts/alt.rhtml +0 -0
  242. data/test/fixtures/layout_tests/layouts/controller_name_space/nested.rhtml +1 -0
  243. data/test/fixtures/layout_tests/layouts/item.rhtml +1 -0
  244. data/test/fixtures/layout_tests/layouts/layout_test.rhtml +1 -0
  245. data/test/fixtures/layout_tests/layouts/multiple_extensions.html.erb +1 -0
  246. data/test/fixtures/layout_tests/layouts/third_party_template_library.mab +1 -0
  247. data/test/fixtures/layout_tests/views/hello.rhtml +1 -0
  248. data/test/fixtures/layouts/_column.html.erb +2 -0
  249. data/test/fixtures/layouts/block_with_layout.erb +3 -0
  250. data/test/fixtures/layouts/builder.builder +3 -0
  251. data/test/fixtures/layouts/default_html.html.erb +1 -0
  252. data/test/fixtures/layouts/partial_with_layout.erb +3 -0
  253. data/test/fixtures/layouts/standard.erb +1 -0
  254. data/test/fixtures/layouts/talk_from_action.erb +2 -0
  255. data/test/fixtures/layouts/xhr.html.erb +2 -0
  256. data/test/fixtures/layouts/yield.erb +2 -0
  257. data/test/fixtures/mascot.rb +3 -0
  258. data/test/fixtures/mascots/_mascot.html.erb +1 -0
  259. data/test/fixtures/mascots.yml +4 -0
  260. data/test/fixtures/multipart/binary_file +0 -0
  261. data/test/fixtures/multipart/boundary_problem_file +10 -0
  262. data/test/fixtures/multipart/bracketed_param +5 -0
  263. data/test/fixtures/multipart/empty +10 -0
  264. data/test/fixtures/multipart/hello.txt +1 -0
  265. data/test/fixtures/multipart/large_text_file +10 -0
  266. data/test/fixtures/multipart/mixed_files +0 -0
  267. data/test/fixtures/multipart/mona_lisa.jpg +0 -0
  268. data/test/fixtures/multipart/none +9 -0
  269. data/test/fixtures/multipart/single_parameter +5 -0
  270. data/test/fixtures/multipart/text_file +10 -0
  271. data/test/fixtures/override/test/hello_world.erb +1 -0
  272. data/test/fixtures/override2/layouts/test/sub.erb +1 -0
  273. data/test/fixtures/post_test/layouts/post.html.erb +1 -0
  274. data/test/fixtures/post_test/layouts/super_post.iphone.erb +1 -0
  275. data/test/fixtures/post_test/post/index.html.erb +1 -0
  276. data/test/fixtures/post_test/post/index.iphone.erb +1 -0
  277. data/test/fixtures/post_test/super_post/index.html.erb +1 -0
  278. data/test/fixtures/post_test/super_post/index.iphone.erb +1 -0
  279. data/test/fixtures/project.rb +3 -0
  280. data/test/fixtures/projects/_project.erb +1 -0
  281. data/test/fixtures/projects.yml +7 -0
  282. data/test/fixtures/public/404.html +1 -0
  283. data/test/fixtures/public/500.da.html +1 -0
  284. data/test/fixtures/public/500.html +1 -0
  285. data/test/fixtures/public/absolute/test.css +23 -0
  286. data/test/fixtures/public/absolute/test.js +63 -0
  287. data/test/fixtures/public/images/rails.png +0 -0
  288. data/test/fixtures/public/javascripts/application.js +1 -0
  289. data/test/fixtures/public/javascripts/bank.js +1 -0
  290. data/test/fixtures/public/javascripts/controls.js +1 -0
  291. data/test/fixtures/public/javascripts/dragdrop.js +1 -0
  292. data/test/fixtures/public/javascripts/effects.js +1 -0
  293. data/test/fixtures/public/javascripts/prototype.js +1 -0
  294. data/test/fixtures/public/javascripts/robber.js +1 -0
  295. data/test/fixtures/public/javascripts/subdir/subdir.js +1 -0
  296. data/test/fixtures/public/javascripts/version.1.0.js +1 -0
  297. data/test/fixtures/public/stylesheets/bank.css +1 -0
  298. data/test/fixtures/public/stylesheets/robber.css +1 -0
  299. data/test/fixtures/public/stylesheets/subdir/subdir.css +1 -0
  300. data/test/fixtures/public/stylesheets/version.1.0.css +1 -0
  301. data/test/fixtures/quiz/questions/_question.html.erb +1 -0
  302. data/test/fixtures/replies/_reply.erb +1 -0
  303. data/test/fixtures/replies.yml +15 -0
  304. data/test/fixtures/reply.rb +7 -0
  305. data/test/fixtures/respond_to/all_types_with_layout.html.erb +1 -0
  306. data/test/fixtures/respond_to/all_types_with_layout.js.rjs +1 -0
  307. data/test/fixtures/respond_to/custom_constant_handling_without_block.mobile.erb +1 -0
  308. data/test/fixtures/respond_to/iphone_with_html_response_type.html.erb +1 -0
  309. data/test/fixtures/respond_to/iphone_with_html_response_type.iphone.erb +1 -0
  310. data/test/fixtures/respond_to/layouts/missing.html.erb +1 -0
  311. data/test/fixtures/respond_to/layouts/standard.html.erb +1 -0
  312. data/test/fixtures/respond_to/layouts/standard.iphone.erb +1 -0
  313. data/test/fixtures/respond_to/using_defaults.html.erb +1 -0
  314. data/test/fixtures/respond_to/using_defaults.js.rjs +1 -0
  315. data/test/fixtures/respond_to/using_defaults.xml.builder +1 -0
  316. data/test/fixtures/respond_to/using_defaults_with_type_list.html.erb +1 -0
  317. data/test/fixtures/respond_to/using_defaults_with_type_list.js.rjs +1 -0
  318. data/test/fixtures/respond_to/using_defaults_with_type_list.xml.builder +1 -0
  319. data/test/fixtures/scope/test/modgreet.erb +1 -0
  320. data/test/fixtures/shared.html.erb +1 -0
  321. data/test/fixtures/symlink_parent/symlinked_layout.erb +5 -0
  322. data/test/fixtures/test/_counter.html.erb +1 -0
  323. data/test/fixtures/test/_customer.erb +1 -0
  324. data/test/fixtures/test/_customer_counter.erb +1 -0
  325. data/test/fixtures/test/_customer_greeting.erb +1 -0
  326. data/test/fixtures/test/_customer_with_var.erb +1 -0
  327. data/test/fixtures/test/_form.erb +1 -0
  328. data/test/fixtures/test/_from_helper.erb +1 -0
  329. data/test/fixtures/test/_hash_greeting.erb +1 -0
  330. data/test/fixtures/test/_hash_object.erb +2 -0
  331. data/test/fixtures/test/_hello.builder +1 -0
  332. data/test/fixtures/test/_labelling_form.erb +1 -0
  333. data/test/fixtures/test/_layout_for_block_with_args.html.erb +3 -0
  334. data/test/fixtures/test/_layout_for_partial.html.erb +3 -0
  335. data/test/fixtures/test/_local_inspector.html.erb +1 -0
  336. data/test/fixtures/test/_one.html.erb +1 -0
  337. data/test/fixtures/test/_partial.erb +1 -0
  338. data/test/fixtures/test/_partial.html.erb +1 -0
  339. data/test/fixtures/test/_partial.js.erb +1 -0
  340. data/test/fixtures/test/_partial_for_use_in_layout.html.erb +1 -0
  341. data/test/fixtures/test/_partial_only.erb +1 -0
  342. data/test/fixtures/test/_partial_with_only_html_version.html.erb +1 -0
  343. data/test/fixtures/test/_person.erb +2 -0
  344. data/test/fixtures/test/_raise.html.erb +1 -0
  345. data/test/fixtures/test/_two.html.erb +1 -0
  346. data/test/fixtures/test/action_talk_to_layout.erb +2 -0
  347. data/test/fixtures/test/calling_partial_with_layout.html.erb +1 -0
  348. data/test/fixtures/test/capturing.erb +4 -0
  349. data/test/fixtures/test/content_for.erb +2 -0
  350. data/test/fixtures/test/content_for_concatenated.erb +3 -0
  351. data/test/fixtures/test/content_for_with_parameter.erb +2 -0
  352. data/test/fixtures/test/delete_with_js.rjs +2 -0
  353. data/test/fixtures/test/dont_pick_me +1 -0
  354. data/test/fixtures/test/dot.directory/render_file_with_ivar.erb +1 -0
  355. data/test/fixtures/test/enum_rjs_test.rjs +6 -0
  356. data/test/fixtures/test/formatted_html_erb.html.erb +1 -0
  357. data/test/fixtures/test/formatted_xml_erb.builder +1 -0
  358. data/test/fixtures/test/formatted_xml_erb.html.erb +1 -0
  359. data/test/fixtures/test/formatted_xml_erb.xml.erb +1 -0
  360. data/test/fixtures/test/greeting.erb +1 -0
  361. data/test/fixtures/test/greeting.js.rjs +1 -0
  362. data/test/fixtures/test/hello.builder +4 -0
  363. data/test/fixtures/test/hello_world.da.html.erb +1 -0
  364. data/test/fixtures/test/hello_world.erb +1 -0
  365. data/test/fixtures/test/hello_world.erb~ +1 -0
  366. data/test/fixtures/test/hello_world.pt-BR.html.erb +1 -0
  367. data/test/fixtures/test/hello_world_container.builder +3 -0
  368. data/test/fixtures/test/hello_world_from_rxml.builder +4 -0
  369. data/test/fixtures/test/hello_world_with_layout_false.erb +1 -0
  370. data/test/fixtures/test/hello_xml_world.builder +11 -0
  371. data/test/fixtures/test/hyphen-ated.erb +1 -0
  372. data/test/fixtures/test/implicit_content_type.atom.builder +2 -0
  373. data/test/fixtures/test/list.erb +1 -0
  374. data/test/fixtures/test/malformed/malformed.en.html.erb~ +1 -0
  375. data/test/fixtures/test/malformed/malformed.erb~ +1 -0
  376. data/test/fixtures/test/malformed/malformed.html.erb~ +1 -0
  377. data/test/fixtures/test/nested_layout.erb +3 -0
  378. data/test/fixtures/test/non_erb_block_content_for.builder +4 -0
  379. data/test/fixtures/test/potential_conflicts.erb +4 -0
  380. data/test/fixtures/test/render_explicit_html_template.js.rjs +1 -0
  381. data/test/fixtures/test/render_file_from_template.html.erb +1 -0
  382. data/test/fixtures/test/render_file_with_ivar.erb +1 -0
  383. data/test/fixtures/test/render_file_with_locals.erb +1 -0
  384. data/test/fixtures/test/render_implicit_html_template.js.rjs +1 -0
  385. data/test/fixtures/test/render_implicit_html_template_from_xhr_request.da.html.erb +1 -0
  386. data/test/fixtures/test/render_implicit_html_template_from_xhr_request.html.erb +1 -0
  387. data/test/fixtures/test/render_implicit_js_template_without_layout.js.erb +1 -0
  388. data/test/fixtures/test/render_to_string_test.erb +1 -0
  389. data/test/fixtures/test/sub_template_raise.html.erb +1 -0
  390. data/test/fixtures/test/template.erb +1 -0
  391. data/test/fixtures/test/update_element_with_capture.erb +9 -0
  392. data/test/fixtures/test/using_layout_around_block.html.erb +1 -0
  393. data/test/fixtures/test/using_layout_around_block_with_args.html.erb +1 -0
  394. data/test/fixtures/test/utf8.html.erb +2 -0
  395. data/test/fixtures/topic.rb +3 -0
  396. data/test/fixtures/topics/_topic.html.erb +1 -0
  397. data/test/fixtures/topics.yml +22 -0
  398. data/test/template/active_record_helper_i18n_test.rb +44 -0
  399. data/test/template/active_record_helper_test.rb +302 -0
  400. data/test/template/asset_tag_helper_test.rb +771 -0
  401. data/test/template/atom_feed_helper_test.rb +315 -0
  402. data/test/template/benchmark_helper_test.rb +86 -0
  403. data/test/template/compiled_templates_test.rb +204 -0
  404. data/test/template/date_helper_i18n_test.rb +121 -0
  405. data/test/template/date_helper_test.rb +2485 -0
  406. data/test/template/erb_util_test.rb +24 -0
  407. data/test/template/form_helper_test.rb +1393 -0
  408. data/test/template/form_options_helper_i18n_test.rb +27 -0
  409. data/test/template/form_options_helper_test.rb +807 -0
  410. data/test/template/form_tag_helper_test.rb +344 -0
  411. data/test/template/javascript_helper_test.rb +106 -0
  412. data/test/template/number_helper_i18n_test.rb +69 -0
  413. data/test/template/number_helper_test.rb +132 -0
  414. data/test/template/prototype_helper_test.rb +639 -0
  415. data/test/template/raw_output_helper_test.rb +21 -0
  416. data/test/template/record_tag_helper_test.rb +58 -0
  417. data/test/template/render_test.rb +290 -0
  418. data/test/template/sanitize_helper_test.rb +57 -0
  419. data/test/template/scriptaculous_helper_test.rb +90 -0
  420. data/test/template/tag_helper_test.rb +98 -0
  421. data/test/template/template_test.rb +32 -0
  422. data/test/template/test_test.rb +54 -0
  423. data/test/template/text_helper_test.rb +543 -0
  424. data/test/template/translation_helper_test.rb +32 -0
  425. data/test/template/url_helper_test.rb +622 -0
  426. data/test/testing_sandbox.rb +15 -0
  427. data/test/view/safe_buffer_test.rb +36 -0
  428. data/test/view/test_case_test.rb +176 -0
  429. metadata +531 -0
@@ -0,0 +1,483 @@
1
+ require 'abstract_unit'
2
+
3
+ class SessionTest < Test::Unit::TestCase
4
+ StubApp = lambda { |env|
5
+ [200, {"Content-Type" => "text/html", "Content-Length" => "13"}, ["Hello, World!"]]
6
+ }
7
+
8
+ def setup
9
+ @session = ActionController::Integration::Session.new(StubApp)
10
+ end
11
+
12
+ def test_https_bang_works_and_sets_truth_by_default
13
+ assert !@session.https?
14
+ @session.https!
15
+ assert @session.https?
16
+ @session.https! false
17
+ assert !@session.https?
18
+ end
19
+
20
+ def test_host!
21
+ assert_not_equal "glu.ttono.us", @session.host
22
+ @session.host! "rubyonrails.com"
23
+ assert_equal "rubyonrails.com", @session.host
24
+ end
25
+
26
+ def test_follow_redirect_raises_when_no_redirect
27
+ @session.stubs(:redirect?).returns(false)
28
+ assert_raise(RuntimeError) { @session.follow_redirect! }
29
+ end
30
+
31
+ def test_request_via_redirect_uses_given_method
32
+ path = "/somepath"; args = {:id => '1'}; headers = {"X-Test-Header" => "testvalue"}
33
+ @session.expects(:put).with(path, args, headers)
34
+ @session.stubs(:redirect?).returns(false)
35
+ @session.request_via_redirect(:put, path, args, headers)
36
+ end
37
+
38
+ def test_request_via_redirect_follows_redirects
39
+ path = "/somepath"; args = {:id => '1'}; headers = {"X-Test-Header" => "testvalue"}
40
+ @session.stubs(:redirect?).returns(true, true, false)
41
+ @session.expects(:follow_redirect!).times(2)
42
+ @session.request_via_redirect(:get, path, args, headers)
43
+ end
44
+
45
+ def test_request_via_redirect_returns_status
46
+ path = "/somepath"; args = {:id => '1'}; headers = {"X-Test-Header" => "testvalue"}
47
+ @session.stubs(:redirect?).returns(false)
48
+ @session.stubs(:status).returns(200)
49
+ assert_equal 200, @session.request_via_redirect(:get, path, args, headers)
50
+ end
51
+
52
+ def test_get_via_redirect
53
+ path = "/somepath"; args = {:id => '1'}; headers = {"X-Test-Header" => "testvalue" }
54
+ @session.expects(:request_via_redirect).with(:get, path, args, headers)
55
+ @session.get_via_redirect(path, args, headers)
56
+ end
57
+
58
+ def test_post_via_redirect
59
+ path = "/somepath"; args = {:id => '1'}; headers = {"X-Test-Header" => "testvalue" }
60
+ @session.expects(:request_via_redirect).with(:post, path, args, headers)
61
+ @session.post_via_redirect(path, args, headers)
62
+ end
63
+
64
+ def test_put_via_redirect
65
+ path = "/somepath"; args = {:id => '1'}; headers = {"X-Test-Header" => "testvalue" }
66
+ @session.expects(:request_via_redirect).with(:put, path, args, headers)
67
+ @session.put_via_redirect(path, args, headers)
68
+ end
69
+
70
+ def test_delete_via_redirect
71
+ path = "/somepath"; args = {:id => '1'}; headers = {"X-Test-Header" => "testvalue" }
72
+ @session.expects(:request_via_redirect).with(:delete, path, args, headers)
73
+ @session.delete_via_redirect(path, args, headers)
74
+ end
75
+
76
+ def test_url_for_with_controller
77
+ options = {:action => 'show'}
78
+ mock_controller = mock()
79
+ mock_controller.expects(:url_for).with(options).returns('/show')
80
+ @session.stubs(:controller).returns(mock_controller)
81
+ assert_equal '/show', @session.url_for(options)
82
+ end
83
+
84
+ def test_url_for_without_controller
85
+ options = {:action => 'show'}
86
+ mock_rewriter = mock()
87
+ mock_rewriter.expects(:rewrite).with(options).returns('/show')
88
+ @session.stubs(:generic_url_rewriter).returns(mock_rewriter)
89
+ @session.stubs(:controller).returns(nil)
90
+ assert_equal '/show', @session.url_for(options)
91
+ end
92
+
93
+ def test_redirect_bool_with_status_in_300s
94
+ @session.stubs(:status).returns 301
95
+ assert @session.redirect?
96
+ end
97
+
98
+ def test_redirect_bool_with_status_in_200s
99
+ @session.stubs(:status).returns 200
100
+ assert !@session.redirect?
101
+ end
102
+
103
+ def test_get
104
+ path = "/index"; params = "blah"; headers = {:location => 'blah'}
105
+ @session.expects(:process).with(:get,path,params,headers)
106
+ @session.get(path,params,headers)
107
+ end
108
+
109
+ def test_post
110
+ path = "/index"; params = "blah"; headers = {:location => 'blah'}
111
+ @session.expects(:process).with(:post,path,params,headers)
112
+ @session.post(path,params,headers)
113
+ end
114
+
115
+ def test_put
116
+ path = "/index"; params = "blah"; headers = {:location => 'blah'}
117
+ @session.expects(:process).with(:put,path,params,headers)
118
+ @session.put(path,params,headers)
119
+ end
120
+
121
+ def test_delete
122
+ path = "/index"; params = "blah"; headers = {:location => 'blah'}
123
+ @session.expects(:process).with(:delete,path,params,headers)
124
+ @session.delete(path,params,headers)
125
+ end
126
+
127
+ def test_head
128
+ path = "/index"; params = "blah"; headers = {:location => 'blah'}
129
+ @session.expects(:process).with(:head,path,params,headers)
130
+ @session.head(path,params,headers)
131
+ end
132
+
133
+ def test_xml_http_request_get
134
+ path = "/index"; params = "blah"; headers = {:location => 'blah'}
135
+ headers_after_xhr = headers.merge(
136
+ "X-Requested-With" => "XMLHttpRequest",
137
+ "Accept" => "text/javascript, text/html, application/xml, text/xml, */*"
138
+ )
139
+ @session.expects(:process).with(:get,path,params,headers_after_xhr)
140
+ @session.xml_http_request(:get,path,params,headers)
141
+ end
142
+
143
+ def test_xml_http_request_post
144
+ path = "/index"; params = "blah"; headers = {:location => 'blah'}
145
+ headers_after_xhr = headers.merge(
146
+ "X-Requested-With" => "XMLHttpRequest",
147
+ "Accept" => "text/javascript, text/html, application/xml, text/xml, */*"
148
+ )
149
+ @session.expects(:process).with(:post,path,params,headers_after_xhr)
150
+ @session.xml_http_request(:post,path,params,headers)
151
+ end
152
+
153
+ def test_xml_http_request_put
154
+ path = "/index"; params = "blah"; headers = {:location => 'blah'}
155
+ headers_after_xhr = headers.merge(
156
+ "X-Requested-With" => "XMLHttpRequest",
157
+ "Accept" => "text/javascript, text/html, application/xml, text/xml, */*"
158
+ )
159
+ @session.expects(:process).with(:put,path,params,headers_after_xhr)
160
+ @session.xml_http_request(:put,path,params,headers)
161
+ end
162
+
163
+ def test_xml_http_request_delete
164
+ path = "/index"; params = "blah"; headers = {:location => 'blah'}
165
+ headers_after_xhr = headers.merge(
166
+ "X-Requested-With" => "XMLHttpRequest",
167
+ "Accept" => "text/javascript, text/html, application/xml, text/xml, */*"
168
+ )
169
+ @session.expects(:process).with(:delete,path,params,headers_after_xhr)
170
+ @session.xml_http_request(:delete,path,params,headers)
171
+ end
172
+
173
+ def test_xml_http_request_head
174
+ path = "/index"; params = "blah"; headers = {:location => 'blah'}
175
+ headers_after_xhr = headers.merge(
176
+ "X-Requested-With" => "XMLHttpRequest",
177
+ "Accept" => "text/javascript, text/html, application/xml, text/xml, */*"
178
+ )
179
+ @session.expects(:process).with(:head,path,params,headers_after_xhr)
180
+ @session.xml_http_request(:head,path,params,headers)
181
+ end
182
+
183
+ def test_xml_http_request_override_accept
184
+ path = "/index"; params = "blah"; headers = {:location => 'blah', "Accept" => "application/xml"}
185
+ headers_after_xhr = headers.merge(
186
+ "X-Requested-With" => "XMLHttpRequest"
187
+ )
188
+ @session.expects(:process).with(:post,path,params,headers_after_xhr)
189
+ @session.xml_http_request(:post,path,params,headers)
190
+ end
191
+ end
192
+
193
+ class IntegrationTestTest < Test::Unit::TestCase
194
+ def setup
195
+ @test = ::ActionController::IntegrationTest.new(:default_test)
196
+ @test.class.stubs(:fixture_table_names).returns([])
197
+ @session = @test.open_session
198
+ end
199
+
200
+ def test_opens_new_session
201
+ @test.class.expects(:fixture_table_names).times(2).returns(['foo'])
202
+
203
+ session1 = @test.open_session { |sess| }
204
+ session2 = @test.open_session # implicit session
205
+
206
+ assert_equal ::ActionController::Integration::Session, session1.class
207
+ assert_equal ::ActionController::Integration::Session, session2.class
208
+ assert_not_equal session1, session2
209
+ end
210
+
211
+ # RSpec mixes Matchers (which has a #method_missing) into
212
+ # IntegrationTest's superclass. Make sure IntegrationTest does not
213
+ # try to delegate these methods to the session object.
214
+ def test_does_not_prevent_method_missing_passing_up_to_ancestors
215
+ mixin = Module.new do
216
+ def method_missing(name, *args)
217
+ name.to_s == 'foo' ? 'pass' : super
218
+ end
219
+ end
220
+ @test.class.superclass.__send__(:include, mixin)
221
+ begin
222
+ assert_equal 'pass', @test.foo
223
+ ensure
224
+ # leave other tests as unaffected as possible
225
+ mixin.__send__(:remove_method, :method_missing)
226
+ end
227
+ end
228
+ end
229
+
230
+ # Tests that integration tests don't call Controller test methods for processing.
231
+ # Integration tests have their own setup and teardown.
232
+ class IntegrationTestUsesCorrectClass < ActionController::IntegrationTest
233
+ def self.fixture_table_names
234
+ []
235
+ end
236
+
237
+ def test_integration_methods_called
238
+ reset!
239
+ @integration_session.stubs(:generic_url_rewriter)
240
+ @integration_session.stubs(:process)
241
+
242
+ %w( get post head put delete ).each do |verb|
243
+ assert_nothing_raised("'#{verb}' should use integration test methods") { __send__(verb, '/') }
244
+ end
245
+ end
246
+ end
247
+
248
+ class IntegrationProcessTest < ActionController::IntegrationTest
249
+ class IntegrationController < ActionController::Base
250
+ def get
251
+ respond_to do |format|
252
+ format.html { render :text => "OK", :status => 200 }
253
+ format.js { render :text => "JS OK", :status => 200 }
254
+ end
255
+ end
256
+
257
+ def get_with_params
258
+ render :text => "foo: #{params[:foo]}", :status => 200
259
+ end
260
+
261
+ def post_with_multiparameter_params
262
+ render :text => "foo(1i): #{params[:"foo(1i)"]}, foo(2i): #{params[:"foo(2i)"]}", :status => 200
263
+ end
264
+
265
+ def multipart_post_with_multiparameter_params
266
+ render :text => "foo(1i): #{params[:"foo(1i)"]}, foo(2i): #{params[:"foo(2i)"]}, filesize: #{params[:file].size}", :status => 200
267
+ end
268
+
269
+ def post
270
+ render :text => "Created", :status => 201
271
+ end
272
+
273
+ def cookie_monster
274
+ cookies["cookie_1"] = nil
275
+ cookies["cookie_3"] = "chocolate"
276
+ render :text => "Gone", :status => 410
277
+ end
278
+
279
+ def redirect
280
+ redirect_to :action => "get"
281
+ end
282
+ end
283
+
284
+ FILES_DIR = File.dirname(__FILE__) + '/../fixtures/multipart'
285
+
286
+ def test_get
287
+ with_test_route_set do
288
+ get '/get'
289
+ assert_equal 200, status
290
+ assert_equal "OK", status_message
291
+ assert_response 200
292
+ assert_response :success
293
+ assert_response :ok
294
+ assert_equal({}, cookies)
295
+ assert_equal "OK", body
296
+ assert_equal "OK", response.body
297
+ assert_kind_of HTML::Document, html_document
298
+ assert_equal 1, request_count
299
+ end
300
+ end
301
+
302
+ def test_post
303
+ with_test_route_set do
304
+ post '/post'
305
+ assert_equal 201, status
306
+ assert_equal "Created", status_message
307
+ assert_response 201
308
+ assert_response :success
309
+ assert_response :created
310
+ assert_equal({}, cookies)
311
+ assert_equal "Created", body
312
+ assert_equal "Created", response.body
313
+ assert_kind_of HTML::Document, html_document
314
+ assert_equal 1, request_count
315
+ end
316
+ end
317
+
318
+ def test_cookie_monster
319
+ with_test_route_set do
320
+ self.cookies['cookie_1'] = "sugar"
321
+ self.cookies['cookie_2'] = "oatmeal"
322
+ get '/cookie_monster'
323
+ assert_equal 410, status
324
+ assert_equal "Gone", status_message
325
+ assert_response 410
326
+ assert_response :gone
327
+ assert_equal "cookie_1=; path=/\ncookie_3=chocolate; path=/", headers["Set-Cookie"]
328
+ assert_equal({"cookie_1"=>"", "cookie_2"=>"oatmeal", "cookie_3"=>"chocolate"}, cookies)
329
+ assert_equal "Gone", response.body
330
+ end
331
+ end
332
+
333
+ def test_redirect
334
+ with_test_route_set do
335
+ get '/redirect'
336
+ assert_equal 302, status
337
+ assert_equal "Found", status_message
338
+ assert_response 302
339
+ assert_response :redirect
340
+ assert_response :found
341
+ assert_equal "<html><body>You are being <a href=\"http://www.example.com/get\">redirected</a>.</body></html>", response.body
342
+ assert_kind_of HTML::Document, html_document
343
+ assert_equal 1, request_count
344
+
345
+ follow_redirect!
346
+ assert_response :success
347
+ assert_equal "/get", path
348
+ end
349
+ end
350
+
351
+ def test_xml_http_request_get
352
+ with_test_route_set do
353
+ xhr :get, '/get'
354
+ assert_equal 200, status
355
+ assert_equal "OK", status_message
356
+ assert_response 200
357
+ assert_response :success
358
+ assert_response :ok
359
+ assert_equal "JS OK", response.body
360
+ end
361
+ end
362
+
363
+ def test_get_with_query_string
364
+ with_test_route_set do
365
+ get '/get_with_params?foo=bar'
366
+ assert_equal '/get_with_params?foo=bar', request.env["REQUEST_URI"]
367
+ assert_equal '/get_with_params?foo=bar', request.request_uri
368
+ assert_equal "", request.env["QUERY_STRING"]
369
+ assert_equal 'foo=bar', request.query_string
370
+ assert_equal 'bar', request.parameters['foo']
371
+
372
+ assert_equal 200, status
373
+ assert_equal "foo: bar", response.body
374
+ end
375
+ end
376
+
377
+ def test_get_with_parameters
378
+ with_test_route_set do
379
+ get '/get_with_params', :foo => "bar"
380
+ assert_equal '/get_with_params', request.env["REQUEST_URI"]
381
+ assert_equal '/get_with_params', request.request_uri
382
+ assert_equal 'foo=bar', request.env["QUERY_STRING"]
383
+ assert_equal 'foo=bar', request.query_string
384
+ assert_equal 'bar', request.parameters['foo']
385
+
386
+ assert_equal 200, status
387
+ assert_equal "foo: bar", response.body
388
+ end
389
+ end
390
+
391
+ def test_post_with_multiparameter_attribute_parameters
392
+ with_test_route_set do
393
+ post '/post_with_multiparameter_params', :"foo(1i)" => "bar", :"foo(2i)" => "baz"
394
+
395
+ assert_equal 200, status
396
+ assert_equal "foo(1i): bar, foo(2i): baz", response.body
397
+ end
398
+ end
399
+
400
+ def test_multipart_post_with_multiparameter_attribute_parameters
401
+ with_test_route_set do
402
+ post '/multipart_post_with_multiparameter_params', :"foo(1i)" => "bar", :"foo(2i)" => "baz", :file => fixture_file_upload(FILES_DIR + "/mona_lisa.jpg", "image/jpg")
403
+
404
+ assert_equal 200, status
405
+ assert_equal "foo(1i): bar, foo(2i): baz, filesize: 159528", response.body
406
+ end
407
+ end
408
+
409
+ def test_head
410
+ with_test_route_set do
411
+ head '/get'
412
+ assert_equal 200, status
413
+ assert_equal "", body
414
+
415
+ head '/post'
416
+ assert_equal 201, status
417
+ assert_equal "", body
418
+ end
419
+ end
420
+
421
+ private
422
+ def with_test_route_set
423
+ with_routing do |set|
424
+ set.draw do |map|
425
+ map.with_options :controller => "IntegrationProcessTest::Integration" do |c|
426
+ c.connect "/:action"
427
+ end
428
+ end
429
+ yield
430
+ end
431
+ end
432
+ end
433
+
434
+ class MetalTest < ActionController::IntegrationTest
435
+ class Poller
436
+ def self.call(env)
437
+ if env["PATH_INFO"] =~ /^\/success/
438
+ [200, {"Content-Type" => "text/plain", "Content-Length" => "12"}, ["Hello World!"]]
439
+ else
440
+ [404, {"Content-Type" => "text/plain", "Content-Length" => "0"}, []]
441
+ end
442
+ end
443
+ end
444
+
445
+ def setup
446
+ @integration_session = ActionController::Integration::Session.new(Poller)
447
+ end
448
+
449
+ def test_successful_get
450
+ get "/success"
451
+ assert_response 200
452
+ assert_response :success
453
+ assert_response :ok
454
+ assert_equal "Hello World!", response.body
455
+ end
456
+
457
+ def test_failed_get
458
+ get "/failure"
459
+ assert_response 404
460
+ assert_response :not_found
461
+ assert_equal '', response.body
462
+ end
463
+ end
464
+
465
+ class StringSubclassBodyTest < ActionController::IntegrationTest
466
+ class SafeString < String
467
+ end
468
+
469
+ class SafeStringMiddleware
470
+ def self.call(env)
471
+ [200, {"Content-Type" => "text/plain", "Content-Length" => "12"}, [SafeString.new("Hello World!")]]
472
+ end
473
+ end
474
+
475
+ def setup
476
+ @integration_session = ActionController::Integration::Session.new(SafeStringMiddleware)
477
+ end
478
+
479
+ def test_string_subclass_body
480
+ get '/'
481
+ assert_equal 'Hello World!', response.body
482
+ end
483
+ end
@@ -0,0 +1,215 @@
1
+ require 'abstract_unit'
2
+
3
+ # The view_paths array must be set on Base and not LayoutTest so that LayoutTest's inherited
4
+ # method has access to the view_paths array when looking for a layout to automatically assign.
5
+ old_load_paths = ActionController::Base.view_paths
6
+
7
+ ActionView::Template::register_template_handler :mab,
8
+ lambda { |template| template.source.inspect }
9
+
10
+ ActionController::Base.view_paths = [ File.dirname(__FILE__) + '/../fixtures/layout_tests/' ]
11
+
12
+ class LayoutTest < ActionController::Base
13
+ def self.controller_path; 'views' end
14
+ self.view_paths = ActionController::Base.view_paths.dup
15
+ end
16
+
17
+ # Restore view_paths to previous value
18
+ ActionController::Base.view_paths = old_load_paths
19
+
20
+ class ProductController < LayoutTest
21
+ end
22
+
23
+ class ItemController < LayoutTest
24
+ end
25
+
26
+ class ThirdPartyTemplateLibraryController < LayoutTest
27
+ end
28
+
29
+ module ControllerNameSpace
30
+ end
31
+
32
+ class ControllerNameSpace::NestedController < LayoutTest
33
+ end
34
+
35
+ class MultipleExtensions < LayoutTest
36
+ end
37
+
38
+ class LayoutAutoDiscoveryTest < ActionController::TestCase
39
+ def setup
40
+ @request.host = "www.nextangle.com"
41
+ end
42
+
43
+ def test_application_layout_is_default_when_no_controller_match
44
+ @controller = ProductController.new
45
+ get :hello
46
+ assert_equal 'layout_test.rhtml hello.rhtml', @response.body
47
+ end
48
+
49
+ def test_controller_name_layout_name_match
50
+ @controller = ItemController.new
51
+ get :hello
52
+ assert_equal 'item.rhtml hello.rhtml', @response.body
53
+ end
54
+
55
+ def test_third_party_template_library_auto_discovers_layout
56
+ @controller = ThirdPartyTemplateLibraryController.new
57
+ get :hello
58
+ assert_equal 'layouts/third_party_template_library.mab', @controller.active_layout.to_s
59
+ assert_equal 'layouts/third_party_template_library', @response.layout
60
+ assert_response :success
61
+ assert_equal 'Mab', @response.body
62
+ end
63
+
64
+ def test_namespaced_controllers_auto_detect_layouts
65
+ @controller = ControllerNameSpace::NestedController.new
66
+ get :hello
67
+ assert_equal 'layouts/controller_name_space/nested', @controller.active_layout.to_s
68
+ assert_equal 'controller_name_space/nested.rhtml hello.rhtml', @response.body
69
+ end
70
+
71
+ def test_namespaced_controllers_auto_detect_layouts
72
+ @controller = MultipleExtensions.new
73
+ get :hello
74
+ assert_equal 'layouts/multiple_extensions.html.erb', @controller.active_layout.to_s
75
+ assert_equal 'multiple_extensions.html.erb hello.rhtml', @response.body.strip
76
+ end
77
+ end
78
+
79
+ class DefaultLayoutController < LayoutTest
80
+ end
81
+
82
+ class AbsolutePathLayoutController < LayoutTest
83
+ layout File.expand_path(File.expand_path(__FILE__) + '/../../fixtures/layout_tests/layouts/layout_test.rhtml')
84
+ end
85
+
86
+ class AbsolutePathWithoutLayoutsController < LayoutTest
87
+ # Absolute layout path without 'layouts' in it.
88
+ layout File.expand_path(File.expand_path(__FILE__) + '/../../fixtures/layout_tests/abs_path_layout.rhtml')
89
+ end
90
+
91
+ class HasOwnLayoutController < LayoutTest
92
+ layout 'item'
93
+ end
94
+
95
+ class PrependsViewPathController < LayoutTest
96
+ def hello
97
+ prepend_view_path File.dirname(__FILE__) + '/../fixtures/layout_tests/alt/'
98
+ render :layout => 'alt'
99
+ end
100
+ end
101
+
102
+ class SetsLayoutInRenderController < LayoutTest
103
+ def hello
104
+ render :layout => 'third_party_template_library'
105
+ end
106
+ end
107
+
108
+ class RendersNoLayoutController < LayoutTest
109
+ def hello
110
+ render :layout => false
111
+ end
112
+ end
113
+
114
+ class LayoutSetInResponseTest < ActionController::TestCase
115
+ def test_layout_set_when_using_default_layout
116
+ @controller = DefaultLayoutController.new
117
+ get :hello
118
+ assert_equal 'layouts/layout_test', @response.layout
119
+ end
120
+
121
+ def test_layout_set_when_set_in_controller
122
+ @controller = HasOwnLayoutController.new
123
+ get :hello
124
+ assert_equal 'layouts/item', @response.layout
125
+ end
126
+
127
+ def test_layout_set_when_using_render
128
+ @controller = SetsLayoutInRenderController.new
129
+ get :hello
130
+ assert_equal 'layouts/third_party_template_library', @response.layout
131
+ end
132
+
133
+ def test_layout_is_not_set_when_none_rendered
134
+ @controller = RendersNoLayoutController.new
135
+ get :hello
136
+ assert_nil @response.layout
137
+ end
138
+
139
+ def test_exempt_from_layout_honored_by_render_template
140
+ ActionController::Base.exempt_from_layout :rhtml
141
+ @controller = RenderWithTemplateOptionController.new
142
+
143
+ get :hello
144
+ assert_equal "alt/hello.rhtml", @response.body.strip
145
+
146
+ ensure
147
+ ActionController::Base.exempt_from_layout.delete(/\.rhtml$/)
148
+ end
149
+
150
+ def test_layout_is_picked_from_the_controller_instances_view_path
151
+ @controller = PrependsViewPathController.new
152
+ get :hello
153
+ assert_equal 'layouts/alt', @response.layout
154
+ end
155
+
156
+ def test_absolute_pathed_layout
157
+ @controller = AbsolutePathLayoutController.new
158
+ get :hello
159
+ assert_equal "layout_test.rhtml hello.rhtml", @response.body.strip
160
+ end
161
+
162
+ def test_absolute_pathed_layout_without_layouts_in_path
163
+ @controller = AbsolutePathWithoutLayoutsController.new
164
+ get :hello
165
+ assert_equal "abs_path_layout.rhtml hello.rhtml", @response.body.strip
166
+ end
167
+ end
168
+
169
+ class RenderWithTemplateOptionController < LayoutTest
170
+ def hello
171
+ render :template => 'alt/hello'
172
+ end
173
+ end
174
+
175
+ class SetsNonExistentLayoutFile < LayoutTest
176
+ layout "nofile.rhtml"
177
+ end
178
+
179
+ class LayoutExceptionRaised < ActionController::TestCase
180
+ def test_exception_raised_when_layout_file_not_found
181
+ @controller = SetsNonExistentLayoutFile.new
182
+ get :hello
183
+ assert_kind_of ActionView::MissingTemplate, @response.template.instance_eval { @exception }
184
+ end
185
+ end
186
+
187
+ class LayoutStatusIsRendered < LayoutTest
188
+ def hello
189
+ render :status => 401
190
+ end
191
+ end
192
+
193
+ class LayoutStatusIsRenderedTest < ActionController::TestCase
194
+ def test_layout_status_is_rendered
195
+ @controller = LayoutStatusIsRendered.new
196
+ get :hello
197
+ assert_response 401
198
+ end
199
+ end
200
+
201
+ unless RUBY_PLATFORM =~ /(:?mswin|mingw|bccwin)/
202
+ class LayoutSymlinkedTest < LayoutTest
203
+ layout "symlinked/symlinked_layout"
204
+ end
205
+
206
+ class LayoutSymlinkedIsRenderedTest < ActionController::TestCase
207
+ def test_symlinked_layout_is_rendered
208
+ @controller = LayoutSymlinkedTest.new
209
+ get :hello
210
+ assert_response 200
211
+ assert_equal "layouts/symlinked/symlinked_layout", @response.layout
212
+ end
213
+ end
214
+ end
215
+