actionpack 2.3.18 → 3.0.0.beta

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of actionpack might be problematic. Click here for more details.

Files changed (513) hide show
  1. data/CHANGELOG +15 -64
  2. data/README +39 -48
  3. data/lib/abstract_controller.rb +22 -0
  4. data/lib/abstract_controller/base.rb +191 -0
  5. data/lib/abstract_controller/callbacks.rb +113 -0
  6. data/lib/abstract_controller/collector.rb +30 -0
  7. data/lib/abstract_controller/compatibility.rb +18 -0
  8. data/lib/abstract_controller/helpers.rb +163 -0
  9. data/lib/abstract_controller/layouts.rb +413 -0
  10. data/lib/abstract_controller/localized_cache.rb +49 -0
  11. data/lib/abstract_controller/logger.rb +13 -0
  12. data/lib/abstract_controller/rendering.rb +238 -0
  13. data/lib/{action_controller → abstract_controller}/translation.rb +1 -1
  14. data/lib/action_controller.rb +68 -102
  15. data/lib/action_controller/base.rb +77 -1409
  16. data/lib/action_controller/caching.rb +58 -45
  17. data/lib/action_controller/caching/actions.rb +100 -114
  18. data/lib/action_controller/caching/fragments.rb +17 -19
  19. data/lib/action_controller/caching/pages.rb +12 -6
  20. data/lib/action_controller/caching/sweeping.rb +42 -0
  21. data/lib/action_controller/deprecated.rb +5 -0
  22. data/lib/action_controller/deprecated/dispatcher.rb +28 -0
  23. data/lib/action_controller/deprecated/integration_test.rb +2 -0
  24. data/lib/action_controller/deprecated/performance_test.rb +1 -0
  25. data/lib/action_controller/metal.rb +125 -0
  26. data/lib/action_controller/metal/compatibility.rb +141 -0
  27. data/lib/action_controller/metal/conditional_get.rb +86 -0
  28. data/lib/action_controller/metal/configuration.rb +28 -0
  29. data/lib/action_controller/metal/cookies.rb +17 -0
  30. data/lib/action_controller/metal/exceptions.rb +46 -0
  31. data/lib/action_controller/metal/flash.rb +28 -0
  32. data/lib/action_controller/metal/head.rb +33 -0
  33. data/lib/action_controller/metal/helpers.rb +116 -0
  34. data/lib/action_controller/metal/hide_actions.rb +50 -0
  35. data/lib/action_controller/{http_authentication.rb → metal/http_authentication.rb} +18 -15
  36. data/lib/action_controller/metal/instrumentation.rb +99 -0
  37. data/lib/action_controller/metal/mime_responds.rb +300 -0
  38. data/lib/action_controller/metal/rack_delegation.rb +35 -0
  39. data/lib/action_controller/metal/redirecting.rb +90 -0
  40. data/lib/action_controller/metal/renderers.rb +95 -0
  41. data/lib/action_controller/metal/rendering.rb +69 -0
  42. data/lib/action_controller/metal/request_forgery_protection.rb +115 -0
  43. data/lib/action_controller/metal/rescue.rb +13 -0
  44. data/lib/action_controller/metal/responder.rb +220 -0
  45. data/lib/action_controller/{session_management.rb → metal/session_management.rb} +5 -14
  46. data/lib/action_controller/{streaming.rb → metal/streaming.rb} +13 -12
  47. data/lib/action_controller/metal/testing.rb +42 -0
  48. data/lib/action_controller/metal/url_for.rb +157 -0
  49. data/lib/action_controller/{verification.rb → metal/verification.rb} +41 -41
  50. data/lib/action_controller/middleware.rb +38 -0
  51. data/lib/action_controller/polymorphic_routes.rb +20 -26
  52. data/lib/action_controller/railtie.rb +30 -0
  53. data/lib/action_controller/railties/subscriber.rb +63 -0
  54. data/lib/action_controller/record_identifier.rb +3 -16
  55. data/lib/action_controller/test_case.rb +156 -18
  56. data/lib/action_controller/url_rewriter.rb +47 -200
  57. data/lib/action_controller/vendor/html-scanner.rb +16 -12
  58. data/lib/action_controller/vendor/html-scanner/html/node.rb +1 -1
  59. data/lib/action_controller/vendor/html-scanner/html/sanitizer.rb +12 -9
  60. data/lib/action_dispatch.rb +88 -0
  61. data/lib/action_dispatch/http/cache.rb +123 -0
  62. data/lib/action_dispatch/http/filter_parameters.rb +98 -0
  63. data/lib/{action_controller → action_dispatch/http}/headers.rb +8 -8
  64. data/lib/action_dispatch/http/mime_negotiation.rb +101 -0
  65. data/lib/{action_controller → action_dispatch/http}/mime_type.rb +30 -11
  66. data/lib/{action_controller → action_dispatch/http}/mime_types.rb +5 -3
  67. data/lib/action_dispatch/http/parameters.rb +49 -0
  68. data/lib/action_dispatch/http/request.rb +223 -0
  69. data/lib/action_dispatch/http/response.rb +209 -0
  70. data/lib/action_dispatch/http/upload.rb +48 -0
  71. data/lib/action_dispatch/http/url.rb +129 -0
  72. data/lib/action_dispatch/middleware/callbacks.rb +50 -0
  73. data/lib/action_dispatch/middleware/cascade.rb +29 -0
  74. data/lib/action_dispatch/middleware/cookies.rb +216 -0
  75. data/lib/{action_controller → action_dispatch/middleware}/flash.rb +51 -90
  76. data/lib/action_dispatch/middleware/head.rb +18 -0
  77. data/lib/action_dispatch/middleware/params_parser.rb +78 -0
  78. data/lib/action_dispatch/middleware/rescue.rb +26 -0
  79. data/lib/action_dispatch/middleware/session/abstract_store.rb +209 -0
  80. data/lib/{action_controller → action_dispatch/middleware}/session/cookie_store.rb +56 -60
  81. data/lib/action_dispatch/middleware/session/mem_cache_store.rb +47 -0
  82. data/lib/action_dispatch/middleware/show_exceptions.rb +173 -0
  83. data/lib/{action_controller/middleware_stack.rb → action_dispatch/middleware/stack.rb} +23 -13
  84. data/lib/action_dispatch/middleware/static.rb +44 -0
  85. data/lib/{action_controller → action_dispatch/middleware}/templates/rescues/_request_and_response.erb +10 -3
  86. data/lib/{action_controller → action_dispatch/middleware}/templates/rescues/_trace.erb +4 -4
  87. data/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb +10 -0
  88. data/lib/{action_controller → action_dispatch/middleware}/templates/rescues/layout.erb +2 -2
  89. data/lib/{action_controller → action_dispatch/middleware}/templates/rescues/missing_template.erb +0 -0
  90. data/lib/{action_controller → action_dispatch/middleware}/templates/rescues/routing_error.erb +0 -0
  91. data/lib/{action_controller → action_dispatch/middleware}/templates/rescues/template_error.erb +3 -3
  92. data/lib/{action_controller → action_dispatch/middleware}/templates/rescues/unknown_action.erb +0 -0
  93. data/lib/action_dispatch/railtie.rb +15 -0
  94. data/lib/action_dispatch/routing.rb +217 -0
  95. data/lib/action_dispatch/routing/deprecated_mapper.rb +877 -0
  96. data/lib/action_dispatch/routing/mapper.rb +649 -0
  97. data/lib/action_dispatch/routing/route.rb +55 -0
  98. data/lib/action_dispatch/routing/route_set.rb +445 -0
  99. data/lib/action_dispatch/testing/assertions.rb +21 -0
  100. data/lib/action_dispatch/testing/assertions/dom.rb +37 -0
  101. data/lib/{action_controller/assertions/model_assertions.rb → action_dispatch/testing/assertions/model.rb} +2 -4
  102. data/lib/action_dispatch/testing/assertions/response.rb +154 -0
  103. data/lib/{action_controller/assertions/routing_assertions.rb → action_dispatch/testing/assertions/routing.rb} +72 -34
  104. data/lib/{action_controller/assertions/selector_assertions.rb → action_dispatch/testing/assertions/selector.rb} +14 -11
  105. data/lib/{action_controller/assertions/tag_assertions.rb → action_dispatch/testing/assertions/tag.rb} +25 -14
  106. data/lib/{action_controller → action_dispatch/testing}/integration.rb +173 -406
  107. data/lib/action_dispatch/testing/performance_test.rb +17 -0
  108. data/lib/action_dispatch/testing/test_process.rb +42 -0
  109. data/lib/action_dispatch/testing/test_request.rb +83 -0
  110. data/lib/action_dispatch/testing/test_response.rb +136 -0
  111. data/lib/action_pack/version.rb +3 -3
  112. data/lib/action_view.rb +29 -26
  113. data/lib/action_view/base.rb +101 -148
  114. data/lib/action_view/context.rb +44 -0
  115. data/lib/action_view/helpers.rb +6 -4
  116. data/lib/action_view/helpers/{active_record_helper.rb → active_model_helper.rb} +63 -63
  117. data/lib/action_view/helpers/asset_tag_helper.rb +166 -31
  118. data/lib/action_view/helpers/cache_helper.rb +1 -1
  119. data/lib/action_view/helpers/capture_helper.rb +40 -8
  120. data/lib/action_view/helpers/csrf_helper.rb +2 -4
  121. data/lib/action_view/helpers/date_helper.rb +14 -15
  122. data/lib/action_view/helpers/form_helper.rb +121 -24
  123. data/lib/action_view/helpers/form_options_helper.rb +26 -25
  124. data/lib/action_view/helpers/form_tag_helper.rb +42 -33
  125. data/lib/action_view/helpers/javascript_helper.rb +1 -109
  126. data/lib/action_view/helpers/number_helper.rb +4 -1
  127. data/lib/action_view/helpers/prototype_helper.rb +75 -499
  128. data/lib/action_view/helpers/raw_output_helper.rb +1 -1
  129. data/lib/action_view/helpers/record_tag_helper.rb +3 -3
  130. data/lib/action_view/helpers/sanitize_helper.rb +3 -2
  131. data/lib/action_view/helpers/scriptaculous_helper.rb +89 -53
  132. data/lib/action_view/helpers/tag_helper.rb +12 -13
  133. data/lib/action_view/helpers/text_helper.rb +33 -38
  134. data/lib/action_view/helpers/translation_helper.rb +11 -35
  135. data/lib/action_view/helpers/url_helper.rb +140 -134
  136. data/lib/action_view/locale/en.yml +34 -28
  137. data/lib/action_view/paths.rb +27 -24
  138. data/lib/action_view/railtie.rb +17 -0
  139. data/lib/action_view/railties/subscriber.rb +24 -0
  140. data/lib/action_view/{partials.rb → render/partials.rb} +161 -51
  141. data/lib/action_view/render/rendering.rb +117 -0
  142. data/lib/action_view/template.rb +88 -217
  143. data/lib/action_view/template/error.rb +105 -0
  144. data/lib/action_view/template/handler.rb +41 -0
  145. data/lib/action_view/template/handlers.rb +54 -0
  146. data/lib/action_view/{template_handlers → template/handlers}/builder.rb +6 -6
  147. data/lib/action_view/template/handlers/erb.rb +58 -0
  148. data/lib/action_view/{template_handlers → template/handlers}/rjs.rb +8 -3
  149. data/lib/action_view/template/resolver.rb +164 -0
  150. data/lib/action_view/template/text.rb +40 -0
  151. data/lib/action_view/test_case.rb +18 -18
  152. metadata +165 -420
  153. data/RUNNING_UNIT_TESTS +0 -24
  154. data/Rakefile +0 -158
  155. data/install.rb +0 -30
  156. data/lib/action_controller/assertions/dom_assertions.rb +0 -55
  157. data/lib/action_controller/assertions/response_assertions.rb +0 -169
  158. data/lib/action_controller/benchmarking.rb +0 -107
  159. data/lib/action_controller/caching/sweeper.rb +0 -45
  160. data/lib/action_controller/cgi_ext.rb +0 -15
  161. data/lib/action_controller/cgi_ext/cookie.rb +0 -112
  162. data/lib/action_controller/cgi_ext/query_extension.rb +0 -22
  163. data/lib/action_controller/cgi_ext/stdinput.rb +0 -24
  164. data/lib/action_controller/cgi_process.rb +0 -77
  165. data/lib/action_controller/cookies.rb +0 -197
  166. data/lib/action_controller/dispatcher.rb +0 -133
  167. data/lib/action_controller/failsafe.rb +0 -87
  168. data/lib/action_controller/filters.rb +0 -680
  169. data/lib/action_controller/helpers.rb +0 -225
  170. data/lib/action_controller/layout.rb +0 -286
  171. data/lib/action_controller/middlewares.rb +0 -14
  172. data/lib/action_controller/mime_responds.rb +0 -193
  173. data/lib/action_controller/params_parser.rb +0 -77
  174. data/lib/action_controller/performance_test.rb +0 -15
  175. data/lib/action_controller/rack_lint_patch.rb +0 -36
  176. data/lib/action_controller/reloader.rb +0 -54
  177. data/lib/action_controller/request.rb +0 -518
  178. data/lib/action_controller/request_forgery_protection.rb +0 -116
  179. data/lib/action_controller/rescue.rb +0 -183
  180. data/lib/action_controller/resources.rb +0 -682
  181. data/lib/action_controller/response.rb +0 -237
  182. data/lib/action_controller/routing.rb +0 -388
  183. data/lib/action_controller/routing/builder.rb +0 -197
  184. data/lib/action_controller/routing/optimisations.rb +0 -130
  185. data/lib/action_controller/routing/recognition_optimisation.rb +0 -167
  186. data/lib/action_controller/routing/route.rb +0 -265
  187. data/lib/action_controller/routing/route_set.rb +0 -503
  188. data/lib/action_controller/routing/routing_ext.rb +0 -49
  189. data/lib/action_controller/routing/segments.rb +0 -343
  190. data/lib/action_controller/session/abstract_store.rb +0 -276
  191. data/lib/action_controller/session/mem_cache_store.rb +0 -60
  192. data/lib/action_controller/status_codes.rb +0 -88
  193. data/lib/action_controller/string_coercion.rb +0 -29
  194. data/lib/action_controller/templates/rescues/diagnostics.erb +0 -11
  195. data/lib/action_controller/test_process.rb +0 -580
  196. data/lib/action_controller/uploaded_file.rb +0 -44
  197. data/lib/action_view/helpers/benchmark_helper.rb +0 -54
  198. data/lib/action_view/inline_template.rb +0 -19
  199. data/lib/action_view/reloadable_template.rb +0 -117
  200. data/lib/action_view/renderable.rb +0 -109
  201. data/lib/action_view/renderable_partial.rb +0 -53
  202. data/lib/action_view/template_error.rb +0 -99
  203. data/lib/action_view/template_handler.rb +0 -34
  204. data/lib/action_view/template_handlers.rb +0 -48
  205. data/lib/action_view/template_handlers/erb.rb +0 -25
  206. data/lib/actionpack.rb +0 -2
  207. data/test/abstract_unit.rb +0 -78
  208. data/test/active_record_unit.rb +0 -104
  209. data/test/activerecord/active_record_store_test.rb +0 -221
  210. data/test/activerecord/render_partial_with_record_identification_test.rb +0 -188
  211. data/test/adv_attr_test.rb +0 -20
  212. data/test/controller/action_pack_assertions_test.rb +0 -545
  213. data/test/controller/addresses_render_test.rb +0 -37
  214. data/test/controller/assert_select_test.rb +0 -735
  215. data/test/controller/base_test.rb +0 -217
  216. data/test/controller/benchmark_test.rb +0 -32
  217. data/test/controller/caching_test.rb +0 -743
  218. data/test/controller/capture_test.rb +0 -66
  219. data/test/controller/content_type_test.rb +0 -178
  220. data/test/controller/controller_fixtures/app/controllers/admin/user_controller.rb +0 -0
  221. data/test/controller/controller_fixtures/app/controllers/user_controller.rb +0 -0
  222. data/test/controller/controller_fixtures/vendor/plugins/bad_plugin/lib/plugin_controller.rb +0 -0
  223. data/test/controller/cookie_test.rb +0 -208
  224. data/test/controller/deprecation/deprecated_base_methods_test.rb +0 -32
  225. data/test/controller/dispatcher_test.rb +0 -144
  226. data/test/controller/dom_assertions_test.rb +0 -53
  227. data/test/controller/failsafe_test.rb +0 -60
  228. data/test/controller/fake_controllers.rb +0 -33
  229. data/test/controller/fake_models.rb +0 -19
  230. data/test/controller/filter_params_test.rb +0 -52
  231. data/test/controller/filters_test.rb +0 -885
  232. data/test/controller/flash_test.rb +0 -174
  233. data/test/controller/header_test.rb +0 -14
  234. data/test/controller/helper_test.rb +0 -224
  235. data/test/controller/html-scanner/cdata_node_test.rb +0 -15
  236. data/test/controller/html-scanner/document_test.rb +0 -148
  237. data/test/controller/html-scanner/node_test.rb +0 -89
  238. data/test/controller/html-scanner/sanitizer_test.rb +0 -300
  239. data/test/controller/html-scanner/tag_node_test.rb +0 -238
  240. data/test/controller/html-scanner/text_node_test.rb +0 -50
  241. data/test/controller/html-scanner/tokenizer_test.rb +0 -131
  242. data/test/controller/http_basic_authentication_test.rb +0 -113
  243. data/test/controller/http_digest_authentication_test.rb +0 -254
  244. data/test/controller/integration_test.rb +0 -526
  245. data/test/controller/layout_test.rb +0 -215
  246. data/test/controller/localized_templates_test.rb +0 -24
  247. data/test/controller/logging_test.rb +0 -46
  248. data/test/controller/middleware_stack_test.rb +0 -90
  249. data/test/controller/mime_responds_test.rb +0 -536
  250. data/test/controller/mime_type_test.rb +0 -93
  251. data/test/controller/output_escaping_test.rb +0 -19
  252. data/test/controller/polymorphic_routes_test.rb +0 -297
  253. data/test/controller/rack_test.rb +0 -308
  254. data/test/controller/record_identifier_test.rb +0 -139
  255. data/test/controller/redirect_test.rb +0 -285
  256. data/test/controller/reloader_test.rb +0 -125
  257. data/test/controller/render_test.rb +0 -1783
  258. data/test/controller/request/json_params_parsing_test.rb +0 -65
  259. data/test/controller/request/multipart_params_parsing_test.rb +0 -177
  260. data/test/controller/request/query_string_parsing_test.rb +0 -129
  261. data/test/controller/request/test_request_test.rb +0 -35
  262. data/test/controller/request/url_encoded_params_parsing_test.rb +0 -146
  263. data/test/controller/request/xml_params_parsing_test.rb +0 -103
  264. data/test/controller/request_forgery_protection_test.rb +0 -233
  265. data/test/controller/request_test.rb +0 -398
  266. data/test/controller/rescue_test.rb +0 -541
  267. data/test/controller/resources_test.rb +0 -1393
  268. data/test/controller/routing_test.rb +0 -2592
  269. data/test/controller/selector_test.rb +0 -628
  270. data/test/controller/send_file_test.rb +0 -171
  271. data/test/controller/session/abstract_store_test.rb +0 -64
  272. data/test/controller/session/cookie_store_test.rb +0 -354
  273. data/test/controller/session/mem_cache_store_test.rb +0 -187
  274. data/test/controller/session/test_session_test.rb +0 -58
  275. data/test/controller/test_test.rb +0 -700
  276. data/test/controller/translation_test.rb +0 -26
  277. data/test/controller/url_rewriter_test.rb +0 -395
  278. data/test/controller/verification_test.rb +0 -270
  279. data/test/controller/view_paths_test.rb +0 -141
  280. data/test/controller/webservice_test.rb +0 -273
  281. data/test/fixtures/_top_level_partial.html.erb +0 -1
  282. data/test/fixtures/_top_level_partial_only.erb +0 -1
  283. data/test/fixtures/addresses/list.erb +0 -1
  284. data/test/fixtures/alternate_helpers/foo_helper.rb +0 -3
  285. data/test/fixtures/bad_customers/_bad_customer.html.erb +0 -1
  286. data/test/fixtures/companies.yml +0 -24
  287. data/test/fixtures/company.rb +0 -10
  288. data/test/fixtures/content_type/render_default_content_types_for_respond_to.rhtml +0 -1
  289. data/test/fixtures/content_type/render_default_for_rhtml.rhtml +0 -1
  290. data/test/fixtures/content_type/render_default_for_rjs.rjs +0 -1
  291. data/test/fixtures/content_type/render_default_for_rxml.rxml +0 -1
  292. data/test/fixtures/customers/_customer.html.erb +0 -1
  293. data/test/fixtures/db_definitions/sqlite.sql +0 -49
  294. data/test/fixtures/developer.rb +0 -9
  295. data/test/fixtures/developers.yml +0 -21
  296. data/test/fixtures/developers/_developer.erb +0 -1
  297. data/test/fixtures/developers_projects.yml +0 -13
  298. data/test/fixtures/failsafe/500.html +0 -1
  299. data/test/fixtures/fun/games/_game.erb +0 -1
  300. data/test/fixtures/fun/games/hello_world.erb +0 -1
  301. data/test/fixtures/fun/serious/games/_game.erb +0 -1
  302. data/test/fixtures/functional_caching/_partial.erb +0 -3
  303. data/test/fixtures/functional_caching/formatted_fragment_cached.html.erb +0 -3
  304. data/test/fixtures/functional_caching/formatted_fragment_cached.js.rjs +0 -6
  305. data/test/fixtures/functional_caching/formatted_fragment_cached.xml.builder +0 -5
  306. data/test/fixtures/functional_caching/fragment_cached.html.erb +0 -2
  307. data/test/fixtures/functional_caching/html_fragment_cached_with_partial.html.erb +0 -1
  308. data/test/fixtures/functional_caching/inline_fragment_cached.html.erb +0 -2
  309. data/test/fixtures/functional_caching/js_fragment_cached_with_partial.js.rjs +0 -1
  310. data/test/fixtures/good_customers/_good_customer.html.erb +0 -1
  311. data/test/fixtures/helpers/abc_helper.rb +0 -5
  312. data/test/fixtures/helpers/fun/games_helper.rb +0 -3
  313. data/test/fixtures/helpers/fun/pdf_helper.rb +0 -3
  314. data/test/fixtures/layout_tests/abs_path_layout.rhtml +0 -1
  315. data/test/fixtures/layout_tests/alt/hello.rhtml +0 -1
  316. data/test/fixtures/layout_tests/alt/layouts/alt.rhtml +0 -0
  317. data/test/fixtures/layout_tests/layouts/controller_name_space/nested.rhtml +0 -1
  318. data/test/fixtures/layout_tests/layouts/item.rhtml +0 -1
  319. data/test/fixtures/layout_tests/layouts/layout_test.rhtml +0 -1
  320. data/test/fixtures/layout_tests/layouts/multiple_extensions.html.erb +0 -1
  321. data/test/fixtures/layout_tests/layouts/third_party_template_library.mab +0 -1
  322. data/test/fixtures/layout_tests/views/hello.rhtml +0 -1
  323. data/test/fixtures/layouts/_column.html.erb +0 -2
  324. data/test/fixtures/layouts/block_with_layout.erb +0 -3
  325. data/test/fixtures/layouts/builder.builder +0 -3
  326. data/test/fixtures/layouts/default_html.html.erb +0 -1
  327. data/test/fixtures/layouts/partial_with_layout.erb +0 -3
  328. data/test/fixtures/layouts/standard.erb +0 -1
  329. data/test/fixtures/layouts/talk_from_action.erb +0 -2
  330. data/test/fixtures/layouts/xhr.html.erb +0 -2
  331. data/test/fixtures/layouts/yield.erb +0 -2
  332. data/test/fixtures/localized/hello_world.de.html +0 -1
  333. data/test/fixtures/localized/hello_world.en.html +0 -1
  334. data/test/fixtures/mascot.rb +0 -3
  335. data/test/fixtures/mascots.yml +0 -4
  336. data/test/fixtures/mascots/_mascot.html.erb +0 -1
  337. data/test/fixtures/multipart/binary_file +0 -0
  338. data/test/fixtures/multipart/boundary_problem_file +0 -10
  339. data/test/fixtures/multipart/bracketed_param +0 -5
  340. data/test/fixtures/multipart/empty +0 -10
  341. data/test/fixtures/multipart/hello.txt +0 -1
  342. data/test/fixtures/multipart/large_text_file +0 -10
  343. data/test/fixtures/multipart/mixed_files +0 -0
  344. data/test/fixtures/multipart/mona_lisa.jpg +0 -0
  345. data/test/fixtures/multipart/none +0 -9
  346. data/test/fixtures/multipart/single_parameter +0 -5
  347. data/test/fixtures/multipart/text_file +0 -10
  348. data/test/fixtures/override/test/hello_world.erb +0 -1
  349. data/test/fixtures/override2/layouts/test/sub.erb +0 -1
  350. data/test/fixtures/post_test/layouts/post.html.erb +0 -1
  351. data/test/fixtures/post_test/layouts/super_post.iphone.erb +0 -1
  352. data/test/fixtures/post_test/post/index.html.erb +0 -1
  353. data/test/fixtures/post_test/post/index.iphone.erb +0 -1
  354. data/test/fixtures/post_test/super_post/index.html.erb +0 -1
  355. data/test/fixtures/post_test/super_post/index.iphone.erb +0 -1
  356. data/test/fixtures/project.rb +0 -3
  357. data/test/fixtures/projects.yml +0 -7
  358. data/test/fixtures/projects/_project.erb +0 -1
  359. data/test/fixtures/public/404.html +0 -1
  360. data/test/fixtures/public/500.da.html +0 -1
  361. data/test/fixtures/public/500.html +0 -1
  362. data/test/fixtures/public/absolute/test.css +0 -23
  363. data/test/fixtures/public/absolute/test.js +0 -63
  364. data/test/fixtures/public/images/rails.png +0 -0
  365. data/test/fixtures/public/javascripts/application.js +0 -1
  366. data/test/fixtures/public/javascripts/bank.js +0 -1
  367. data/test/fixtures/public/javascripts/controls.js +0 -1
  368. data/test/fixtures/public/javascripts/dragdrop.js +0 -1
  369. data/test/fixtures/public/javascripts/effects.js +0 -1
  370. data/test/fixtures/public/javascripts/prototype.js +0 -1
  371. data/test/fixtures/public/javascripts/robber.js +0 -1
  372. data/test/fixtures/public/javascripts/subdir/subdir.js +0 -1
  373. data/test/fixtures/public/javascripts/version.1.0.js +0 -1
  374. data/test/fixtures/public/stylesheets/bank.css +0 -1
  375. data/test/fixtures/public/stylesheets/robber.css +0 -1
  376. data/test/fixtures/public/stylesheets/subdir/subdir.css +0 -1
  377. data/test/fixtures/public/stylesheets/version.1.0.css +0 -1
  378. data/test/fixtures/quiz/questions/_question.html.erb +0 -1
  379. data/test/fixtures/replies.yml +0 -15
  380. data/test/fixtures/replies/_reply.erb +0 -1
  381. data/test/fixtures/reply.rb +0 -7
  382. data/test/fixtures/respond_to/all_types_with_layout.html.erb +0 -1
  383. data/test/fixtures/respond_to/all_types_with_layout.js.rjs +0 -1
  384. data/test/fixtures/respond_to/custom_constant_handling_without_block.mobile.erb +0 -1
  385. data/test/fixtures/respond_to/iphone_with_html_response_type.html.erb +0 -1
  386. data/test/fixtures/respond_to/iphone_with_html_response_type.iphone.erb +0 -1
  387. data/test/fixtures/respond_to/layouts/missing.html.erb +0 -1
  388. data/test/fixtures/respond_to/layouts/standard.html.erb +0 -1
  389. data/test/fixtures/respond_to/layouts/standard.iphone.erb +0 -1
  390. data/test/fixtures/respond_to/using_defaults.html.erb +0 -1
  391. data/test/fixtures/respond_to/using_defaults.js.rjs +0 -1
  392. data/test/fixtures/respond_to/using_defaults.xml.builder +0 -1
  393. data/test/fixtures/respond_to/using_defaults_with_type_list.html.erb +0 -1
  394. data/test/fixtures/respond_to/using_defaults_with_type_list.js.rjs +0 -1
  395. data/test/fixtures/respond_to/using_defaults_with_type_list.xml.builder +0 -1
  396. data/test/fixtures/scope/test/modgreet.erb +0 -1
  397. data/test/fixtures/session_autoload_test/session_autoload_test/foo.rb +0 -10
  398. data/test/fixtures/shared.html.erb +0 -1
  399. data/test/fixtures/symlink_parent/symlinked_layout.erb +0 -5
  400. data/test/fixtures/test/_counter.html.erb +0 -1
  401. data/test/fixtures/test/_customer.erb +0 -1
  402. data/test/fixtures/test/_customer_counter.erb +0 -1
  403. data/test/fixtures/test/_customer_counter_with_as.erb +0 -1
  404. data/test/fixtures/test/_customer_greeting.erb +0 -1
  405. data/test/fixtures/test/_customer_with_var.erb +0 -1
  406. data/test/fixtures/test/_form.erb +0 -1
  407. data/test/fixtures/test/_from_helper.erb +0 -1
  408. data/test/fixtures/test/_hash_greeting.erb +0 -1
  409. data/test/fixtures/test/_hash_object.erb +0 -2
  410. data/test/fixtures/test/_hello.builder +0 -1
  411. data/test/fixtures/test/_labelling_form.erb +0 -1
  412. data/test/fixtures/test/_layout_for_block_with_args.html.erb +0 -3
  413. data/test/fixtures/test/_layout_for_partial.html.erb +0 -3
  414. data/test/fixtures/test/_local_inspector.html.erb +0 -1
  415. data/test/fixtures/test/_one.html.erb +0 -1
  416. data/test/fixtures/test/_partial.erb +0 -1
  417. data/test/fixtures/test/_partial.html.erb +0 -1
  418. data/test/fixtures/test/_partial.js.erb +0 -1
  419. data/test/fixtures/test/_partial_for_use_in_layout.html.erb +0 -1
  420. data/test/fixtures/test/_partial_only.erb +0 -1
  421. data/test/fixtures/test/_partial_with_only_html_version.html.erb +0 -1
  422. data/test/fixtures/test/_person.erb +0 -2
  423. data/test/fixtures/test/_raise.html.erb +0 -1
  424. data/test/fixtures/test/_two.html.erb +0 -1
  425. data/test/fixtures/test/_utf8_partial.html.erb +0 -1
  426. data/test/fixtures/test/_utf8_partial_magic.html.erb +0 -2
  427. data/test/fixtures/test/action_talk_to_layout.erb +0 -2
  428. data/test/fixtures/test/array_translation.erb +0 -1
  429. data/test/fixtures/test/calling_partial_with_layout.html.erb +0 -1
  430. data/test/fixtures/test/capturing.erb +0 -4
  431. data/test/fixtures/test/content_for.erb +0 -2
  432. data/test/fixtures/test/content_for_concatenated.erb +0 -3
  433. data/test/fixtures/test/content_for_with_parameter.erb +0 -2
  434. data/test/fixtures/test/delete_with_js.rjs +0 -2
  435. data/test/fixtures/test/dont_pick_me +0 -1
  436. data/test/fixtures/test/dot.directory/render_file_with_ivar.erb +0 -1
  437. data/test/fixtures/test/enum_rjs_test.rjs +0 -6
  438. data/test/fixtures/test/formatted_html_erb.html.erb +0 -1
  439. data/test/fixtures/test/formatted_xml_erb.builder +0 -1
  440. data/test/fixtures/test/formatted_xml_erb.html.erb +0 -1
  441. data/test/fixtures/test/formatted_xml_erb.xml.erb +0 -1
  442. data/test/fixtures/test/greeting.erb +0 -1
  443. data/test/fixtures/test/greeting.js.rjs +0 -1
  444. data/test/fixtures/test/hello.builder +0 -4
  445. data/test/fixtures/test/hello_world.da.html.erb +0 -1
  446. data/test/fixtures/test/hello_world.erb +0 -1
  447. data/test/fixtures/test/hello_world.erb~ +0 -1
  448. data/test/fixtures/test/hello_world.pt-BR.html.erb +0 -1
  449. data/test/fixtures/test/hello_world_container.builder +0 -3
  450. data/test/fixtures/test/hello_world_from_rxml.builder +0 -4
  451. data/test/fixtures/test/hello_world_with_layout_false.erb +0 -1
  452. data/test/fixtures/test/hello_xml_world.builder +0 -11
  453. data/test/fixtures/test/hyphen-ated.erb +0 -1
  454. data/test/fixtures/test/implicit_content_type.atom.builder +0 -2
  455. data/test/fixtures/test/list.erb +0 -1
  456. data/test/fixtures/test/malformed/malformed.en.html.erb~ +0 -1
  457. data/test/fixtures/test/malformed/malformed.erb~ +0 -1
  458. data/test/fixtures/test/malformed/malformed.html.erb~ +0 -1
  459. data/test/fixtures/test/nested_layout.erb +0 -3
  460. data/test/fixtures/test/non_erb_block_content_for.builder +0 -4
  461. data/test/fixtures/test/potential_conflicts.erb +0 -4
  462. data/test/fixtures/test/render_explicit_html_template.js.rjs +0 -1
  463. data/test/fixtures/test/render_file_from_template.html.erb +0 -1
  464. data/test/fixtures/test/render_file_with_ivar.erb +0 -1
  465. data/test/fixtures/test/render_file_with_locals.erb +0 -1
  466. data/test/fixtures/test/render_implicit_html_template.js.rjs +0 -1
  467. data/test/fixtures/test/render_implicit_html_template_from_xhr_request.da.html.erb +0 -1
  468. data/test/fixtures/test/render_implicit_html_template_from_xhr_request.html.erb +0 -1
  469. data/test/fixtures/test/render_implicit_js_template_without_layout.js.erb +0 -1
  470. data/test/fixtures/test/render_to_string_test.erb +0 -1
  471. data/test/fixtures/test/scoped_array_translation.erb +0 -1
  472. data/test/fixtures/test/sub_template_raise.html.erb +0 -1
  473. data/test/fixtures/test/template.erb +0 -1
  474. data/test/fixtures/test/translation.erb +0 -1
  475. data/test/fixtures/test/update_element_with_capture.erb +0 -9
  476. data/test/fixtures/test/using_layout_around_block.html.erb +0 -1
  477. data/test/fixtures/test/using_layout_around_block_with_args.html.erb +0 -1
  478. data/test/fixtures/test/utf8.html.erb +0 -4
  479. data/test/fixtures/test/utf8_magic.html.erb +0 -5
  480. data/test/fixtures/test/utf8_magic_with_bare_partial.html.erb +0 -5
  481. data/test/fixtures/topic.rb +0 -3
  482. data/test/fixtures/topics.yml +0 -22
  483. data/test/fixtures/topics/_topic.html.erb +0 -1
  484. data/test/template/active_record_helper_i18n_test.rb +0 -51
  485. data/test/template/active_record_helper_test.rb +0 -302
  486. data/test/template/asset_tag_helper_test.rb +0 -770
  487. data/test/template/atom_feed_helper_test.rb +0 -315
  488. data/test/template/benchmark_helper_test.rb +0 -86
  489. data/test/template/compiled_templates_test.rb +0 -204
  490. data/test/template/date_helper_i18n_test.rb +0 -121
  491. data/test/template/date_helper_test.rb +0 -2603
  492. data/test/template/erb_util_test.rb +0 -36
  493. data/test/template/form_helper_test.rb +0 -1447
  494. data/test/template/form_options_helper_i18n_test.rb +0 -27
  495. data/test/template/form_options_helper_test.rb +0 -811
  496. data/test/template/form_tag_helper_test.rb +0 -356
  497. data/test/template/javascript_helper_test.rb +0 -106
  498. data/test/template/number_helper_i18n_test.rb +0 -69
  499. data/test/template/number_helper_test.rb +0 -132
  500. data/test/template/prototype_helper_test.rb +0 -639
  501. data/test/template/raw_output_helper_test.rb +0 -21
  502. data/test/template/record_tag_helper_test.rb +0 -58
  503. data/test/template/render_test.rb +0 -329
  504. data/test/template/sanitize_helper_test.rb +0 -57
  505. data/test/template/scriptaculous_helper_test.rb +0 -90
  506. data/test/template/tag_helper_test.rb +0 -98
  507. data/test/template/template_test.rb +0 -32
  508. data/test/template/test_test.rb +0 -54
  509. data/test/template/text_helper_test.rb +0 -601
  510. data/test/template/translation_helper_test.rb +0 -95
  511. data/test/template/url_helper_test.rb +0 -641
  512. data/test/testing_sandbox.rb +0 -15
  513. data/test/view/test_case_test.rb +0 -176
@@ -1,69 +0,0 @@
1
- require 'abstract_unit'
2
-
3
- class NumberHelperI18nTests < Test::Unit::TestCase
4
- include ActionView::Helpers::NumberHelper
5
-
6
- attr_reader :request
7
-
8
- def setup
9
- @number_defaults = { :precision => 3, :delimiter => ',', :separator => '.' }
10
- @currency_defaults = { :unit => '$', :format => '%u%n', :precision => 2 }
11
- @human_defaults = { :precision => 1 }
12
- @human_storage_units_format_default = "%n %u"
13
- @human_storage_units_units_byte_other = "Bytes"
14
- @human_storage_units_units_kb_other = "KB"
15
- @percentage_defaults = { :delimiter => '' }
16
- @precision_defaults = { :delimiter => '' }
17
-
18
- I18n.backend.store_translations 'en', :number => { :format => @number_defaults,
19
- :currency => { :format => @currency_defaults }, :human => @human_defaults }
20
- end
21
-
22
- def test_number_to_currency_translates_currency_formats
23
- I18n.expects(:translate).with(:'number.format', :locale => 'en', :raise => true).returns(@number_defaults)
24
- I18n.expects(:translate).with(:'number.currency.format', :locale => 'en',
25
- :raise => true).returns(@currency_defaults)
26
- number_to_currency(1, :locale => 'en')
27
- end
28
-
29
- def test_number_with_precision_translates_number_formats
30
- I18n.expects(:translate).with(:'number.format', :locale => 'en', :raise => true).returns(@number_defaults)
31
- I18n.expects(:translate).with(:'number.precision.format', :locale => 'en',
32
- :raise => true).returns(@precision_defaults)
33
- number_with_precision(1, :locale => 'en')
34
- end
35
-
36
- def test_number_with_delimiter_translates_number_formats
37
- I18n.expects(:translate).with(:'number.format', :locale => 'en', :raise => true).returns(@number_defaults)
38
- number_with_delimiter(1, :locale => 'en')
39
- end
40
-
41
- def test_number_to_percentage_translates_number_formats
42
- I18n.expects(:translate).with(:'number.format', :locale => 'en', :raise => true).returns(@number_defaults)
43
- I18n.expects(:translate).with(:'number.percentage.format', :locale => 'en',
44
- :raise => true).returns(@percentage_defaults)
45
- number_to_percentage(1, :locale => 'en')
46
- end
47
-
48
- def test_number_to_human_size_translates_human_formats
49
- I18n.expects(:translate).with(:'number.format', :locale => 'en', :raise => true).returns(@number_defaults)
50
- I18n.expects(:translate).with(:'number.human.format', :locale => 'en',
51
- :raise => true).returns(@human_defaults)
52
- I18n.expects(:translate).with(:'number.human.storage_units.format', :locale => 'en',
53
- :raise => true).returns(@human_storage_units_format_default)
54
- I18n.expects(:translate).with(:'number.human.storage_units.units.kb', :locale => 'en', :count => 2,
55
- :raise => true).returns(@human_storage_units_units_kb_other)
56
- # 2KB
57
- number_to_human_size(2048, :locale => 'en')
58
-
59
- I18n.expects(:translate).with(:'number.format', :locale => 'en', :raise => true).returns(@number_defaults)
60
- I18n.expects(:translate).with(:'number.human.format', :locale => 'en',
61
- :raise => true).returns(@human_defaults)
62
- I18n.expects(:translate).with(:'number.human.storage_units.format', :locale => 'en',
63
- :raise => true).returns(@human_storage_units_format_default)
64
- I18n.expects(:translate).with(:'number.human.storage_units.units.byte', :locale => 'en', :count => 42,
65
- :raise => true).returns(@human_storage_units_units_byte_other)
66
- # 42 Bytes
67
- number_to_human_size(42, :locale => 'en')
68
- end
69
- end
@@ -1,132 +0,0 @@
1
- require 'abstract_unit'
2
-
3
- class NumberHelperTest < ActionView::TestCase
4
- tests ActionView::Helpers::NumberHelper
5
-
6
- def test_number_to_phone
7
- assert_equal("555-1234", number_to_phone(5551234))
8
- assert_equal("800-555-1212", number_to_phone(8005551212))
9
- assert_equal("(800) 555-1212", number_to_phone(8005551212, {:area_code => true}))
10
- assert_equal("800 555 1212", number_to_phone(8005551212, {:delimiter => " "}))
11
- assert_equal("(800) 555-1212 x 123", number_to_phone(8005551212, {:area_code => true, :extension => 123}))
12
- assert_equal("800-555-1212", number_to_phone(8005551212, :extension => " "))
13
- assert_equal("800-555-1212", number_to_phone("8005551212"))
14
- assert_equal("+1-800-555-1212", number_to_phone(8005551212, :country_code => 1))
15
- assert_equal("+18005551212", number_to_phone(8005551212, :country_code => 1, :delimiter => ''))
16
- assert_equal("22-555-1212", number_to_phone(225551212))
17
- assert_equal("+45-22-555-1212", number_to_phone(225551212, :country_code => 45))
18
- assert_equal("x", number_to_phone("x"))
19
- assert_nil number_to_phone(nil)
20
- end
21
-
22
- def test_number_to_currency
23
- assert_equal("$1,234,567,890.50", number_to_currency(1234567890.50))
24
- assert_equal("$1,234,567,890.51", number_to_currency(1234567890.506))
25
- assert_equal("$1,234,567,892", number_to_currency(1234567891.50, {:precision => 0}))
26
- assert_equal("$1,234,567,890.5", number_to_currency(1234567890.50, {:precision => 1}))
27
- assert_equal("&pound;1234567890,50", number_to_currency(1234567890.50, {:unit => "&pound;", :separator => ",", :delimiter => ""}))
28
- assert_equal("$1,234,567,890.50", number_to_currency("1234567890.50"))
29
- assert_equal("1,234,567,890.50 K&#269;", number_to_currency("1234567890.50", {:unit => "K&#269;", :format => "%n %u"}))
30
- #assert_equal("$x.", number_to_currency("x")) # fails due to API consolidation
31
- assert_equal("$x", number_to_currency("x"))
32
- assert_nil number_to_currency(nil)
33
- end
34
-
35
- def test_number_to_percentage
36
- assert_equal("100.000%", number_to_percentage(100))
37
- assert_equal("100%", number_to_percentage(100, {:precision => 0}))
38
- assert_equal("302.06%", number_to_percentage(302.0574, {:precision => 2}))
39
- assert_equal("100.000%", number_to_percentage("100"))
40
- assert_equal("1000.000%", number_to_percentage("1000"))
41
- assert_equal("x%", number_to_percentage("x"))
42
- assert_equal("1.000,000%", number_to_percentage(1000, :delimiter => '.', :separator => ','))
43
- assert_nil number_to_percentage(nil)
44
- end
45
-
46
- def test_number_with_delimiter
47
- assert_equal("12,345,678", number_with_delimiter(12345678))
48
- assert_equal("0", number_with_delimiter(0))
49
- assert_equal("123", number_with_delimiter(123))
50
- assert_equal("123,456", number_with_delimiter(123456))
51
- assert_equal("123,456.78", number_with_delimiter(123456.78))
52
- assert_equal("123,456.789", number_with_delimiter(123456.789))
53
- assert_equal("123,456.78901", number_with_delimiter(123456.78901))
54
- assert_equal("123,456,789.78901", number_with_delimiter(123456789.78901))
55
- assert_equal("0.78901", number_with_delimiter(0.78901))
56
- assert_equal("123,456.78", number_with_delimiter("123456.78"))
57
- assert_equal("x", number_with_delimiter("x"))
58
- assert_nil number_with_delimiter(nil)
59
- end
60
-
61
- def test_number_with_delimiter_with_options_hash
62
- assert_equal '12 345 678', number_with_delimiter(12345678, :delimiter => ' ')
63
- assert_equal '12,345,678-05', number_with_delimiter(12345678.05, :separator => '-')
64
- assert_equal '12.345.678,05', number_with_delimiter(12345678.05, :separator => ',', :delimiter => '.')
65
- assert_equal '12.345.678,05', number_with_delimiter(12345678.05, :delimiter => '.', :separator => ',')
66
- end
67
-
68
- def test_number_with_precision
69
- assert_equal("111.235", number_with_precision(111.2346))
70
- assert_equal("31.83", number_with_precision(31.825, :precision => 2))
71
- assert_equal("111.23", number_with_precision(111.2346, :precision => 2))
72
- assert_equal("111.00", number_with_precision(111, :precision => 2))
73
- assert_equal("111.235", number_with_precision("111.2346"))
74
- assert_equal("31.83", number_with_precision("31.825", :precision => 2))
75
- assert_equal("112", number_with_precision(111.50, :precision => 0))
76
- assert_equal("1234567892", number_with_precision(1234567891.50, :precision => 0))
77
-
78
- # Return non-numeric params unchanged.
79
- assert_equal("x", number_with_precision("x"))
80
- assert_nil number_with_precision(nil)
81
- end
82
-
83
- def test_number_with_precision_with_custom_delimiter_and_separator
84
- assert_equal '31,83', number_with_precision(31.825, :precision => 2, :separator => ',')
85
- assert_equal '1.231,83', number_with_precision(1231.825, :precision => 2, :separator => ',', :delimiter => '.')
86
- end
87
-
88
- def test_number_to_human_size
89
- assert_equal '0 Bytes', number_to_human_size(0)
90
- assert_equal '1 Byte', number_to_human_size(1)
91
- assert_equal '3 Bytes', number_to_human_size(3.14159265)
92
- assert_equal '123 Bytes', number_to_human_size(123.0)
93
- assert_equal '123 Bytes', number_to_human_size(123)
94
- assert_equal '1.2 KB', number_to_human_size(1234)
95
- assert_equal '12.1 KB', number_to_human_size(12345)
96
- assert_equal '1.2 MB', number_to_human_size(1234567)
97
- assert_equal '1.1 GB', number_to_human_size(1234567890)
98
- assert_equal '1.1 TB', number_to_human_size(1234567890123)
99
- assert_equal '1025 TB', number_to_human_size(1025.terabytes)
100
- assert_equal '444 KB', number_to_human_size(444.kilobytes)
101
- assert_equal '1023 MB', number_to_human_size(1023.megabytes)
102
- assert_equal '3 TB', number_to_human_size(3.terabytes)
103
- assert_equal '1.18 MB', number_to_human_size(1234567, :precision => 2)
104
- assert_equal '3 Bytes', number_to_human_size(3.14159265, :precision => 4)
105
- assert_equal("123 Bytes", number_to_human_size("123"))
106
- assert_equal '1.01 KB', number_to_human_size(1.0123.kilobytes, :precision => 2)
107
- assert_equal '1.01 KB', number_to_human_size(1.0100.kilobytes, :precision => 4)
108
- assert_equal '10 KB', number_to_human_size(10.000.kilobytes, :precision => 4)
109
- assert_equal '1 Byte', number_to_human_size(1.1)
110
- assert_equal '10 Bytes', number_to_human_size(10)
111
- #assert_nil number_to_human_size('x') # fails due to API consolidation
112
- assert_nil number_to_human_size(nil)
113
- end
114
-
115
- def test_number_to_human_size_with_options_hash
116
- assert_equal '1.18 MB', number_to_human_size(1234567, :precision => 2)
117
- assert_equal '3 Bytes', number_to_human_size(3.14159265, :precision => 4)
118
- assert_equal '1.01 KB', number_to_human_size(1.0123.kilobytes, :precision => 2)
119
- assert_equal '1.01 KB', number_to_human_size(1.0100.kilobytes, :precision => 4)
120
- assert_equal '10 KB', number_to_human_size(10.000.kilobytes, :precision => 4)
121
- assert_equal '1 TB', number_to_human_size(1234567890123, :precision => 0)
122
- assert_equal '500 MB', number_to_human_size(524288000, :precision=>0)
123
- assert_equal '40 KB', number_to_human_size(41010, :precision => 0)
124
- assert_equal '40 KB', number_to_human_size(41100, :precision => 0)
125
- end
126
-
127
- def test_number_to_human_size_with_custom_delimiter_and_separator
128
- assert_equal '1,01 KB', number_to_human_size(1.0123.kilobytes, :precision => 2, :separator => ',')
129
- assert_equal '1,01 KB', number_to_human_size(1.0100.kilobytes, :precision => 4, :separator => ',')
130
- assert_equal '1.000,1 TB', number_to_human_size(1000.1.terabytes, :delimiter => '.', :separator => ',')
131
- end
132
- end
@@ -1,639 +0,0 @@
1
- require 'abstract_unit'
2
-
3
- Bunny = Struct.new(:Bunny, :id)
4
-
5
- class Author
6
- attr_reader :id
7
- def save; @id = 1 end
8
- def new_record?; @id.nil? end
9
- def name
10
- @id.nil? ? 'new author' : "author ##{@id}"
11
- end
12
- end
13
-
14
- class Article
15
- attr_reader :id
16
- attr_reader :author_id
17
- def save; @id = 1; @author_id = 1 end
18
- def new_record?; @id.nil? end
19
- def name
20
- @id.nil? ? 'new article' : "article ##{@id}"
21
- end
22
- end
23
-
24
- class Author::Nested < Author; end
25
-
26
-
27
- class PrototypeHelperBaseTest < ActionView::TestCase
28
- attr_accessor :template_format, :output_buffer
29
-
30
- def setup
31
- @template = self
32
- @controller = Class.new do
33
- def url_for(options)
34
- if options.is_a?(String)
35
- options
36
- else
37
- url = "http://www.example.com/"
38
- url << options[:action].to_s if options and options[:action]
39
- url << "?a=#{options[:a]}" if options && options[:a]
40
- url << "&b=#{options[:b]}" if options && options[:a] && options[:b]
41
- url
42
- end
43
- end
44
- end.new
45
- end
46
-
47
- protected
48
- def request_forgery_protection_token
49
- nil
50
- end
51
-
52
- def protect_against_forgery?
53
- false
54
- end
55
-
56
- def create_generator
57
- block = Proc.new { |*args| yield *args if block_given? }
58
- JavaScriptGenerator.new self, &block
59
- end
60
- end
61
-
62
- class PrototypeHelperTest < PrototypeHelperBaseTest
63
- def setup
64
- @record = @author = Author.new
65
- @article = Article.new
66
- super
67
- end
68
-
69
- def test_link_to_remote
70
- assert_dom_equal %(<a class=\"fine\" href=\"#\" onclick=\"new Ajax.Request('http://www.example.com/whatnot', {asynchronous:true, evalScripts:true}); return false;\">Remote outauthor</a>),
71
- link_to_remote("Remote outauthor", { :url => { :action => "whatnot" }}, { :class => "fine" })
72
- assert_dom_equal %(<a href=\"#\" onclick=\"new Ajax.Request('http://www.example.com/whatnot', {asynchronous:true, evalScripts:true, onComplete:function(request){alert(request.responseText)}}); return false;\">Remote outauthor</a>),
73
- link_to_remote("Remote outauthor", :complete => "alert(request.responseText)", :url => { :action => "whatnot" })
74
- assert_dom_equal %(<a href=\"#\" onclick=\"new Ajax.Request('http://www.example.com/whatnot', {asynchronous:true, evalScripts:true, onSuccess:function(request){alert(request.responseText)}}); return false;\">Remote outauthor</a>),
75
- link_to_remote("Remote outauthor", :success => "alert(request.responseText)", :url => { :action => "whatnot" })
76
- assert_dom_equal %(<a href=\"#\" onclick=\"new Ajax.Request('http://www.example.com/whatnot', {asynchronous:true, evalScripts:true, onFailure:function(request){alert(request.responseText)}}); return false;\">Remote outauthor</a>),
77
- link_to_remote("Remote outauthor", :failure => "alert(request.responseText)", :url => { :action => "whatnot" })
78
- assert_dom_equal %(<a href=\"#\" onclick=\"new Ajax.Request('http://www.example.com/whatnot?a=10&amp;b=20', {asynchronous:true, evalScripts:true, onFailure:function(request){alert(request.responseText)}}); return false;\">Remote outauthor</a>),
79
- link_to_remote("Remote outauthor", :failure => "alert(request.responseText)", :url => { :action => "whatnot", :a => '10', :b => '20' })
80
- assert_dom_equal %(<a href=\"#\" onclick=\"new Ajax.Request('http://www.example.com/whatnot', {asynchronous:false, evalScripts:true}); return false;\">Remote outauthor</a>),
81
- link_to_remote("Remote outauthor", :url => { :action => "whatnot" }, :type => :synchronous)
82
- assert_dom_equal %(<a href=\"#\" onclick=\"new Ajax.Request('http://www.example.com/whatnot', {asynchronous:true, evalScripts:true, insertion:'bottom'}); return false;\">Remote outauthor</a>),
83
- link_to_remote("Remote outauthor", :url => { :action => "whatnot" }, :position => :bottom)
84
- end
85
-
86
- def test_link_to_remote_html_options
87
- assert_dom_equal %(<a class=\"fine\" href=\"#\" onclick=\"new Ajax.Request('http://www.example.com/whatnot', {asynchronous:true, evalScripts:true}); return false;\">Remote outauthor</a>),
88
- link_to_remote("Remote outauthor", { :url => { :action => "whatnot" }, :html => { :class => "fine" } })
89
- end
90
-
91
- def test_link_to_remote_url_quote_escaping
92
- assert_dom_equal %(<a href="#" onclick="new Ajax.Request('http://www.example.com/whatnot\\\'s', {asynchronous:true, evalScripts:true}); return false;">Remote</a>),
93
- link_to_remote("Remote", { :url => { :action => "whatnot's" } })
94
- end
95
-
96
- def test_button_to_remote
97
- assert_dom_equal %(<input class=\"fine\" type=\"button\" value=\"Remote outpost\" onclick=\"new Ajax.Request('http://www.example.com/whatnot', {asynchronous:true, evalScripts:true});\" />),
98
- button_to_remote("Remote outpost", { :url => { :action => "whatnot" }}, { :class => "fine" })
99
- assert_dom_equal %(<input type=\"button\" value=\"Remote outpost\" onclick=\"new Ajax.Request('http://www.example.com/whatnot', {asynchronous:true, evalScripts:true, onComplete:function(request){alert(request.reponseText)}});\" />),
100
- button_to_remote("Remote outpost", :complete => "alert(request.reponseText)", :url => { :action => "whatnot" })
101
- assert_dom_equal %(<input type=\"button\" value=\"Remote outpost\" onclick=\"new Ajax.Request('http://www.example.com/whatnot', {asynchronous:true, evalScripts:true, onSuccess:function(request){alert(request.reponseText)}});\" />),
102
- button_to_remote("Remote outpost", :success => "alert(request.reponseText)", :url => { :action => "whatnot" })
103
- assert_dom_equal %(<input type=\"button\" value=\"Remote outpost\" onclick=\"new Ajax.Request('http://www.example.com/whatnot', {asynchronous:true, evalScripts:true, onFailure:function(request){alert(request.reponseText)}});\" />),
104
- button_to_remote("Remote outpost", :failure => "alert(request.reponseText)", :url => { :action => "whatnot" })
105
- assert_dom_equal %(<input type=\"button\" value=\"Remote outpost\" onclick=\"new Ajax.Request('http://www.example.com/whatnot?a=10&amp;b=20', {asynchronous:true, evalScripts:true, onFailure:function(request){alert(request.reponseText)}});\" />),
106
- button_to_remote("Remote outpost", :failure => "alert(request.reponseText)", :url => { :action => "whatnot", :a => '10', :b => '20' })
107
- end
108
-
109
- def test_periodically_call_remote
110
- assert_dom_equal %(<script type="text/javascript">\n//<![CDATA[\nnew PeriodicalExecuter(function() {new Ajax.Updater('schremser_bier', 'http://www.example.com/mehr_bier', {asynchronous:true, evalScripts:true})}, 10)\n//]]>\n</script>),
111
- periodically_call_remote(:update => "schremser_bier", :url => { :action => "mehr_bier" })
112
- end
113
-
114
- def test_periodically_call_remote_with_frequency
115
- assert_dom_equal(
116
- "<script type=\"text/javascript\">\n//<![CDATA[\nnew PeriodicalExecuter(function() {new Ajax.Request('http://www.example.com/', {asynchronous:true, evalScripts:true})}, 2)\n//]]>\n</script>",
117
- periodically_call_remote(:frequency => 2)
118
- )
119
- end
120
-
121
- def test_form_remote_tag
122
- assert_dom_equal %(<form action=\"http://www.example.com/fast\" method=\"post\" onsubmit=\"new Ajax.Updater('glass_of_beer', 'http://www.example.com/fast', {asynchronous:true, evalScripts:true, parameters:Form.serialize(this)}); return false;\">),
123
- form_remote_tag(:update => "glass_of_beer", :url => { :action => :fast })
124
- assert_dom_equal %(<form action=\"http://www.example.com/fast\" method=\"post\" onsubmit=\"new Ajax.Updater({success:'glass_of_beer'}, 'http://www.example.com/fast', {asynchronous:true, evalScripts:true, parameters:Form.serialize(this)}); return false;\">),
125
- form_remote_tag(:update => { :success => "glass_of_beer" }, :url => { :action => :fast })
126
- assert_dom_equal %(<form action=\"http://www.example.com/fast\" method=\"post\" onsubmit=\"new Ajax.Updater({failure:'glass_of_water'}, 'http://www.example.com/fast', {asynchronous:true, evalScripts:true, parameters:Form.serialize(this)}); return false;\">),
127
- form_remote_tag(:update => { :failure => "glass_of_water" }, :url => { :action => :fast })
128
- assert_dom_equal %(<form action=\"http://www.example.com/fast\" method=\"post\" onsubmit=\"new Ajax.Updater({success:'glass_of_beer',failure:'glass_of_water'}, 'http://www.example.com/fast', {asynchronous:true, evalScripts:true, parameters:Form.serialize(this)}); return false;\">),
129
- form_remote_tag(:update => { :success => 'glass_of_beer', :failure => "glass_of_water" }, :url => { :action => :fast })
130
- end
131
-
132
- def test_form_remote_tag_with_method
133
- assert_dom_equal %(<form action=\"http://www.example.com/fast\" method=\"post\" onsubmit=\"new Ajax.Updater('glass_of_beer', 'http://www.example.com/fast', {asynchronous:true, evalScripts:true, parameters:Form.serialize(this)}); return false;\"><div style='margin:0;padding:0;display:inline'><input name='_method' type='hidden' value='put' /></div>),
134
- form_remote_tag(:update => "glass_of_beer", :url => { :action => :fast }, :html => { :method => :put })
135
- end
136
-
137
- def test_form_remote_tag_with_block_in_erb
138
- __in_erb_template = ''
139
- form_remote_tag(:update => "glass_of_beer", :url => { :action => :fast }) { concat "Hello world!" }
140
- assert_dom_equal %(<form action=\"http://www.example.com/fast\" method=\"post\" onsubmit=\"new Ajax.Updater('glass_of_beer', 'http://www.example.com/fast', {asynchronous:true, evalScripts:true, parameters:Form.serialize(this)}); return false;\">Hello world!</form>), output_buffer
141
- end
142
-
143
- def test_remote_form_for_with_record_identification_with_new_record
144
- remote_form_for(@record, {:html => { :id => 'create-author' }}) {}
145
-
146
- expected = %(<form action='#{authors_path}' onsubmit="new Ajax.Request('#{authors_path}', {asynchronous:true, evalScripts:true, parameters:Form.serialize(this)}); return false;" class='new_author' id='create-author' method='post'></form>)
147
- assert_dom_equal expected, output_buffer
148
- end
149
-
150
- def test_remote_form_for_with_record_identification_without_html_options
151
- remote_form_for(@record) {}
152
-
153
- expected = %(<form action='#{authors_path}' onsubmit="new Ajax.Request('#{authors_path}', {asynchronous:true, evalScripts:true, parameters:Form.serialize(this)}); return false;" class='new_author' method='post' id='new_author'></form>)
154
- assert_dom_equal expected, output_buffer
155
- end
156
-
157
- def test_remote_form_for_with_record_identification_with_existing_record
158
- @record.save
159
- remote_form_for(@record) {}
160
-
161
- expected = %(<form action='#{author_path(@record)}' id='edit_author_1' method='post' onsubmit="new Ajax.Request('#{author_path(@record)}', {asynchronous:true, evalScripts:true, parameters:Form.serialize(this)}); return false;" class='edit_author'><div style='margin:0;padding:0;display:inline'><input name='_method' type='hidden' value='put' /></div></form>)
162
- assert_dom_equal expected, output_buffer
163
- end
164
-
165
- def test_remote_form_for_with_new_object_in_list
166
- remote_form_for([@author, @article]) {}
167
-
168
- expected = %(<form action='#{author_articles_path(@author)}' onsubmit="new Ajax.Request('#{author_articles_path(@author)}', {asynchronous:true, evalScripts:true, parameters:Form.serialize(this)}); return false;" class='new_article' method='post' id='new_article'></form>)
169
- assert_dom_equal expected, output_buffer
170
- end
171
-
172
- def test_remote_form_for_with_existing_object_in_list
173
- @author.save
174
- @article.save
175
- remote_form_for([@author, @article]) {}
176
-
177
- expected = %(<form action='#{author_article_path(@author, @article)}' id='edit_article_1' method='post' onsubmit="new Ajax.Request('#{author_article_path(@author, @article)}', {asynchronous:true, evalScripts:true, parameters:Form.serialize(this)}); return false;" class='edit_article'><div style='margin:0;padding:0;display:inline'><input name='_method' type='hidden' value='put' /></div></form>)
178
- assert_dom_equal expected, output_buffer
179
- end
180
-
181
- def test_on_callbacks
182
- callbacks = [:uninitialized, :loading, :loaded, :interactive, :complete, :success, :failure]
183
- callbacks.each do |callback|
184
- assert_dom_equal %(<form action=\"http://www.example.com/fast\" method=\"post\" onsubmit=\"new Ajax.Updater('glass_of_beer', 'http://www.example.com/fast', {asynchronous:true, evalScripts:true, on#{callback.to_s.capitalize}:function(request){monkeys();}, parameters:Form.serialize(this)}); return false;">),
185
- form_remote_tag(:update => "glass_of_beer", :url => { :action => :fast }, callback=>"monkeys();")
186
- assert_dom_equal %(<form action=\"http://www.example.com/fast\" method=\"post\" onsubmit=\"new Ajax.Updater({success:'glass_of_beer'}, 'http://www.example.com/fast', {asynchronous:true, evalScripts:true, on#{callback.to_s.capitalize}:function(request){monkeys();}, parameters:Form.serialize(this)}); return false;">),
187
- form_remote_tag(:update => { :success => "glass_of_beer" }, :url => { :action => :fast }, callback=>"monkeys();")
188
- assert_dom_equal %(<form action=\"http://www.example.com/fast\" method=\"post\" onsubmit=\"new Ajax.Updater({failure:'glass_of_beer'}, 'http://www.example.com/fast', {asynchronous:true, evalScripts:true, on#{callback.to_s.capitalize}:function(request){monkeys();}, parameters:Form.serialize(this)}); return false;">),
189
- form_remote_tag(:update => { :failure => "glass_of_beer" }, :url => { :action => :fast }, callback=>"monkeys();")
190
- assert_dom_equal %(<form action=\"http://www.example.com/fast\" method=\"post\" onsubmit=\"new Ajax.Updater({success:'glass_of_beer',failure:'glass_of_water'}, 'http://www.example.com/fast', {asynchronous:true, evalScripts:true, on#{callback.to_s.capitalize}:function(request){monkeys();}, parameters:Form.serialize(this)}); return false;">),
191
- form_remote_tag(:update => { :success => "glass_of_beer", :failure => "glass_of_water" }, :url => { :action => :fast }, callback=>"monkeys();")
192
- end
193
-
194
- #HTTP status codes 200 up to 599 have callbacks
195
- #these should work
196
- 100.upto(599) do |callback|
197
- assert_dom_equal %(<form action=\"http://www.example.com/fast\" method=\"post\" onsubmit=\"new Ajax.Updater('glass_of_beer', 'http://www.example.com/fast', {asynchronous:true, evalScripts:true, on#{callback.to_s.capitalize}:function(request){monkeys();}, parameters:Form.serialize(this)}); return false;">),
198
- form_remote_tag(:update => "glass_of_beer", :url => { :action => :fast }, callback=>"monkeys();")
199
- end
200
-
201
- #test 200 and 404
202
- assert_dom_equal %(<form action=\"http://www.example.com/fast\" method=\"post\" onsubmit=\"new Ajax.Updater('glass_of_beer', 'http://www.example.com/fast', {asynchronous:true, evalScripts:true, on200:function(request){monkeys();}, on404:function(request){bananas();}, parameters:Form.serialize(this)}); return false;">),
203
- form_remote_tag(:update => "glass_of_beer", :url => { :action => :fast }, 200=>"monkeys();", 404=>"bananas();")
204
-
205
- #these shouldn't
206
- 1.upto(99) do |callback|
207
- assert_dom_equal %(<form action=\"http://www.example.com/fast\" method=\"post\" onsubmit=\"new Ajax.Updater('glass_of_beer', 'http://www.example.com/fast', {asynchronous:true, evalScripts:true, parameters:Form.serialize(this)}); return false;">),
208
- form_remote_tag(:update => "glass_of_beer", :url => { :action => :fast }, callback=>"monkeys();")
209
- end
210
- 600.upto(999) do |callback|
211
- assert_dom_equal %(<form action=\"http://www.example.com/fast\" method=\"post\" onsubmit=\"new Ajax.Updater('glass_of_beer', 'http://www.example.com/fast', {asynchronous:true, evalScripts:true, parameters:Form.serialize(this)}); return false;">),
212
- form_remote_tag(:update => "glass_of_beer", :url => { :action => :fast }, callback=>"monkeys();")
213
- end
214
-
215
- #test ultimate combo
216
- assert_dom_equal %(<form action=\"http://www.example.com/fast\" method=\"post\" onsubmit=\"new Ajax.Updater('glass_of_beer', 'http://www.example.com/fast', {asynchronous:true, evalScripts:true, on200:function(request){monkeys();}, on404:function(request){bananas();}, onComplete:function(request){c();}, onFailure:function(request){f();}, onLoading:function(request){c1()}, onSuccess:function(request){s()}, parameters:Form.serialize(this)}); return false;\">),
217
- form_remote_tag(:update => "glass_of_beer", :url => { :action => :fast }, :loading => "c1()", :success => "s()", :failure => "f();", :complete => "c();", 200=>"monkeys();", 404=>"bananas();")
218
-
219
- end
220
-
221
- def test_submit_to_remote
222
- assert_dom_equal %(<input name=\"More beer!\" onclick=\"new Ajax.Updater('empty_bottle', 'http://www.example.com/', {asynchronous:true, evalScripts:true, parameters:Form.serialize(this.form)});\" type=\"button\" value=\"1000000\" />),
223
- submit_to_remote("More beer!", 1_000_000, :update => "empty_bottle")
224
- end
225
-
226
- def test_observe_field
227
- assert_dom_equal %(<script type=\"text/javascript\">\n//<![CDATA[\nnew Form.Element.Observer('glass', 300, function(element, value) {new Ajax.Request('http://www.example.com/reorder_if_empty', {asynchronous:true, evalScripts:true, parameters:value})})\n//]]>\n</script>),
228
- observe_field("glass", :frequency => 5.minutes, :url => { :action => "reorder_if_empty" })
229
- end
230
-
231
- def test_observe_field_using_with_option
232
- expected = %(<script type=\"text/javascript\">\n//<![CDATA[\nnew Form.Element.Observer('glass', 300, function(element, value) {new Ajax.Request('http://www.example.com/check_value', {asynchronous:true, evalScripts:true, parameters:'id=' + encodeURIComponent(value)})})\n//]]>\n</script>)
233
- assert_dom_equal expected, observe_field("glass", :frequency => 5.minutes, :url => { :action => "check_value" }, :with => 'id')
234
- assert_dom_equal expected, observe_field("glass", :frequency => 5.minutes, :url => { :action => "check_value" }, :with => "'id=' + encodeURIComponent(value)")
235
- end
236
-
237
- def test_observe_field_using_json_in_with_option
238
- expected = %(<script type=\"text/javascript\">\n//<![CDATA[\nnew Form.Element.Observer('glass', 300, function(element, value) {new Ajax.Request('http://www.example.com/check_value', {asynchronous:true, evalScripts:true, parameters:{'id':value}})})\n//]]>\n</script>)
239
- assert_dom_equal expected, observe_field("glass", :frequency => 5.minutes, :url => { :action => "check_value" }, :with => "{'id':value}")
240
- end
241
-
242
- def test_observe_field_using_function_for_callback
243
- assert_dom_equal %(<script type=\"text/javascript\">\n//<![CDATA[\nnew Form.Element.Observer('glass', 300, function(element, value) {alert('Element changed')})\n//]]>\n</script>),
244
- observe_field("glass", :frequency => 5.minutes, :function => "alert('Element changed')")
245
- end
246
-
247
- def test_observe_form
248
- assert_dom_equal %(<script type=\"text/javascript\">\n//<![CDATA[\nnew Form.Observer('cart', 2, function(element, value) {new Ajax.Request('http://www.example.com/cart_changed', {asynchronous:true, evalScripts:true, parameters:value})})\n//]]>\n</script>),
249
- observe_form("cart", :frequency => 2, :url => { :action => "cart_changed" })
250
- end
251
-
252
- def test_observe_form_using_function_for_callback
253
- assert_dom_equal %(<script type=\"text/javascript\">\n//<![CDATA[\nnew Form.Observer('cart', 2, function(element, value) {alert('Form changed')})\n//]]>\n</script>),
254
- observe_form("cart", :frequency => 2, :function => "alert('Form changed')")
255
- end
256
-
257
- def test_observe_field_without_frequency
258
- assert_dom_equal %(<script type=\"text/javascript\">\n//<![CDATA[\nnew Form.Element.EventObserver('glass', function(element, value) {new Ajax.Request('http://www.example.com/', {asynchronous:true, evalScripts:true, parameters:value})})\n//]]>\n</script>),
259
- observe_field("glass")
260
- end
261
-
262
- def test_update_page
263
- old_output_buffer = output_buffer
264
-
265
- block = Proc.new { |page| page.replace_html('foo', 'bar') }
266
- assert_equal create_generator(&block).to_s, update_page(&block)
267
-
268
- assert_equal old_output_buffer, output_buffer
269
- end
270
-
271
- def test_update_page_tag
272
- block = Proc.new { |page| page.replace_html('foo', 'bar') }
273
- assert_equal javascript_tag(create_generator(&block).to_s), update_page_tag(&block)
274
- end
275
-
276
- def test_update_page_tag_with_html_options
277
- block = Proc.new { |page| page.replace_html('foo', 'bar') }
278
- assert_equal javascript_tag(create_generator(&block).to_s, {:defer => 'true'}), update_page_tag({:defer => 'true'}, &block)
279
- end
280
-
281
-
282
- protected
283
- def author_path(record)
284
- "/authors/#{record.id}"
285
- end
286
-
287
- def authors_path
288
- "/authors"
289
- end
290
-
291
- def author_articles_path(author)
292
- "/authors/#{author.id}/articles"
293
- end
294
-
295
- def author_article_path(author, article)
296
- "/authors/#{author.id}/articles/#{article.id}"
297
- end
298
- end
299
-
300
- class JavaScriptGeneratorTest < PrototypeHelperBaseTest
301
- def setup
302
- super
303
- @generator = create_generator
304
- end
305
-
306
- def test_insert_html_with_string
307
- assert_equal 'Element.insert("element", { top: "\\u003Cp\\u003EThis is a test\\u003C/p\\u003E" });',
308
- @generator.insert_html(:top, 'element', '<p>This is a test</p>')
309
- assert_equal 'Element.insert("element", { bottom: "\\u003Cp\u003EThis is a test\\u003C/p\u003E" });',
310
- @generator.insert_html(:bottom, 'element', '<p>This is a test</p>')
311
- assert_equal 'Element.insert("element", { before: "\\u003Cp\u003EThis is a test\\u003C/p\u003E" });',
312
- @generator.insert_html(:before, 'element', '<p>This is a test</p>')
313
- assert_equal 'Element.insert("element", { after: "\\u003Cp\u003EThis is a test\\u003C/p\u003E" });',
314
- @generator.insert_html(:after, 'element', '<p>This is a test</p>')
315
- end
316
-
317
- def test_replace_html_with_string
318
- assert_equal 'Element.update("element", "\\u003Cp\\u003EThis is a test\\u003C/p\\u003E");',
319
- @generator.replace_html('element', '<p>This is a test</p>')
320
- end
321
-
322
- def test_replace_element_with_string
323
- assert_equal 'Element.replace("element", "\\u003Cdiv id=\"element\"\\u003E\\u003Cp\\u003EThis is a test\\u003C/p\\u003E\\u003C/div\\u003E");',
324
- @generator.replace('element', '<div id="element"><p>This is a test</p></div>')
325
- end
326
-
327
- def test_remove
328
- assert_equal 'Element.remove("foo");',
329
- @generator.remove('foo')
330
- assert_equal '["foo","bar","baz"].each(Element.remove);',
331
- @generator.remove('foo', 'bar', 'baz')
332
- end
333
-
334
- def test_show
335
- assert_equal 'Element.show("foo");',
336
- @generator.show('foo')
337
- assert_equal '["foo","bar","baz"].each(Element.show);',
338
- @generator.show('foo', 'bar', 'baz')
339
- end
340
-
341
- def test_hide
342
- assert_equal 'Element.hide("foo");',
343
- @generator.hide('foo')
344
- assert_equal '["foo","bar","baz"].each(Element.hide);',
345
- @generator.hide('foo', 'bar', 'baz')
346
- end
347
-
348
- def test_toggle
349
- assert_equal 'Element.toggle("foo");',
350
- @generator.toggle('foo')
351
- assert_equal '["foo","bar","baz"].each(Element.toggle);',
352
- @generator.toggle('foo', 'bar', 'baz')
353
- end
354
-
355
- def test_alert
356
- assert_equal 'alert("hello");', @generator.alert('hello')
357
- end
358
-
359
- def test_redirect_to
360
- assert_equal 'window.location.href = "http://www.example.com/welcome";',
361
- @generator.redirect_to(:action => 'welcome')
362
- assert_equal 'window.location.href = "http://www.example.com/welcome?a=b&c=d";',
363
- @generator.redirect_to("http://www.example.com/welcome?a=b&c=d")
364
- end
365
-
366
- def test_reload
367
- assert_equal 'window.location.reload();',
368
- @generator.reload
369
- end
370
-
371
- def test_delay
372
- @generator.delay(20) do
373
- @generator.hide('foo')
374
- end
375
-
376
- assert_equal "setTimeout(function() {\n;\nElement.hide(\"foo\");\n}, 20000);", @generator.to_s
377
- end
378
-
379
- def test_to_s
380
- @generator.insert_html(:top, 'element', '<p>This is a test</p>')
381
- @generator.insert_html(:bottom, 'element', '<p>This is a test</p>')
382
- @generator.remove('foo', 'bar')
383
- @generator.replace_html('baz', '<p>This is a test</p>')
384
-
385
- assert_equal <<-EOS.chomp, @generator.to_s
386
- Element.insert("element", { top: "\\u003Cp\\u003EThis is a test\\u003C/p\\u003E" });
387
- Element.insert("element", { bottom: "\\u003Cp\\u003EThis is a test\\u003C/p\\u003E" });
388
- ["foo","bar"].each(Element.remove);
389
- Element.update("baz", "\\u003Cp\\u003EThis is a test\\u003C/p\\u003E");
390
- EOS
391
- end
392
-
393
- def test_element_access
394
- assert_equal %($("hello");), @generator['hello']
395
- end
396
-
397
- def test_element_access_on_records
398
- assert_equal %($("bunny_5");), @generator[Bunny.new(:id => 5)]
399
- assert_equal %($("new_bunny");), @generator[Bunny.new]
400
- end
401
-
402
- def test_element_proxy_one_deep
403
- @generator['hello'].hide
404
- assert_equal %($("hello").hide();), @generator.to_s
405
- end
406
-
407
- def test_element_proxy_variable_access
408
- @generator['hello']['style']
409
- assert_equal %($("hello").style;), @generator.to_s
410
- end
411
-
412
- def test_element_proxy_variable_access_with_assignment
413
- @generator['hello']['style']['color'] = 'red'
414
- assert_equal %($("hello").style.color = "red";), @generator.to_s
415
- end
416
-
417
- def test_element_proxy_assignment
418
- @generator['hello'].width = 400
419
- assert_equal %($("hello").width = 400;), @generator.to_s
420
- end
421
-
422
- def test_element_proxy_two_deep
423
- @generator['hello'].hide("first").clean_whitespace
424
- assert_equal %($("hello").hide("first").cleanWhitespace();), @generator.to_s
425
- end
426
-
427
- def test_select_access
428
- assert_equal %($$("div.hello");), @generator.select('div.hello')
429
- end
430
-
431
- def test_select_proxy_one_deep
432
- @generator.select('p.welcome b').first.hide
433
- assert_equal %($$("p.welcome b").first().hide();), @generator.to_s
434
- end
435
-
436
- def test_visual_effect
437
- assert_equal %(new Effect.Puff("blah",{});),
438
- @generator.visual_effect(:puff,'blah')
439
- end
440
-
441
- def test_visual_effect_toggle
442
- assert_equal %(Effect.toggle("blah",'appear',{});),
443
- @generator.visual_effect(:toggle_appear,'blah')
444
- end
445
-
446
- def test_sortable
447
- assert_equal %(Sortable.create("blah", {onUpdate:function(){new Ajax.Request('http://www.example.com/order', {asynchronous:true, evalScripts:true, parameters:Sortable.serialize("blah")})}});),
448
- @generator.sortable('blah', :url => { :action => "order" })
449
- assert_equal %(Sortable.create("blah", {onUpdate:function(){new Ajax.Request('http://www.example.com/order', {asynchronous:false, evalScripts:true, parameters:Sortable.serialize("blah")})}});),
450
- @generator.sortable('blah', :url => { :action => "order" }, :type => :synchronous)
451
- end
452
-
453
- def test_draggable
454
- assert_equal %(new Draggable("blah", {});),
455
- @generator.draggable('blah')
456
- end
457
-
458
- def test_drop_receiving
459
- assert_equal %(Droppables.add("blah", {onDrop:function(element){new Ajax.Request('http://www.example.com/order', {asynchronous:true, evalScripts:true, parameters:'id=' + encodeURIComponent(element.id)})}});),
460
- @generator.drop_receiving('blah', :url => { :action => "order" })
461
- assert_equal %(Droppables.add("blah", {onDrop:function(element){new Ajax.Request('http://www.example.com/order', {asynchronous:false, evalScripts:true, parameters:'id=' + encodeURIComponent(element.id)})}});),
462
- @generator.drop_receiving('blah', :url => { :action => "order" }, :type => :synchronous)
463
- end
464
-
465
- def test_collection_first_and_last
466
- @generator.select('p.welcome b').first.hide()
467
- @generator.select('p.welcome b').last.show()
468
- assert_equal <<-EOS.strip, @generator.to_s
469
- $$("p.welcome b").first().hide();
470
- $$("p.welcome b").last().show();
471
- EOS
472
- end
473
-
474
- def test_collection_proxy_with_each
475
- @generator.select('p.welcome b').each do |value|
476
- value.remove_class_name 'selected'
477
- end
478
- @generator.select('p.welcome b').each do |value, index|
479
- @generator.visual_effect :highlight, value
480
- end
481
- assert_equal <<-EOS.strip, @generator.to_s
482
- $$("p.welcome b").each(function(value, index) {
483
- value.removeClassName("selected");
484
- });
485
- $$("p.welcome b").each(function(value, index) {
486
- new Effect.Highlight(value,{});
487
- });
488
- EOS
489
- end
490
-
491
- def test_collection_proxy_on_collect
492
- @generator.select('p').collect('a') { |para| para.show }
493
- @generator.select('p').collect { |para| para.hide }
494
- assert_equal <<-EOS.strip, @generator.to_s
495
- var a = $$("p").collect(function(value, index) {
496
- return value.show();
497
- });
498
- $$("p").collect(function(value, index) {
499
- return value.hide();
500
- });
501
- EOS
502
- @generator = create_generator
503
- end
504
-
505
- def test_collection_proxy_with_grep
506
- @generator.select('p').grep 'a', /^a/ do |value|
507
- @generator << '(value.className == "welcome")'
508
- end
509
- @generator.select('p').grep 'b', /b$/ do |value, index|
510
- @generator.call 'alert', value
511
- @generator << '(value.className == "welcome")'
512
- end
513
-
514
- assert_equal <<-EOS.strip, @generator.to_s
515
- var a = $$("p").grep(/^a/, function(value, index) {
516
- return (value.className == "welcome");
517
- });
518
- var b = $$("p").grep(/b$/, function(value, index) {
519
- alert(value);
520
- return (value.className == "welcome");
521
- });
522
- EOS
523
- end
524
-
525
- def test_collection_proxy_with_inject
526
- @generator.select('p').inject 'a', [] do |memo, value|
527
- @generator << '(value.className == "welcome")'
528
- end
529
- @generator.select('p').inject 'b', nil do |memo, value, index|
530
- @generator.call 'alert', memo
531
- @generator << '(value.className == "welcome")'
532
- end
533
-
534
- assert_equal <<-EOS.strip, @generator.to_s
535
- var a = $$("p").inject([], function(memo, value, index) {
536
- return (value.className == "welcome");
537
- });
538
- var b = $$("p").inject(null, function(memo, value, index) {
539
- alert(memo);
540
- return (value.className == "welcome");
541
- });
542
- EOS
543
- end
544
-
545
- def test_collection_proxy_with_pluck
546
- @generator.select('p').pluck('a', 'className')
547
- assert_equal %(var a = $$("p").pluck("className");), @generator.to_s
548
- end
549
-
550
- def test_collection_proxy_with_zip
551
- ActionView::Helpers::JavaScriptCollectionProxy.new(@generator, '[1, 2, 3]').zip('a', [4, 5, 6], [7, 8, 9])
552
- ActionView::Helpers::JavaScriptCollectionProxy.new(@generator, '[1, 2, 3]').zip('b', [4, 5, 6], [7, 8, 9]) do |array|
553
- @generator.call 'array.reverse'
554
- end
555
-
556
- assert_equal <<-EOS.strip, @generator.to_s
557
- var a = [1, 2, 3].zip([4,5,6], [7,8,9]);
558
- var b = [1, 2, 3].zip([4,5,6], [7,8,9], function(array) {
559
- return array.reverse();
560
- });
561
- EOS
562
- end
563
-
564
- def test_collection_proxy_with_find_all
565
- @generator.select('p').find_all 'a' do |value, index|
566
- @generator << '(value.className == "welcome")'
567
- end
568
-
569
- assert_equal <<-EOS.strip, @generator.to_s
570
- var a = $$("p").findAll(function(value, index) {
571
- return (value.className == "welcome");
572
- });
573
- EOS
574
- end
575
-
576
- def test_collection_proxy_with_in_groups_of
577
- @generator.select('p').in_groups_of('a', 3)
578
- @generator.select('p').in_groups_of('a', 3, 'x')
579
- assert_equal <<-EOS.strip, @generator.to_s
580
- var a = $$("p").inGroupsOf(3);
581
- var a = $$("p").inGroupsOf(3, "x");
582
- EOS
583
- end
584
-
585
- def test_collection_proxy_with_each_slice
586
- @generator.select('p').each_slice('a', 3)
587
- @generator.select('p').each_slice('a', 3) do |group, index|
588
- group.reverse
589
- end
590
-
591
- assert_equal <<-EOS.strip, @generator.to_s
592
- var a = $$("p").eachSlice(3);
593
- var a = $$("p").eachSlice(3, function(value, index) {
594
- return value.reverse();
595
- });
596
- EOS
597
- end
598
-
599
- def test_debug_rjs
600
- ActionView::Base.debug_rjs = true
601
- @generator['welcome'].replace_html 'Welcome'
602
- assert_equal "try {\n$(\"welcome\").update(\"Welcome\");\n} catch (e) { alert('RJS error:\\n\\n' + e.toString()); alert('$(\\\"welcome\\\").update(\\\"Welcome\\\");'); throw e }", @generator.to_s
603
- ensure
604
- ActionView::Base.debug_rjs = false
605
- end
606
-
607
- def test_literal
608
- literal = @generator.literal("function() {}")
609
- assert_equal "function() {}", ActiveSupport::JSON.encode(literal)
610
- assert_equal "", @generator.to_s
611
- end
612
-
613
- def test_class_proxy
614
- @generator.form.focus('my_field')
615
- assert_equal "Form.focus(\"my_field\");", @generator.to_s
616
- end
617
-
618
- def test_call_with_block
619
- @generator.call(:before)
620
- @generator.call(:my_method) do |p|
621
- p[:one].show
622
- p[:two].hide
623
- end
624
- @generator.call(:in_between)
625
- @generator.call(:my_method_with_arguments, true, "hello") do |p|
626
- p[:three].visual_effect(:highlight)
627
- end
628
- assert_equal "before();\nmy_method(function() { $(\"one\").show();\n$(\"two\").hide(); });\nin_between();\nmy_method_with_arguments(true, \"hello\", function() { $(\"three\").visualEffect(\"highlight\"); });", @generator.to_s
629
- end
630
-
631
- def test_class_proxy_call_with_block
632
- @generator.my_object.my_method do |p|
633
- p[:one].show
634
- p[:two].hide
635
- end
636
- assert_equal "MyObject.myMethod(function() { $(\"one\").show();\n$(\"two\").hide(); });", @generator.to_s
637
- end
638
- end
639
-