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,54 @@
1
+ require 'abstract_unit'
2
+
3
+ module PeopleHelper
4
+ def title(text)
5
+ content_tag(:h1, text)
6
+ end
7
+
8
+ def homepage_path
9
+ people_path
10
+ end
11
+
12
+ def homepage_url
13
+ people_url
14
+ end
15
+
16
+ def link_to_person(person)
17
+ link_to person.name, person
18
+ end
19
+ end
20
+
21
+ class PeopleHelperTest < ActionView::TestCase
22
+ def setup
23
+ ActionController::Routing::Routes.draw do |map|
24
+ map.people 'people', :controller => 'people', :action => 'index'
25
+ map.connect ':controller/:action/:id'
26
+ end
27
+ end
28
+
29
+ def test_title
30
+ assert_equal "<h1>Ruby on Rails</h1>", title("Ruby on Rails")
31
+ end
32
+
33
+ def test_homepage_path
34
+ assert_equal "/people", homepage_path
35
+ end
36
+
37
+ def test_homepage_url
38
+ assert_equal "http://test.host/people", homepage_url
39
+ end
40
+
41
+ def test_link_to_person
42
+ person = mock(:name => "David")
43
+ expects(:mocha_mock_path).with(person).returns("/people/1")
44
+ assert_equal '<a href="/people/1">David</a>', link_to_person(person)
45
+ end
46
+ end
47
+
48
+ class CrazyHelperTest < ActionView::TestCase
49
+ tests PeopleHelper
50
+
51
+ def test_helper_class_can_be_set_manually_not_just_inferred
52
+ assert_equal PeopleHelper, self.class.helper_class
53
+ end
54
+ end
@@ -0,0 +1,543 @@
1
+ require 'abstract_unit'
2
+ require 'testing_sandbox'
3
+ begin
4
+ require 'redcloth'
5
+ rescue LoadError
6
+ $stderr.puts "Skipping textilize tests. `gem install RedCloth` to enable."
7
+ end
8
+
9
+ class TextHelperTest < ActionView::TestCase
10
+ tests ActionView::Helpers::TextHelper
11
+ include TestingSandbox
12
+
13
+ def setup
14
+ # This simulates the fact that instance variables are reset every time
15
+ # a view is rendered. The cycle helper depends on this behavior.
16
+ @_cycles = nil if (defined? @_cycles)
17
+ end
18
+
19
+ def test_concat
20
+ self.output_buffer = 'foo'
21
+ assert_equal 'foobar', concat('bar')
22
+ assert_equal 'foobar', output_buffer
23
+ end
24
+
25
+ def test_simple_format
26
+ assert_equal "<p></p>", simple_format(nil)
27
+
28
+ assert_equal "<p>crazy\n<br /> cross\n<br /> platform linebreaks</p>", simple_format("crazy\r\n cross\r platform linebreaks")
29
+ assert_equal "<p>A paragraph</p>\n\n<p>and another one!</p>", simple_format("A paragraph\n\nand another one!")
30
+ assert_equal "<p>A paragraph\n<br /> With a newline</p>", simple_format("A paragraph\n With a newline")
31
+
32
+ text = "A\nB\nC\nD".freeze
33
+ assert_equal "<p>A\n<br />B\n<br />C\n<br />D</p>", simple_format(text)
34
+
35
+ text = "A\r\n \nB\n\n\r\n\t\nC\nD".freeze
36
+ assert_equal "<p>A\n<br /> \n<br />B</p>\n\n<p>\t\n<br />C\n<br />D</p>", simple_format(text)
37
+
38
+ assert_equal %q(<p class="test">This is a classy test</p>), simple_format("This is a classy test", :class => 'test')
39
+ assert_equal %Q(<p class="test">para 1</p>\n\n<p class="test">para 2</p>), simple_format("para 1\n\npara 2", :class => 'test')
40
+ end
41
+
42
+ def test_truncate
43
+ assert_equal "Hello World!", truncate("Hello World!", :length => 12)
44
+ assert_equal "Hello Wor...", truncate("Hello World!!", :length => 12)
45
+ end
46
+
47
+ def test_truncate_should_use_default_length_of_30
48
+ str = "This is a string that will go longer then the default truncate length of 30"
49
+ assert_equal str[0...27] + "...", truncate(str)
50
+ end
51
+
52
+ def test_truncate_with_options_hash
53
+ assert_equal "This is a string that wil[...]", truncate("This is a string that will go longer then the default truncate length of 30", :omission => "[...]")
54
+ assert_equal "Hello W...", truncate("Hello World!", :length => 10)
55
+ assert_equal "Hello[...]", truncate("Hello World!", :omission => "[...]", :length => 10)
56
+ end
57
+
58
+ if RUBY_VERSION < '1.9.0'
59
+ def test_truncate_multibyte
60
+ with_kcode 'none' do
61
+ assert_equal "\354\225\210\353\205\225\355...", truncate("\354\225\210\353\205\225\355\225\230\354\204\270\354\232\224", :length => 10)
62
+ end
63
+ with_kcode 'u' do
64
+ assert_equal "\354\225\204\353\246\254\353\236\221 \354\225\204\353\246\254 ...",
65
+ truncate("\354\225\204\353\246\254\353\236\221 \354\225\204\353\246\254 \354\225\204\353\235\274\353\246\254\354\230\244", :length => 10)
66
+ end
67
+ end
68
+ else
69
+ def test_truncate_multibyte
70
+ assert_equal "\354\225\210\353\205\225\355...",
71
+ truncate("\354\225\210\353\205\225\355\225\230\354\204\270\354\232\224", :length => 10)
72
+
73
+ assert_equal "\354\225\204\353\246\254\353\236\221 \354\225\204\353\246\254 ...".force_encoding('UTF-8'),
74
+ truncate("\354\225\204\353\246\254\353\236\221 \354\225\204\353\246\254 \354\225\204\353\235\274\353\246\254\354\230\244".force_encoding('UTF-8'), :length => 10)
75
+ end
76
+ end
77
+
78
+ def test_highlighter
79
+ assert_equal(
80
+ "This is a <strong class=\"highlight\">beautiful</strong> morning",
81
+ highlight("This is a beautiful morning", "beautiful")
82
+ )
83
+
84
+ assert_equal(
85
+ "This is a <strong class=\"highlight\">beautiful</strong> morning, but also a <strong class=\"highlight\">beautiful</strong> day",
86
+ highlight("This is a beautiful morning, but also a beautiful day", "beautiful")
87
+ )
88
+
89
+ assert_equal(
90
+ "This is a <b>beautiful</b> morning, but also a <b>beautiful</b> day",
91
+ highlight("This is a beautiful morning, but also a beautiful day", "beautiful", '<b>\1</b>')
92
+ )
93
+
94
+ assert_equal(
95
+ "This text is not changed because we supplied an empty phrase",
96
+ highlight("This text is not changed because we supplied an empty phrase", nil)
97
+ )
98
+
99
+ assert_equal ' ', highlight(' ', 'blank text is returned verbatim')
100
+ end
101
+
102
+ def test_highlight_with_regexp
103
+ assert_equal(
104
+ "This is a <strong class=\"highlight\">beautiful!</strong> morning",
105
+ highlight("This is a beautiful! morning", "beautiful!")
106
+ )
107
+
108
+ assert_equal(
109
+ "This is a <strong class=\"highlight\">beautiful! morning</strong>",
110
+ highlight("This is a beautiful! morning", "beautiful! morning")
111
+ )
112
+
113
+ assert_equal(
114
+ "This is a <strong class=\"highlight\">beautiful? morning</strong>",
115
+ highlight("This is a beautiful? morning", "beautiful? morning")
116
+ )
117
+ end
118
+
119
+ def test_highlight_with_multiple_phrases_in_one_pass
120
+ assert_equal %(<em>wow</em> <em>em</em>), highlight('wow em', %w(wow em), '<em>\1</em>')
121
+ end
122
+
123
+ def test_highlight_with_options_hash
124
+ assert_equal(
125
+ "This is a <b>beautiful</b> morning, but also a <b>beautiful</b> day",
126
+ highlight("This is a beautiful morning, but also a beautiful day", "beautiful", :highlighter => '<b>\1</b>')
127
+ )
128
+ end
129
+
130
+ def test_highlight_with_html
131
+ assert_equal(
132
+ "<p>This is a <strong class=\"highlight\">beautiful</strong> morning, but also a <strong class=\"highlight\">beautiful</strong> day</p>",
133
+ highlight("<p>This is a beautiful morning, but also a beautiful day</p>", "beautiful")
134
+ )
135
+ assert_equal(
136
+ "<p>This is a <em><strong class=\"highlight\">beautiful</strong></em> morning, but also a <strong class=\"highlight\">beautiful</strong> day</p>",
137
+ highlight("<p>This is a <em>beautiful</em> morning, but also a beautiful day</p>", "beautiful")
138
+ )
139
+ assert_equal(
140
+ "<p>This is a <em class=\"error\"><strong class=\"highlight\">beautiful</strong></em> morning, but also a <strong class=\"highlight\">beautiful</strong> <span class=\"last\">day</span></p>",
141
+ highlight("<p>This is a <em class=\"error\">beautiful</em> morning, but also a beautiful <span class=\"last\">day</span></p>", "beautiful")
142
+ )
143
+ assert_equal(
144
+ "<p class=\"beautiful\">This is a <strong class=\"highlight\">beautiful</strong> morning, but also a <strong class=\"highlight\">beautiful</strong> day</p>",
145
+ highlight("<p class=\"beautiful\">This is a beautiful morning, but also a beautiful day</p>", "beautiful")
146
+ )
147
+ assert_equal(
148
+ "<p>This is a <strong class=\"highlight\">beautiful</strong> <a href=\"http://example.com/beautiful\#top?what=beautiful%20morning&when=now+then\">morning</a>, but also a <strong class=\"highlight\">beautiful</strong> day</p>",
149
+ highlight("<p>This is a beautiful <a href=\"http://example.com/beautiful\#top?what=beautiful%20morning&when=now+then\">morning</a>, but also a beautiful day</p>", "beautiful")
150
+ )
151
+ end
152
+
153
+ def test_excerpt
154
+ assert_equal("...is a beautiful morn...", excerpt("This is a beautiful morning", "beautiful", 5))
155
+ assert_equal("This is a...", excerpt("This is a beautiful morning", "this", 5))
156
+ assert_equal("...iful morning", excerpt("This is a beautiful morning", "morning", 5))
157
+ assert_nil excerpt("This is a beautiful morning", "day")
158
+ end
159
+
160
+ def test_excerpt_in_borderline_cases
161
+ assert_equal("", excerpt("", "", 0))
162
+ assert_equal("a", excerpt("a", "a", 0))
163
+ assert_equal("...b...", excerpt("abc", "b", 0))
164
+ assert_equal("abc", excerpt("abc", "b", 1))
165
+ assert_equal("abc...", excerpt("abcd", "b", 1))
166
+ assert_equal("...abc", excerpt("zabc", "b", 1))
167
+ assert_equal("...abc...", excerpt("zabcd", "b", 1))
168
+ assert_equal("zabcd", excerpt("zabcd", "b", 2))
169
+
170
+ # excerpt strips the resulting string before ap-/prepending excerpt_string.
171
+ # whether this behavior is meaningful when excerpt_string is not to be
172
+ # appended is questionable.
173
+ assert_equal("zabcd", excerpt(" zabcd ", "b", 4))
174
+ assert_equal("...abc...", excerpt("z abc d", "b", 1))
175
+ end
176
+
177
+ def test_excerpt_with_regex
178
+ assert_equal('...is a beautiful! mor...', excerpt('This is a beautiful! morning', 'beautiful', 5))
179
+ assert_equal('...is a beautiful? mor...', excerpt('This is a beautiful? morning', 'beautiful', 5))
180
+ end
181
+
182
+ def test_excerpt_with_options_hash
183
+ assert_equal("...is a beautiful morn...", excerpt("This is a beautiful morning", "beautiful", :radius => 5))
184
+ assert_equal("[...]is a beautiful morn[...]", excerpt("This is a beautiful morning", "beautiful", :omission => "[...]",:radius => 5))
185
+ assert_equal(
186
+ "This is the ultimate supercalifragilisticexpialidoceous very looooooooooooooooooong looooooooooooong beautiful morning with amazing sunshine and awesome tempera[...]",
187
+ excerpt("This is the ultimate supercalifragilisticexpialidoceous very looooooooooooooooooong looooooooooooong beautiful morning with amazing sunshine and awesome temperatures. So what are you gonna do about it?", "very",
188
+ :omission => "[...]")
189
+ )
190
+ end
191
+
192
+ if RUBY_VERSION < '1.9'
193
+ def test_excerpt_with_utf8
194
+ with_kcode('u') do
195
+ assert_equal("...\357\254\203ciency could not be...", excerpt("That's why e\357\254\203ciency could not be helped", 'could', 8))
196
+ end
197
+ with_kcode('none') do
198
+ assert_equal("...\203ciency could not be...", excerpt("That's why e\357\254\203ciency could not be helped", 'could', 8))
199
+ end
200
+ end
201
+ else
202
+ def test_excerpt_with_utf8
203
+ assert_equal("...\357\254\203ciency could not be...".force_encoding('UTF-8'), excerpt("That's why e\357\254\203ciency could not be helped".force_encoding('UTF-8'), 'could', 8))
204
+ assert_equal("...\203ciency could not be...", excerpt("That's why e\357\254\203ciency could not be helped", 'could', 8))
205
+ end
206
+ end
207
+
208
+ def test_word_wrap
209
+ assert_equal("my very very\nvery long\nstring", word_wrap("my very very very long string", 15))
210
+ end
211
+
212
+ def test_word_wrap_with_extra_newlines
213
+ assert_equal("my very very\nvery long\nstring\n\nwith another\nline", word_wrap("my very very very long string\n\nwith another line", 15))
214
+ end
215
+
216
+ def test_word_wrap_with_options_hash
217
+ assert_equal("my very very\nvery long\nstring", word_wrap("my very very very long string", :line_width => 15))
218
+ end
219
+
220
+ def test_pluralization
221
+ assert_equal("1 count", pluralize(1, "count"))
222
+ assert_equal("2 counts", pluralize(2, "count"))
223
+ assert_equal("1 count", pluralize('1', "count"))
224
+ assert_equal("2 counts", pluralize('2', "count"))
225
+ assert_equal("1,066 counts", pluralize('1,066', "count"))
226
+ assert_equal("1.25 counts", pluralize('1.25', "count"))
227
+ assert_equal("2 counters", pluralize(2, "count", "counters"))
228
+ assert_equal("0 counters", pluralize(nil, "count", "counters"))
229
+ assert_equal("2 people", pluralize(2, "person"))
230
+ assert_equal("10 buffaloes", pluralize(10, "buffalo"))
231
+ assert_equal("1 berry", pluralize(1, "berry"))
232
+ assert_equal("12 berries", pluralize(12, "berry"))
233
+ end
234
+
235
+ def test_auto_link_parsing
236
+ urls = %w(
237
+ http://www.rubyonrails.com
238
+ http://www.rubyonrails.com:80
239
+ http://www.rubyonrails.com/~minam
240
+ https://www.rubyonrails.com/~minam
241
+ http://www.rubyonrails.com/~minam/url%20with%20spaces
242
+ http://www.rubyonrails.com/foo.cgi?something=here
243
+ http://www.rubyonrails.com/foo.cgi?something=here&and=here
244
+ http://www.rubyonrails.com/contact;new
245
+ http://www.rubyonrails.com/contact;new%20with%20spaces
246
+ http://www.rubyonrails.com/contact;new?with=query&string=params
247
+ http://www.rubyonrails.com/~minam/contact;new?with=query&string=params
248
+ http://en.wikipedia.org/wiki/Wikipedia:Today%27s_featured_picture_%28animation%29/January_20%2C_2007
249
+ http://www.mail-archive.com/rails@lists.rubyonrails.org/
250
+ http://www.amazon.com/Testing-Equal-Sign-In-Path/ref=pd_bbs_sr_1?ie=UTF8&s=books&qid=1198861734&sr=8-1
251
+ http://en.wikipedia.org/wiki/Texas_hold'em
252
+ https://www.google.com/doku.php?id=gps:resource:scs:start
253
+ http://connect.oraclecorp.com/search?search[q]=green+france&search[type]=Group
254
+ http://of.openfoundry.org/projects/492/download#4th.Release.3
255
+ http://maps.google.co.uk/maps?f=q&q=the+london+eye&ie=UTF8&ll=51.503373,-0.11939&spn=0.007052,0.012767&z=16&iwloc=A
256
+ )
257
+
258
+ urls.each do |url|
259
+ assert_equal generate_result(url), auto_link(url)
260
+ end
261
+ end
262
+
263
+ def generate_result(link_text, href = nil)
264
+ href ||= link_text
265
+ %{<a href="#{CGI::escapeHTML href}">#{CGI::escapeHTML link_text}</a>}
266
+ end
267
+
268
+ def test_auto_linking
269
+ email_raw = 'david@loudthinking.com'
270
+ email_result = %{<a href="mailto:#{email_raw}">#{email_raw}</a>}
271
+ link_raw = 'http://www.rubyonrails.com'
272
+ link_result = generate_result(link_raw)
273
+ link_result_with_options = %{<a href="#{link_raw}" target="_blank">#{link_raw}</a>}
274
+
275
+ assert_equal '', auto_link(nil)
276
+ assert_equal '', auto_link('')
277
+ assert_equal "#{link_result} #{link_result} #{link_result}", auto_link("#{link_raw} #{link_raw} #{link_raw}")
278
+
279
+ assert_equal %(hello #{email_result}), auto_link("hello #{email_raw}", :email_addresses)
280
+ assert_equal %(Go to #{link_result}), auto_link("Go to #{link_raw}", :urls)
281
+ assert_equal %(Go to #{link_raw}), auto_link("Go to #{link_raw}", :email_addresses)
282
+ assert_equal %(Go to #{link_result} and say hello to #{email_result}), auto_link("Go to #{link_raw} and say hello to #{email_raw}")
283
+ assert_equal %(<p>Link #{link_result}</p>), auto_link("<p>Link #{link_raw}</p>")
284
+ assert_equal %(<p>#{link_result} Link</p>), auto_link("<p>#{link_raw} Link</p>")
285
+ assert_equal %(<p>Link #{link_result_with_options}</p>), auto_link("<p>Link #{link_raw}</p>", :all, {:target => "_blank"})
286
+ assert_equal %(Go to #{link_result}.), auto_link(%(Go to #{link_raw}.))
287
+ assert_equal %(<p>Go to #{link_result}, then say hello to #{email_result}.</p>), auto_link(%(<p>Go to #{link_raw}, then say hello to #{email_raw}.</p>))
288
+
289
+ email2_raw = '+david@loudthinking.com'
290
+ email2_result = %{<a href="mailto:#{email2_raw}">#{email2_raw}</a>}
291
+ assert_equal email2_result, auto_link(email2_raw)
292
+
293
+ email3_raw = '+david@loudthinking.com'
294
+ email3_result = %{<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;+%64%61%76%69%64@%6c%6f%75%64%74%68%69%6e%6b%69%6e%67.%63%6f%6d">#{email3_raw}</a>}
295
+ assert_equal email3_result, auto_link(email3_raw, :all, :encode => :hex)
296
+ assert_equal email3_result, auto_link(email3_raw, :email_addresses, :encode => :hex)
297
+
298
+ link2_raw = 'www.rubyonrails.com'
299
+ link2_result = generate_result(link2_raw, "http://#{link2_raw}")
300
+ assert_equal %(Go to #{link2_result}), auto_link("Go to #{link2_raw}", :urls)
301
+ assert_equal %(Go to #{link2_raw}), auto_link("Go to #{link2_raw}", :email_addresses)
302
+ assert_equal %(<p>Link #{link2_result}</p>), auto_link("<p>Link #{link2_raw}</p>")
303
+ assert_equal %(<p>#{link2_result} Link</p>), auto_link("<p>#{link2_raw} Link</p>")
304
+ assert_equal %(Go to #{link2_result}.), auto_link(%(Go to #{link2_raw}.))
305
+ assert_equal %(<p>Say hello to #{email_result}, then go to #{link2_result}.</p>), auto_link(%(<p>Say hello to #{email_raw}, then go to #{link2_raw}.</p>))
306
+
307
+ link3_raw = 'http://manuals.ruby-on-rails.com/read/chapter.need_a-period/103#page281'
308
+ link3_result = generate_result(link3_raw)
309
+ assert_equal %(Go to #{link3_result}), auto_link("Go to #{link3_raw}", :urls)
310
+ assert_equal %(Go to #{link3_raw}), auto_link("Go to #{link3_raw}", :email_addresses)
311
+ assert_equal %(<p>Link #{link3_result}</p>), auto_link("<p>Link #{link3_raw}</p>")
312
+ assert_equal %(<p>#{link3_result} Link</p>), auto_link("<p>#{link3_raw} Link</p>")
313
+ assert_equal %(Go to #{link3_result}.), auto_link(%(Go to #{link3_raw}.))
314
+ assert_equal %(<p>Go to #{link3_result}. Seriously, #{link3_result}? I think I'll say hello to #{email_result}. Instead.</p>),
315
+ auto_link(%(<p>Go to #{link3_raw}. Seriously, #{link3_raw}? I think I'll say hello to #{email_raw}. Instead.</p>))
316
+
317
+ link4_raw = 'http://foo.example.com/controller/action?parm=value&p2=v2#anchor123'
318
+ link4_result = generate_result(link4_raw)
319
+ assert_equal %(<p>Link #{link4_result}</p>), auto_link("<p>Link #{link4_raw}</p>")
320
+ assert_equal %(<p>#{link4_result} Link</p>), auto_link("<p>#{link4_raw} Link</p>")
321
+
322
+ link5_raw = 'http://foo.example.com:3000/controller/action'
323
+ link5_result = generate_result(link5_raw)
324
+ assert_equal %(<p>#{link5_result} Link</p>), auto_link("<p>#{link5_raw} Link</p>")
325
+
326
+ link6_raw = 'http://foo.example.com:3000/controller/action+pack'
327
+ link6_result = generate_result(link6_raw)
328
+ assert_equal %(<p>#{link6_result} Link</p>), auto_link("<p>#{link6_raw} Link</p>")
329
+
330
+ link7_raw = 'http://foo.example.com/controller/action?parm=value&p2=v2#anchor-123'
331
+ link7_result = generate_result(link7_raw)
332
+ assert_equal %(<p>#{link7_result} Link</p>), auto_link("<p>#{link7_raw} Link</p>")
333
+
334
+ link8_raw = 'http://foo.example.com:3000/controller/action.html'
335
+ link8_result = generate_result(link8_raw)
336
+ assert_equal %(Go to #{link8_result}), auto_link("Go to #{link8_raw}", :urls)
337
+ assert_equal %(Go to #{link8_raw}), auto_link("Go to #{link8_raw}", :email_addresses)
338
+ assert_equal %(<p>Link #{link8_result}</p>), auto_link("<p>Link #{link8_raw}</p>")
339
+ assert_equal %(<p>#{link8_result} Link</p>), auto_link("<p>#{link8_raw} Link</p>")
340
+ assert_equal %(Go to #{link8_result}.), auto_link(%(Go to #{link8_raw}.))
341
+ assert_equal %(<p>Go to #{link8_result}. Seriously, #{link8_result}? I think I'll say hello to #{email_result}. Instead.</p>),
342
+ auto_link(%(<p>Go to #{link8_raw}. Seriously, #{link8_raw}? I think I'll say hello to #{email_raw}. Instead.</p>))
343
+
344
+ link9_raw = 'http://business.timesonline.co.uk/article/0,,9065-2473189,00.html'
345
+ link9_result = generate_result(link9_raw)
346
+ assert_equal %(Go to #{link9_result}), auto_link("Go to #{link9_raw}", :urls)
347
+ assert_equal %(Go to #{link9_raw}), auto_link("Go to #{link9_raw}", :email_addresses)
348
+ assert_equal %(<p>Link #{link9_result}</p>), auto_link("<p>Link #{link9_raw}</p>")
349
+ assert_equal %(<p>#{link9_result} Link</p>), auto_link("<p>#{link9_raw} Link</p>")
350
+ assert_equal %(Go to #{link9_result}.), auto_link(%(Go to #{link9_raw}.))
351
+ assert_equal %(<p>Go to #{link9_result}. Seriously, #{link9_result}? I think I'll say hello to #{email_result}. Instead.</p>),
352
+ auto_link(%(<p>Go to #{link9_raw}. Seriously, #{link9_raw}? I think I'll say hello to #{email_raw}. Instead.</p>))
353
+
354
+ link10_raw = 'http://www.mail-archive.com/ruby-talk@ruby-lang.org/'
355
+ link10_result = generate_result(link10_raw)
356
+ assert_equal %(<p>#{link10_result} Link</p>), auto_link("<p>#{link10_raw} Link</p>")
357
+ end
358
+
359
+ def test_auto_link_already_linked
360
+ linked1 = generate_result('Ruby On Rails', 'http://www.rubyonrails.com')
361
+ linked2 = generate_result('www.rubyonrails.com', 'http://www.rubyonrails.com')
362
+ assert_equal linked1, auto_link(linked1)
363
+ assert_equal linked2, auto_link(linked2)
364
+ end
365
+
366
+ def test_auto_link_with_brackets
367
+ link1_raw = 'http://en.wikipedia.org/wiki/Sprite_(computer_graphics)'
368
+ link1_result = generate_result(link1_raw)
369
+ assert_equal link1_result, auto_link(link1_raw)
370
+ assert_equal "(link: #{link1_result})", auto_link("(link: #{link1_raw})")
371
+
372
+ link2_raw = 'http://en.wikipedia.org/wiki/Sprite_[computer_graphics]'
373
+ link2_result = generate_result(link2_raw)
374
+ assert_equal link2_result, auto_link(link2_raw)
375
+ assert_equal "[link: #{link2_result}]", auto_link("[link: #{link2_raw}]")
376
+
377
+ link3_raw = 'http://en.wikipedia.org/wiki/Sprite_{computer_graphics}'
378
+ link3_result = generate_result(link3_raw)
379
+ assert_equal link3_result, auto_link(link3_raw)
380
+ assert_equal "{link: #{link3_result}}", auto_link("{link: #{link3_raw}}")
381
+ end
382
+
383
+ def test_auto_link_in_tags
384
+ link_raw = 'http://www.rubyonrails.org/images/rails.png'
385
+ link_result = %Q(<img src="#{link_raw}" />)
386
+ assert_equal link_result, auto_link(link_result)
387
+ end
388
+
389
+ def test_auto_link_at_eol
390
+ url1 = "http://api.rubyonrails.com/Foo.html"
391
+ url2 = "http://www.ruby-doc.org/core/Bar.html"
392
+
393
+ assert_equal %(<p><a href="#{url1}">#{url1}</a><br /><a href="#{url2}">#{url2}</a><br /></p>), auto_link("<p>#{url1}<br />#{url2}<br /></p>")
394
+ end
395
+
396
+ def test_auto_link_with_block
397
+ url = "http://api.rubyonrails.com/Foo.html"
398
+ email = "fantabulous@shiznadel.ic"
399
+
400
+ assert_equal %(<p><a href="#{url}">#{url[0...7]}...</a><br /><a href="mailto:#{email}">#{email[0...7]}...</a><br /></p>), auto_link("<p>#{url}<br />#{email}<br /></p>") { |url| truncate(url, :length => 10) }
401
+ end
402
+
403
+ def test_auto_link_with_options_hash
404
+ assert_dom_equal 'Welcome to my new blog at <a href="http://www.myblog.com/" class="menu" target="_blank">http://www.myblog.com/</a>. Please e-mail me at <a href="mailto:me@email.com" class="menu" target="_blank">me@email.com</a>.',
405
+ auto_link("Welcome to my new blog at http://www.myblog.com/. Please e-mail me at me@email.com.",
406
+ :link => :all, :html => { :class => "menu", :target => "_blank" })
407
+ end
408
+
409
+ def test_cycle_class
410
+ value = Cycle.new("one", 2, "3")
411
+ assert_equal("one", value.to_s)
412
+ assert_equal("2", value.to_s)
413
+ assert_equal("3", value.to_s)
414
+ assert_equal("one", value.to_s)
415
+ value.reset
416
+ assert_equal("one", value.to_s)
417
+ assert_equal("2", value.to_s)
418
+ assert_equal("3", value.to_s)
419
+ end
420
+
421
+ def test_cycle_class_with_no_arguments
422
+ assert_raise(ArgumentError) { value = Cycle.new() }
423
+ end
424
+
425
+ def test_cycle
426
+ assert_equal("one", cycle("one", 2, "3"))
427
+ assert_equal("2", cycle("one", 2, "3"))
428
+ assert_equal("3", cycle("one", 2, "3"))
429
+ assert_equal("one", cycle("one", 2, "3"))
430
+ assert_equal("2", cycle("one", 2, "3"))
431
+ assert_equal("3", cycle("one", 2, "3"))
432
+ end
433
+
434
+ def test_cycle_with_no_arguments
435
+ assert_raise(ArgumentError) { value = cycle() }
436
+ end
437
+
438
+ def test_cycle_resets_with_new_values
439
+ assert_equal("even", cycle("even", "odd"))
440
+ assert_equal("odd", cycle("even", "odd"))
441
+ assert_equal("even", cycle("even", "odd"))
442
+ assert_equal("1", cycle(1, 2, 3))
443
+ assert_equal("2", cycle(1, 2, 3))
444
+ assert_equal("3", cycle(1, 2, 3))
445
+ assert_equal("1", cycle(1, 2, 3))
446
+ end
447
+
448
+ def test_named_cycles
449
+ assert_equal("1", cycle(1, 2, 3, :name => "numbers"))
450
+ assert_equal("red", cycle("red", "blue", :name => "colors"))
451
+ assert_equal("2", cycle(1, 2, 3, :name => "numbers"))
452
+ assert_equal("blue", cycle("red", "blue", :name => "colors"))
453
+ assert_equal("3", cycle(1, 2, 3, :name => "numbers"))
454
+ assert_equal("red", cycle("red", "blue", :name => "colors"))
455
+ end
456
+
457
+ def test_current_cycle_with_default_name
458
+ cycle("even","odd")
459
+ assert_equal "even", current_cycle
460
+ cycle("even","odd")
461
+ assert_equal "odd", current_cycle
462
+ cycle("even","odd")
463
+ assert_equal "even", current_cycle
464
+ end
465
+
466
+ def test_current_cycle_with_named_cycles
467
+ cycle("red", "blue", :name => "colors")
468
+ assert_equal "red", current_cycle("colors")
469
+ cycle("red", "blue", :name => "colors")
470
+ assert_equal "blue", current_cycle("colors")
471
+ cycle("red", "blue", :name => "colors")
472
+ assert_equal "red", current_cycle("colors")
473
+ end
474
+
475
+ def test_current_cycle_safe_call
476
+ assert_nothing_raised { current_cycle }
477
+ assert_nothing_raised { current_cycle("colors") }
478
+ end
479
+
480
+ def test_current_cycle_with_more_than_two_names
481
+ cycle(1,2,3)
482
+ assert_equal "1", current_cycle
483
+ cycle(1,2,3)
484
+ assert_equal "2", current_cycle
485
+ cycle(1,2,3)
486
+ assert_equal "3", current_cycle
487
+ cycle(1,2,3)
488
+ assert_equal "1", current_cycle
489
+ end
490
+
491
+ def test_default_named_cycle
492
+ assert_equal("1", cycle(1, 2, 3))
493
+ assert_equal("2", cycle(1, 2, 3, :name => "default"))
494
+ assert_equal("3", cycle(1, 2, 3))
495
+ end
496
+
497
+ def test_reset_cycle
498
+ assert_equal("1", cycle(1, 2, 3))
499
+ assert_equal("2", cycle(1, 2, 3))
500
+ reset_cycle
501
+ assert_equal("1", cycle(1, 2, 3))
502
+ end
503
+
504
+ def test_reset_unknown_cycle
505
+ reset_cycle("colors")
506
+ end
507
+
508
+ def test_recet_named_cycle
509
+ assert_equal("1", cycle(1, 2, 3, :name => "numbers"))
510
+ assert_equal("red", cycle("red", "blue", :name => "colors"))
511
+ reset_cycle("numbers")
512
+ assert_equal("1", cycle(1, 2, 3, :name => "numbers"))
513
+ assert_equal("blue", cycle("red", "blue", :name => "colors"))
514
+ assert_equal("2", cycle(1, 2, 3, :name => "numbers"))
515
+ assert_equal("red", cycle("red", "blue", :name => "colors"))
516
+ end
517
+
518
+ def test_cycle_no_instance_variable_clashes
519
+ @cycles = %w{Specialized Fuji Giant}
520
+ assert_equal("red", cycle("red", "blue"))
521
+ assert_equal("blue", cycle("red", "blue"))
522
+ assert_equal("red", cycle("red", "blue"))
523
+ assert_equal(%w{Specialized Fuji Giant}, @cycles)
524
+ end
525
+
526
+ if defined? RedCloth
527
+ def test_textilize
528
+ assert_equal("<p><strong>This is Textile!</strong> Rejoice!</p>", textilize("*This is Textile!* Rejoice!"))
529
+ end
530
+
531
+ def test_textilize_with_blank
532
+ assert_equal("", textilize(""))
533
+ end
534
+
535
+ def test_textilize_with_options
536
+ assert_equal("<p>This is worded &lt;strong&gt;strongly&lt;/strong&gt;</p>", textilize("This is worded <strong>strongly</strong>", :filter_html))
537
+ end
538
+
539
+ def test_textilize_with_hard_breaks
540
+ assert_equal("<p>This is one scary world.<br />\n True.</p>", textilize("This is one scary world.\n True."))
541
+ end
542
+ end
543
+ end
@@ -0,0 +1,32 @@
1
+ require 'abstract_unit'
2
+
3
+ class TranslationHelperTest < Test::Unit::TestCase
4
+ include ActionView::Helpers::TagHelper
5
+ include ActionView::Helpers::TranslationHelper
6
+
7
+ attr_reader :request
8
+ def setup
9
+ end
10
+
11
+ def test_delegates_to_i18n_setting_the_raise_option
12
+ I18n.expects(:translate).with(:foo, :locale => 'en', :raise => true)
13
+ translate :foo, :locale => 'en'
14
+ end
15
+
16
+ def test_returns_missing_translation_message_wrapped_into_span
17
+ expected = '<span class="translation_missing">en, foo</span>'
18
+ assert_equal expected, translate(:foo)
19
+ end
20
+
21
+ def test_delegates_localize_to_i18n
22
+ @time = Time.utc(2008, 7, 8, 12, 18, 38)
23
+ I18n.expects(:localize).with(@time)
24
+ localize @time
25
+ end
26
+
27
+ def test_scoping_by_partial
28
+ expects(:template).returns(stub(:path_without_format_and_extension => "people/index"))
29
+ I18n.expects(:translate).with("people.index.foo", :locale => 'en', :raise => true)
30
+ translate ".foo", :locale => 'en'
31
+ end
32
+ end