actionpack-rack-upgrade 2.3.14

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 (441) hide show
  1. data/CHANGELOG +5250 -0
  2. data/MIT-LICENSE +21 -0
  3. data/README +409 -0
  4. data/RUNNING_UNIT_TESTS +24 -0
  5. data/Rakefile +158 -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 +169 -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 +1425 -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 +197 -0
  27. data/lib/action_controller/dispatcher.rb +133 -0
  28. data/lib/action_controller/failsafe.rb +87 -0
  29. data/lib/action_controller/filters.rb +680 -0
  30. data/lib/action_controller/flash.rb +213 -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 +708 -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 +495 -0
  48. data/lib/action_controller/request_forgery_protection.rb +116 -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 +237 -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 +503 -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 +276 -0
  61. data/lib/action_controller/session/cookie_store.rb +240 -0
  62. data/lib/action_controller/session/mem_cache_store.rb +60 -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 +229 -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/helpers/active_record_helper.rb +305 -0
  93. data/lib/action_view/helpers/asset_tag_helper.rb +695 -0
  94. data/lib/action_view/helpers/atom_feed_helper.rb +198 -0
  95. data/lib/action_view/helpers/benchmark_helper.rb +54 -0
  96. data/lib/action_view/helpers/cache_helper.rb +39 -0
  97. data/lib/action_view/helpers/capture_helper.rb +136 -0
  98. data/lib/action_view/helpers/csrf_helper.rb +14 -0
  99. data/lib/action_view/helpers/date_helper.rb +989 -0
  100. data/lib/action_view/helpers/debug_helper.rb +38 -0
  101. data/lib/action_view/helpers/form_helper.rb +1118 -0
  102. data/lib/action_view/helpers/form_options_helper.rb +599 -0
  103. data/lib/action_view/helpers/form_tag_helper.rb +490 -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 +251 -0
  111. data/lib/action_view/helpers/scriptaculous_helper.rb +226 -0
  112. data/lib/action_view/helpers/tag_helper.rb +151 -0
  113. data/lib/action_view/helpers/text_helper.rb +597 -0
  114. data/lib/action_view/helpers/translation_helper.rb +67 -0
  115. data/lib/action_view/helpers/url_helper.rb +637 -0
  116. data/lib/action_view/helpers.rb +61 -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 +241 -0
  120. data/lib/action_view/paths.rb +77 -0
  121. data/lib/action_view/reloadable_template.rb +117 -0
  122. data/lib/action_view/renderable.rb +109 -0
  123. data/lib/action_view/renderable_partial.rb +53 -0
  124. data/lib/action_view/template.rb +252 -0
  125. data/lib/action_view/template_error.rb +99 -0
  126. data/lib/action_view/template_handler.rb +34 -0
  127. data/lib/action_view/template_handlers/builder.rb +17 -0
  128. data/lib/action_view/template_handlers/erb.rb +25 -0
  129. data/lib/action_view/template_handlers/rjs.rb +13 -0
  130. data/lib/action_view/template_handlers.rb +48 -0
  131. data/lib/action_view/test_case.rb +162 -0
  132. data/lib/action_view.rb +58 -0
  133. data/lib/actionpack.rb +2 -0
  134. data/test/abstract_unit.rb +78 -0
  135. data/test/active_record_unit.rb +104 -0
  136. data/test/activerecord/active_record_store_test.rb +221 -0
  137. data/test/activerecord/render_partial_with_record_identification_test.rb +188 -0
  138. data/test/adv_attr_test.rb +20 -0
  139. data/test/controller/action_pack_assertions_test.rb +545 -0
  140. data/test/controller/addresses_render_test.rb +37 -0
  141. data/test/controller/assert_select_test.rb +735 -0
  142. data/test/controller/base_test.rb +217 -0
  143. data/test/controller/benchmark_test.rb +32 -0
  144. data/test/controller/caching_test.rb +743 -0
  145. data/test/controller/capture_test.rb +66 -0
  146. data/test/controller/content_type_test.rb +178 -0
  147. data/test/controller/controller_fixtures/app/controllers/admin/user_controller.rb +0 -0
  148. data/test/controller/controller_fixtures/app/controllers/user_controller.rb +0 -0
  149. data/test/controller/controller_fixtures/vendor/plugins/bad_plugin/lib/plugin_controller.rb +0 -0
  150. data/test/controller/cookie_test.rb +208 -0
  151. data/test/controller/deprecation/deprecated_base_methods_test.rb +32 -0
  152. data/test/controller/dispatcher_test.rb +144 -0
  153. data/test/controller/dom_assertions_test.rb +53 -0
  154. data/test/controller/failsafe_test.rb +60 -0
  155. data/test/controller/fake_controllers.rb +33 -0
  156. data/test/controller/fake_models.rb +19 -0
  157. data/test/controller/filter_params_test.rb +52 -0
  158. data/test/controller/filters_test.rb +885 -0
  159. data/test/controller/flash_test.rb +174 -0
  160. data/test/controller/header_test.rb +14 -0
  161. data/test/controller/helper_test.rb +224 -0
  162. data/test/controller/html-scanner/cdata_node_test.rb +15 -0
  163. data/test/controller/html-scanner/document_test.rb +148 -0
  164. data/test/controller/html-scanner/node_test.rb +89 -0
  165. data/test/controller/html-scanner/sanitizer_test.rb +281 -0
  166. data/test/controller/html-scanner/tag_node_test.rb +238 -0
  167. data/test/controller/html-scanner/text_node_test.rb +50 -0
  168. data/test/controller/html-scanner/tokenizer_test.rb +131 -0
  169. data/test/controller/http_basic_authentication_test.rb +113 -0
  170. data/test/controller/http_digest_authentication_test.rb +254 -0
  171. data/test/controller/integration_test.rb +526 -0
  172. data/test/controller/layout_test.rb +215 -0
  173. data/test/controller/localized_templates_test.rb +24 -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/output_escaping_test.rb +19 -0
  179. data/test/controller/polymorphic_routes_test.rb +297 -0
  180. data/test/controller/rack_test.rb +308 -0
  181. data/test/controller/record_identifier_test.rb +139 -0
  182. data/test/controller/redirect_test.rb +285 -0
  183. data/test/controller/reloader_test.rb +125 -0
  184. data/test/controller/render_test.rb +1783 -0
  185. data/test/controller/request/json_params_parsing_test.rb +65 -0
  186. data/test/controller/request/multipart_params_parsing_test.rb +177 -0
  187. data/test/controller/request/query_string_parsing_test.rb +120 -0
  188. data/test/controller/request/test_request_test.rb +35 -0
  189. data/test/controller/request/url_encoded_params_parsing_test.rb +146 -0
  190. data/test/controller/request/xml_params_parsing_test.rb +103 -0
  191. data/test/controller/request_forgery_protection_test.rb +233 -0
  192. data/test/controller/request_test.rb +395 -0
  193. data/test/controller/rescue_test.rb +541 -0
  194. data/test/controller/resources_test.rb +1393 -0
  195. data/test/controller/routing_test.rb +2592 -0
  196. data/test/controller/selector_test.rb +628 -0
  197. data/test/controller/send_file_test.rb +171 -0
  198. data/test/controller/session/abstract_store_test.rb +64 -0
  199. data/test/controller/session/cookie_store_test.rb +354 -0
  200. data/test/controller/session/mem_cache_store_test.rb +187 -0
  201. data/test/controller/session/test_session_test.rb +58 -0
  202. data/test/controller/test_test.rb +700 -0
  203. data/test/controller/translation_test.rb +26 -0
  204. data/test/controller/url_rewriter_test.rb +395 -0
  205. data/test/controller/verification_test.rb +270 -0
  206. data/test/controller/view_paths_test.rb +141 -0
  207. data/test/controller/webservice_test.rb +260 -0
  208. data/test/fixtures/_top_level_partial.html.erb +1 -0
  209. data/test/fixtures/_top_level_partial_only.erb +1 -0
  210. data/test/fixtures/addresses/list.erb +1 -0
  211. data/test/fixtures/alternate_helpers/foo_helper.rb +3 -0
  212. data/test/fixtures/bad_customers/_bad_customer.html.erb +1 -0
  213. data/test/fixtures/companies.yml +24 -0
  214. data/test/fixtures/company.rb +10 -0
  215. data/test/fixtures/content_type/render_default_content_types_for_respond_to.rhtml +1 -0
  216. data/test/fixtures/content_type/render_default_for_rhtml.rhtml +1 -0
  217. data/test/fixtures/content_type/render_default_for_rjs.rjs +1 -0
  218. data/test/fixtures/content_type/render_default_for_rxml.rxml +1 -0
  219. data/test/fixtures/customers/_customer.html.erb +1 -0
  220. data/test/fixtures/db_definitions/sqlite.sql +49 -0
  221. data/test/fixtures/developer.rb +9 -0
  222. data/test/fixtures/developers/_developer.erb +1 -0
  223. data/test/fixtures/developers.yml +21 -0
  224. data/test/fixtures/developers_projects.yml +13 -0
  225. data/test/fixtures/failsafe/500.html +1 -0
  226. data/test/fixtures/fun/games/_game.erb +1 -0
  227. data/test/fixtures/fun/games/hello_world.erb +1 -0
  228. data/test/fixtures/fun/serious/games/_game.erb +1 -0
  229. data/test/fixtures/functional_caching/_partial.erb +3 -0
  230. data/test/fixtures/functional_caching/formatted_fragment_cached.html.erb +3 -0
  231. data/test/fixtures/functional_caching/formatted_fragment_cached.js.rjs +6 -0
  232. data/test/fixtures/functional_caching/formatted_fragment_cached.xml.builder +5 -0
  233. data/test/fixtures/functional_caching/fragment_cached.html.erb +2 -0
  234. data/test/fixtures/functional_caching/html_fragment_cached_with_partial.html.erb +1 -0
  235. data/test/fixtures/functional_caching/inline_fragment_cached.html.erb +2 -0
  236. data/test/fixtures/functional_caching/js_fragment_cached_with_partial.js.rjs +1 -0
  237. data/test/fixtures/good_customers/_good_customer.html.erb +1 -0
  238. data/test/fixtures/helpers/abc_helper.rb +5 -0
  239. data/test/fixtures/helpers/fun/games_helper.rb +3 -0
  240. data/test/fixtures/helpers/fun/pdf_helper.rb +3 -0
  241. data/test/fixtures/layout_tests/abs_path_layout.rhtml +1 -0
  242. data/test/fixtures/layout_tests/alt/hello.rhtml +1 -0
  243. data/test/fixtures/layout_tests/alt/layouts/alt.rhtml +0 -0
  244. data/test/fixtures/layout_tests/layouts/controller_name_space/nested.rhtml +1 -0
  245. data/test/fixtures/layout_tests/layouts/item.rhtml +1 -0
  246. data/test/fixtures/layout_tests/layouts/layout_test.rhtml +1 -0
  247. data/test/fixtures/layout_tests/layouts/multiple_extensions.html.erb +1 -0
  248. data/test/fixtures/layout_tests/layouts/third_party_template_library.mab +1 -0
  249. data/test/fixtures/layout_tests/views/hello.rhtml +1 -0
  250. data/test/fixtures/layouts/_column.html.erb +2 -0
  251. data/test/fixtures/layouts/block_with_layout.erb +3 -0
  252. data/test/fixtures/layouts/builder.builder +3 -0
  253. data/test/fixtures/layouts/default_html.html.erb +1 -0
  254. data/test/fixtures/layouts/partial_with_layout.erb +3 -0
  255. data/test/fixtures/layouts/standard.erb +1 -0
  256. data/test/fixtures/layouts/talk_from_action.erb +2 -0
  257. data/test/fixtures/layouts/xhr.html.erb +2 -0
  258. data/test/fixtures/layouts/yield.erb +2 -0
  259. data/test/fixtures/localized/hello_world.de.html +1 -0
  260. data/test/fixtures/localized/hello_world.en.html +1 -0
  261. data/test/fixtures/mascot.rb +3 -0
  262. data/test/fixtures/mascots/_mascot.html.erb +1 -0
  263. data/test/fixtures/mascots.yml +4 -0
  264. data/test/fixtures/multipart/binary_file +0 -0
  265. data/test/fixtures/multipart/boundary_problem_file +10 -0
  266. data/test/fixtures/multipart/bracketed_param +5 -0
  267. data/test/fixtures/multipart/empty +10 -0
  268. data/test/fixtures/multipart/hello.txt +1 -0
  269. data/test/fixtures/multipart/large_text_file +10 -0
  270. data/test/fixtures/multipart/mixed_files +0 -0
  271. data/test/fixtures/multipart/mona_lisa.jpg +0 -0
  272. data/test/fixtures/multipart/none +9 -0
  273. data/test/fixtures/multipart/single_parameter +5 -0
  274. data/test/fixtures/multipart/text_file +10 -0
  275. data/test/fixtures/override/test/hello_world.erb +1 -0
  276. data/test/fixtures/override2/layouts/test/sub.erb +1 -0
  277. data/test/fixtures/post_test/layouts/post.html.erb +1 -0
  278. data/test/fixtures/post_test/layouts/super_post.iphone.erb +1 -0
  279. data/test/fixtures/post_test/post/index.html.erb +1 -0
  280. data/test/fixtures/post_test/post/index.iphone.erb +1 -0
  281. data/test/fixtures/post_test/super_post/index.html.erb +1 -0
  282. data/test/fixtures/post_test/super_post/index.iphone.erb +1 -0
  283. data/test/fixtures/project.rb +3 -0
  284. data/test/fixtures/projects/_project.erb +1 -0
  285. data/test/fixtures/projects.yml +7 -0
  286. data/test/fixtures/public/404.html +1 -0
  287. data/test/fixtures/public/500.da.html +1 -0
  288. data/test/fixtures/public/500.html +1 -0
  289. data/test/fixtures/public/absolute/test.css +23 -0
  290. data/test/fixtures/public/absolute/test.js +63 -0
  291. data/test/fixtures/public/images/rails.png +0 -0
  292. data/test/fixtures/public/javascripts/application.js +1 -0
  293. data/test/fixtures/public/javascripts/bank.js +1 -0
  294. data/test/fixtures/public/javascripts/controls.js +1 -0
  295. data/test/fixtures/public/javascripts/dragdrop.js +1 -0
  296. data/test/fixtures/public/javascripts/effects.js +1 -0
  297. data/test/fixtures/public/javascripts/prototype.js +1 -0
  298. data/test/fixtures/public/javascripts/robber.js +1 -0
  299. data/test/fixtures/public/javascripts/subdir/subdir.js +1 -0
  300. data/test/fixtures/public/javascripts/version.1.0.js +1 -0
  301. data/test/fixtures/public/stylesheets/bank.css +1 -0
  302. data/test/fixtures/public/stylesheets/robber.css +1 -0
  303. data/test/fixtures/public/stylesheets/subdir/subdir.css +1 -0
  304. data/test/fixtures/public/stylesheets/version.1.0.css +1 -0
  305. data/test/fixtures/quiz/questions/_question.html.erb +1 -0
  306. data/test/fixtures/replies/_reply.erb +1 -0
  307. data/test/fixtures/replies.yml +15 -0
  308. data/test/fixtures/reply.rb +7 -0
  309. data/test/fixtures/respond_to/all_types_with_layout.html.erb +1 -0
  310. data/test/fixtures/respond_to/all_types_with_layout.js.rjs +1 -0
  311. data/test/fixtures/respond_to/custom_constant_handling_without_block.mobile.erb +1 -0
  312. data/test/fixtures/respond_to/iphone_with_html_response_type.html.erb +1 -0
  313. data/test/fixtures/respond_to/iphone_with_html_response_type.iphone.erb +1 -0
  314. data/test/fixtures/respond_to/layouts/missing.html.erb +1 -0
  315. data/test/fixtures/respond_to/layouts/standard.html.erb +1 -0
  316. data/test/fixtures/respond_to/layouts/standard.iphone.erb +1 -0
  317. data/test/fixtures/respond_to/using_defaults.html.erb +1 -0
  318. data/test/fixtures/respond_to/using_defaults.js.rjs +1 -0
  319. data/test/fixtures/respond_to/using_defaults.xml.builder +1 -0
  320. data/test/fixtures/respond_to/using_defaults_with_type_list.html.erb +1 -0
  321. data/test/fixtures/respond_to/using_defaults_with_type_list.js.rjs +1 -0
  322. data/test/fixtures/respond_to/using_defaults_with_type_list.xml.builder +1 -0
  323. data/test/fixtures/scope/test/modgreet.erb +1 -0
  324. data/test/fixtures/session_autoload_test/session_autoload_test/foo.rb +10 -0
  325. data/test/fixtures/shared.html.erb +1 -0
  326. data/test/fixtures/symlink_parent/symlinked_layout.erb +5 -0
  327. data/test/fixtures/test/_counter.html.erb +1 -0
  328. data/test/fixtures/test/_customer.erb +1 -0
  329. data/test/fixtures/test/_customer_counter.erb +1 -0
  330. data/test/fixtures/test/_customer_counter_with_as.erb +1 -0
  331. data/test/fixtures/test/_customer_greeting.erb +1 -0
  332. data/test/fixtures/test/_customer_with_var.erb +1 -0
  333. data/test/fixtures/test/_form.erb +1 -0
  334. data/test/fixtures/test/_from_helper.erb +1 -0
  335. data/test/fixtures/test/_hash_greeting.erb +1 -0
  336. data/test/fixtures/test/_hash_object.erb +2 -0
  337. data/test/fixtures/test/_hello.builder +1 -0
  338. data/test/fixtures/test/_labelling_form.erb +1 -0
  339. data/test/fixtures/test/_layout_for_block_with_args.html.erb +3 -0
  340. data/test/fixtures/test/_layout_for_partial.html.erb +3 -0
  341. data/test/fixtures/test/_local_inspector.html.erb +1 -0
  342. data/test/fixtures/test/_one.html.erb +1 -0
  343. data/test/fixtures/test/_partial.erb +1 -0
  344. data/test/fixtures/test/_partial.html.erb +1 -0
  345. data/test/fixtures/test/_partial.js.erb +1 -0
  346. data/test/fixtures/test/_partial_for_use_in_layout.html.erb +1 -0
  347. data/test/fixtures/test/_partial_only.erb +1 -0
  348. data/test/fixtures/test/_partial_with_only_html_version.html.erb +1 -0
  349. data/test/fixtures/test/_person.erb +2 -0
  350. data/test/fixtures/test/_raise.html.erb +1 -0
  351. data/test/fixtures/test/_two.html.erb +1 -0
  352. data/test/fixtures/test/_utf8_partial.html.erb +1 -0
  353. data/test/fixtures/test/_utf8_partial_magic.html.erb +2 -0
  354. data/test/fixtures/test/action_talk_to_layout.erb +2 -0
  355. data/test/fixtures/test/array_translation.erb +1 -0
  356. data/test/fixtures/test/calling_partial_with_layout.html.erb +1 -0
  357. data/test/fixtures/test/capturing.erb +4 -0
  358. data/test/fixtures/test/content_for.erb +2 -0
  359. data/test/fixtures/test/content_for_concatenated.erb +3 -0
  360. data/test/fixtures/test/content_for_with_parameter.erb +2 -0
  361. data/test/fixtures/test/delete_with_js.rjs +2 -0
  362. data/test/fixtures/test/dont_pick_me +1 -0
  363. data/test/fixtures/test/dot.directory/render_file_with_ivar.erb +1 -0
  364. data/test/fixtures/test/enum_rjs_test.rjs +6 -0
  365. data/test/fixtures/test/formatted_html_erb.html.erb +1 -0
  366. data/test/fixtures/test/formatted_xml_erb.builder +1 -0
  367. data/test/fixtures/test/formatted_xml_erb.html.erb +1 -0
  368. data/test/fixtures/test/formatted_xml_erb.xml.erb +1 -0
  369. data/test/fixtures/test/greeting.erb +1 -0
  370. data/test/fixtures/test/greeting.js.rjs +1 -0
  371. data/test/fixtures/test/hello.builder +4 -0
  372. data/test/fixtures/test/hello_world.da.html.erb +1 -0
  373. data/test/fixtures/test/hello_world.erb +1 -0
  374. data/test/fixtures/test/hello_world.erb~ +1 -0
  375. data/test/fixtures/test/hello_world.pt-BR.html.erb +1 -0
  376. data/test/fixtures/test/hello_world_container.builder +3 -0
  377. data/test/fixtures/test/hello_world_from_rxml.builder +4 -0
  378. data/test/fixtures/test/hello_world_with_layout_false.erb +1 -0
  379. data/test/fixtures/test/hello_xml_world.builder +11 -0
  380. data/test/fixtures/test/hyphen-ated.erb +1 -0
  381. data/test/fixtures/test/implicit_content_type.atom.builder +2 -0
  382. data/test/fixtures/test/list.erb +1 -0
  383. data/test/fixtures/test/malformed/malformed.en.html.erb~ +1 -0
  384. data/test/fixtures/test/malformed/malformed.erb~ +1 -0
  385. data/test/fixtures/test/malformed/malformed.html.erb~ +1 -0
  386. data/test/fixtures/test/nested_layout.erb +3 -0
  387. data/test/fixtures/test/non_erb_block_content_for.builder +4 -0
  388. data/test/fixtures/test/potential_conflicts.erb +4 -0
  389. data/test/fixtures/test/render_explicit_html_template.js.rjs +1 -0
  390. data/test/fixtures/test/render_file_from_template.html.erb +1 -0
  391. data/test/fixtures/test/render_file_with_ivar.erb +1 -0
  392. data/test/fixtures/test/render_file_with_locals.erb +1 -0
  393. data/test/fixtures/test/render_implicit_html_template.js.rjs +1 -0
  394. data/test/fixtures/test/render_implicit_html_template_from_xhr_request.da.html.erb +1 -0
  395. data/test/fixtures/test/render_implicit_html_template_from_xhr_request.html.erb +1 -0
  396. data/test/fixtures/test/render_implicit_js_template_without_layout.js.erb +1 -0
  397. data/test/fixtures/test/render_to_string_test.erb +1 -0
  398. data/test/fixtures/test/scoped_array_translation.erb +1 -0
  399. data/test/fixtures/test/sub_template_raise.html.erb +1 -0
  400. data/test/fixtures/test/template.erb +1 -0
  401. data/test/fixtures/test/translation.erb +1 -0
  402. data/test/fixtures/test/update_element_with_capture.erb +9 -0
  403. data/test/fixtures/test/using_layout_around_block.html.erb +1 -0
  404. data/test/fixtures/test/using_layout_around_block_with_args.html.erb +1 -0
  405. data/test/fixtures/test/utf8.html.erb +4 -0
  406. data/test/fixtures/test/utf8_magic.html.erb +5 -0
  407. data/test/fixtures/test/utf8_magic_with_bare_partial.html.erb +5 -0
  408. data/test/fixtures/topic.rb +3 -0
  409. data/test/fixtures/topics/_topic.html.erb +1 -0
  410. data/test/fixtures/topics.yml +22 -0
  411. data/test/template/active_record_helper_i18n_test.rb +51 -0
  412. data/test/template/active_record_helper_test.rb +302 -0
  413. data/test/template/asset_tag_helper_test.rb +770 -0
  414. data/test/template/atom_feed_helper_test.rb +315 -0
  415. data/test/template/benchmark_helper_test.rb +86 -0
  416. data/test/template/compiled_templates_test.rb +204 -0
  417. data/test/template/date_helper_i18n_test.rb +121 -0
  418. data/test/template/date_helper_test.rb +2603 -0
  419. data/test/template/erb_util_test.rb +36 -0
  420. data/test/template/form_helper_test.rb +1447 -0
  421. data/test/template/form_options_helper_i18n_test.rb +27 -0
  422. data/test/template/form_options_helper_test.rb +811 -0
  423. data/test/template/form_tag_helper_test.rb +356 -0
  424. data/test/template/javascript_helper_test.rb +106 -0
  425. data/test/template/number_helper_i18n_test.rb +69 -0
  426. data/test/template/number_helper_test.rb +132 -0
  427. data/test/template/prototype_helper_test.rb +639 -0
  428. data/test/template/raw_output_helper_test.rb +21 -0
  429. data/test/template/record_tag_helper_test.rb +58 -0
  430. data/test/template/render_test.rb +329 -0
  431. data/test/template/sanitize_helper_test.rb +57 -0
  432. data/test/template/scriptaculous_helper_test.rb +90 -0
  433. data/test/template/tag_helper_test.rb +98 -0
  434. data/test/template/template_test.rb +32 -0
  435. data/test/template/test_test.rb +54 -0
  436. data/test/template/text_helper_test.rb +597 -0
  437. data/test/template/translation_helper_test.rb +95 -0
  438. data/test/template/url_helper_test.rb +641 -0
  439. data/test/testing_sandbox.rb +15 -0
  440. data/test/view/test_case_test.rb +176 -0
  441. metadata +519 -0
@@ -0,0 +1,536 @@
1
+ require 'abstract_unit'
2
+
3
+ class RespondToController < ActionController::Base
4
+ layout :set_layout
5
+
6
+ def html_xml_or_rss
7
+ respond_to do |type|
8
+ type.html { render :text => "HTML" }
9
+ type.xml { render :text => "XML" }
10
+ type.rss { render :text => "RSS" }
11
+ type.all { render :text => "Nothing" }
12
+ end
13
+ end
14
+
15
+ def js_or_html
16
+ respond_to do |type|
17
+ type.html { render :text => "HTML" }
18
+ type.js { render :text => "JS" }
19
+ type.all { render :text => "Nothing" }
20
+ end
21
+ end
22
+
23
+ def json_or_yaml
24
+ respond_to do |type|
25
+ type.json { render :text => "JSON" }
26
+ type.yaml { render :text => "YAML" }
27
+ end
28
+ end
29
+
30
+ def html_or_xml
31
+ respond_to do |type|
32
+ type.html { render :text => "HTML" }
33
+ type.xml { render :text => "XML" }
34
+ type.all { render :text => "Nothing" }
35
+ end
36
+ end
37
+
38
+ def forced_xml
39
+ request.format = :xml
40
+
41
+ respond_to do |type|
42
+ type.html { render :text => "HTML" }
43
+ type.xml { render :text => "XML" }
44
+ end
45
+ end
46
+
47
+ def just_xml
48
+ respond_to do |type|
49
+ type.xml { render :text => "XML" }
50
+ end
51
+ end
52
+
53
+ def using_defaults
54
+ respond_to do |type|
55
+ type.html
56
+ type.js
57
+ type.xml
58
+ end
59
+ end
60
+
61
+ def using_defaults_with_type_list
62
+ respond_to(:html, :js, :xml)
63
+ end
64
+
65
+ def made_for_content_type
66
+ respond_to do |type|
67
+ type.rss { render :text => "RSS" }
68
+ type.atom { render :text => "ATOM" }
69
+ type.all { render :text => "Nothing" }
70
+ end
71
+ end
72
+
73
+ def custom_type_handling
74
+ respond_to do |type|
75
+ type.html { render :text => "HTML" }
76
+ type.custom("application/crazy-xml") { render :text => "Crazy XML" }
77
+ type.all { render :text => "Nothing" }
78
+ end
79
+ end
80
+
81
+ def custom_constant_handling
82
+ Mime::Type.register("text/x-mobile", :mobile)
83
+
84
+ respond_to do |type|
85
+ type.html { render :text => "HTML" }
86
+ type.mobile { render :text => "Mobile" }
87
+ end
88
+ ensure
89
+ Mime.module_eval { remove_const :MOBILE if const_defined?(:MOBILE) }
90
+ end
91
+
92
+ def custom_constant_handling_without_block
93
+ Mime::Type.register("text/x-mobile", :mobile)
94
+
95
+ respond_to do |type|
96
+ type.html { render :text => "HTML" }
97
+ type.mobile
98
+ end
99
+
100
+ ensure
101
+ Mime.module_eval { remove_const :MOBILE if const_defined?(:MOBILE) }
102
+ end
103
+
104
+ def handle_any
105
+ respond_to do |type|
106
+ type.html { render :text => "HTML" }
107
+ type.any(:js, :xml) { render :text => "Either JS or XML" }
108
+ end
109
+ end
110
+
111
+ def handle_any_any
112
+ respond_to do |type|
113
+ type.html { render :text => 'HTML' }
114
+ type.any { render :text => 'Whatever you ask for, I got it' }
115
+ end
116
+ end
117
+
118
+ def all_types_with_layout
119
+ respond_to do |type|
120
+ type.html
121
+ type.js
122
+ end
123
+ end
124
+
125
+ def iphone_with_html_response_type
126
+ Mime::Type.register_alias("text/html", :iphone)
127
+ request.format = :iphone if request.env["HTTP_ACCEPT"] == "text/iphone"
128
+
129
+ respond_to do |type|
130
+ type.html { @type = "Firefox" }
131
+ type.iphone { @type = "iPhone" }
132
+ end
133
+
134
+ ensure
135
+ Mime.module_eval { remove_const :IPHONE if const_defined?(:IPHONE) }
136
+ end
137
+
138
+ def iphone_with_html_response_type_without_layout
139
+ Mime::Type.register_alias("text/html", :iphone)
140
+ request.format = "iphone" if request.env["HTTP_ACCEPT"] == "text/iphone"
141
+
142
+ respond_to do |type|
143
+ type.html { @type = "Firefox"; render :action => "iphone_with_html_response_type" }
144
+ type.iphone { @type = "iPhone" ; render :action => "iphone_with_html_response_type" }
145
+ end
146
+
147
+ ensure
148
+ Mime.module_eval { remove_const :IPHONE if const_defined?(:IPHONE) }
149
+ end
150
+
151
+ def rescue_action(e)
152
+ raise
153
+ end
154
+
155
+ protected
156
+ def set_layout
157
+ if ["all_types_with_layout", "iphone_with_html_response_type"].include?(action_name)
158
+ "respond_to/layouts/standard"
159
+ elsif action_name == "iphone_with_html_response_type_without_layout"
160
+ "respond_to/layouts/missing"
161
+ end
162
+ end
163
+ end
164
+
165
+ class MimeControllerTest < ActionController::TestCase
166
+ tests RespondToController
167
+
168
+ def setup
169
+ ActionController::Base.use_accept_header = true
170
+ @request.host = "www.example.com"
171
+ end
172
+
173
+ def teardown
174
+ ActionController::Base.use_accept_header = false
175
+ end
176
+
177
+ def test_html
178
+ @request.accept = "text/html"
179
+ get :js_or_html
180
+ assert_equal 'HTML', @response.body
181
+
182
+ get :html_or_xml
183
+ assert_equal 'HTML', @response.body
184
+
185
+ get :just_xml
186
+ assert_response 406
187
+ end
188
+
189
+ def test_all
190
+ @request.accept = "*/*"
191
+ get :js_or_html
192
+ assert_equal 'HTML', @response.body # js is not part of all
193
+
194
+ get :html_or_xml
195
+ assert_equal 'HTML', @response.body
196
+
197
+ get :just_xml
198
+ assert_equal 'XML', @response.body
199
+ end
200
+
201
+ def test_xml
202
+ @request.accept = "application/xml"
203
+ get :html_xml_or_rss
204
+ assert_equal 'XML', @response.body
205
+ end
206
+
207
+ def test_js_or_html
208
+ @request.accept = "text/javascript, text/html"
209
+ get :js_or_html
210
+ assert_equal 'JS', @response.body
211
+
212
+ get :html_or_xml
213
+ assert_equal 'HTML', @response.body
214
+
215
+ get :just_xml
216
+ assert_response 406
217
+ end
218
+
219
+ def test_json_or_yaml
220
+ get :json_or_yaml
221
+ assert_equal 'JSON', @response.body
222
+
223
+ get :json_or_yaml, :format => 'json'
224
+ assert_equal 'JSON', @response.body
225
+
226
+ get :json_or_yaml, :format => 'yaml'
227
+ assert_equal 'YAML', @response.body
228
+
229
+ { 'YAML' => %w(text/yaml),
230
+ 'JSON' => %w(application/json text/x-json)
231
+ }.each do |body, content_types|
232
+ content_types.each do |content_type|
233
+ @request.accept = content_type
234
+ get :json_or_yaml
235
+ assert_equal body, @response.body
236
+ end
237
+ end
238
+ end
239
+
240
+ def test_js_or_anything
241
+ @request.accept = "text/javascript, */*"
242
+ get :js_or_html
243
+ assert_equal 'JS', @response.body
244
+
245
+ get :html_or_xml
246
+ assert_equal 'HTML', @response.body
247
+
248
+ get :just_xml
249
+ assert_equal 'XML', @response.body
250
+ end
251
+
252
+ def test_using_defaults
253
+ @request.accept = "*/*"
254
+ get :using_defaults
255
+ assert_equal "text/html", @response.content_type
256
+ assert_equal 'Hello world!', @response.body
257
+
258
+ @request.accept = "text/javascript"
259
+ get :using_defaults
260
+ assert_equal "text/javascript", @response.content_type
261
+ assert_equal '$("body").visualEffect("highlight");', @response.body
262
+
263
+ @request.accept = "application/xml"
264
+ get :using_defaults
265
+ assert_equal "application/xml", @response.content_type
266
+ assert_equal "<p>Hello world!</p>\n", @response.body
267
+ end
268
+
269
+ def test_using_defaults_with_type_list
270
+ @request.accept = "*/*"
271
+ get :using_defaults_with_type_list
272
+ assert_equal "text/html", @response.content_type
273
+ assert_equal 'Hello world!', @response.body
274
+
275
+ @request.accept = "text/javascript"
276
+ get :using_defaults_with_type_list
277
+ assert_equal "text/javascript", @response.content_type
278
+ assert_equal '$("body").visualEffect("highlight");', @response.body
279
+
280
+ @request.accept = "application/xml"
281
+ get :using_defaults_with_type_list
282
+ assert_equal "application/xml", @response.content_type
283
+ assert_equal "<p>Hello world!</p>\n", @response.body
284
+ end
285
+
286
+ def test_with_atom_content_type
287
+ @request.env["CONTENT_TYPE"] = "application/atom+xml"
288
+ get :made_for_content_type
289
+ assert_equal "ATOM", @response.body
290
+ end
291
+
292
+ def test_with_rss_content_type
293
+ @request.env["CONTENT_TYPE"] = "application/rss+xml"
294
+ get :made_for_content_type
295
+ assert_equal "RSS", @response.body
296
+ end
297
+
298
+ def test_synonyms
299
+ @request.accept = "application/javascript"
300
+ get :js_or_html
301
+ assert_equal 'JS', @response.body
302
+
303
+ @request.accept = "application/x-xml"
304
+ get :html_xml_or_rss
305
+ assert_equal "XML", @response.body
306
+ end
307
+
308
+ def test_custom_types
309
+ @request.accept = "application/crazy-xml"
310
+ get :custom_type_handling
311
+ assert_equal "application/crazy-xml", @response.content_type
312
+ assert_equal 'Crazy XML', @response.body
313
+
314
+ @request.accept = "text/html"
315
+ get :custom_type_handling
316
+ assert_equal "text/html", @response.content_type
317
+ assert_equal 'HTML', @response.body
318
+ end
319
+
320
+ def test_xhtml_alias
321
+ @request.accept = "application/xhtml+xml,application/xml"
322
+ get :html_or_xml
323
+ assert_equal 'HTML', @response.body
324
+ end
325
+
326
+ def test_firefox_simulation
327
+ @request.accept = "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"
328
+ get :html_or_xml
329
+ assert_equal 'HTML', @response.body
330
+ end
331
+
332
+ def test_handle_any
333
+ @request.accept = "*/*"
334
+ get :handle_any
335
+ assert_equal 'HTML', @response.body
336
+
337
+ @request.accept = "text/javascript"
338
+ get :handle_any
339
+ assert_equal 'Either JS or XML', @response.body
340
+
341
+ @request.accept = "text/xml"
342
+ get :handle_any
343
+ assert_equal 'Either JS or XML', @response.body
344
+ end
345
+
346
+ def test_handle_any_any
347
+ @request.accept = "*/*"
348
+ get :handle_any_any
349
+ assert_equal 'HTML', @response.body
350
+ end
351
+
352
+ def test_handle_any_any_parameter_format
353
+ get :handle_any_any, {:format=>'html'}
354
+ assert_equal 'HTML', @response.body
355
+ end
356
+
357
+ def test_handle_any_any_explicit_html
358
+ @request.accept = "text/html"
359
+ get :handle_any_any
360
+ assert_equal 'HTML', @response.body
361
+ end
362
+
363
+ def test_handle_any_any_javascript
364
+ @request.accept = "text/javascript"
365
+ get :handle_any_any
366
+ assert_equal 'Whatever you ask for, I got it', @response.body
367
+ end
368
+
369
+ def test_handle_any_any_xml
370
+ @request.accept = "text/xml"
371
+ get :handle_any_any
372
+ assert_equal 'Whatever you ask for, I got it', @response.body
373
+ end
374
+
375
+ def test_rjs_type_skips_layout
376
+ @request.accept = "text/javascript"
377
+ get :all_types_with_layout
378
+ assert_equal 'RJS for all_types_with_layout', @response.body
379
+ end
380
+
381
+ def test_html_type_with_layout
382
+ @request.accept = "text/html"
383
+ get :all_types_with_layout
384
+ assert_equal '<html><div id="html">HTML for all_types_with_layout</div></html>', @response.body
385
+ end
386
+
387
+ def test_xhr
388
+ xhr :get, :js_or_html
389
+ assert_equal 'JS', @response.body
390
+
391
+ xhr :get, :using_defaults
392
+ assert_equal '$("body").visualEffect("highlight");', @response.body
393
+ end
394
+
395
+ def test_custom_constant
396
+ get :custom_constant_handling, :format => "mobile"
397
+ assert_equal "text/x-mobile", @response.content_type
398
+ assert_equal "Mobile", @response.body
399
+ end
400
+
401
+ def test_custom_constant_handling_without_block
402
+ get :custom_constant_handling_without_block, :format => "mobile"
403
+ assert_equal "text/x-mobile", @response.content_type
404
+ assert_equal "Mobile", @response.body
405
+ end
406
+
407
+ def test_forced_format
408
+ get :html_xml_or_rss
409
+ assert_equal "HTML", @response.body
410
+
411
+ get :html_xml_or_rss, :format => "html"
412
+ assert_equal "HTML", @response.body
413
+
414
+ get :html_xml_or_rss, :format => "xml"
415
+ assert_equal "XML", @response.body
416
+
417
+ get :html_xml_or_rss, :format => "rss"
418
+ assert_equal "RSS", @response.body
419
+ end
420
+
421
+ def test_internally_forced_format
422
+ get :forced_xml
423
+ assert_equal "XML", @response.body
424
+
425
+ get :forced_xml, :format => "html"
426
+ assert_equal "XML", @response.body
427
+ end
428
+
429
+ def test_extension_synonyms
430
+ get :html_xml_or_rss, :format => "xhtml"
431
+ assert_equal "HTML", @response.body
432
+ end
433
+
434
+ def test_render_action_for_html
435
+ @controller.instance_eval do
436
+ def render(*args)
437
+ unless args.empty?
438
+ @action = args.first[:action]
439
+ end
440
+ response.body = "#{@action} - #{@template.template_format}"
441
+ end
442
+ end
443
+
444
+ get :using_defaults
445
+ assert_equal "using_defaults - html", @response.body
446
+
447
+ get :using_defaults, :format => "xml"
448
+ assert_equal "using_defaults - xml", @response.body
449
+ end
450
+
451
+ def test_format_with_custom_response_type
452
+ get :iphone_with_html_response_type
453
+ assert_equal '<html><div id="html">Hello future from Firefox!</div></html>', @response.body
454
+
455
+ get :iphone_with_html_response_type, :format => "iphone"
456
+ assert_equal "text/html", @response.content_type
457
+ assert_equal '<html><div id="iphone">Hello iPhone future from iPhone!</div></html>', @response.body
458
+ end
459
+
460
+ def test_format_with_custom_response_type_and_request_headers
461
+ @request.accept = "text/iphone"
462
+ get :iphone_with_html_response_type
463
+ assert_equal '<html><div id="iphone">Hello iPhone future from iPhone!</div></html>', @response.body
464
+ assert_equal "text/html", @response.content_type
465
+ end
466
+
467
+ def test_format_with_custom_response_type_and_request_headers_with_only_one_layout_present
468
+ get :iphone_with_html_response_type_without_layout
469
+ assert_equal '<html><div id="html_missing">Hello future from Firefox!</div></html>', @response.body
470
+
471
+ @request.accept = "text/iphone"
472
+ assert_raise(ActionView::MissingTemplate) { get :iphone_with_html_response_type_without_layout }
473
+ end
474
+ end
475
+
476
+ class AbstractPostController < ActionController::Base
477
+ self.view_paths = File.dirname(__FILE__) + "/../fixtures/post_test/"
478
+ end
479
+
480
+ # For testing layouts which are set automatically
481
+ class PostController < AbstractPostController
482
+ around_filter :with_iphone
483
+
484
+ def index
485
+ respond_to do |type|
486
+ type.html
487
+ type.iphone
488
+ end
489
+ end
490
+
491
+ protected
492
+ def with_iphone
493
+ Mime::Type.register_alias("text/html", :iphone)
494
+ request.format = "iphone" if request.env["HTTP_ACCEPT"] == "text/iphone"
495
+ yield
496
+ ensure
497
+ Mime.module_eval { remove_const :IPHONE if const_defined?(:IPHONE) }
498
+ end
499
+ end
500
+
501
+ class SuperPostController < PostController
502
+ def index
503
+ respond_to do |type|
504
+ type.html
505
+ type.iphone
506
+ end
507
+ end
508
+ end
509
+
510
+ class MimeControllerLayoutsTest < ActionController::TestCase
511
+ tests PostController
512
+
513
+ def setup
514
+ @request.host = "www.example.com"
515
+ end
516
+
517
+ def test_missing_layout_renders_properly
518
+ get :index
519
+ assert_equal '<html><div id="html">Hello Firefox</div></html>', @response.body
520
+
521
+ @request.accept = "text/iphone"
522
+ get :index
523
+ assert_equal 'Hello iPhone', @response.body
524
+ end
525
+
526
+ def test_format_with_inherited_layouts
527
+ @controller = SuperPostController.new
528
+
529
+ get :index
530
+ assert_equal 'Super Firefox', @response.body
531
+
532
+ @request.accept = "text/iphone"
533
+ get :index
534
+ assert_equal '<html><div id="super_iphone">Super iPhone</div></html>', @response.body
535
+ end
536
+ end
@@ -0,0 +1,93 @@
1
+ require 'abstract_unit'
2
+
3
+ class MimeTypeTest < Test::Unit::TestCase
4
+ Mime::Type.register "image/png", :png
5
+ Mime::Type.register "application/pdf", :pdf
6
+
7
+ def test_parse_single
8
+ Mime::LOOKUP.keys.each do |mime_type|
9
+ assert_equal [Mime::Type.lookup(mime_type)], Mime::Type.parse(mime_type)
10
+ end
11
+ end
12
+
13
+ def test_parse_without_q
14
+ accept = "text/xml,application/xhtml+xml,text/yaml,application/xml,text/html,image/png,text/plain,application/pdf,*/*"
15
+ expect = [Mime::HTML, Mime::XML, Mime::YAML, Mime::PNG, Mime::TEXT, Mime::PDF, Mime::ALL]
16
+ assert_equal expect, Mime::Type.parse(accept)
17
+ end
18
+
19
+ def test_parse_with_q
20
+ accept = "text/xml,application/xhtml+xml,text/yaml; q=0.3,application/xml,text/html; q=0.8,image/png,text/plain; q=0.5,application/pdf,*/*; q=0.2"
21
+ expect = [Mime::HTML, Mime::XML, Mime::PNG, Mime::PDF, Mime::TEXT, Mime::YAML, Mime::ALL]
22
+ assert_equal expect, Mime::Type.parse(accept)
23
+ end
24
+
25
+ # Accept header send with user HTTP_USER_AGENT: Sunrise/0.42j (Windows XP)
26
+ def test_parse_crappy_broken_acceptlines
27
+ accept = "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/*,,*/*;q=0.5"
28
+ expect = [Mime::HTML, Mime::XML, "image/*", Mime::TEXT, Mime::ALL]
29
+ assert_equal expect, Mime::Type.parse(accept).collect { |c| c.to_s }
30
+ end
31
+
32
+ # Accept header send with user HTTP_USER_AGENT: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; InfoPath.1)
33
+ def test_parse_crappy_broken_acceptlines2
34
+ accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, , pronto/1.00.00, sslvpn/1.00.00.00, */*"
35
+ expect = ['image/gif', 'image/x-xbitmap', 'image/jpeg','image/pjpeg', 'application/x-shockwave-flash', 'application/vnd.ms-excel', 'application/vnd.ms-powerpoint', 'application/msword', 'pronto/1.00.00', 'sslvpn/1.00.00.00', Mime::ALL ]
36
+ assert_equal expect, Mime::Type.parse(accept).collect { |c| c.to_s }
37
+ end
38
+
39
+ def test_custom_type
40
+ Mime::Type.register("image/gif", :gif)
41
+ assert_nothing_raised do
42
+ Mime::GIF
43
+ assert_equal Mime::GIF, Mime::SET.last
44
+ end
45
+ ensure
46
+ Mime.module_eval { remove_const :GIF if const_defined?(:GIF) }
47
+ end
48
+
49
+ def test_type_should_be_equal_to_symbol
50
+ assert_equal Mime::HTML, 'application/xhtml+xml'
51
+ assert_equal Mime::HTML, :html
52
+ end
53
+
54
+ def test_type_convenience_methods
55
+ # Don't test Mime::ALL, since it Mime::ALL#html? == true
56
+ types = Mime::SET.to_a.map(&:to_sym).uniq - [:all]
57
+
58
+ # Remove custom Mime::Type instances set in other tests, like Mime::GIF and Mime::IPHONE
59
+ types.delete_if { |type| !Mime.const_defined?(type.to_s.upcase) }
60
+
61
+ types.each do |type|
62
+ mime = Mime.const_get(type.to_s.upcase)
63
+ assert mime.send("#{type}?"), "#{mime.inspect} is not #{type}?"
64
+ invalid_types = types - [type]
65
+ invalid_types.delete(:html) if Mime::Type.html_types.include?(type)
66
+ invalid_types.each { |other_type| assert !mime.send("#{other_type}?"), "#{mime.inspect} is #{other_type}?" }
67
+ end
68
+ end
69
+
70
+ def test_mime_all_is_html
71
+ assert Mime::ALL.all?, "Mime::ALL is not all?"
72
+ assert Mime::ALL.html?, "Mime::ALL is not html?"
73
+ end
74
+
75
+ def test_verifiable_mime_types
76
+ all_types = Mime::SET.to_a.map(&:to_sym)
77
+ all_types.uniq!
78
+ # Remove custom Mime::Type instances set in other tests, like Mime::GIF and Mime::IPHONE
79
+ all_types.delete_if { |type| !Mime.const_defined?(type.to_s.upcase) }
80
+ verified, unverified = all_types.partition { |type| Mime::Type.browser_generated_types.include? type }
81
+ assert verified.each { |type| assert Mime.const_get(type.to_s.upcase).verify_request?, "Verifiable Mime Type is not verified: #{type.inspect}" }
82
+ assert unverified.each { |type| assert !Mime.const_get(type.to_s.upcase).verify_request?, "Nonverifiable Mime Type is verified: #{type.inspect}" }
83
+ end
84
+
85
+ def test_regexp_matcher
86
+ assert Mime::JS =~ "text/javascript"
87
+ assert Mime::JS =~ "application/javascript"
88
+ assert Mime::JS !~ "text/html"
89
+ assert !(Mime::JS !~ "text/javascript")
90
+ assert !(Mime::JS !~ "application/javascript")
91
+ assert Mime::HTML =~ 'application/xhtml+xml'
92
+ end
93
+ end
@@ -0,0 +1,19 @@
1
+ require 'abstract_unit'
2
+
3
+ class OutputEscapingTest < ActiveSupport::TestCase
4
+
5
+ test "escape_html shouldn't die when passed nil" do
6
+ assert ERB::Util.h(nil).blank?
7
+ end
8
+
9
+ test "escapeHTML should escape strings" do
10
+ assert_equal "&lt;&gt;&quot;", ERB::Util.h("<>\"")
11
+ end
12
+
13
+ test "escapeHTML shouldn't touch explicitly safe strings" do
14
+ # TODO this seems easier to compose and reason about, but
15
+ # this should be verified
16
+ assert_equal "<", ERB::Util.h("<".html_safe)
17
+ end
18
+
19
+ end