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,807 @@
1
+ require 'abstract_unit'
2
+ require 'tzinfo'
3
+
4
+ TZInfo::Timezone.cattr_reader :loaded_zones
5
+
6
+ class FormOptionsHelperTest < ActionView::TestCase
7
+ tests ActionView::Helpers::FormOptionsHelper
8
+
9
+ silence_warnings do
10
+ Post = Struct.new('Post', :title, :author_name, :body, :secret, :written_on, :category, :origin)
11
+ Continent = Struct.new('Continent', :continent_name, :countries)
12
+ Country = Struct.new('Country', :country_id, :country_name)
13
+ Firm = Struct.new('Firm', :time_zone)
14
+ Album = Struct.new('Album', :id, :title, :genre)
15
+ end
16
+
17
+ def setup
18
+ @fake_timezones = %w(A B C D E).inject([]) do |zones, id|
19
+ tz = TZInfo::Timezone.loaded_zones[id] = stub(:name => id, :to_s => id)
20
+ ActiveSupport::TimeZone.stubs(:[]).with(id).returns(tz)
21
+ zones << tz
22
+ end
23
+ ActiveSupport::TimeZone.stubs(:all).returns(@fake_timezones)
24
+ end
25
+
26
+ def test_collection_options
27
+ assert_dom_equal(
28
+ "<option value=\"&lt;Abe&gt;\">&lt;Abe&gt; went home</option>\n<option value=\"Babe\">Babe went home</option>\n<option value=\"Cabe\">Cabe went home</option>",
29
+ options_from_collection_for_select(dummy_posts, "author_name", "title")
30
+ )
31
+ end
32
+
33
+
34
+ def test_collection_options_with_preselected_value
35
+ assert_dom_equal(
36
+ "<option value=\"&lt;Abe&gt;\">&lt;Abe&gt; went home</option>\n<option value=\"Babe\" selected=\"selected\">Babe went home</option>\n<option value=\"Cabe\">Cabe went home</option>",
37
+ options_from_collection_for_select(dummy_posts, "author_name", "title", "Babe")
38
+ )
39
+ end
40
+
41
+ def test_collection_options_with_preselected_value_array
42
+ assert_dom_equal(
43
+ "<option value=\"&lt;Abe&gt;\">&lt;Abe&gt; went home</option>\n<option value=\"Babe\" selected=\"selected\">Babe went home</option>\n<option value=\"Cabe\" selected=\"selected\">Cabe went home</option>",
44
+ options_from_collection_for_select(dummy_posts, "author_name", "title", [ "Babe", "Cabe" ])
45
+ )
46
+ end
47
+
48
+ def test_collection_options_with_proc_for_selected
49
+ assert_dom_equal(
50
+ "<option value=\"&lt;Abe&gt;\">&lt;Abe&gt; went home</option>\n<option value=\"Babe\" selected=\"selected\">Babe went home</option>\n<option value=\"Cabe\">Cabe went home</option>",
51
+ options_from_collection_for_select(dummy_posts, "author_name", "title", lambda{|p| p.author_name == 'Babe' })
52
+ )
53
+ end
54
+
55
+ def test_collection_options_with_disabled_value
56
+ assert_dom_equal(
57
+ "<option value=\"&lt;Abe&gt;\">&lt;Abe&gt; went home</option>\n<option value=\"Babe\" disabled=\"disabled\">Babe went home</option>\n<option value=\"Cabe\">Cabe went home</option>",
58
+ options_from_collection_for_select(dummy_posts, "author_name", "title", :disabled => "Babe")
59
+ )
60
+ end
61
+
62
+ def test_collection_options_with_disabled_array
63
+ assert_dom_equal(
64
+ "<option value=\"&lt;Abe&gt;\">&lt;Abe&gt; went home</option>\n<option value=\"Babe\" disabled=\"disabled\">Babe went home</option>\n<option value=\"Cabe\" disabled=\"disabled\">Cabe went home</option>",
65
+ options_from_collection_for_select(dummy_posts, "author_name", "title", :disabled => [ "Babe", "Cabe" ])
66
+ )
67
+ end
68
+
69
+ def test_collection_options_with_preselected_and_disabled_value
70
+ assert_dom_equal(
71
+ "<option value=\"&lt;Abe&gt;\">&lt;Abe&gt; went home</option>\n<option value=\"Babe\" disabled=\"disabled\">Babe went home</option>\n<option value=\"Cabe\" selected=\"selected\">Cabe went home</option>",
72
+ options_from_collection_for_select(dummy_posts, "author_name", "title", :selected => "Cabe", :disabled => "Babe")
73
+ )
74
+ end
75
+
76
+ def test_collection_options_with_proc_for_disabled
77
+ assert_dom_equal(
78
+ "<option value=\"&lt;Abe&gt;\">&lt;Abe&gt; went home</option>\n<option value=\"Babe\" disabled=\"disabled\">Babe went home</option>\n<option value=\"Cabe\" disabled=\"disabled\">Cabe went home</option>",
79
+ options_from_collection_for_select(dummy_posts, "author_name", "title", :disabled => lambda{|p| %w(Babe Cabe).include? p.author_name })
80
+ )
81
+ end
82
+
83
+ def test_string_options_for_select
84
+ options = "<option value=\"Denmark\">Denmark</option><option value=\"USA\">USA</option><option value=\"Sweden\">Sweden</option>"
85
+ assert_dom_equal(
86
+ options,
87
+ options_for_select(options)
88
+ )
89
+ end
90
+
91
+ def test_array_options_for_select
92
+ assert_dom_equal(
93
+ "<option value=\"&lt;Denmark&gt;\">&lt;Denmark&gt;</option>\n<option value=\"USA\">USA</option>\n<option value=\"Sweden\">Sweden</option>",
94
+ options_for_select([ "<Denmark>", "USA", "Sweden" ])
95
+ )
96
+ end
97
+
98
+ def test_array_options_for_select_with_selection
99
+ assert_dom_equal(
100
+ "<option value=\"Denmark\">Denmark</option>\n<option value=\"&lt;USA&gt;\" selected=\"selected\">&lt;USA&gt;</option>\n<option value=\"Sweden\">Sweden</option>",
101
+ options_for_select([ "Denmark", "<USA>", "Sweden" ], "<USA>")
102
+ )
103
+ end
104
+
105
+ def test_array_options_for_select_with_selection_array
106
+ assert_dom_equal(
107
+ "<option value=\"Denmark\">Denmark</option>\n<option value=\"&lt;USA&gt;\" selected=\"selected\">&lt;USA&gt;</option>\n<option value=\"Sweden\" selected=\"selected\">Sweden</option>",
108
+ options_for_select([ "Denmark", "<USA>", "Sweden" ], [ "<USA>", "Sweden" ])
109
+ )
110
+ end
111
+
112
+ def test_array_options_for_select_with_disabled_value
113
+ assert_dom_equal(
114
+ "<option value=\"Denmark\">Denmark</option>\n<option value=\"&lt;USA&gt;\" disabled=\"disabled\">&lt;USA&gt;</option>\n<option value=\"Sweden\">Sweden</option>",
115
+ options_for_select([ "Denmark", "<USA>", "Sweden" ], :disabled => "<USA>")
116
+ )
117
+ end
118
+
119
+ def test_array_options_for_select_with_disabled_array
120
+ assert_dom_equal(
121
+ "<option value=\"Denmark\">Denmark</option>\n<option value=\"&lt;USA&gt;\" disabled=\"disabled\">&lt;USA&gt;</option>\n<option value=\"Sweden\" disabled=\"disabled\">Sweden</option>",
122
+ options_for_select([ "Denmark", "<USA>", "Sweden" ], :disabled => ["<USA>", "Sweden"])
123
+ )
124
+ end
125
+
126
+ def test_array_options_for_select_with_selection_and_disabled_value
127
+ assert_dom_equal(
128
+ "<option value=\"Denmark\" selected=\"selected\">Denmark</option>\n<option value=\"&lt;USA&gt;\" disabled=\"disabled\">&lt;USA&gt;</option>\n<option value=\"Sweden\">Sweden</option>",
129
+ options_for_select([ "Denmark", "<USA>", "Sweden" ], :selected => "Denmark", :disabled => "<USA>")
130
+ )
131
+ end
132
+
133
+ def test_array_options_for_string_include_in_other_string_bug_fix
134
+ assert_dom_equal(
135
+ "<option value=\"ruby\">ruby</option>\n<option value=\"rubyonrails\" selected=\"selected\">rubyonrails</option>",
136
+ options_for_select([ "ruby", "rubyonrails" ], "rubyonrails")
137
+ )
138
+ assert_dom_equal(
139
+ "<option value=\"ruby\" selected=\"selected\">ruby</option>\n<option value=\"rubyonrails\">rubyonrails</option>",
140
+ options_for_select([ "ruby", "rubyonrails" ], "ruby")
141
+ )
142
+ assert_dom_equal(
143
+ %(<option value="ruby" selected="selected">ruby</option>\n<option value="rubyonrails">rubyonrails</option>\n<option value=""></option>),
144
+ options_for_select([ "ruby", "rubyonrails", nil ], "ruby")
145
+ )
146
+ end
147
+
148
+ def test_hash_options_for_select
149
+ assert_dom_equal(
150
+ "<option value=\"&lt;Kroner&gt;\">&lt;DKR&gt;</option>\n<option value=\"Dollar\">$</option>",
151
+ options_for_select("$" => "Dollar", "<DKR>" => "<Kroner>").split("\n").sort.join("\n")
152
+ )
153
+ assert_dom_equal(
154
+ "<option value=\"&lt;Kroner&gt;\">&lt;DKR&gt;</option>\n<option value=\"Dollar\" selected=\"selected\">$</option>",
155
+ options_for_select({ "$" => "Dollar", "<DKR>" => "<Kroner>" }, "Dollar").split("\n").sort.join("\n")
156
+ )
157
+ assert_dom_equal(
158
+ "<option value=\"&lt;Kroner&gt;\" selected=\"selected\">&lt;DKR&gt;</option>\n<option value=\"Dollar\" selected=\"selected\">$</option>",
159
+ options_for_select({ "$" => "Dollar", "<DKR>" => "<Kroner>" }, [ "Dollar", "<Kroner>" ]).split("\n").sort.join("\n")
160
+ )
161
+ end
162
+
163
+ def test_ducktyped_options_for_select
164
+ quack = Struct.new(:first, :last)
165
+ assert_dom_equal(
166
+ "<option value=\"&lt;Kroner&gt;\">&lt;DKR&gt;</option>\n<option value=\"Dollar\">$</option>",
167
+ options_for_select([quack.new("<DKR>", "<Kroner>"), quack.new("$", "Dollar")])
168
+ )
169
+ assert_dom_equal(
170
+ "<option value=\"&lt;Kroner&gt;\">&lt;DKR&gt;</option>\n<option value=\"Dollar\" selected=\"selected\">$</option>",
171
+ options_for_select([quack.new("<DKR>", "<Kroner>"), quack.new("$", "Dollar")], "Dollar")
172
+ )
173
+ assert_dom_equal(
174
+ "<option value=\"&lt;Kroner&gt;\" selected=\"selected\">&lt;DKR&gt;</option>\n<option value=\"Dollar\" selected=\"selected\">$</option>",
175
+ options_for_select([quack.new("<DKR>", "<Kroner>"), quack.new("$", "Dollar")], ["Dollar", "<Kroner>"])
176
+ )
177
+ end
178
+
179
+ def test_option_groups_from_collection_for_select
180
+ @continents = [
181
+ Continent.new("<Africa>", [Country.new("<sa>", "<South Africa>"), Country.new("so", "Somalia")] ),
182
+ Continent.new("Europe", [Country.new("dk", "Denmark"), Country.new("ie", "Ireland")] )
183
+ ]
184
+
185
+ assert_dom_equal(
186
+ "<optgroup label=\"&lt;Africa&gt;\"><option value=\"&lt;sa&gt;\">&lt;South Africa&gt;</option>\n<option value=\"so\">Somalia</option></optgroup><optgroup label=\"Europe\"><option value=\"dk\" selected=\"selected\">Denmark</option>\n<option value=\"ie\">Ireland</option></optgroup>",
187
+ option_groups_from_collection_for_select(@continents, "countries", "continent_name", "country_id", "country_name", "dk")
188
+ )
189
+ end
190
+
191
+ def test_grouped_options_for_select_with_array
192
+ assert_dom_equal(
193
+ "<optgroup label=\"North America\"><option value=\"US\">United States</option>\n<option value=\"Canada\">Canada</option></optgroup><optgroup label=\"Europe\"><option value=\"GB\">Great Britain</option>\n<option value=\"Germany\">Germany</option></optgroup>",
194
+ grouped_options_for_select([
195
+ ["North America",
196
+ [['United States','US'],"Canada"]],
197
+ ["Europe",
198
+ [["Great Britain","GB"], "Germany"]]
199
+ ])
200
+ )
201
+ end
202
+
203
+ def test_grouped_options_for_select_with_selected_and_prompt
204
+ assert_dom_equal(
205
+ "<option value=\"\">Choose a product...</option><optgroup label=\"Hats\"><option value=\"Baseball Cap\">Baseball Cap</option>\n<option selected=\"selected\" value=\"Cowboy Hat\">Cowboy Hat</option></optgroup>",
206
+ grouped_options_for_select([["Hats", ["Baseball Cap","Cowboy Hat"]]], "Cowboy Hat", "Choose a product...")
207
+ )
208
+ end
209
+
210
+ def test_optgroups_with_with_options_with_hash
211
+ assert_dom_equal(
212
+ "<optgroup label=\"Europe\"><option value=\"Denmark\">Denmark</option>\n<option value=\"Germany\">Germany</option></optgroup><optgroup label=\"North America\"><option value=\"United States\">United States</option>\n<option value=\"Canada\">Canada</option></optgroup>",
213
+ grouped_options_for_select({'North America' => ['United States','Canada'], 'Europe' => ['Denmark','Germany']})
214
+ )
215
+ end
216
+
217
+ def test_time_zone_options_no_parms
218
+ opts = time_zone_options_for_select
219
+ assert_dom_equal "<option value=\"A\">A</option>\n" +
220
+ "<option value=\"B\">B</option>\n" +
221
+ "<option value=\"C\">C</option>\n" +
222
+ "<option value=\"D\">D</option>\n" +
223
+ "<option value=\"E\">E</option>",
224
+ opts
225
+ end
226
+
227
+ def test_time_zone_options_with_selected
228
+ opts = time_zone_options_for_select( "D" )
229
+ assert_dom_equal "<option value=\"A\">A</option>\n" +
230
+ "<option value=\"B\">B</option>\n" +
231
+ "<option value=\"C\">C</option>\n" +
232
+ "<option value=\"D\" selected=\"selected\">D</option>\n" +
233
+ "<option value=\"E\">E</option>",
234
+ opts
235
+ end
236
+
237
+ def test_time_zone_options_with_unknown_selected
238
+ opts = time_zone_options_for_select( "K" )
239
+ assert_dom_equal "<option value=\"A\">A</option>\n" +
240
+ "<option value=\"B\">B</option>\n" +
241
+ "<option value=\"C\">C</option>\n" +
242
+ "<option value=\"D\">D</option>\n" +
243
+ "<option value=\"E\">E</option>",
244
+ opts
245
+ end
246
+
247
+ def test_time_zone_options_with_priority_zones
248
+ zones = [ ActiveSupport::TimeZone.new( "B" ), ActiveSupport::TimeZone.new( "E" ) ]
249
+ opts = time_zone_options_for_select( nil, zones )
250
+ assert_dom_equal "<option value=\"B\">B</option>\n" +
251
+ "<option value=\"E\">E</option>" +
252
+ "<option value=\"\" disabled=\"disabled\">-------------</option>\n" +
253
+ "<option value=\"A\">A</option>\n" +
254
+ "<option value=\"C\">C</option>\n" +
255
+ "<option value=\"D\">D</option>",
256
+ opts
257
+ end
258
+
259
+ def test_time_zone_options_with_selected_priority_zones
260
+ zones = [ ActiveSupport::TimeZone.new( "B" ), ActiveSupport::TimeZone.new( "E" ) ]
261
+ opts = time_zone_options_for_select( "E", zones )
262
+ assert_dom_equal "<option value=\"B\">B</option>\n" +
263
+ "<option value=\"E\" selected=\"selected\">E</option>" +
264
+ "<option value=\"\" disabled=\"disabled\">-------------</option>\n" +
265
+ "<option value=\"A\">A</option>\n" +
266
+ "<option value=\"C\">C</option>\n" +
267
+ "<option value=\"D\">D</option>",
268
+ opts
269
+ end
270
+
271
+ def test_time_zone_options_with_unselected_priority_zones
272
+ zones = [ ActiveSupport::TimeZone.new( "B" ), ActiveSupport::TimeZone.new( "E" ) ]
273
+ opts = time_zone_options_for_select( "C", zones )
274
+ assert_dom_equal "<option value=\"B\">B</option>\n" +
275
+ "<option value=\"E\">E</option>" +
276
+ "<option value=\"\" disabled=\"disabled\">-------------</option>\n" +
277
+ "<option value=\"A\">A</option>\n" +
278
+ "<option value=\"C\" selected=\"selected\">C</option>\n" +
279
+ "<option value=\"D\">D</option>",
280
+ opts
281
+ end
282
+
283
+ def test_select
284
+ @post = Post.new
285
+ @post.category = "<mus>"
286
+ assert_dom_equal(
287
+ "<select id=\"post_category\" name=\"post[category]\"><option value=\"abe\">abe</option>\n<option value=\"&lt;mus&gt;\" selected=\"selected\">&lt;mus&gt;</option>\n<option value=\"hest\">hest</option></select>",
288
+ select("post", "category", %w( abe <mus> hest))
289
+ )
290
+ end
291
+
292
+ def test_select_under_fields_for
293
+ @post = Post.new
294
+ @post.category = "<mus>"
295
+
296
+ fields_for :post, @post do |f|
297
+ concat f.select(:category, %w( abe <mus> hest))
298
+ end
299
+
300
+ assert_dom_equal(
301
+ "<select id=\"post_category\" name=\"post[category]\"><option value=\"abe\">abe</option>\n<option value=\"&lt;mus&gt;\" selected=\"selected\">&lt;mus&gt;</option>\n<option value=\"hest\">hest</option></select>",
302
+ output_buffer
303
+ )
304
+ end
305
+
306
+ def test_select_under_fields_for_with_index
307
+ @post = Post.new
308
+ @post.category = "<mus>"
309
+
310
+ fields_for :post, @post, :index => 108 do |f|
311
+ concat f.select(:category, %w( abe <mus> hest))
312
+ end
313
+
314
+ assert_dom_equal(
315
+ "<select id=\"post_108_category\" name=\"post[108][category]\"><option value=\"abe\">abe</option>\n<option value=\"&lt;mus&gt;\" selected=\"selected\">&lt;mus&gt;</option>\n<option value=\"hest\">hest</option></select>",
316
+ output_buffer
317
+ )
318
+ end
319
+
320
+ def test_select_under_fields_for_with_auto_index
321
+ @post = Post.new
322
+ @post.category = "<mus>"
323
+ def @post.to_param; 108; end
324
+
325
+ fields_for "post[]", @post do |f|
326
+ concat f.select(:category, %w( abe <mus> hest))
327
+ end
328
+
329
+ assert_dom_equal(
330
+ "<select id=\"post_108_category\" name=\"post[108][category]\"><option value=\"abe\">abe</option>\n<option value=\"&lt;mus&gt;\" selected=\"selected\">&lt;mus&gt;</option>\n<option value=\"hest\">hest</option></select>",
331
+ output_buffer
332
+ )
333
+ end
334
+
335
+ def test_select_under_fields_for_with_string_and_given_prompt
336
+ @post = Post.new
337
+ options = "<option value=\"abe\">abe</option><option value=\"mus\">mus</option><option value=\"hest\">hest</option>"
338
+
339
+ fields_for :post, @post do |f|
340
+ concat f.select(:category, options, :prompt => 'The prompt')
341
+ end
342
+
343
+ assert_dom_equal(
344
+ "<select id=\"post_category\" name=\"post[category]\"><option value=\"\">The prompt</option>\n#{options}</select>",
345
+ output_buffer
346
+ )
347
+ end
348
+
349
+ def test_select_with_blank
350
+ @post = Post.new
351
+ @post.category = "<mus>"
352
+ assert_dom_equal(
353
+ "<select id=\"post_category\" name=\"post[category]\"><option value=\"\"></option>\n<option value=\"abe\">abe</option>\n<option value=\"&lt;mus&gt;\" selected=\"selected\">&lt;mus&gt;</option>\n<option value=\"hest\">hest</option></select>",
354
+ select("post", "category", %w( abe <mus> hest), :include_blank => true)
355
+ )
356
+ end
357
+
358
+ def test_select_with_blank_as_string
359
+ @post = Post.new
360
+ @post.category = "<mus>"
361
+ assert_dom_equal(
362
+ "<select id=\"post_category\" name=\"post[category]\"><option value=\"\">None</option>\n<option value=\"abe\">abe</option>\n<option value=\"&lt;mus&gt;\" selected=\"selected\">&lt;mus&gt;</option>\n<option value=\"hest\">hest</option></select>",
363
+ select("post", "category", %w( abe <mus> hest), :include_blank => 'None')
364
+ )
365
+ end
366
+
367
+ def test_select_with_default_prompt
368
+ @post = Post.new
369
+ @post.category = ""
370
+ assert_dom_equal(
371
+ "<select id=\"post_category\" name=\"post[category]\"><option value=\"\">Please select</option>\n<option value=\"abe\">abe</option>\n<option value=\"&lt;mus&gt;\">&lt;mus&gt;</option>\n<option value=\"hest\">hest</option></select>",
372
+ select("post", "category", %w( abe <mus> hest), :prompt => true)
373
+ )
374
+ end
375
+
376
+ def test_select_no_prompt_when_select_has_value
377
+ @post = Post.new
378
+ @post.category = "<mus>"
379
+ assert_dom_equal(
380
+ "<select id=\"post_category\" name=\"post[category]\"><option value=\"abe\">abe</option>\n<option value=\"&lt;mus&gt;\" selected=\"selected\">&lt;mus&gt;</option>\n<option value=\"hest\">hest</option></select>",
381
+ select("post", "category", %w( abe <mus> hest), :prompt => true)
382
+ )
383
+ end
384
+
385
+ def test_select_with_given_prompt
386
+ @post = Post.new
387
+ @post.category = ""
388
+ assert_dom_equal(
389
+ "<select id=\"post_category\" name=\"post[category]\"><option value=\"\">The prompt</option>\n<option value=\"abe\">abe</option>\n<option value=\"&lt;mus&gt;\">&lt;mus&gt;</option>\n<option value=\"hest\">hest</option></select>",
390
+ select("post", "category", %w( abe <mus> hest), :prompt => 'The prompt')
391
+ )
392
+ end
393
+
394
+ def test_select_with_prompt_and_blank
395
+ @post = Post.new
396
+ @post.category = ""
397
+ assert_dom_equal(
398
+ "<select id=\"post_category\" name=\"post[category]\"><option value=\"\">Please select</option>\n<option value=\"\"></option>\n<option value=\"abe\">abe</option>\n<option value=\"&lt;mus&gt;\">&lt;mus&gt;</option>\n<option value=\"hest\">hest</option></select>",
399
+ select("post", "category", %w( abe <mus> hest), :prompt => true, :include_blank => true)
400
+ )
401
+ end
402
+
403
+ def test_select_with_selected_value
404
+ @post = Post.new
405
+ @post.category = "<mus>"
406
+ assert_dom_equal(
407
+ "<select id=\"post_category\" name=\"post[category]\"><option value=\"abe\" selected=\"selected\">abe</option>\n<option value=\"&lt;mus&gt;\">&lt;mus&gt;</option>\n<option value=\"hest\">hest</option></select>",
408
+ select("post", "category", %w( abe <mus> hest ), :selected => 'abe')
409
+ )
410
+ end
411
+
412
+ def test_select_with_index_option
413
+ @album = Album.new
414
+ @album.id = 1
415
+
416
+ expected = "<select id=\"album__genre\" name=\"album[][genre]\"><option value=\"rap\">rap</option>\n<option value=\"rock\">rock</option>\n<option value=\"country\">country</option></select>"
417
+
418
+ assert_dom_equal(
419
+ expected,
420
+ select("album[]", "genre", %w[rap rock country], {}, { :index => nil })
421
+ )
422
+ end
423
+
424
+ def test_select_with_selected_nil
425
+ @post = Post.new
426
+ @post.category = "<mus>"
427
+ assert_dom_equal(
428
+ "<select id=\"post_category\" name=\"post[category]\"><option value=\"abe\">abe</option>\n<option value=\"&lt;mus&gt;\">&lt;mus&gt;</option>\n<option value=\"hest\">hest</option></select>",
429
+ select("post", "category", %w( abe <mus> hest ), :selected => nil)
430
+ )
431
+ end
432
+
433
+ def test_select_with_disabled_value
434
+ @post = Post.new
435
+ @post.category = "<mus>"
436
+ assert_dom_equal(
437
+ "<select id=\"post_category\" name=\"post[category]\"><option value=\"abe\">abe</option>\n<option value=\"&lt;mus&gt;\" selected=\"selected\">&lt;mus&gt;</option>\n<option value=\"hest\" disabled=\"disabled\">hest</option></select>",
438
+ select("post", "category", %w( abe <mus> hest ), :disabled => 'hest')
439
+ )
440
+ end
441
+
442
+ def test_select_with_disabled_array
443
+ @post = Post.new
444
+ @post.category = "<mus>"
445
+ assert_dom_equal(
446
+ "<select id=\"post_category\" name=\"post[category]\"><option value=\"abe\" disabled=\"disabled\">abe</option>\n<option value=\"&lt;mus&gt;\" selected=\"selected\">&lt;mus&gt;</option>\n<option value=\"hest\" disabled=\"disabled\">hest</option></select>",
447
+ select("post", "category", %w( abe <mus> hest ), :disabled => ['hest', 'abe'])
448
+ )
449
+ end
450
+
451
+ def test_collection_select
452
+ @post = Post.new
453
+ @post.author_name = "Babe"
454
+
455
+ assert_dom_equal(
456
+ "<select id=\"post_author_name\" name=\"post[author_name]\"><option value=\"&lt;Abe&gt;\">&lt;Abe&gt;</option>\n<option value=\"Babe\" selected=\"selected\">Babe</option>\n<option value=\"Cabe\">Cabe</option></select>",
457
+ collection_select("post", "author_name", dummy_posts, "author_name", "author_name")
458
+ )
459
+ end
460
+
461
+ def test_collection_select_under_fields_for
462
+ @post = Post.new
463
+ @post.author_name = "Babe"
464
+
465
+ fields_for :post, @post do |f|
466
+ concat f.collection_select(:author_name, dummy_posts, :author_name, :author_name)
467
+ end
468
+
469
+ assert_dom_equal(
470
+ "<select id=\"post_author_name\" name=\"post[author_name]\"><option value=\"&lt;Abe&gt;\">&lt;Abe&gt;</option>\n<option value=\"Babe\" selected=\"selected\">Babe</option>\n<option value=\"Cabe\">Cabe</option></select>",
471
+ output_buffer
472
+ )
473
+ end
474
+
475
+ def test_collection_select_under_fields_for_with_index
476
+ @post = Post.new
477
+ @post.author_name = "Babe"
478
+
479
+ fields_for :post, @post, :index => 815 do |f|
480
+ concat f.collection_select(:author_name, dummy_posts, :author_name, :author_name)
481
+ end
482
+
483
+ assert_dom_equal(
484
+ "<select id=\"post_815_author_name\" name=\"post[815][author_name]\"><option value=\"&lt;Abe&gt;\">&lt;Abe&gt;</option>\n<option value=\"Babe\" selected=\"selected\">Babe</option>\n<option value=\"Cabe\">Cabe</option></select>",
485
+ output_buffer
486
+ )
487
+ end
488
+
489
+ def test_collection_select_under_fields_for_with_auto_index
490
+ @post = Post.new
491
+ @post.author_name = "Babe"
492
+ def @post.to_param; 815; end
493
+
494
+ fields_for "post[]", @post do |f|
495
+ concat f.collection_select(:author_name, dummy_posts, :author_name, :author_name)
496
+ end
497
+
498
+ assert_dom_equal(
499
+ "<select id=\"post_815_author_name\" name=\"post[815][author_name]\"><option value=\"&lt;Abe&gt;\">&lt;Abe&gt;</option>\n<option value=\"Babe\" selected=\"selected\">Babe</option>\n<option value=\"Cabe\">Cabe</option></select>",
500
+ output_buffer
501
+ )
502
+ end
503
+
504
+ def test_collection_select_with_blank_and_style
505
+ @post = Post.new
506
+ @post.author_name = "Babe"
507
+
508
+ assert_dom_equal(
509
+ "<select id=\"post_author_name\" name=\"post[author_name]\" style=\"width: 200px\"><option value=\"\"></option>\n<option value=\"&lt;Abe&gt;\">&lt;Abe&gt;</option>\n<option value=\"Babe\" selected=\"selected\">Babe</option>\n<option value=\"Cabe\">Cabe</option></select>",
510
+ collection_select("post", "author_name", dummy_posts, "author_name", "author_name", { :include_blank => true }, "style" => "width: 200px")
511
+ )
512
+ end
513
+
514
+ def test_collection_select_with_blank_as_string_and_style
515
+ @post = Post.new
516
+ @post.author_name = "Babe"
517
+
518
+ assert_dom_equal(
519
+ "<select id=\"post_author_name\" name=\"post[author_name]\" style=\"width: 200px\"><option value=\"\">No Selection</option>\n<option value=\"&lt;Abe&gt;\">&lt;Abe&gt;</option>\n<option value=\"Babe\" selected=\"selected\">Babe</option>\n<option value=\"Cabe\">Cabe</option></select>",
520
+ collection_select("post", "author_name", dummy_posts, "author_name", "author_name", { :include_blank => 'No Selection' }, "style" => "width: 200px")
521
+ )
522
+ end
523
+
524
+ def test_collection_select_with_multiple_option_appends_array_brackets
525
+ @post = Post.new
526
+ @post.author_name = "Babe"
527
+
528
+ expected = "<select id=\"post_author_name\" name=\"post[author_name][]\" multiple=\"multiple\"><option value=\"\"></option>\n<option value=\"&lt;Abe&gt;\">&lt;Abe&gt;</option>\n<option value=\"Babe\" selected=\"selected\">Babe</option>\n<option value=\"Cabe\">Cabe</option></select>"
529
+
530
+ # Should suffix default name with [].
531
+ assert_dom_equal expected, collection_select("post", "author_name", dummy_posts, "author_name", "author_name", { :include_blank => true }, :multiple => true)
532
+
533
+ # Shouldn't suffix custom name with [].
534
+ assert_dom_equal expected, collection_select("post", "author_name", dummy_posts, "author_name", "author_name", { :include_blank => true, :name => 'post[author_name][]' }, :multiple => true)
535
+ end
536
+
537
+ def test_collection_select_with_blank_and_selected
538
+ @post = Post.new
539
+ @post.author_name = "Babe"
540
+
541
+ assert_dom_equal(
542
+ %{<select id="post_author_name" name="post[author_name]"><option value=""></option>\n<option value="&lt;Abe&gt;" selected="selected">&lt;Abe&gt;</option>\n<option value="Babe">Babe</option>\n<option value="Cabe">Cabe</option></select>},
543
+ collection_select("post", "author_name", dummy_posts, "author_name", "author_name", {:include_blank => true, :selected => "<Abe>"})
544
+ )
545
+ end
546
+
547
+ def test_collection_select_with_disabled
548
+ @post = Post.new
549
+ @post.author_name = "Babe"
550
+
551
+ assert_dom_equal(
552
+ "<select id=\"post_author_name\" name=\"post[author_name]\"><option value=\"&lt;Abe&gt;\">&lt;Abe&gt;</option>\n<option value=\"Babe\" selected=\"selected\">Babe</option>\n<option value=\"Cabe\" disabled=\"disabled\">Cabe</option></select>",
553
+ collection_select("post", "author_name", dummy_posts, "author_name", "author_name", :disabled => 'Cabe')
554
+ )
555
+ end
556
+
557
+ def test_time_zone_select
558
+ @firm = Firm.new("D")
559
+ html = time_zone_select( "firm", "time_zone" )
560
+ assert_dom_equal "<select id=\"firm_time_zone\" name=\"firm[time_zone]\">" +
561
+ "<option value=\"A\">A</option>\n" +
562
+ "<option value=\"B\">B</option>\n" +
563
+ "<option value=\"C\">C</option>\n" +
564
+ "<option value=\"D\" selected=\"selected\">D</option>\n" +
565
+ "<option value=\"E\">E</option>" +
566
+ "</select>",
567
+ html
568
+ end
569
+
570
+ def test_time_zone_select_under_fields_for
571
+ @firm = Firm.new("D")
572
+
573
+ fields_for :firm, @firm do |f|
574
+ concat f.time_zone_select(:time_zone)
575
+ end
576
+
577
+ assert_dom_equal(
578
+ "<select id=\"firm_time_zone\" name=\"firm[time_zone]\">" +
579
+ "<option value=\"A\">A</option>\n" +
580
+ "<option value=\"B\">B</option>\n" +
581
+ "<option value=\"C\">C</option>\n" +
582
+ "<option value=\"D\" selected=\"selected\">D</option>\n" +
583
+ "<option value=\"E\">E</option>" +
584
+ "</select>",
585
+ output_buffer
586
+ )
587
+ end
588
+
589
+ def test_time_zone_select_under_fields_for_with_index
590
+ @firm = Firm.new("D")
591
+
592
+ fields_for :firm, @firm, :index => 305 do |f|
593
+ concat f.time_zone_select(:time_zone)
594
+ end
595
+
596
+ assert_dom_equal(
597
+ "<select id=\"firm_305_time_zone\" name=\"firm[305][time_zone]\">" +
598
+ "<option value=\"A\">A</option>\n" +
599
+ "<option value=\"B\">B</option>\n" +
600
+ "<option value=\"C\">C</option>\n" +
601
+ "<option value=\"D\" selected=\"selected\">D</option>\n" +
602
+ "<option value=\"E\">E</option>" +
603
+ "</select>",
604
+ output_buffer
605
+ )
606
+ end
607
+
608
+ def test_time_zone_select_under_fields_for_with_auto_index
609
+ @firm = Firm.new("D")
610
+ def @firm.to_param; 305; end
611
+
612
+ fields_for "firm[]", @firm do |f|
613
+ concat f.time_zone_select(:time_zone)
614
+ end
615
+
616
+ assert_dom_equal(
617
+ "<select id=\"firm_305_time_zone\" name=\"firm[305][time_zone]\">" +
618
+ "<option value=\"A\">A</option>\n" +
619
+ "<option value=\"B\">B</option>\n" +
620
+ "<option value=\"C\">C</option>\n" +
621
+ "<option value=\"D\" selected=\"selected\">D</option>\n" +
622
+ "<option value=\"E\">E</option>" +
623
+ "</select>",
624
+ output_buffer
625
+ )
626
+ end
627
+
628
+ def test_time_zone_select_with_blank
629
+ @firm = Firm.new("D")
630
+ html = time_zone_select("firm", "time_zone", nil, :include_blank => true)
631
+ assert_dom_equal "<select id=\"firm_time_zone\" name=\"firm[time_zone]\">" +
632
+ "<option value=\"\"></option>\n" +
633
+ "<option value=\"A\">A</option>\n" +
634
+ "<option value=\"B\">B</option>\n" +
635
+ "<option value=\"C\">C</option>\n" +
636
+ "<option value=\"D\" selected=\"selected\">D</option>\n" +
637
+ "<option value=\"E\">E</option>" +
638
+ "</select>",
639
+ html
640
+ end
641
+
642
+ def test_time_zone_select_with_blank_as_string
643
+ @firm = Firm.new("D")
644
+ html = time_zone_select("firm", "time_zone", nil, :include_blank => 'No Zone')
645
+ assert_dom_equal "<select id=\"firm_time_zone\" name=\"firm[time_zone]\">" +
646
+ "<option value=\"\">No Zone</option>\n" +
647
+ "<option value=\"A\">A</option>\n" +
648
+ "<option value=\"B\">B</option>\n" +
649
+ "<option value=\"C\">C</option>\n" +
650
+ "<option value=\"D\" selected=\"selected\">D</option>\n" +
651
+ "<option value=\"E\">E</option>" +
652
+ "</select>",
653
+ html
654
+ end
655
+
656
+ def test_time_zone_select_with_style
657
+ @firm = Firm.new("D")
658
+ html = time_zone_select("firm", "time_zone", nil, {},
659
+ "style" => "color: red")
660
+ assert_dom_equal "<select id=\"firm_time_zone\" name=\"firm[time_zone]\" style=\"color: red\">" +
661
+ "<option value=\"A\">A</option>\n" +
662
+ "<option value=\"B\">B</option>\n" +
663
+ "<option value=\"C\">C</option>\n" +
664
+ "<option value=\"D\" selected=\"selected\">D</option>\n" +
665
+ "<option value=\"E\">E</option>" +
666
+ "</select>",
667
+ html
668
+ assert_dom_equal html, time_zone_select("firm", "time_zone", nil, {},
669
+ :style => "color: red")
670
+ end
671
+
672
+ def test_time_zone_select_with_blank_and_style
673
+ @firm = Firm.new("D")
674
+ html = time_zone_select("firm", "time_zone", nil,
675
+ { :include_blank => true }, "style" => "color: red")
676
+ assert_dom_equal "<select id=\"firm_time_zone\" name=\"firm[time_zone]\" style=\"color: red\">" +
677
+ "<option value=\"\"></option>\n" +
678
+ "<option value=\"A\">A</option>\n" +
679
+ "<option value=\"B\">B</option>\n" +
680
+ "<option value=\"C\">C</option>\n" +
681
+ "<option value=\"D\" selected=\"selected\">D</option>\n" +
682
+ "<option value=\"E\">E</option>" +
683
+ "</select>",
684
+ html
685
+ assert_dom_equal html, time_zone_select("firm", "time_zone", nil,
686
+ { :include_blank => true }, :style => "color: red")
687
+ end
688
+
689
+ def test_time_zone_select_with_blank_as_string_and_style
690
+ @firm = Firm.new("D")
691
+ html = time_zone_select("firm", "time_zone", nil,
692
+ { :include_blank => 'No Zone' }, "style" => "color: red")
693
+ assert_dom_equal "<select id=\"firm_time_zone\" name=\"firm[time_zone]\" style=\"color: red\">" +
694
+ "<option value=\"\">No Zone</option>\n" +
695
+ "<option value=\"A\">A</option>\n" +
696
+ "<option value=\"B\">B</option>\n" +
697
+ "<option value=\"C\">C</option>\n" +
698
+ "<option value=\"D\" selected=\"selected\">D</option>\n" +
699
+ "<option value=\"E\">E</option>" +
700
+ "</select>",
701
+ html
702
+ assert_dom_equal html, time_zone_select("firm", "time_zone", nil,
703
+ { :include_blank => 'No Zone' }, :style => "color: red")
704
+ end
705
+
706
+ def test_time_zone_select_with_priority_zones
707
+ @firm = Firm.new("D")
708
+ zones = [ ActiveSupport::TimeZone.new("A"), ActiveSupport::TimeZone.new("D") ]
709
+ html = time_zone_select("firm", "time_zone", zones )
710
+ assert_dom_equal "<select id=\"firm_time_zone\" name=\"firm[time_zone]\">" +
711
+ "<option value=\"A\">A</option>\n" +
712
+ "<option value=\"D\" selected=\"selected\">D</option>" +
713
+ "<option value=\"\" disabled=\"disabled\">-------------</option>\n" +
714
+ "<option value=\"B\">B</option>\n" +
715
+ "<option value=\"C\">C</option>\n" +
716
+ "<option value=\"E\">E</option>" +
717
+ "</select>",
718
+ html
719
+ end
720
+
721
+ def test_time_zone_select_with_priority_zones_as_regexp
722
+ @firm = Firm.new("D")
723
+ @fake_timezones.each_with_index do |tz, i|
724
+ tz.stubs(:=~).returns(i.zero? || i == 3)
725
+ end
726
+
727
+ html = time_zone_select("firm", "time_zone", /A|D/)
728
+ assert_dom_equal "<select id=\"firm_time_zone\" name=\"firm[time_zone]\">" +
729
+ "<option value=\"A\">A</option>\n" +
730
+ "<option value=\"D\" selected=\"selected\">D</option>" +
731
+ "<option value=\"\" disabled=\"disabled\">-------------</option>\n" +
732
+ "<option value=\"B\">B</option>\n" +
733
+ "<option value=\"C\">C</option>\n" +
734
+ "<option value=\"E\">E</option>" +
735
+ "</select>",
736
+ html
737
+ end
738
+
739
+ def test_time_zone_select_with_default_time_zone_and_nil_value
740
+ @firm = Firm.new()
741
+ @firm.time_zone = nil
742
+ html = time_zone_select( "firm", "time_zone", nil, :default => 'B' )
743
+ assert_dom_equal "<select id=\"firm_time_zone\" name=\"firm[time_zone]\">" +
744
+ "<option value=\"A\">A</option>\n" +
745
+ "<option value=\"B\" selected=\"selected\">B</option>\n" +
746
+ "<option value=\"C\">C</option>\n" +
747
+ "<option value=\"D\">D</option>\n" +
748
+ "<option value=\"E\">E</option>" +
749
+ "</select>",
750
+ html
751
+ end
752
+
753
+ def test_time_zone_select_with_default_time_zone_and_value
754
+ @firm = Firm.new('D')
755
+ html = time_zone_select( "firm", "time_zone", nil, :default => 'B' )
756
+ assert_dom_equal "<select id=\"firm_time_zone\" name=\"firm[time_zone]\">" +
757
+ "<option value=\"A\">A</option>\n" +
758
+ "<option value=\"B\">B</option>\n" +
759
+ "<option value=\"C\">C</option>\n" +
760
+ "<option value=\"D\" selected=\"selected\">D</option>\n" +
761
+ "<option value=\"E\">E</option>" +
762
+ "</select>",
763
+ html
764
+ end
765
+
766
+ def test_grouped_collection_select
767
+ @continents = [
768
+ Continent.new("<Africa>", [Country.new("<sa>", "<South Africa>"), Country.new("so", "Somalia")] ),
769
+ Continent.new("Europe", [Country.new("dk", "Denmark"), Country.new("ie", "Ireland")] )
770
+ ]
771
+
772
+ @post = Post.new
773
+ @post.origin = 'dk'
774
+
775
+ assert_dom_equal(
776
+ %Q{<select id="post_origin" name="post[origin]"><optgroup label="&lt;Africa&gt;"><option value="&lt;sa&gt;">&lt;South Africa&gt;</option>\n<option value="so">Somalia</option></optgroup><optgroup label="Europe"><option value="dk" selected="selected">Denmark</option>\n<option value="ie">Ireland</option></optgroup></select>},
777
+ grouped_collection_select("post", "origin", @continents, :countries, :continent_name, :country_id, :country_name)
778
+ )
779
+ end
780
+
781
+ def test_grouped_collection_select_under_fields_for
782
+ @continents = [
783
+ Continent.new("<Africa>", [Country.new("<sa>", "<South Africa>"), Country.new("so", "Somalia")] ),
784
+ Continent.new("Europe", [Country.new("dk", "Denmark"), Country.new("ie", "Ireland")] )
785
+ ]
786
+
787
+ @post = Post.new
788
+ @post.origin = 'dk'
789
+
790
+ fields_for :post, @post do |f|
791
+ concat f.grouped_collection_select("origin", @continents, :countries, :continent_name, :country_id, :country_name)
792
+ end
793
+
794
+ assert_dom_equal(
795
+ %Q{<select id="post_origin" name="post[origin]"><optgroup label="&lt;Africa&gt;"><option value="&lt;sa&gt;">&lt;South Africa&gt;</option>\n<option value="so">Somalia</option></optgroup><optgroup label="Europe"><option value="dk" selected="selected">Denmark</option>\n<option value="ie">Ireland</option></optgroup></select>},
796
+ output_buffer
797
+ )
798
+ end
799
+
800
+ private
801
+
802
+ def dummy_posts
803
+ [ Post.new("<Abe> went home", "<Abe>", "To a little house", "shh!"),
804
+ Post.new("Babe went home", "Babe", "To a little house", "shh!"),
805
+ Post.new("Cabe went home", "Cabe", "To a little house", "shh!") ]
806
+ end
807
+ end