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,734 @@
1
+ #--
2
+ # Copyright (c) 2006 Assaf Arkin (http://labnotes.org)
3
+ # Under MIT and/or CC By license.
4
+ #++
5
+
6
+ require 'abstract_unit'
7
+ require 'controller/fake_controllers'
8
+
9
+
10
+ unless defined?(ActionMailer)
11
+ begin
12
+ $:.unshift("#{File.dirname(__FILE__)}/../../../actionmailer/lib")
13
+ require 'action_mailer'
14
+ rescue LoadError => e
15
+ raise unless e.message =~ /action_mailer/
16
+ require 'rubygems'
17
+ gem 'actionmailer'
18
+ end
19
+ end
20
+
21
+ ActionMailer::Base.template_root = FIXTURE_LOAD_PATH
22
+
23
+ class AssertSelectTest < ActionController::TestCase
24
+ Assertion = ActiveSupport::TestCase::Assertion
25
+
26
+ class AssertSelectMailer < ActionMailer::Base
27
+ def test(html)
28
+ recipients "test <test@test.host>"
29
+ from "test@test.host"
30
+ subject "Test e-mail"
31
+ part :content_type=>"text/html", :body=>html
32
+ end
33
+ end
34
+
35
+ class AssertSelectController < ActionController::Base
36
+ def response_with=(content)
37
+ @content = content
38
+ end
39
+
40
+ def response_with(&block)
41
+ @update = block
42
+ end
43
+
44
+ def html()
45
+ render :text=>@content, :layout=>false, :content_type=>Mime::HTML
46
+ @content = nil
47
+ end
48
+
49
+ def rjs()
50
+ render :update do |page|
51
+ @update.call page
52
+ end
53
+ @update = nil
54
+ end
55
+
56
+ def xml()
57
+ render :text=>@content, :layout=>false, :content_type=>Mime::XML
58
+ @content = nil
59
+ end
60
+
61
+ def rescue_action(e)
62
+ raise e
63
+ end
64
+ end
65
+
66
+ tests AssertSelectController
67
+
68
+ def setup
69
+ ActionMailer::Base.delivery_method = :test
70
+ ActionMailer::Base.perform_deliveries = true
71
+ ActionMailer::Base.deliveries = []
72
+ end
73
+
74
+ def teardown
75
+ ActionMailer::Base.deliveries.clear
76
+ end
77
+
78
+ def assert_failure(message, &block)
79
+ e = assert_raise(Assertion, &block)
80
+ assert_match(message, e.message) if Regexp === message
81
+ assert_equal(message, e.message) if String === message
82
+ end
83
+
84
+ #
85
+ # Test assert select.
86
+ #
87
+
88
+ def test_assert_select
89
+ render_html %Q{<div id="1"></div><div id="2"></div>}
90
+ assert_select "div", 2
91
+ assert_failure(/Expected at least 3 elements matching \"div\", found 2/) { assert_select "div", 3 }
92
+ assert_failure(/Expected at least 1 element matching \"p\", found 0/) { assert_select "p" }
93
+ end
94
+
95
+ def test_equality_true_false
96
+ render_html %Q{<div id="1"></div><div id="2"></div>}
97
+ assert_nothing_raised { assert_select "div" }
98
+ assert_raise(Assertion) { assert_select "p" }
99
+ assert_nothing_raised { assert_select "div", true }
100
+ assert_raise(Assertion) { assert_select "p", true }
101
+ assert_raise(Assertion) { assert_select "div", false }
102
+ assert_nothing_raised { assert_select "p", false }
103
+ end
104
+
105
+ def test_equality_string_and_regexp
106
+ render_html %Q{<div id="1">foo</div><div id="2">foo</div>}
107
+ assert_nothing_raised { assert_select "div", "foo" }
108
+ assert_raise(Assertion) { assert_select "div", "bar" }
109
+ assert_nothing_raised { assert_select "div", :text=>"foo" }
110
+ assert_raise(Assertion) { assert_select "div", :text=>"bar" }
111
+ assert_nothing_raised { assert_select "div", /(foo|bar)/ }
112
+ assert_raise(Assertion) { assert_select "div", /foobar/ }
113
+ assert_nothing_raised { assert_select "div", :text=>/(foo|bar)/ }
114
+ assert_raise(Assertion) { assert_select "div", :text=>/foobar/ }
115
+ assert_raise(Assertion) { assert_select "p", :text=>/foobar/ }
116
+ end
117
+
118
+ def test_equality_of_html
119
+ render_html %Q{<p>\n<em>"This is <strong>not</strong> a big problem,"</em> he said.\n</p>}
120
+ text = "\"This is not a big problem,\" he said."
121
+ html = "<em>\"This is <strong>not</strong> a big problem,\"</em> he said."
122
+ assert_nothing_raised { assert_select "p", text }
123
+ assert_raise(Assertion) { assert_select "p", html }
124
+ assert_nothing_raised { assert_select "p", :html=>html }
125
+ assert_raise(Assertion) { assert_select "p", :html=>text }
126
+ # No stripping for pre.
127
+ render_html %Q{<pre>\n<em>"This is <strong>not</strong> a big problem,"</em> he said.\n</pre>}
128
+ text = "\n\"This is not a big problem,\" he said.\n"
129
+ html = "\n<em>\"This is <strong>not</strong> a big problem,\"</em> he said.\n"
130
+ assert_nothing_raised { assert_select "pre", text }
131
+ assert_raise(Assertion) { assert_select "pre", html }
132
+ assert_nothing_raised { assert_select "pre", :html=>html }
133
+ assert_raise(Assertion) { assert_select "pre", :html=>text }
134
+ end
135
+
136
+ def test_counts
137
+ render_html %Q{<div id="1">foo</div><div id="2">foo</div>}
138
+ assert_nothing_raised { assert_select "div", 2 }
139
+ assert_failure(/Expected at least 3 elements matching \"div\", found 2/) do
140
+ assert_select "div", 3
141
+ end
142
+ assert_nothing_raised { assert_select "div", 1..2 }
143
+ assert_failure(/Expected between 3 and 4 elements matching \"div\", found 2/) do
144
+ assert_select "div", 3..4
145
+ end
146
+ assert_nothing_raised { assert_select "div", :count=>2 }
147
+ assert_failure(/Expected at least 3 elements matching \"div\", found 2/) do
148
+ assert_select "div", :count=>3
149
+ end
150
+ assert_nothing_raised { assert_select "div", :minimum=>1 }
151
+ assert_nothing_raised { assert_select "div", :minimum=>2 }
152
+ assert_failure(/Expected at least 3 elements matching \"div\", found 2/) do
153
+ assert_select "div", :minimum=>3
154
+ end
155
+ assert_nothing_raised { assert_select "div", :maximum=>2 }
156
+ assert_nothing_raised { assert_select "div", :maximum=>3 }
157
+ assert_failure(/Expected at most 1 element matching \"div\", found 2/) do
158
+ assert_select "div", :maximum=>1
159
+ end
160
+ assert_nothing_raised { assert_select "div", :minimum=>1, :maximum=>2 }
161
+ assert_failure(/Expected between 3 and 4 elements matching \"div\", found 2/) do
162
+ assert_select "div", :minimum=>3, :maximum=>4
163
+ end
164
+ end
165
+
166
+ def test_substitution_values
167
+ render_html %Q{<div id="1">foo</div><div id="2">foo</div>}
168
+ assert_select "div#?", /\d+/ do |elements|
169
+ assert_equal 2, elements.size
170
+ end
171
+ assert_select "div" do
172
+ assert_select "div#?", /\d+/ do |elements|
173
+ assert_equal 2, elements.size
174
+ assert_select "#1"
175
+ assert_select "#2"
176
+ end
177
+ end
178
+ end
179
+
180
+ def test_nested_assert_select
181
+ render_html %Q{<div id="1">foo</div><div id="2">foo</div>}
182
+ assert_select "div" do |elements|
183
+ assert_equal 2, elements.size
184
+ assert_select elements[0], "#1"
185
+ assert_select elements[1], "#2"
186
+ end
187
+ assert_select "div" do
188
+ assert_select "div" do |elements|
189
+ assert_equal 2, elements.size
190
+ # Testing in a group is one thing
191
+ assert_select "#1,#2"
192
+ # Testing individually is another.
193
+ assert_select "#1"
194
+ assert_select "#2"
195
+ assert_select "#3", false
196
+ end
197
+ end
198
+
199
+ assert_failure(/Expected at least 1 element matching \"#4\", found 0\./) do
200
+ assert_select "div" do
201
+ assert_select "#4"
202
+ end
203
+ end
204
+ end
205
+
206
+ def test_assert_select_text_match
207
+ render_html %Q{<div id="1"><span>foo</span></div><div id="2"><span>bar</span></div>}
208
+ assert_select "div" do
209
+ assert_nothing_raised { assert_select "div", "foo" }
210
+ assert_nothing_raised { assert_select "div", "bar" }
211
+ assert_nothing_raised { assert_select "div", /\w*/ }
212
+ assert_nothing_raised { assert_select "div", /\w*/, :count=>2 }
213
+ assert_raise(Assertion) { assert_select "div", :text=>"foo", :count=>2 }
214
+ assert_nothing_raised { assert_select "div", :html=>"<span>bar</span>" }
215
+ assert_nothing_raised { assert_select "div", :html=>"<span>bar</span>" }
216
+ assert_nothing_raised { assert_select "div", :html=>/\w*/ }
217
+ assert_nothing_raised { assert_select "div", :html=>/\w*/, :count=>2 }
218
+ assert_raise(Assertion) { assert_select "div", :html=>"<span>foo</span>", :count=>2 }
219
+ end
220
+ end
221
+
222
+ # With single result.
223
+ def test_assert_select_from_rjs_with_single_result
224
+ render_rjs do |page|
225
+ page.replace_html "test", "<div id=\"1\">foo</div>\n<div id=\"2\">foo</div>"
226
+ end
227
+ assert_select "div" do |elements|
228
+ assert elements.size == 2
229
+ assert_select "#1"
230
+ assert_select "#2"
231
+ end
232
+ assert_select "div#?", /\d+/ do |elements|
233
+ assert_select "#1"
234
+ assert_select "#2"
235
+ end
236
+ end
237
+
238
+ # With multiple results.
239
+ def test_assert_select_from_rjs_with_multiple_results
240
+ render_rjs do |page|
241
+ page.replace_html "test", "<div id=\"1\">foo</div>"
242
+ page.replace_html "test2", "<div id=\"2\">foo</div>"
243
+ end
244
+ assert_select "div" do |elements|
245
+ assert elements.size == 2
246
+ assert_select "#1"
247
+ assert_select "#2"
248
+ end
249
+ end
250
+
251
+ def test_assert_select_rjs_for_positioned_insert_should_fail_when_mixing_arguments
252
+ render_rjs do |page|
253
+ page.insert_html :top, "test1", "<div id=\"1\">foo</div>"
254
+ page.insert_html :bottom, "test2", "<div id=\"2\">foo</div>"
255
+ end
256
+ assert_raise(Assertion) {assert_select_rjs :insert, :top, "test2"}
257
+ end
258
+
259
+ def test_elect_with_xml_namespace_attributes
260
+ render_html %Q{<link xlink:href="http://nowhere.com"></link>}
261
+ assert_nothing_raised { assert_select "link[xlink:href=http://nowhere.com]" }
262
+ end
263
+
264
+ #
265
+ # Test css_select.
266
+ #
267
+
268
+ def test_css_select
269
+ render_html %Q{<div id="1"></div><div id="2"></div>}
270
+ assert 2, css_select("div").size
271
+ assert 0, css_select("p").size
272
+ end
273
+
274
+ def test_nested_css_select
275
+ render_html %Q{<div id="1">foo</div><div id="2">foo</div>}
276
+ assert_select "div#?", /\d+/ do |elements|
277
+ assert_equal 1, css_select(elements[0], "div").size
278
+ assert_equal 1, css_select(elements[1], "div").size
279
+ end
280
+ assert_select "div" do
281
+ assert_equal 2, css_select("div").size
282
+ css_select("div").each do |element|
283
+ # Testing as a group is one thing
284
+ assert !css_select("#1,#2").empty?
285
+ # Testing individually is another
286
+ assert !css_select("#1").empty?
287
+ assert !css_select("#2").empty?
288
+ end
289
+ end
290
+ end
291
+
292
+ # With one result.
293
+ def test_css_select_from_rjs_with_single_result
294
+ render_rjs do |page|
295
+ page.replace_html "test", "<div id=\"1\">foo</div>\n<div id=\"2\">foo</div>"
296
+ end
297
+ assert_equal 2, css_select("div").size
298
+ assert_equal 1, css_select("#1").size
299
+ assert_equal 1, css_select("#2").size
300
+ end
301
+
302
+ # With multiple results.
303
+ def test_css_select_from_rjs_with_multiple_results
304
+ render_rjs do |page|
305
+ page.replace_html "test", "<div id=\"1\">foo</div>"
306
+ page.replace_html "test2", "<div id=\"2\">foo</div>"
307
+ end
308
+
309
+ assert_equal 2, css_select("div").size
310
+ assert_equal 1, css_select("#1").size
311
+ assert_equal 1, css_select("#2").size
312
+ end
313
+
314
+ #
315
+ # Test assert_select_rjs.
316
+ #
317
+
318
+ # Test that we can pick up all statements in the result.
319
+ def test_assert_select_rjs_picks_up_all_statements
320
+ render_rjs do |page|
321
+ page.replace "test", "<div id=\"1\">foo</div>"
322
+ page.replace_html "test2", "<div id=\"2\">foo</div>"
323
+ page.insert_html :top, "test3", "<div id=\"3\">foo</div>"
324
+ end
325
+
326
+ found = false
327
+ assert_select_rjs do
328
+ assert_select "#1"
329
+ assert_select "#2"
330
+ assert_select "#3"
331
+ found = true
332
+ end
333
+ assert found
334
+ end
335
+
336
+ # Test that we fail if there is nothing to pick.
337
+ def test_assert_select_rjs_fails_if_nothing_to_pick
338
+ render_rjs { }
339
+ assert_raise(Assertion) { assert_select_rjs }
340
+ end
341
+
342
+ def test_assert_select_rjs_with_unicode
343
+ # Test that non-ascii characters (which are converted into \uXXXX in RJS) are decoded correctly.
344
+ render_rjs do |page|
345
+ page.replace "test", "<div id=\"1\">\343\203\201\343\202\261\343\203\203\343\203\210</div>"
346
+ end
347
+ assert_select_rjs do
348
+ str = "#1"
349
+ assert_select str, :text => "\343\203\201\343\202\261\343\203\203\343\203\210"
350
+ assert_select str, "\343\203\201\343\202\261\343\203\203\343\203\210"
351
+ if str.respond_to?(:force_encoding)
352
+ str.force_encoding(Encoding::UTF_8)
353
+ assert_select str, /\343\203\201..\343\203\210/u
354
+ assert_raise(Assertion) { assert_select str, /\343\203\201.\343\203\210/u }
355
+ else
356
+ assert_select str, Regexp.new("\343\203\201..\343\203\210",0,'U')
357
+ assert_raise(Assertion) { assert_select str, Regexp.new("\343\203\201.\343\203\210",0,'U') }
358
+ end
359
+ end
360
+ end
361
+
362
+ def test_assert_select_rjs_with_id
363
+ # Test that we can pick up all statements in the result.
364
+ render_rjs do |page|
365
+ page.replace "test1", "<div id=\"1\">foo</div>"
366
+ page.replace_html "test2", "<div id=\"2\">foo</div>"
367
+ page.insert_html :top, "test3", "<div id=\"3\">foo</div>"
368
+ end
369
+ assert_select_rjs "test1" do
370
+ assert_select "div", 1
371
+ assert_select "#1"
372
+ end
373
+ assert_select_rjs "test2" do
374
+ assert_select "div", 1
375
+ assert_select "#2"
376
+ end
377
+ assert_select_rjs "test3" do
378
+ assert_select "div", 1
379
+ assert_select "#3"
380
+ end
381
+ assert_raise(Assertion) { assert_select_rjs "test4" }
382
+ end
383
+
384
+ def test_assert_select_rjs_for_replace
385
+ render_rjs do |page|
386
+ page.replace "test1", "<div id=\"1\">foo</div>"
387
+ page.replace_html "test2", "<div id=\"2\">foo</div>"
388
+ page.insert_html :top, "test3", "<div id=\"3\">foo</div>"
389
+ end
390
+ # Replace.
391
+ assert_select_rjs :replace do
392
+ assert_select "div", 1
393
+ assert_select "#1"
394
+ end
395
+ assert_select_rjs :replace, "test1" do
396
+ assert_select "div", 1
397
+ assert_select "#1"
398
+ end
399
+ assert_raise(Assertion) { assert_select_rjs :replace, "test2" }
400
+ # Replace HTML.
401
+ assert_select_rjs :replace_html do
402
+ assert_select "div", 1
403
+ assert_select "#2"
404
+ end
405
+ assert_select_rjs :replace_html, "test2" do
406
+ assert_select "div", 1
407
+ assert_select "#2"
408
+ end
409
+ assert_raise(Assertion) { assert_select_rjs :replace_html, "test1" }
410
+ end
411
+
412
+ def test_assert_select_rjs_for_chained_replace
413
+ render_rjs do |page|
414
+ page['test1'].replace "<div id=\"1\">foo</div>"
415
+ page['test2'].replace_html "<div id=\"2\">foo</div>"
416
+ page.insert_html :top, "test3", "<div id=\"3\">foo</div>"
417
+ end
418
+ # Replace.
419
+ assert_select_rjs :chained_replace do
420
+ assert_select "div", 1
421
+ assert_select "#1"
422
+ end
423
+ assert_select_rjs :chained_replace, "test1" do
424
+ assert_select "div", 1
425
+ assert_select "#1"
426
+ end
427
+ assert_raise(Assertion) { assert_select_rjs :chained_replace, "test2" }
428
+ # Replace HTML.
429
+ assert_select_rjs :chained_replace_html do
430
+ assert_select "div", 1
431
+ assert_select "#2"
432
+ end
433
+ assert_select_rjs :chained_replace_html, "test2" do
434
+ assert_select "div", 1
435
+ assert_select "#2"
436
+ end
437
+ assert_raise(Assertion) { assert_select_rjs :replace_html, "test1" }
438
+ end
439
+
440
+ # Simple remove
441
+ def test_assert_select_rjs_for_remove
442
+ render_rjs do |page|
443
+ page.remove "test1"
444
+ end
445
+
446
+ assert_select_rjs :remove, "test1"
447
+ end
448
+
449
+ def test_assert_select_rjs_for_remove_offers_useful_error_when_assertion_fails
450
+ render_rjs do |page|
451
+ page.remove "test_with_typo"
452
+ end
453
+
454
+ assert_select_rjs :remove, "test1"
455
+
456
+ rescue Assertion
457
+ assert_equal "No RJS statement that removes 'test1' was rendered.", $!.message
458
+ end
459
+
460
+ def test_assert_select_rjs_for_remove_ignores_block
461
+ render_rjs do |page|
462
+ page.remove "test1"
463
+ end
464
+
465
+ assert_nothing_raised do
466
+ assert_select_rjs :remove, "test1" do
467
+ assert_select "p"
468
+ end
469
+ end
470
+ end
471
+
472
+ # Simple show
473
+ def test_assert_select_rjs_for_show
474
+ render_rjs do |page|
475
+ page.show "test1"
476
+ end
477
+
478
+ assert_select_rjs :show, "test1"
479
+ end
480
+
481
+ def test_assert_select_rjs_for_show_offers_useful_error_when_assertion_fails
482
+ render_rjs do |page|
483
+ page.show "test_with_typo"
484
+ end
485
+
486
+ assert_select_rjs :show, "test1"
487
+
488
+ rescue Assertion
489
+ assert_equal "No RJS statement that shows 'test1' was rendered.", $!.message
490
+ end
491
+
492
+ def test_assert_select_rjs_for_show_ignores_block
493
+ render_rjs do |page|
494
+ page.show "test1"
495
+ end
496
+
497
+ assert_nothing_raised do
498
+ assert_select_rjs :show, "test1" do
499
+ assert_select "p"
500
+ end
501
+ end
502
+ end
503
+
504
+ # Simple hide
505
+ def test_assert_select_rjs_for_hide
506
+ render_rjs do |page|
507
+ page.hide "test1"
508
+ end
509
+
510
+ assert_select_rjs :hide, "test1"
511
+ end
512
+
513
+ def test_assert_select_rjs_for_hide_offers_useful_error_when_assertion_fails
514
+ render_rjs do |page|
515
+ page.hide "test_with_typo"
516
+ end
517
+
518
+ assert_select_rjs :hide, "test1"
519
+
520
+ rescue Assertion
521
+ assert_equal "No RJS statement that hides 'test1' was rendered.", $!.message
522
+ end
523
+
524
+ def test_assert_select_rjs_for_hide_ignores_block
525
+ render_rjs do |page|
526
+ page.hide "test1"
527
+ end
528
+
529
+ assert_nothing_raised do
530
+ assert_select_rjs :hide, "test1" do
531
+ assert_select "p"
532
+ end
533
+ end
534
+ end
535
+
536
+ # Simple toggle
537
+ def test_assert_select_rjs_for_toggle
538
+ render_rjs do |page|
539
+ page.toggle "test1"
540
+ end
541
+
542
+ assert_select_rjs :toggle, "test1"
543
+ end
544
+
545
+ def test_assert_select_rjs_for_toggle_offers_useful_error_when_assertion_fails
546
+ render_rjs do |page|
547
+ page.toggle "test_with_typo"
548
+ end
549
+
550
+ assert_select_rjs :toggle, "test1"
551
+
552
+ rescue Assertion
553
+ assert_equal "No RJS statement that toggles 'test1' was rendered.", $!.message
554
+ end
555
+
556
+ def test_assert_select_rjs_for_toggle_ignores_block
557
+ render_rjs do |page|
558
+ page.toggle "test1"
559
+ end
560
+
561
+ assert_nothing_raised do
562
+ assert_select_rjs :toggle, "test1" do
563
+ assert_select "p"
564
+ end
565
+ end
566
+ end
567
+
568
+ # Non-positioned insert.
569
+ def test_assert_select_rjs_for_nonpositioned_insert
570
+ render_rjs do |page|
571
+ page.replace "test1", "<div id=\"1\">foo</div>"
572
+ page.replace_html "test2", "<div id=\"2\">foo</div>"
573
+ page.insert_html :top, "test3", "<div id=\"3\">foo</div>"
574
+ end
575
+ assert_select_rjs :insert_html do
576
+ assert_select "div", 1
577
+ assert_select "#3"
578
+ end
579
+ assert_select_rjs :insert_html, "test3" do
580
+ assert_select "div", 1
581
+ assert_select "#3"
582
+ end
583
+ assert_raise(Assertion) { assert_select_rjs :insert_html, "test1" }
584
+ end
585
+
586
+ # Positioned insert.
587
+ def test_assert_select_rjs_for_positioned_insert
588
+ render_rjs do |page|
589
+ page.insert_html :top, "test1", "<div id=\"1\">foo</div>"
590
+ page.insert_html :bottom, "test2", "<div id=\"2\">foo</div>"
591
+ page.insert_html :before, "test3", "<div id=\"3\">foo</div>"
592
+ page.insert_html :after, "test4", "<div id=\"4\">foo</div>"
593
+ end
594
+ assert_select_rjs :insert, :top do
595
+ assert_select "div", 1
596
+ assert_select "#1"
597
+ end
598
+ assert_select_rjs :insert, :bottom do
599
+ assert_select "div", 1
600
+ assert_select "#2"
601
+ end
602
+ assert_select_rjs :insert, :before do
603
+ assert_select "div", 1
604
+ assert_select "#3"
605
+ end
606
+ assert_select_rjs :insert, :after do
607
+ assert_select "div", 1
608
+ assert_select "#4"
609
+ end
610
+ assert_select_rjs :insert_html do
611
+ assert_select "div", 4
612
+ end
613
+ end
614
+
615
+ def test_assert_select_rjs_raise_errors
616
+ assert_raise(ArgumentError) { assert_select_rjs(:destroy) }
617
+ assert_raise(ArgumentError) { assert_select_rjs(:insert, :left) }
618
+ end
619
+
620
+ # Simple selection from a single result.
621
+ def test_nested_assert_select_rjs_with_single_result
622
+ render_rjs do |page|
623
+ page.replace_html "test", "<div id=\"1\">foo</div>\n<div id=\"2\">foo</div>"
624
+ end
625
+
626
+ assert_select_rjs "test" do |elements|
627
+ assert_equal 2, elements.size
628
+ assert_select "#1"
629
+ assert_select "#2"
630
+ end
631
+ end
632
+
633
+ # Deal with two results.
634
+ def test_nested_assert_select_rjs_with_two_results
635
+ render_rjs do |page|
636
+ page.replace_html "test", "<div id=\"1\">foo</div>"
637
+ page.replace_html "test2", "<div id=\"2\">foo</div>"
638
+ end
639
+
640
+ assert_select_rjs "test" do |elements|
641
+ assert_equal 1, elements.size
642
+ assert_select "#1"
643
+ end
644
+
645
+ assert_select_rjs "test2" do |elements|
646
+ assert_equal 1, elements.size
647
+ assert_select "#2"
648
+ end
649
+ end
650
+
651
+ def test_feed_item_encoded
652
+ render_xml <<-EOF
653
+ <rss version="2.0">
654
+ <channel>
655
+ <item>
656
+ <description>
657
+ <![CDATA[
658
+ <p>Test 1</p>
659
+ ]]>
660
+ </description>
661
+ </item>
662
+ <item>
663
+ <description>
664
+ <![CDATA[
665
+ <p>Test 2</p>
666
+ ]]>
667
+ </description>
668
+ </item>
669
+ </channel>
670
+ </rss>
671
+ EOF
672
+ assert_select "channel item description" do
673
+ # Test element regardless of wrapper.
674
+ assert_select_encoded do
675
+ assert_select "p", :count=>2, :text=>/Test/
676
+ end
677
+ # Test through encoded wrapper.
678
+ assert_select_encoded do
679
+ assert_select "encoded p", :count=>2, :text=>/Test/
680
+ end
681
+ # Use :root instead (recommended)
682
+ assert_select_encoded do
683
+ assert_select ":root p", :count=>2, :text=>/Test/
684
+ end
685
+ # Test individually.
686
+ assert_select "description" do |elements|
687
+ assert_select_encoded elements[0] do
688
+ assert_select "p", "Test 1"
689
+ end
690
+ assert_select_encoded elements[1] do
691
+ assert_select "p", "Test 2"
692
+ end
693
+ end
694
+ end
695
+
696
+ # Test that we only un-encode element itself.
697
+ assert_select "channel item" do
698
+ assert_select_encoded do
699
+ assert_select "p", 0
700
+ end
701
+ end
702
+ end
703
+
704
+ #
705
+ # Test assert_select_email
706
+ #
707
+
708
+ def test_assert_select_email
709
+ assert_raise(Assertion) { assert_select_email {} }
710
+ AssertSelectMailer.deliver_test "<div><p>foo</p><p>bar</p></div>"
711
+ assert_select_email do
712
+ assert_select "div:root" do
713
+ assert_select "p:first-child", "foo"
714
+ assert_select "p:last-child", "bar"
715
+ end
716
+ end
717
+ end
718
+
719
+ protected
720
+ def render_html(html)
721
+ @controller.response_with = html
722
+ get :html
723
+ end
724
+
725
+ def render_rjs(&block)
726
+ @controller.response_with &block
727
+ get :rjs
728
+ end
729
+
730
+ def render_xml(xml)
731
+ @controller.response_with = xml
732
+ get :xml
733
+ end
734
+ end