actionpack_csi 2.3.5.p6

Sign up to get free protection for your applications and to get access to all the features.
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