jets 1.4.11 → 1.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (1027) hide show
  1. checksums.yaml +4 -4
  2. data/.gitmodules +3 -0
  3. data/CHANGELOG.md +4 -0
  4. data/Gemfile.lock +6 -5
  5. data/jets.gemspec +3 -2
  6. data/lib/jets.rb +8 -2
  7. data/lib/jets/builders/tidy.rb +2 -1
  8. data/lib/jets/commands/db.rb +3 -3
  9. data/lib/jets/commands/db/tasks.rb +5 -4
  10. data/lib/jets/generator.rb +3 -2
  11. data/lib/jets/router.rb +29 -4
  12. data/lib/jets/router/scope.rb +30 -0
  13. data/lib/jets/version.rb +1 -1
  14. data/vendor/rails/Brewfile +13 -0
  15. data/vendor/rails/CODE_OF_CONDUCT.md +12 -0
  16. data/vendor/rails/CONTRIBUTING.md +49 -0
  17. data/vendor/rails/Gemfile +174 -0
  18. data/vendor/rails/Gemfile.lock +564 -0
  19. data/vendor/rails/MIT-LICENSE +20 -0
  20. data/vendor/rails/RAILS_VERSION +1 -0
  21. data/vendor/rails/README.md +97 -0
  22. data/vendor/rails/RELEASING_RAILS.md +225 -0
  23. data/vendor/rails/Rakefile +72 -0
  24. data/vendor/rails/actionpack/CHANGELOG.md +407 -0
  25. data/vendor/rails/actionpack/MIT-LICENSE +21 -0
  26. data/vendor/rails/actionpack/README.rdoc +57 -0
  27. data/vendor/rails/actionpack/Rakefile +40 -0
  28. data/vendor/rails/actionpack/actionpack.gemspec +38 -0
  29. data/vendor/rails/actionpack/bin/test +5 -0
  30. data/vendor/rails/actionpack/lib/abstract_controller.rb +27 -0
  31. data/vendor/rails/actionpack/lib/abstract_controller/asset_paths.rb +12 -0
  32. data/vendor/rails/actionpack/lib/abstract_controller/base.rb +265 -0
  33. data/vendor/rails/actionpack/lib/abstract_controller/caching.rb +66 -0
  34. data/vendor/rails/actionpack/lib/abstract_controller/caching/fragments.rb +166 -0
  35. data/vendor/rails/actionpack/lib/abstract_controller/callbacks.rb +212 -0
  36. data/vendor/rails/actionpack/lib/abstract_controller/collector.rb +43 -0
  37. data/vendor/rails/actionpack/lib/abstract_controller/error.rb +6 -0
  38. data/vendor/rails/actionpack/lib/abstract_controller/helpers.rb +194 -0
  39. data/vendor/rails/actionpack/lib/abstract_controller/logger.rb +14 -0
  40. data/vendor/rails/actionpack/lib/abstract_controller/railties/routes_helpers.rb +20 -0
  41. data/vendor/rails/actionpack/lib/abstract_controller/rendering.rb +127 -0
  42. data/vendor/rails/actionpack/lib/abstract_controller/translation.rb +31 -0
  43. data/vendor/rails/actionpack/lib/abstract_controller/url_for.rb +35 -0
  44. data/vendor/rails/actionpack/lib/action_controller.rb +66 -0
  45. data/vendor/rails/actionpack/lib/action_controller/api.rb +149 -0
  46. data/vendor/rails/actionpack/lib/action_controller/api/api_rendering.rb +16 -0
  47. data/vendor/rails/actionpack/lib/action_controller/base.rb +276 -0
  48. data/vendor/rails/actionpack/lib/action_controller/caching.rb +46 -0
  49. data/vendor/rails/actionpack/lib/action_controller/form_builder.rb +50 -0
  50. data/vendor/rails/actionpack/lib/action_controller/log_subscriber.rb +78 -0
  51. data/vendor/rails/actionpack/lib/action_controller/metal.rb +256 -0
  52. data/vendor/rails/actionpack/lib/action_controller/metal/basic_implicit_render.rb +13 -0
  53. data/vendor/rails/actionpack/lib/action_controller/metal/conditional_get.rb +274 -0
  54. data/vendor/rails/actionpack/lib/action_controller/metal/content_security_policy.rb +52 -0
  55. data/vendor/rails/actionpack/lib/action_controller/metal/cookies.rb +16 -0
  56. data/vendor/rails/actionpack/lib/action_controller/metal/data_streaming.rb +152 -0
  57. data/vendor/rails/actionpack/lib/action_controller/metal/etag_with_flash.rb +18 -0
  58. data/vendor/rails/actionpack/lib/action_controller/metal/etag_with_template_digest.rb +57 -0
  59. data/vendor/rails/actionpack/lib/action_controller/metal/exceptions.rb +53 -0
  60. data/vendor/rails/actionpack/lib/action_controller/metal/flash.rb +61 -0
  61. data/vendor/rails/actionpack/lib/action_controller/metal/force_ssl.rb +99 -0
  62. data/vendor/rails/actionpack/lib/action_controller/metal/head.rb +60 -0
  63. data/vendor/rails/actionpack/lib/action_controller/metal/helpers.rb +123 -0
  64. data/vendor/rails/actionpack/lib/action_controller/metal/http_authentication.rb +519 -0
  65. data/vendor/rails/actionpack/lib/action_controller/metal/implicit_render.rb +73 -0
  66. data/vendor/rails/actionpack/lib/action_controller/metal/instrumentation.rb +107 -0
  67. data/vendor/rails/actionpack/lib/action_controller/metal/live.rb +312 -0
  68. data/vendor/rails/actionpack/lib/action_controller/metal/mime_responds.rb +313 -0
  69. data/vendor/rails/actionpack/lib/action_controller/metal/parameter_encoding.rb +51 -0
  70. data/vendor/rails/actionpack/lib/action_controller/metal/params_wrapper.rb +293 -0
  71. data/vendor/rails/actionpack/lib/action_controller/metal/redirecting.rb +133 -0
  72. data/vendor/rails/actionpack/lib/action_controller/metal/renderers.rb +181 -0
  73. data/vendor/rails/actionpack/lib/action_controller/metal/rendering.rb +122 -0
  74. data/vendor/rails/actionpack/lib/action_controller/metal/request_forgery_protection.rb +445 -0
  75. data/vendor/rails/actionpack/lib/action_controller/metal/rescue.rb +28 -0
  76. data/vendor/rails/actionpack/lib/action_controller/metal/streaming.rb +223 -0
  77. data/vendor/rails/actionpack/lib/action_controller/metal/strong_parameters.rb +1086 -0
  78. data/vendor/rails/actionpack/lib/action_controller/metal/testing.rb +16 -0
  79. data/vendor/rails/actionpack/lib/action_controller/metal/url_for.rb +58 -0
  80. data/vendor/rails/actionpack/lib/action_controller/railtie.rb +89 -0
  81. data/vendor/rails/actionpack/lib/action_controller/railties/helpers.rb +24 -0
  82. data/vendor/rails/actionpack/lib/action_controller/renderer.rb +117 -0
  83. data/vendor/rails/actionpack/lib/action_controller/template_assertions.rb +11 -0
  84. data/vendor/rails/actionpack/lib/action_controller/test_case.rb +629 -0
  85. data/vendor/rails/actionpack/lib/action_dispatch.rb +112 -0
  86. data/vendor/rails/actionpack/lib/action_dispatch/http/cache.rb +220 -0
  87. data/vendor/rails/actionpack/lib/action_dispatch/http/content_security_policy.rb +272 -0
  88. data/vendor/rails/actionpack/lib/action_dispatch/http/filter_parameters.rb +84 -0
  89. data/vendor/rails/actionpack/lib/action_dispatch/http/filter_redirect.rb +37 -0
  90. data/vendor/rails/actionpack/lib/action_dispatch/http/headers.rb +132 -0
  91. data/vendor/rails/actionpack/lib/action_dispatch/http/mime_negotiation.rb +170 -0
  92. data/vendor/rails/actionpack/lib/action_dispatch/http/mime_type.rb +342 -0
  93. data/vendor/rails/actionpack/lib/action_dispatch/http/mime_types.rb +50 -0
  94. data/vendor/rails/actionpack/lib/action_dispatch/http/parameter_filter.rb +86 -0
  95. data/vendor/rails/actionpack/lib/action_dispatch/http/parameters.rb +126 -0
  96. data/vendor/rails/actionpack/lib/action_dispatch/http/rack_cache.rb +63 -0
  97. data/vendor/rails/actionpack/lib/action_dispatch/http/request.rb +430 -0
  98. data/vendor/rails/actionpack/lib/action_dispatch/http/response.rb +520 -0
  99. data/vendor/rails/actionpack/lib/action_dispatch/http/upload.rb +84 -0
  100. data/vendor/rails/actionpack/lib/action_dispatch/http/url.rb +350 -0
  101. data/vendor/rails/actionpack/lib/action_dispatch/journey.rb +7 -0
  102. data/vendor/rails/actionpack/lib/action_dispatch/journey/formatter.rb +189 -0
  103. data/vendor/rails/actionpack/lib/action_dispatch/journey/gtg/builder.rb +164 -0
  104. data/vendor/rails/actionpack/lib/action_dispatch/journey/gtg/simulator.rb +41 -0
  105. data/vendor/rails/actionpack/lib/action_dispatch/journey/gtg/transition_table.rb +158 -0
  106. data/vendor/rails/actionpack/lib/action_dispatch/journey/nfa/builder.rb +78 -0
  107. data/vendor/rails/actionpack/lib/action_dispatch/journey/nfa/dot.rb +36 -0
  108. data/vendor/rails/actionpack/lib/action_dispatch/journey/nfa/simulator.rb +49 -0
  109. data/vendor/rails/actionpack/lib/action_dispatch/journey/nfa/transition_table.rb +120 -0
  110. data/vendor/rails/actionpack/lib/action_dispatch/journey/nodes/node.rb +140 -0
  111. data/vendor/rails/actionpack/lib/action_dispatch/journey/parser.rb +199 -0
  112. data/vendor/rails/actionpack/lib/action_dispatch/journey/parser.y +50 -0
  113. data/vendor/rails/actionpack/lib/action_dispatch/journey/parser_extras.rb +31 -0
  114. data/vendor/rails/actionpack/lib/action_dispatch/journey/path/pattern.rb +198 -0
  115. data/vendor/rails/actionpack/lib/action_dispatch/journey/route.rb +203 -0
  116. data/vendor/rails/actionpack/lib/action_dispatch/journey/router.rb +156 -0
  117. data/vendor/rails/actionpack/lib/action_dispatch/journey/router/utils.rb +102 -0
  118. data/vendor/rails/actionpack/lib/action_dispatch/journey/routes.rb +82 -0
  119. data/vendor/rails/actionpack/lib/action_dispatch/journey/scanner.rb +64 -0
  120. data/vendor/rails/actionpack/lib/action_dispatch/journey/visitors.rb +268 -0
  121. data/vendor/rails/actionpack/lib/action_dispatch/journey/visualizer/fsm.css +30 -0
  122. data/vendor/rails/actionpack/lib/action_dispatch/journey/visualizer/fsm.js +134 -0
  123. data/vendor/rails/actionpack/lib/action_dispatch/journey/visualizer/index.html.erb +52 -0
  124. data/vendor/rails/actionpack/lib/action_dispatch/middleware/callbacks.rb +36 -0
  125. data/vendor/rails/actionpack/lib/action_dispatch/middleware/cookies.rb +685 -0
  126. data/vendor/rails/actionpack/lib/action_dispatch/middleware/debug_exceptions.rb +205 -0
  127. data/vendor/rails/actionpack/lib/action_dispatch/middleware/debug_locks.rb +124 -0
  128. data/vendor/rails/actionpack/lib/action_dispatch/middleware/exception_wrapper.rb +147 -0
  129. data/vendor/rails/actionpack/lib/action_dispatch/middleware/executor.rb +21 -0
  130. data/vendor/rails/actionpack/lib/action_dispatch/middleware/flash.rb +300 -0
  131. data/vendor/rails/actionpack/lib/action_dispatch/middleware/public_exceptions.rb +57 -0
  132. data/vendor/rails/actionpack/lib/action_dispatch/middleware/reloader.rb +12 -0
  133. data/vendor/rails/actionpack/lib/action_dispatch/middleware/remote_ip.rb +183 -0
  134. data/vendor/rails/actionpack/lib/action_dispatch/middleware/request_id.rb +43 -0
  135. data/vendor/rails/actionpack/lib/action_dispatch/middleware/session/abstract_store.rb +92 -0
  136. data/vendor/rails/actionpack/lib/action_dispatch/middleware/session/cache_store.rb +54 -0
  137. data/vendor/rails/actionpack/lib/action_dispatch/middleware/session/cookie_store.rb +117 -0
  138. data/vendor/rails/actionpack/lib/action_dispatch/middleware/session/mem_cache_store.rb +28 -0
  139. data/vendor/rails/actionpack/lib/action_dispatch/middleware/show_exceptions.rb +62 -0
  140. data/vendor/rails/actionpack/lib/action_dispatch/middleware/ssl.rb +150 -0
  141. data/vendor/rails/actionpack/lib/action_dispatch/middleware/stack.rb +116 -0
  142. data/vendor/rails/actionpack/lib/action_dispatch/middleware/static.rb +130 -0
  143. data/vendor/rails/actionpack/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb +22 -0
  144. data/vendor/rails/actionpack/lib/action_dispatch/middleware/templates/rescues/_request_and_response.text.erb +23 -0
  145. data/vendor/rails/actionpack/lib/action_dispatch/middleware/templates/rescues/_source.html.erb +27 -0
  146. data/vendor/rails/actionpack/lib/action_dispatch/middleware/templates/rescues/_source.text.erb +8 -0
  147. data/vendor/rails/actionpack/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb +52 -0
  148. data/vendor/rails/actionpack/lib/action_dispatch/middleware/templates/rescues/_trace.text.erb +9 -0
  149. data/vendor/rails/actionpack/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb +16 -0
  150. data/vendor/rails/actionpack/lib/action_dispatch/middleware/templates/rescues/diagnostics.text.erb +9 -0
  151. data/vendor/rails/actionpack/lib/action_dispatch/middleware/templates/rescues/invalid_statement.html.erb +21 -0
  152. data/vendor/rails/actionpack/lib/action_dispatch/middleware/templates/rescues/invalid_statement.text.erb +13 -0
  153. data/vendor/rails/actionpack/lib/action_dispatch/middleware/templates/rescues/layout.erb +161 -0
  154. data/vendor/rails/actionpack/lib/action_dispatch/middleware/templates/rescues/missing_template.html.erb +11 -0
  155. data/vendor/rails/actionpack/lib/action_dispatch/middleware/templates/rescues/missing_template.text.erb +3 -0
  156. data/vendor/rails/actionpack/lib/action_dispatch/middleware/templates/rescues/routing_error.html.erb +32 -0
  157. data/vendor/rails/actionpack/lib/action_dispatch/middleware/templates/rescues/routing_error.text.erb +11 -0
  158. data/vendor/rails/actionpack/lib/action_dispatch/middleware/templates/rescues/template_error.html.erb +20 -0
  159. data/vendor/rails/actionpack/lib/action_dispatch/middleware/templates/rescues/template_error.text.erb +7 -0
  160. data/vendor/rails/actionpack/lib/action_dispatch/middleware/templates/rescues/unknown_action.html.erb +6 -0
  161. data/vendor/rails/actionpack/lib/action_dispatch/middleware/templates/rescues/unknown_action.text.erb +3 -0
  162. data/vendor/rails/actionpack/lib/action_dispatch/middleware/templates/routes/_route.html.erb +16 -0
  163. data/vendor/rails/actionpack/lib/action_dispatch/middleware/templates/routes/_table.html.erb +200 -0
  164. data/vendor/rails/actionpack/lib/action_dispatch/railtie.rb +55 -0
  165. data/vendor/rails/actionpack/lib/action_dispatch/request/session.rb +234 -0
  166. data/vendor/rails/actionpack/lib/action_dispatch/request/utils.rb +78 -0
  167. data/vendor/rails/actionpack/lib/action_dispatch/routing.rb +260 -0
  168. data/vendor/rails/actionpack/lib/action_dispatch/routing/endpoint.rb +17 -0
  169. data/vendor/rails/actionpack/lib/action_dispatch/routing/inspector.rb +225 -0
  170. data/vendor/rails/actionpack/lib/action_dispatch/routing/mapper.rb +2267 -0
  171. data/vendor/rails/actionpack/lib/action_dispatch/routing/polymorphic_routes.rb +352 -0
  172. data/vendor/rails/actionpack/lib/action_dispatch/routing/redirection.rb +201 -0
  173. data/vendor/rails/actionpack/lib/action_dispatch/routing/route_set.rb +890 -0
  174. data/vendor/rails/actionpack/lib/action_dispatch/routing/routes_proxy.rb +69 -0
  175. data/vendor/rails/actionpack/lib/action_dispatch/routing/url_for.rb +236 -0
  176. data/vendor/rails/actionpack/lib/action_dispatch/system_test_case.rb +147 -0
  177. data/vendor/rails/actionpack/lib/action_dispatch/system_testing/browser.rb +49 -0
  178. data/vendor/rails/actionpack/lib/action_dispatch/system_testing/driver.rb +59 -0
  179. data/vendor/rails/actionpack/lib/action_dispatch/system_testing/server.rb +31 -0
  180. data/vendor/rails/actionpack/lib/action_dispatch/system_testing/test_helpers/screenshot_helper.rb +96 -0
  181. data/vendor/rails/actionpack/lib/action_dispatch/system_testing/test_helpers/setup_and_teardown.rb +31 -0
  182. data/vendor/rails/actionpack/lib/action_dispatch/system_testing/test_helpers/undef_methods.rb +26 -0
  183. data/vendor/rails/actionpack/lib/action_dispatch/testing/assertion_response.rb +47 -0
  184. data/vendor/rails/actionpack/lib/action_dispatch/testing/assertions.rb +24 -0
  185. data/vendor/rails/actionpack/lib/action_dispatch/testing/assertions/response.rb +107 -0
  186. data/vendor/rails/actionpack/lib/action_dispatch/testing/assertions/routing.rb +222 -0
  187. data/vendor/rails/actionpack/lib/action_dispatch/testing/integration.rb +652 -0
  188. data/vendor/rails/actionpack/lib/action_dispatch/testing/request_encoder.rb +55 -0
  189. data/vendor/rails/actionpack/lib/action_dispatch/testing/test_process.rb +50 -0
  190. data/vendor/rails/actionpack/lib/action_dispatch/testing/test_request.rb +71 -0
  191. data/vendor/rails/actionpack/lib/action_dispatch/testing/test_response.rb +53 -0
  192. data/vendor/rails/actionpack/lib/action_pack.rb +26 -0
  193. data/vendor/rails/actionpack/lib/action_pack/gem_version.rb +17 -0
  194. data/vendor/rails/actionpack/lib/action_pack/version.rb +10 -0
  195. data/vendor/rails/actionpack/test/abstract/callbacks_test.rb +270 -0
  196. data/vendor/rails/actionpack/test/abstract/collector_test.rb +65 -0
  197. data/vendor/rails/actionpack/test/abstract/translation_test.rb +79 -0
  198. data/vendor/rails/actionpack/test/abstract_unit.rb +457 -0
  199. data/vendor/rails/actionpack/test/assertions/response_assertions_test.rb +141 -0
  200. data/vendor/rails/actionpack/test/controller/action_pack_assertions_test.rb +493 -0
  201. data/vendor/rails/actionpack/test/controller/api/conditional_get_test.rb +59 -0
  202. data/vendor/rails/actionpack/test/controller/api/data_streaming_test.rb +28 -0
  203. data/vendor/rails/actionpack/test/controller/api/force_ssl_test.rb +22 -0
  204. data/vendor/rails/actionpack/test/controller/api/implicit_render_test.rb +17 -0
  205. data/vendor/rails/actionpack/test/controller/api/params_wrapper_test.rb +28 -0
  206. data/vendor/rails/actionpack/test/controller/api/redirect_to_test.rb +21 -0
  207. data/vendor/rails/actionpack/test/controller/api/renderers_test.rb +50 -0
  208. data/vendor/rails/actionpack/test/controller/api/url_for_test.rb +22 -0
  209. data/vendor/rails/actionpack/test/controller/api/with_cookies_test.rb +23 -0
  210. data/vendor/rails/actionpack/test/controller/api/with_helpers_test.rb +44 -0
  211. data/vendor/rails/actionpack/test/controller/base_test.rb +323 -0
  212. data/vendor/rails/actionpack/test/controller/caching_test.rb +511 -0
  213. data/vendor/rails/actionpack/test/controller/content_type_test.rb +169 -0
  214. data/vendor/rails/actionpack/test/controller/controller_fixtures/app/controllers/admin/user_controller.rb +0 -0
  215. data/vendor/rails/actionpack/test/controller/controller_fixtures/app/controllers/user_controller.rb +0 -0
  216. data/vendor/rails/actionpack/test/controller/controller_fixtures/vendor/plugins/bad_plugin/lib/plugin_controller.rb +0 -0
  217. data/vendor/rails/actionpack/test/controller/default_url_options_with_before_action_test.rb +28 -0
  218. data/vendor/rails/actionpack/test/controller/filters_test.rb +1050 -0
  219. data/vendor/rails/actionpack/test/controller/flash_hash_test.rb +216 -0
  220. data/vendor/rails/actionpack/test/controller/flash_test.rb +373 -0
  221. data/vendor/rails/actionpack/test/controller/force_ssl_test.rb +333 -0
  222. data/vendor/rails/actionpack/test/controller/form_builder_test.rb +19 -0
  223. data/vendor/rails/actionpack/test/controller/helper_test.rb +295 -0
  224. data/vendor/rails/actionpack/test/controller/http_basic_authentication_test.rb +179 -0
  225. data/vendor/rails/actionpack/test/controller/http_digest_authentication_test.rb +282 -0
  226. data/vendor/rails/actionpack/test/controller/http_token_authentication_test.rb +216 -0
  227. data/vendor/rails/actionpack/test/controller/integration_test.rb +1136 -0
  228. data/vendor/rails/actionpack/test/controller/live_stream_test.rb +518 -0
  229. data/vendor/rails/actionpack/test/controller/localized_templates_test.rb +48 -0
  230. data/vendor/rails/actionpack/test/controller/log_subscriber_test.rb +371 -0
  231. data/vendor/rails/actionpack/test/controller/metal/renderers_test.rb +50 -0
  232. data/vendor/rails/actionpack/test/controller/metal_test.rb +32 -0
  233. data/vendor/rails/actionpack/test/controller/mime/accept_format_test.rb +94 -0
  234. data/vendor/rails/actionpack/test/controller/mime/respond_to_test.rb +843 -0
  235. data/vendor/rails/actionpack/test/controller/new_base/bare_metal_test.rb +184 -0
  236. data/vendor/rails/actionpack/test/controller/new_base/base_test.rb +131 -0
  237. data/vendor/rails/actionpack/test/controller/new_base/content_negotiation_test.rb +28 -0
  238. data/vendor/rails/actionpack/test/controller/new_base/content_type_test.rb +116 -0
  239. data/vendor/rails/actionpack/test/controller/new_base/middleware_test.rb +112 -0
  240. data/vendor/rails/actionpack/test/controller/new_base/render_action_test.rb +314 -0
  241. data/vendor/rails/actionpack/test/controller/new_base/render_body_test.rb +172 -0
  242. data/vendor/rails/actionpack/test/controller/new_base/render_context_test.rb +54 -0
  243. data/vendor/rails/actionpack/test/controller/new_base/render_file_test.rb +72 -0
  244. data/vendor/rails/actionpack/test/controller/new_base/render_html_test.rb +192 -0
  245. data/vendor/rails/actionpack/test/controller/new_base/render_implicit_action_test.rb +59 -0
  246. data/vendor/rails/actionpack/test/controller/new_base/render_layout_test.rb +128 -0
  247. data/vendor/rails/actionpack/test/controller/new_base/render_partial_test.rb +62 -0
  248. data/vendor/rails/actionpack/test/controller/new_base/render_plain_test.rb +170 -0
  249. data/vendor/rails/actionpack/test/controller/new_base/render_streaming_test.rb +116 -0
  250. data/vendor/rails/actionpack/test/controller/new_base/render_template_test.rb +240 -0
  251. data/vendor/rails/actionpack/test/controller/new_base/render_test.rb +142 -0
  252. data/vendor/rails/actionpack/test/controller/new_base/render_xml_test.rb +12 -0
  253. data/vendor/rails/actionpack/test/controller/output_escaping_test.rb +17 -0
  254. data/vendor/rails/actionpack/test/controller/parameter_encoding_test.rb +52 -0
  255. data/vendor/rails/actionpack/test/controller/parameters/accessors_test.rb +324 -0
  256. data/vendor/rails/actionpack/test/controller/parameters/always_permitted_parameters_test.rb +30 -0
  257. data/vendor/rails/actionpack/test/controller/parameters/dup_test.rb +67 -0
  258. data/vendor/rails/actionpack/test/controller/parameters/log_on_unpermitted_params_test.rb +70 -0
  259. data/vendor/rails/actionpack/test/controller/parameters/multi_parameter_attributes_test.rb +39 -0
  260. data/vendor/rails/actionpack/test/controller/parameters/mutators_test.rb +122 -0
  261. data/vendor/rails/actionpack/test/controller/parameters/nested_parameters_permit_test.rb +184 -0
  262. data/vendor/rails/actionpack/test/controller/parameters/parameters_permit_test.rb +516 -0
  263. data/vendor/rails/actionpack/test/controller/parameters/raise_on_unpermitted_params_test.rb +33 -0
  264. data/vendor/rails/actionpack/test/controller/parameters/serialization_test.rb +55 -0
  265. data/vendor/rails/actionpack/test/controller/params_wrapper_test.rb +422 -0
  266. data/vendor/rails/actionpack/test/controller/permitted_params_test.rb +27 -0
  267. data/vendor/rails/actionpack/test/controller/redirect_test.rb +395 -0
  268. data/vendor/rails/actionpack/test/controller/render_js_test.rb +36 -0
  269. data/vendor/rails/actionpack/test/controller/render_json_test.rb +137 -0
  270. data/vendor/rails/actionpack/test/controller/render_test.rb +843 -0
  271. data/vendor/rails/actionpack/test/controller/render_xml_test.rb +102 -0
  272. data/vendor/rails/actionpack/test/controller/renderer_test.rb +136 -0
  273. data/vendor/rails/actionpack/test/controller/renderers_test.rb +91 -0
  274. data/vendor/rails/actionpack/test/controller/request/test_request_test.rb +42 -0
  275. data/vendor/rails/actionpack/test/controller/request_forgery_protection_test.rb +1013 -0
  276. data/vendor/rails/actionpack/test/controller/required_params_test.rb +100 -0
  277. data/vendor/rails/actionpack/test/controller/rescue_test.rb +364 -0
  278. data/vendor/rails/actionpack/test/controller/resources_test.rb +1369 -0
  279. data/vendor/rails/actionpack/test/controller/routing_test.rb +2108 -0
  280. data/vendor/rails/actionpack/test/controller/runner_test.rb +24 -0
  281. data/vendor/rails/actionpack/test/controller/send_file_test.rb +259 -0
  282. data/vendor/rails/actionpack/test/controller/show_exceptions_test.rb +114 -0
  283. data/vendor/rails/actionpack/test/controller/streaming_test.rb +28 -0
  284. data/vendor/rails/actionpack/test/controller/test_case_test.rb +1157 -0
  285. data/vendor/rails/actionpack/test/controller/url_for_integration_test.rb +192 -0
  286. data/vendor/rails/actionpack/test/controller/url_for_test.rb +519 -0
  287. data/vendor/rails/actionpack/test/controller/url_rewriter_test.rb +92 -0
  288. data/vendor/rails/actionpack/test/controller/webservice_test.rb +135 -0
  289. data/vendor/rails/actionpack/test/dispatch/callbacks_test.rb +47 -0
  290. data/vendor/rails/actionpack/test/dispatch/content_security_policy_test.rb +525 -0
  291. data/vendor/rails/actionpack/test/dispatch/cookies_test.rb +1345 -0
  292. data/vendor/rails/actionpack/test/dispatch/debug_exceptions_test.rb +502 -0
  293. data/vendor/rails/actionpack/test/dispatch/debug_locks_test.rb +38 -0
  294. data/vendor/rails/actionpack/test/dispatch/exception_wrapper_test.rb +120 -0
  295. data/vendor/rails/actionpack/test/dispatch/executor_test.rb +136 -0
  296. data/vendor/rails/actionpack/test/dispatch/header_test.rb +169 -0
  297. data/vendor/rails/actionpack/test/dispatch/live_response_test.rb +98 -0
  298. data/vendor/rails/actionpack/test/dispatch/mapper_test.rb +210 -0
  299. data/vendor/rails/actionpack/test/dispatch/middleware_stack_test.rb +115 -0
  300. data/vendor/rails/actionpack/test/dispatch/mime_type_test.rb +187 -0
  301. data/vendor/rails/actionpack/test/dispatch/mount_test.rb +95 -0
  302. data/vendor/rails/actionpack/test/dispatch/prefix_generation_test.rb +463 -0
  303. data/vendor/rails/actionpack/test/dispatch/rack_cache_test.rb +23 -0
  304. data/vendor/rails/actionpack/test/dispatch/reloader_test.rb +167 -0
  305. data/vendor/rails/actionpack/test/dispatch/request/json_params_parsing_test.rb +207 -0
  306. data/vendor/rails/actionpack/test/dispatch/request/multipart_params_parsing_test.rb +202 -0
  307. data/vendor/rails/actionpack/test/dispatch/request/query_string_parsing_test.rb +176 -0
  308. data/vendor/rails/actionpack/test/dispatch/request/session_test.rb +165 -0
  309. data/vendor/rails/actionpack/test/dispatch/request/url_encoded_params_parsing_test.rb +181 -0
  310. data/vendor/rails/actionpack/test/dispatch/request_id_test.rb +75 -0
  311. data/vendor/rails/actionpack/test/dispatch/request_test.rb +1307 -0
  312. data/vendor/rails/actionpack/test/dispatch/response_test.rb +542 -0
  313. data/vendor/rails/actionpack/test/dispatch/routing/concerns_test.rb +124 -0
  314. data/vendor/rails/actionpack/test/dispatch/routing/custom_url_helpers_test.rb +333 -0
  315. data/vendor/rails/actionpack/test/dispatch/routing/inspector_test.rb +425 -0
  316. data/vendor/rails/actionpack/test/dispatch/routing/ipv6_redirect_test.rb +46 -0
  317. data/vendor/rails/actionpack/test/dispatch/routing/route_set_test.rb +166 -0
  318. data/vendor/rails/actionpack/test/dispatch/routing_assertions_test.rb +209 -0
  319. data/vendor/rails/actionpack/test/dispatch/routing_test.rb +5112 -0
  320. data/vendor/rails/actionpack/test/dispatch/runner_test.rb +19 -0
  321. data/vendor/rails/actionpack/test/dispatch/session/abstract_store_test.rb +58 -0
  322. data/vendor/rails/actionpack/test/dispatch/session/cache_store_test.rb +183 -0
  323. data/vendor/rails/actionpack/test/dispatch/session/cookie_store_test.rb +417 -0
  324. data/vendor/rails/actionpack/test/dispatch/session/mem_cache_store_test.rb +205 -0
  325. data/vendor/rails/actionpack/test/dispatch/session/test_session_test.rb +65 -0
  326. data/vendor/rails/actionpack/test/dispatch/show_exceptions_test.rb +138 -0
  327. data/vendor/rails/actionpack/test/dispatch/ssl_test.rb +228 -0
  328. data/vendor/rails/actionpack/test/dispatch/static_test.rb +318 -0
  329. data/vendor/rails/actionpack/test/dispatch/system_testing/driver_test.rb +54 -0
  330. data/vendor/rails/actionpack/test/dispatch/system_testing/screenshot_helper_test.rb +81 -0
  331. data/vendor/rails/actionpack/test/dispatch/system_testing/server_test.rb +32 -0
  332. data/vendor/rails/actionpack/test/dispatch/system_testing/system_test_case_test.rb +84 -0
  333. data/vendor/rails/actionpack/test/dispatch/test_request_test.rb +131 -0
  334. data/vendor/rails/actionpack/test/dispatch/test_response_test.rb +37 -0
  335. data/vendor/rails/actionpack/test/dispatch/uploaded_file_test.rb +113 -0
  336. data/vendor/rails/actionpack/test/dispatch/url_generation_test.rb +141 -0
  337. data/vendor/rails/actionpack/test/fixtures/_top_level_partial_only.erb +1 -0
  338. data/vendor/rails/actionpack/test/fixtures/alternate_helpers/foo_helper.rb +5 -0
  339. data/vendor/rails/actionpack/test/fixtures/bad_customers/_bad_customer.html.erb +1 -0
  340. data/vendor/rails/actionpack/test/fixtures/collection_cache/index.html.erb +1 -0
  341. data/vendor/rails/actionpack/test/fixtures/company.rb +11 -0
  342. data/vendor/rails/actionpack/test/fixtures/customers/_commented_customer.html.erb +5 -0
  343. data/vendor/rails/actionpack/test/fixtures/customers/_customer.html.erb +4 -0
  344. data/vendor/rails/actionpack/test/fixtures/filter_test/implicit_actions/edit.html.erb +1 -0
  345. data/vendor/rails/actionpack/test/fixtures/filter_test/implicit_actions/show.html.erb +1 -0
  346. data/vendor/rails/actionpack/test/fixtures/functional_caching/_formatted_partial.html.erb +1 -0
  347. data/vendor/rails/actionpack/test/fixtures/functional_caching/_partial.erb +3 -0
  348. data/vendor/rails/actionpack/test/fixtures/functional_caching/formatted_fragment_cached.html.erb +3 -0
  349. data/vendor/rails/actionpack/test/fixtures/functional_caching/formatted_fragment_cached.xml.builder +5 -0
  350. data/vendor/rails/actionpack/test/fixtures/functional_caching/formatted_fragment_cached_with_variant.html+phone.erb +3 -0
  351. data/vendor/rails/actionpack/test/fixtures/functional_caching/fragment_cached.html.erb +3 -0
  352. data/vendor/rails/actionpack/test/fixtures/functional_caching/fragment_cached_with_options.html.erb +3 -0
  353. data/vendor/rails/actionpack/test/fixtures/functional_caching/fragment_cached_without_digest.html.erb +3 -0
  354. data/vendor/rails/actionpack/test/fixtures/functional_caching/html_fragment_cached_with_partial.html.erb +1 -0
  355. data/vendor/rails/actionpack/test/fixtures/functional_caching/inline_fragment_cached.html.erb +2 -0
  356. data/vendor/rails/actionpack/test/fixtures/functional_caching/xml_fragment_cached_with_html_partial.xml.builder +5 -0
  357. data/vendor/rails/actionpack/test/fixtures/helpers/abc_helper.rb +5 -0
  358. data/vendor/rails/actionpack/test/fixtures/helpers/fun/games_helper.rb +7 -0
  359. data/vendor/rails/actionpack/test/fixtures/helpers/fun/pdf_helper.rb +7 -0
  360. data/vendor/rails/actionpack/test/fixtures/helpers/just_me_helper.rb +5 -0
  361. data/vendor/rails/actionpack/test/fixtures/helpers/me_too_helper.rb +5 -0
  362. data/vendor/rails/actionpack/test/fixtures/helpers1_pack/pack1_helper.rb +7 -0
  363. data/vendor/rails/actionpack/test/fixtures/helpers2_pack/pack2_helper.rb +7 -0
  364. data/vendor/rails/actionpack/test/fixtures/helpers_typo/admin/users_helper.rb +6 -0
  365. data/vendor/rails/actionpack/test/fixtures/implicit_render_test/empty_action_with_mobile_variant.html+mobile.erb +1 -0
  366. data/vendor/rails/actionpack/test/fixtures/implicit_render_test/empty_action_with_template.html.erb +1 -0
  367. data/vendor/rails/actionpack/test/fixtures/layouts/_customers.erb +1 -0
  368. data/vendor/rails/actionpack/test/fixtures/layouts/block_with_layout.erb +3 -0
  369. data/vendor/rails/actionpack/test/fixtures/layouts/builder.builder +3 -0
  370. data/vendor/rails/actionpack/test/fixtures/layouts/partial_with_layout.erb +3 -0
  371. data/vendor/rails/actionpack/test/fixtures/layouts/standard.html.erb +1 -0
  372. data/vendor/rails/actionpack/test/fixtures/layouts/talk_from_action.erb +2 -0
  373. data/vendor/rails/actionpack/test/fixtures/layouts/with_html_partial.html.erb +1 -0
  374. data/vendor/rails/actionpack/test/fixtures/layouts/xhr.html.erb +2 -0
  375. data/vendor/rails/actionpack/test/fixtures/layouts/yield.erb +2 -0
  376. data/vendor/rails/actionpack/test/fixtures/load_me.rb +4 -0
  377. data/vendor/rails/actionpack/test/fixtures/localized/hello_world.de.html +1 -0
  378. data/vendor/rails/actionpack/test/fixtures/localized/hello_world.en.html +1 -0
  379. data/vendor/rails/actionpack/test/fixtures/localized/hello_world.it.erb +1 -0
  380. data/vendor/rails/actionpack/test/fixtures/multipart/binary_file +0 -0
  381. data/vendor/rails/actionpack/test/fixtures/multipart/boundary_problem_file +10 -0
  382. data/vendor/rails/actionpack/test/fixtures/multipart/bracketed_param +5 -0
  383. data/vendor/rails/actionpack/test/fixtures/multipart/bracketed_utf8_param +5 -0
  384. data/vendor/rails/actionpack/test/fixtures/multipart/empty +10 -0
  385. data/vendor/rails/actionpack/test/fixtures/multipart/hello.txt +1 -0
  386. data/vendor/rails/actionpack/test/fixtures/multipart/large_text_file +10 -0
  387. data/vendor/rails/actionpack/test/fixtures/multipart/mixed_files +0 -0
  388. data/vendor/rails/actionpack/test/fixtures/multipart/none +9 -0
  389. data/vendor/rails/actionpack/test/fixtures/multipart/ruby_on_rails.jpg +0 -0
  390. data/vendor/rails/actionpack/test/fixtures/multipart/single_parameter +5 -0
  391. data/vendor/rails/actionpack/test/fixtures/multipart/single_utf8_param +5 -0
  392. data/vendor/rails/actionpack/test/fixtures/multipart/text_file +10 -0
  393. data/vendor/rails/actionpack/test/fixtures/multipart/utf8_filename +10 -0
  394. data/vendor/rails/actionpack/test/fixtures/namespaced/implicit_render_test/hello_world.erb +1 -0
  395. data/vendor/rails/actionpack/test/fixtures/old_content_type/render_default_content_types_for_respond_to.xml.erb +1 -0
  396. data/vendor/rails/actionpack/test/fixtures/old_content_type/render_default_for_builder.builder +1 -0
  397. data/vendor/rails/actionpack/test/fixtures/old_content_type/render_default_for_erb.erb +1 -0
  398. data/vendor/rails/actionpack/test/fixtures/post_test/layouts/post.html.erb +1 -0
  399. data/vendor/rails/actionpack/test/fixtures/post_test/layouts/super_post.iphone.erb +1 -0
  400. data/vendor/rails/actionpack/test/fixtures/post_test/post/index.html.erb +1 -0
  401. data/vendor/rails/actionpack/test/fixtures/post_test/post/index.iphone.erb +1 -0
  402. data/vendor/rails/actionpack/test/fixtures/post_test/super_post/index.html.erb +1 -0
  403. data/vendor/rails/actionpack/test/fixtures/post_test/super_post/index.iphone.erb +1 -0
  404. data/vendor/rails/actionpack/test/fixtures/public/400.html +1 -0
  405. data/vendor/rails/actionpack/test/fixtures/public/404.html +1 -0
  406. data/vendor/rails/actionpack/test/fixtures/public/500.da.html +1 -0
  407. data/vendor/rails/actionpack/test/fixtures/public/500.html +1 -0
  408. data/vendor/rails/actionpack/test/fixtures/public/bar.html +1 -0
  409. data/vendor/rails/actionpack/test/fixtures/public/bar/index.html +1 -0
  410. data/vendor/rails/actionpack/test/fixtures/public/foo/bar.html +1 -0
  411. data/vendor/rails/actionpack/test/fixtures/public/foo/baz.css +3 -0
  412. data/vendor/rails/actionpack/test/fixtures/public/foo/index.html +1 -0
  413. data/vendor/rails/actionpack/test/fixtures/public/foo/other-index.html +1 -0
  414. data/vendor/rails/actionpack/test/fixtures/public/foo//343/201/223/343/202/223/343/201/253/343/201/241/343/201/257.html +1 -0
  415. data/vendor/rails/actionpack/test/fixtures/public/foo//343/201/225/343/202/210/343/201/206/343/201/252/343/202/211.html +1 -0
  416. data/vendor/rails/actionpack/test/fixtures/public/foo//343/201/225/343/202/210/343/201/206/343/201/252/343/202/211.html.gz +0 -0
  417. data/vendor/rails/actionpack/test/fixtures/public/gzip/application-a71b3024f80aea3181c09774ca17e712.js +4 -0
  418. data/vendor/rails/actionpack/test/fixtures/public/gzip/application-a71b3024f80aea3181c09774ca17e712.js.gz +0 -0
  419. data/vendor/rails/actionpack/test/fixtures/public/gzip/foo.zoo +4 -0
  420. data/vendor/rails/actionpack/test/fixtures/public/gzip/foo.zoo.gz +0 -0
  421. data/vendor/rails/actionpack/test/fixtures/public/index.html +1 -0
  422. data/vendor/rails/actionpack/test/fixtures/public/other-index.html +1 -0
  423. data/vendor/rails/actionpack/test/fixtures/respond_to/all_types_with_layout.html.erb +1 -0
  424. data/vendor/rails/actionpack/test/fixtures/respond_to/custom_constant_handling_without_block.mobile.erb +1 -0
  425. data/vendor/rails/actionpack/test/fixtures/respond_to/iphone_with_html_response_type.html.erb +1 -0
  426. data/vendor/rails/actionpack/test/fixtures/respond_to/iphone_with_html_response_type.iphone.erb +1 -0
  427. data/vendor/rails/actionpack/test/fixtures/respond_to/layouts/missing.html.erb +1 -0
  428. data/vendor/rails/actionpack/test/fixtures/respond_to/layouts/standard.html.erb +1 -0
  429. data/vendor/rails/actionpack/test/fixtures/respond_to/layouts/standard.iphone.erb +1 -0
  430. data/vendor/rails/actionpack/test/fixtures/respond_to/using_defaults.html.erb +1 -0
  431. data/vendor/rails/actionpack/test/fixtures/respond_to/using_defaults.xml.builder +1 -0
  432. data/vendor/rails/actionpack/test/fixtures/respond_to/using_defaults_with_all.html.erb +1 -0
  433. data/vendor/rails/actionpack/test/fixtures/respond_to/using_defaults_with_type_list.html.erb +1 -0
  434. data/vendor/rails/actionpack/test/fixtures/respond_to/using_defaults_with_type_list.xml.builder +1 -0
  435. data/vendor/rails/actionpack/test/fixtures/respond_to/variant_any_implicit_render.html+phablet.erb +1 -0
  436. data/vendor/rails/actionpack/test/fixtures/respond_to/variant_any_implicit_render.html+tablet.erb +1 -0
  437. data/vendor/rails/actionpack/test/fixtures/respond_to/variant_inline_syntax_without_block.html+phone.erb +1 -0
  438. data/vendor/rails/actionpack/test/fixtures/respond_to/variant_plus_none_for_format.html.erb +1 -0
  439. data/vendor/rails/actionpack/test/fixtures/respond_to/variant_with_implicit_template_rendering.html+mobile.erb +1 -0
  440. data/vendor/rails/actionpack/test/fixtures/ruby_template.ruby +2 -0
  441. data/vendor/rails/actionpack/test/fixtures/session_autoload_test/session_autoload_test/foo.rb +12 -0
  442. data/vendor/rails/actionpack/test/fixtures/shared.html.erb +1 -0
  443. data/vendor/rails/actionpack/test/fixtures/star_star_mime/index.js.erb +1 -0
  444. data/vendor/rails/actionpack/test/fixtures/test/_partial.erb +1 -0
  445. data/vendor/rails/actionpack/test/fixtures/test/_partial.html.erb +1 -0
  446. data/vendor/rails/actionpack/test/fixtures/test/_partial.js.erb +1 -0
  447. data/vendor/rails/actionpack/test/fixtures/test/dot.directory/render_file_with_ivar.erb +1 -0
  448. data/vendor/rails/actionpack/test/fixtures/test/formatted_xml_erb.builder +1 -0
  449. data/vendor/rails/actionpack/test/fixtures/test/formatted_xml_erb.html.erb +1 -0
  450. data/vendor/rails/actionpack/test/fixtures/test/formatted_xml_erb.xml.erb +1 -0
  451. data/vendor/rails/actionpack/test/fixtures/test/hello/hello.erb +1 -0
  452. data/vendor/rails/actionpack/test/fixtures/test/hello_world.erb +1 -0
  453. data/vendor/rails/actionpack/test/fixtures/test/hello_world_with_partial.html.erb +2 -0
  454. data/vendor/rails/actionpack/test/fixtures/test/hello_xml_world.builder +11 -0
  455. data/vendor/rails/actionpack/test/fixtures/test/implicit_content_type.atom.builder +2 -0
  456. data/vendor/rails/actionpack/test/fixtures/test/render_file_with_ivar.erb +1 -0
  457. data/vendor/rails/actionpack/test/fixtures/test/render_file_with_locals.erb +1 -0
  458. data/vendor/rails/actionpack/test/fixtures/test/with_implicit_template.erb +1 -0
  459. data/vendor/rails/actionpack/test/fixtures//345/205/254/345/205/261/bar.html +1 -0
  460. data/vendor/rails/actionpack/test/fixtures//345/205/254/345/205/261/bar/index.html +1 -0
  461. data/vendor/rails/actionpack/test/fixtures//345/205/254/345/205/261/foo/bar.html +1 -0
  462. data/vendor/rails/actionpack/test/fixtures//345/205/254/345/205/261/foo/baz.css +3 -0
  463. data/vendor/rails/actionpack/test/fixtures//345/205/254/345/205/261/foo/index.html +1 -0
  464. data/vendor/rails/actionpack/test/fixtures//345/205/254/345/205/261/foo/other-index.html +1 -0
  465. data/vendor/rails/actionpack/test/fixtures//345/205/254/345/205/261/foo//343/201/223/343/202/223/343/201/253/343/201/241/343/201/257.html +1 -0
  466. data/vendor/rails/actionpack/test/fixtures//345/205/254/345/205/261/foo//343/201/225/343/202/210/343/201/206/343/201/252/343/202/211.html +1 -0
  467. data/vendor/rails/actionpack/test/fixtures//345/205/254/345/205/261/foo//343/201/225/343/202/210/343/201/206/343/201/252/343/202/211.html.gz +0 -0
  468. data/vendor/rails/actionpack/test/fixtures//345/205/254/345/205/261/gzip/application-a71b3024f80aea3181c09774ca17e712.js +4 -0
  469. data/vendor/rails/actionpack/test/fixtures//345/205/254/345/205/261/gzip/application-a71b3024f80aea3181c09774ca17e712.js.gz +0 -0
  470. data/vendor/rails/actionpack/test/fixtures//345/205/254/345/205/261/gzip/foo.zoo +4 -0
  471. data/vendor/rails/actionpack/test/fixtures//345/205/254/345/205/261/gzip/foo.zoo.gz +0 -0
  472. data/vendor/rails/actionpack/test/fixtures//345/205/254/345/205/261/index.html +1 -0
  473. data/vendor/rails/actionpack/test/fixtures//345/205/254/345/205/261/other-index.html +1 -0
  474. data/vendor/rails/actionpack/test/journey/gtg/builder_test.rb +81 -0
  475. data/vendor/rails/actionpack/test/journey/gtg/transition_table_test.rb +125 -0
  476. data/vendor/rails/actionpack/test/journey/nfa/simulator_test.rb +100 -0
  477. data/vendor/rails/actionpack/test/journey/nfa/transition_table_test.rb +74 -0
  478. data/vendor/rails/actionpack/test/journey/nodes/symbol_test.rb +19 -0
  479. data/vendor/rails/actionpack/test/journey/path/pattern_test.rb +286 -0
  480. data/vendor/rails/actionpack/test/journey/route/definition/parser_test.rb +112 -0
  481. data/vendor/rails/actionpack/test/journey/route/definition/scanner_test.rb +71 -0
  482. data/vendor/rails/actionpack/test/journey/route_test.rb +113 -0
  483. data/vendor/rails/actionpack/test/journey/router/utils_test.rb +48 -0
  484. data/vendor/rails/actionpack/test/journey/router_test.rb +544 -0
  485. data/vendor/rails/actionpack/test/journey/routes_test.rb +62 -0
  486. data/vendor/rails/actionpack/test/lib/controller/fake_controllers.rb +37 -0
  487. data/vendor/rails/actionpack/test/lib/controller/fake_models.rb +79 -0
  488. data/vendor/rails/actionpack/test/routing/helper_test.rb +33 -0
  489. data/vendor/rails/actionview/CHANGELOG.md +122 -0
  490. data/vendor/rails/actionview/MIT-LICENSE +21 -0
  491. data/vendor/rails/actionview/README.rdoc +38 -0
  492. data/vendor/rails/actionview/RUNNING_UJS_TESTS.rdoc +8 -0
  493. data/vendor/rails/actionview/RUNNING_UNIT_TESTS.rdoc +26 -0
  494. data/vendor/rails/actionview/Rakefile +136 -0
  495. data/vendor/rails/actionview/actionview.gemspec +38 -0
  496. data/vendor/rails/actionview/app/assets/javascripts/MIT-LICENSE +20 -0
  497. data/vendor/rails/actionview/app/assets/javascripts/README.md +55 -0
  498. data/vendor/rails/actionview/app/assets/javascripts/rails-ujs.coffee +39 -0
  499. data/vendor/rails/actionview/app/assets/javascripts/rails-ujs/BANNER.js +5 -0
  500. data/vendor/rails/actionview/app/assets/javascripts/rails-ujs/features/confirm.coffee +26 -0
  501. data/vendor/rails/actionview/app/assets/javascripts/rails-ujs/features/disable.coffee +82 -0
  502. data/vendor/rails/actionview/app/assets/javascripts/rails-ujs/features/method.coffee +34 -0
  503. data/vendor/rails/actionview/app/assets/javascripts/rails-ujs/features/remote.coffee +90 -0
  504. data/vendor/rails/actionview/app/assets/javascripts/rails-ujs/start.coffee +71 -0
  505. data/vendor/rails/actionview/app/assets/javascripts/rails-ujs/utils/ajax.coffee +97 -0
  506. data/vendor/rails/actionview/app/assets/javascripts/rails-ujs/utils/csp.coffee +4 -0
  507. data/vendor/rails/actionview/app/assets/javascripts/rails-ujs/utils/csrf.coffee +25 -0
  508. data/vendor/rails/actionview/app/assets/javascripts/rails-ujs/utils/dom.coffee +35 -0
  509. data/vendor/rails/actionview/app/assets/javascripts/rails-ujs/utils/event.coffee +68 -0
  510. data/vendor/rails/actionview/app/assets/javascripts/rails-ujs/utils/form.coffee +36 -0
  511. data/vendor/rails/actionview/bin/test +5 -0
  512. data/vendor/rails/actionview/blade.yml +11 -0
  513. data/vendor/rails/actionview/coffeelint.json +135 -0
  514. data/vendor/rails/actionview/lib/action_view.rb +97 -0
  515. data/vendor/rails/actionview/lib/action_view/base.rb +215 -0
  516. data/vendor/rails/actionview/lib/action_view/buffers.rb +52 -0
  517. data/vendor/rails/actionview/lib/action_view/context.rb +36 -0
  518. data/vendor/rails/actionview/lib/action_view/dependency_tracker.rb +175 -0
  519. data/vendor/rails/actionview/lib/action_view/digestor.rb +136 -0
  520. data/vendor/rails/actionview/lib/action_view/flows.rb +76 -0
  521. data/vendor/rails/actionview/lib/action_view/gem_version.rb +17 -0
  522. data/vendor/rails/actionview/lib/action_view/helpers.rb +68 -0
  523. data/vendor/rails/actionview/lib/action_view/helpers/active_model_helper.rb +55 -0
  524. data/vendor/rails/actionview/lib/action_view/helpers/asset_tag_helper.rb +511 -0
  525. data/vendor/rails/actionview/lib/action_view/helpers/asset_url_helper.rb +469 -0
  526. data/vendor/rails/actionview/lib/action_view/helpers/atom_feed_helper.rb +205 -0
  527. data/vendor/rails/actionview/lib/action_view/helpers/cache_helper.rb +263 -0
  528. data/vendor/rails/actionview/lib/action_view/helpers/capture_helper.rb +212 -0
  529. data/vendor/rails/actionview/lib/action_view/helpers/controller_helper.rb +36 -0
  530. data/vendor/rails/actionview/lib/action_view/helpers/csp_helper.rb +24 -0
  531. data/vendor/rails/actionview/lib/action_view/helpers/csrf_helper.rb +35 -0
  532. data/vendor/rails/actionview/lib/action_view/helpers/date_helper.rb +1156 -0
  533. data/vendor/rails/actionview/lib/action_view/helpers/debug_helper.rb +36 -0
  534. data/vendor/rails/actionview/lib/action_view/helpers/form_helper.rb +2337 -0
  535. data/vendor/rails/actionview/lib/action_view/helpers/form_options_helper.rb +887 -0
  536. data/vendor/rails/actionview/lib/action_view/helpers/form_tag_helper.rb +917 -0
  537. data/vendor/rails/actionview/lib/action_view/helpers/javascript_helper.rb +94 -0
  538. data/vendor/rails/actionview/lib/action_view/helpers/number_helper.rb +451 -0
  539. data/vendor/rails/actionview/lib/action_view/helpers/output_safety_helper.rb +70 -0
  540. data/vendor/rails/actionview/lib/action_view/helpers/record_tag_helper.rb +23 -0
  541. data/vendor/rails/actionview/lib/action_view/helpers/rendering_helper.rb +99 -0
  542. data/vendor/rails/actionview/lib/action_view/helpers/sanitize_helper.rb +177 -0
  543. data/vendor/rails/actionview/lib/action_view/helpers/tag_helper.rb +313 -0
  544. data/vendor/rails/actionview/lib/action_view/helpers/tags.rb +44 -0
  545. data/vendor/rails/actionview/lib/action_view/helpers/tags/base.rb +192 -0
  546. data/vendor/rails/actionview/lib/action_view/helpers/tags/check_box.rb +66 -0
  547. data/vendor/rails/actionview/lib/action_view/helpers/tags/checkable.rb +18 -0
  548. data/vendor/rails/actionview/lib/action_view/helpers/tags/collection_check_boxes.rb +36 -0
  549. data/vendor/rails/actionview/lib/action_view/helpers/tags/collection_helpers.rb +119 -0
  550. data/vendor/rails/actionview/lib/action_view/helpers/tags/collection_radio_buttons.rb +31 -0
  551. data/vendor/rails/actionview/lib/action_view/helpers/tags/collection_select.rb +30 -0
  552. data/vendor/rails/actionview/lib/action_view/helpers/tags/color_field.rb +27 -0
  553. data/vendor/rails/actionview/lib/action_view/helpers/tags/date_field.rb +15 -0
  554. data/vendor/rails/actionview/lib/action_view/helpers/tags/date_select.rb +74 -0
  555. data/vendor/rails/actionview/lib/action_view/helpers/tags/datetime_field.rb +32 -0
  556. data/vendor/rails/actionview/lib/action_view/helpers/tags/datetime_local_field.rb +21 -0
  557. data/vendor/rails/actionview/lib/action_view/helpers/tags/datetime_select.rb +10 -0
  558. data/vendor/rails/actionview/lib/action_view/helpers/tags/email_field.rb +10 -0
  559. data/vendor/rails/actionview/lib/action_view/helpers/tags/file_field.rb +10 -0
  560. data/vendor/rails/actionview/lib/action_view/helpers/tags/grouped_collection_select.rb +31 -0
  561. data/vendor/rails/actionview/lib/action_view/helpers/tags/hidden_field.rb +10 -0
  562. data/vendor/rails/actionview/lib/action_view/helpers/tags/label.rb +81 -0
  563. data/vendor/rails/actionview/lib/action_view/helpers/tags/month_field.rb +15 -0
  564. data/vendor/rails/actionview/lib/action_view/helpers/tags/number_field.rb +20 -0
  565. data/vendor/rails/actionview/lib/action_view/helpers/tags/password_field.rb +14 -0
  566. data/vendor/rails/actionview/lib/action_view/helpers/tags/placeholderable.rb +24 -0
  567. data/vendor/rails/actionview/lib/action_view/helpers/tags/radio_button.rb +33 -0
  568. data/vendor/rails/actionview/lib/action_view/helpers/tags/range_field.rb +10 -0
  569. data/vendor/rails/actionview/lib/action_view/helpers/tags/search_field.rb +27 -0
  570. data/vendor/rails/actionview/lib/action_view/helpers/tags/select.rb +43 -0
  571. data/vendor/rails/actionview/lib/action_view/helpers/tags/tel_field.rb +10 -0
  572. data/vendor/rails/actionview/lib/action_view/helpers/tags/text_area.rb +24 -0
  573. data/vendor/rails/actionview/lib/action_view/helpers/tags/text_field.rb +34 -0
  574. data/vendor/rails/actionview/lib/action_view/helpers/tags/time_field.rb +15 -0
  575. data/vendor/rails/actionview/lib/action_view/helpers/tags/time_select.rb +10 -0
  576. data/vendor/rails/actionview/lib/action_view/helpers/tags/time_zone_select.rb +22 -0
  577. data/vendor/rails/actionview/lib/action_view/helpers/tags/translator.rb +44 -0
  578. data/vendor/rails/actionview/lib/action_view/helpers/tags/url_field.rb +10 -0
  579. data/vendor/rails/actionview/lib/action_view/helpers/tags/week_field.rb +15 -0
  580. data/vendor/rails/actionview/lib/action_view/helpers/text_helper.rb +486 -0
  581. data/vendor/rails/actionview/lib/action_view/helpers/translation_helper.rb +141 -0
  582. data/vendor/rails/actionview/lib/action_view/helpers/url_helper.rb +676 -0
  583. data/vendor/rails/actionview/lib/action_view/layouts.rb +433 -0
  584. data/vendor/rails/actionview/lib/action_view/locale/en.yml +56 -0
  585. data/vendor/rails/actionview/lib/action_view/log_subscriber.rb +96 -0
  586. data/vendor/rails/actionview/lib/action_view/lookup_context.rb +274 -0
  587. data/vendor/rails/actionview/lib/action_view/model_naming.rb +14 -0
  588. data/vendor/rails/actionview/lib/action_view/path_set.rb +100 -0
  589. data/vendor/rails/actionview/lib/action_view/railtie.rb +82 -0
  590. data/vendor/rails/actionview/lib/action_view/record_identifier.rb +112 -0
  591. data/vendor/rails/actionview/lib/action_view/renderer/abstract_renderer.rb +55 -0
  592. data/vendor/rails/actionview/lib/action_view/renderer/partial_renderer.rb +552 -0
  593. data/vendor/rails/actionview/lib/action_view/renderer/partial_renderer/collection_caching.rb +57 -0
  594. data/vendor/rails/actionview/lib/action_view/renderer/renderer.rb +56 -0
  595. data/vendor/rails/actionview/lib/action_view/renderer/streaming_template_renderer.rb +105 -0
  596. data/vendor/rails/actionview/lib/action_view/renderer/template_renderer.rb +102 -0
  597. data/vendor/rails/actionview/lib/action_view/rendering.rb +151 -0
  598. data/vendor/rails/actionview/lib/action_view/routing_url_for.rb +145 -0
  599. data/vendor/rails/actionview/lib/action_view/tasks/cache_digests.rake +25 -0
  600. data/vendor/rails/actionview/lib/action_view/template.rb +361 -0
  601. data/vendor/rails/actionview/lib/action_view/template/error.rb +141 -0
  602. data/vendor/rails/actionview/lib/action_view/template/handlers.rb +66 -0
  603. data/vendor/rails/actionview/lib/action_view/template/handlers/builder.rb +25 -0
  604. data/vendor/rails/actionview/lib/action_view/template/handlers/erb.rb +74 -0
  605. data/vendor/rails/actionview/lib/action_view/template/handlers/erb/erubi.rb +83 -0
  606. data/vendor/rails/actionview/lib/action_view/template/handlers/html.rb +11 -0
  607. data/vendor/rails/actionview/lib/action_view/template/handlers/raw.rb +11 -0
  608. data/vendor/rails/actionview/lib/action_view/template/html.rb +34 -0
  609. data/vendor/rails/actionview/lib/action_view/template/resolver.rb +391 -0
  610. data/vendor/rails/actionview/lib/action_view/template/text.rb +33 -0
  611. data/vendor/rails/actionview/lib/action_view/template/types.rb +57 -0
  612. data/vendor/rails/actionview/lib/action_view/test_case.rb +300 -0
  613. data/vendor/rails/actionview/lib/action_view/testing/resolvers.rb +54 -0
  614. data/vendor/rails/actionview/lib/action_view/version.rb +10 -0
  615. data/vendor/rails/actionview/lib/action_view/view_paths.rb +105 -0
  616. data/vendor/rails/actionview/package.json +36 -0
  617. data/vendor/rails/actionview/test/abstract_unit.rb +236 -0
  618. data/vendor/rails/actionview/test/actionpack/abstract/abstract_controller_test.rb +292 -0
  619. data/vendor/rails/actionview/test/actionpack/abstract/helper_test.rb +128 -0
  620. data/vendor/rails/actionview/test/actionpack/abstract/layouts_test.rb +568 -0
  621. data/vendor/rails/actionview/test/actionpack/abstract/render_test.rb +103 -0
  622. data/vendor/rails/actionview/test/actionpack/abstract/views/abstract_controller/testing/me3/formatted.html.erb +1 -0
  623. data/vendor/rails/actionview/test/actionpack/abstract/views/abstract_controller/testing/me3/index.erb +1 -0
  624. data/vendor/rails/actionview/test/actionpack/abstract/views/abstract_controller/testing/me4/index.erb +1 -0
  625. data/vendor/rails/actionview/test/actionpack/abstract/views/action_with_ivars.erb +1 -0
  626. data/vendor/rails/actionview/test/actionpack/abstract/views/helper_test.erb +1 -0
  627. data/vendor/rails/actionview/test/actionpack/abstract/views/index.erb +1 -0
  628. data/vendor/rails/actionview/test/actionpack/abstract/views/layouts/abstract_controller/testing/me4.erb +1 -0
  629. data/vendor/rails/actionview/test/actionpack/abstract/views/layouts/application.erb +1 -0
  630. data/vendor/rails/actionview/test/actionpack/abstract/views/naked_render.erb +1 -0
  631. data/vendor/rails/actionview/test/actionpack/controller/capture_test.rb +83 -0
  632. data/vendor/rails/actionview/test/actionpack/controller/layout_test.rb +270 -0
  633. data/vendor/rails/actionview/test/actionpack/controller/render_test.rb +1294 -0
  634. data/vendor/rails/actionview/test/actionpack/controller/view_paths_test.rb +174 -0
  635. data/vendor/rails/actionview/test/active_record_unit.rb +92 -0
  636. data/vendor/rails/actionview/test/activerecord/controller_runtime_test.rb +95 -0
  637. data/vendor/rails/actionview/test/activerecord/debug_helper_test.rb +19 -0
  638. data/vendor/rails/actionview/test/activerecord/form_helper_activerecord_test.rb +90 -0
  639. data/vendor/rails/actionview/test/activerecord/polymorphic_routes_test.rb +780 -0
  640. data/vendor/rails/actionview/test/activerecord/relation_cache_test.rb +23 -0
  641. data/vendor/rails/actionview/test/activerecord/render_partial_with_record_identification_test.rb +188 -0
  642. data/vendor/rails/actionview/test/fixtures/_top_level_partial.html.erb +1 -0
  643. data/vendor/rails/actionview/test/fixtures/_top_level_partial_only.erb +1 -0
  644. data/vendor/rails/actionview/test/fixtures/actionpack/bad_customers/_bad_customer.html.erb +1 -0
  645. data/vendor/rails/actionview/test/fixtures/actionpack/customers/_customer.html.erb +1 -0
  646. data/vendor/rails/actionview/test/fixtures/actionpack/fun/games/_form.erb +1 -0
  647. data/vendor/rails/actionview/test/fixtures/actionpack/fun/games/hello_world.erb +1 -0
  648. data/vendor/rails/actionview/test/fixtures/actionpack/good_customers/_good_customer.html.erb +1 -0
  649. data/vendor/rails/actionview/test/fixtures/actionpack/hello.html +1 -0
  650. data/vendor/rails/actionview/test/fixtures/actionpack/layout_tests/alt/layouts/alt.erb +1 -0
  651. data/vendor/rails/actionview/test/fixtures/actionpack/layout_tests/layouts/controller_name_space/nested.erb +1 -0
  652. data/vendor/rails/actionview/test/fixtures/actionpack/layout_tests/layouts/item.erb +1 -0
  653. data/vendor/rails/actionview/test/fixtures/actionpack/layout_tests/layouts/layout_test.erb +1 -0
  654. data/vendor/rails/actionview/test/fixtures/actionpack/layout_tests/layouts/multiple_extensions.html.erb +1 -0
  655. data/vendor/rails/actionview/test/fixtures/actionpack/layout_tests/layouts/symlinked/symlinked_layout.erb +5 -0
  656. data/vendor/rails/actionview/test/fixtures/actionpack/layout_tests/layouts/third_party_template_library.mab +1 -0
  657. data/vendor/rails/actionview/test/fixtures/actionpack/layout_tests/views/goodbye.erb +1 -0
  658. data/vendor/rails/actionview/test/fixtures/actionpack/layout_tests/views/hello.erb +1 -0
  659. data/vendor/rails/actionview/test/fixtures/actionpack/layouts/_column.html.erb +2 -0
  660. data/vendor/rails/actionview/test/fixtures/actionpack/layouts/_customers.erb +1 -0
  661. data/vendor/rails/actionview/test/fixtures/actionpack/layouts/_partial_and_yield.erb +2 -0
  662. data/vendor/rails/actionview/test/fixtures/actionpack/layouts/_yield_only.erb +1 -0
  663. data/vendor/rails/actionview/test/fixtures/actionpack/layouts/_yield_with_params.erb +1 -0
  664. data/vendor/rails/actionview/test/fixtures/actionpack/layouts/block_with_layout.erb +3 -0
  665. data/vendor/rails/actionview/test/fixtures/actionpack/layouts/builder.builder +3 -0
  666. data/vendor/rails/actionview/test/fixtures/actionpack/layouts/partial_with_layout.erb +3 -0
  667. data/vendor/rails/actionview/test/fixtures/actionpack/layouts/standard.html.erb +1 -0
  668. data/vendor/rails/actionview/test/fixtures/actionpack/layouts/standard.text.erb +1 -0
  669. data/vendor/rails/actionview/test/fixtures/actionpack/layouts/streaming.erb +4 -0
  670. data/vendor/rails/actionview/test/fixtures/actionpack/layouts/talk_from_action.erb +2 -0
  671. data/vendor/rails/actionview/test/fixtures/actionpack/layouts/with_html_partial.html.erb +1 -0
  672. data/vendor/rails/actionview/test/fixtures/actionpack/layouts/xhr.html.erb +2 -0
  673. data/vendor/rails/actionview/test/fixtures/actionpack/layouts/yield.erb +2 -0
  674. data/vendor/rails/actionview/test/fixtures/actionpack/layouts/yield_with_render_inline_inside.erb +2 -0
  675. data/vendor/rails/actionview/test/fixtures/actionpack/layouts/yield_with_render_partial_inside.erb +2 -0
  676. data/vendor/rails/actionview/test/fixtures/actionpack/quiz/questions/_question.html.erb +1 -0
  677. data/vendor/rails/actionview/test/fixtures/actionpack/shared.html.erb +1 -0
  678. data/vendor/rails/actionview/test/fixtures/actionpack/test/_changing_priority.html.erb +1 -0
  679. data/vendor/rails/actionview/test/fixtures/actionpack/test/_changing_priority.json.erb +1 -0
  680. data/vendor/rails/actionview/test/fixtures/actionpack/test/_counter.html.erb +1 -0
  681. data/vendor/rails/actionview/test/fixtures/actionpack/test/_customer.erb +1 -0
  682. data/vendor/rails/actionview/test/fixtures/actionpack/test/_customer_counter.erb +1 -0
  683. data/vendor/rails/actionview/test/fixtures/actionpack/test/_customer_counter_with_as.erb +1 -0
  684. data/vendor/rails/actionview/test/fixtures/actionpack/test/_customer_greeting.erb +1 -0
  685. data/vendor/rails/actionview/test/fixtures/actionpack/test/_customer_iteration.erb +1 -0
  686. data/vendor/rails/actionview/test/fixtures/actionpack/test/_customer_iteration_with_as.erb +1 -0
  687. data/vendor/rails/actionview/test/fixtures/actionpack/test/_customer_with_var.erb +1 -0
  688. data/vendor/rails/actionview/test/fixtures/actionpack/test/_directory/_partial_with_locales.html.erb +1 -0
  689. data/vendor/rails/actionview/test/fixtures/actionpack/test/_first_json_partial.json.erb +1 -0
  690. data/vendor/rails/actionview/test/fixtures/actionpack/test/_form.erb +1 -0
  691. data/vendor/rails/actionview/test/fixtures/actionpack/test/_hash_greeting.erb +1 -0
  692. data/vendor/rails/actionview/test/fixtures/actionpack/test/_hash_object.erb +2 -0
  693. data/vendor/rails/actionview/test/fixtures/actionpack/test/_hello.builder +1 -0
  694. data/vendor/rails/actionview/test/fixtures/actionpack/test/_json_change_priority.json.erb +0 -0
  695. data/vendor/rails/actionview/test/fixtures/actionpack/test/_labelling_form.erb +1 -0
  696. data/vendor/rails/actionview/test/fixtures/actionpack/test/_layout_for_partial.html.erb +3 -0
  697. data/vendor/rails/actionview/test/fixtures/actionpack/test/_partial.erb +1 -0
  698. data/vendor/rails/actionview/test/fixtures/actionpack/test/_partial.html.erb +1 -0
  699. data/vendor/rails/actionview/test/fixtures/actionpack/test/_partial.js.erb +1 -0
  700. data/vendor/rails/actionview/test/fixtures/actionpack/test/_partial_for_use_in_layout.html.erb +1 -0
  701. data/vendor/rails/actionview/test/fixtures/actionpack/test/_partial_html_erb.html.erb +1 -0
  702. data/vendor/rails/actionview/test/fixtures/actionpack/test/_partial_name_local_variable.erb +1 -0
  703. data/vendor/rails/actionview/test/fixtures/actionpack/test/_partial_only.erb +1 -0
  704. data/vendor/rails/actionview/test/fixtures/actionpack/test/_partial_only_html.html +1 -0
  705. data/vendor/rails/actionview/test/fixtures/actionpack/test/_partial_with_partial.erb +2 -0
  706. data/vendor/rails/actionview/test/fixtures/actionpack/test/_person.erb +2 -0
  707. data/vendor/rails/actionview/test/fixtures/actionpack/test/_raise_indentation.html.erb +13 -0
  708. data/vendor/rails/actionview/test/fixtures/actionpack/test/_second_json_partial.json.erb +1 -0
  709. data/vendor/rails/actionview/test/fixtures/actionpack/test/action_talk_to_layout.erb +2 -0
  710. data/vendor/rails/actionview/test/fixtures/actionpack/test/calling_partial_with_layout.html.erb +1 -0
  711. data/vendor/rails/actionview/test/fixtures/actionpack/test/capturing.erb +4 -0
  712. data/vendor/rails/actionview/test/fixtures/actionpack/test/change_priority.html.erb +2 -0
  713. data/vendor/rails/actionview/test/fixtures/actionpack/test/content_for.erb +1 -0
  714. data/vendor/rails/actionview/test/fixtures/actionpack/test/content_for_concatenated.erb +3 -0
  715. data/vendor/rails/actionview/test/fixtures/actionpack/test/content_for_with_parameter.erb +2 -0
  716. data/vendor/rails/actionview/test/fixtures/actionpack/test/dot.directory/render_file_with_ivar.erb +1 -0
  717. data/vendor/rails/actionview/test/fixtures/actionpack/test/formatted_html_erb.html.erb +1 -0
  718. data/vendor/rails/actionview/test/fixtures/actionpack/test/formatted_xml_erb.builder +1 -0
  719. data/vendor/rails/actionview/test/fixtures/actionpack/test/formatted_xml_erb.html.erb +1 -0
  720. data/vendor/rails/actionview/test/fixtures/actionpack/test/formatted_xml_erb.xml.erb +1 -0
  721. data/vendor/rails/actionview/test/fixtures/actionpack/test/greeting.html.erb +1 -0
  722. data/vendor/rails/actionview/test/fixtures/actionpack/test/greeting.xml.erb +1 -0
  723. data/vendor/rails/actionview/test/fixtures/actionpack/test/hello,world.erb +1 -0
  724. data/vendor/rails/actionview/test/fixtures/actionpack/test/hello.builder +4 -0
  725. data/vendor/rails/actionview/test/fixtures/actionpack/test/hello/hello.erb +1 -0
  726. data/vendor/rails/actionview/test/fixtures/actionpack/test/hello_world.erb +1 -0
  727. data/vendor/rails/actionview/test/fixtures/actionpack/test/hello_world_container.builder +3 -0
  728. data/vendor/rails/actionview/test/fixtures/actionpack/test/hello_world_from_rxml.builder +3 -0
  729. data/vendor/rails/actionview/test/fixtures/actionpack/test/hello_world_with_layout_false.erb +1 -0
  730. data/vendor/rails/actionview/test/fixtures/actionpack/test/hello_world_with_partial.html.erb +2 -0
  731. data/vendor/rails/actionview/test/fixtures/actionpack/test/hello_xml_world.builder +11 -0
  732. data/vendor/rails/actionview/test/fixtures/actionpack/test/html_template.html.erb +1 -0
  733. data/vendor/rails/actionview/test/fixtures/actionpack/test/hyphen-ated.erb +1 -0
  734. data/vendor/rails/actionview/test/fixtures/actionpack/test/implicit_content_type.atom.builder +2 -0
  735. data/vendor/rails/actionview/test/fixtures/actionpack/test/list.erb +1 -0
  736. data/vendor/rails/actionview/test/fixtures/actionpack/test/non_erb_block_content_for.builder +4 -0
  737. data/vendor/rails/actionview/test/fixtures/actionpack/test/potential_conflicts.erb +4 -0
  738. data/vendor/rails/actionview/test/fixtures/actionpack/test/proper_block_detection.erb +1 -0
  739. data/vendor/rails/actionview/test/fixtures/actionpack/test/render_file_from_template.html.erb +1 -0
  740. data/vendor/rails/actionview/test/fixtures/actionpack/test/render_file_with_ivar.erb +1 -0
  741. data/vendor/rails/actionview/test/fixtures/actionpack/test/render_file_with_locals.erb +1 -0
  742. data/vendor/rails/actionview/test/fixtures/actionpack/test/render_file_with_locals_and_default.erb +1 -0
  743. data/vendor/rails/actionview/test/fixtures/actionpack/test/render_implicit_html_template_from_xhr_request.da.html.erb +1 -0
  744. data/vendor/rails/actionview/test/fixtures/actionpack/test/render_implicit_html_template_from_xhr_request.html.erb +1 -0
  745. data/vendor/rails/actionview/test/fixtures/actionpack/test/render_implicit_js_template_without_layout.js.erb +1 -0
  746. data/vendor/rails/actionview/test/fixtures/actionpack/test/render_partial_inside_directory.html.erb +1 -0
  747. data/vendor/rails/actionview/test/fixtures/actionpack/test/render_to_string_test.erb +1 -0
  748. data/vendor/rails/actionview/test/fixtures/actionpack/test/render_two_partials.html.erb +2 -0
  749. data/vendor/rails/actionview/test/fixtures/actionpack/test/using_layout_around_block.html.erb +1 -0
  750. data/vendor/rails/actionview/test/fixtures/actionpack/test/with_html_partial.html.erb +1 -0
  751. data/vendor/rails/actionview/test/fixtures/actionpack/test/with_partial.html.erb +1 -0
  752. data/vendor/rails/actionview/test/fixtures/actionpack/test/with_partial.text.erb +1 -0
  753. data/vendor/rails/actionview/test/fixtures/actionpack/test/with_xml_template.html.erb +1 -0
  754. data/vendor/rails/actionview/test/fixtures/comments/empty.de.html.erb +1 -0
  755. data/vendor/rails/actionview/test/fixtures/comments/empty.html+grid.erb +1 -0
  756. data/vendor/rails/actionview/test/fixtures/comments/empty.html.builder +1 -0
  757. data/vendor/rails/actionview/test/fixtures/comments/empty.html.erb +1 -0
  758. data/vendor/rails/actionview/test/fixtures/comments/empty.xml.erb +1 -0
  759. data/vendor/rails/actionview/test/fixtures/companies.yml +24 -0
  760. data/vendor/rails/actionview/test/fixtures/company.rb +11 -0
  761. data/vendor/rails/actionview/test/fixtures/custom_pattern/another.html.erb +1 -0
  762. data/vendor/rails/actionview/test/fixtures/custom_pattern/html/another.erb +1 -0
  763. data/vendor/rails/actionview/test/fixtures/custom_pattern/html/path.erb +1 -0
  764. data/vendor/rails/actionview/test/fixtures/customers/_customer.html.erb +1 -0
  765. data/vendor/rails/actionview/test/fixtures/customers/_customer.xml.erb +1 -0
  766. data/vendor/rails/actionview/test/fixtures/db_definitions/sqlite.sql +49 -0
  767. data/vendor/rails/actionview/test/fixtures/developer.rb +8 -0
  768. data/vendor/rails/actionview/test/fixtures/developers.yml +21 -0
  769. data/vendor/rails/actionview/test/fixtures/developers/_developer.erb +1 -0
  770. data/vendor/rails/actionview/test/fixtures/developers_projects.yml +13 -0
  771. data/vendor/rails/actionview/test/fixtures/digestor/api/comments/_comment.json.erb +1 -0
  772. data/vendor/rails/actionview/test/fixtures/digestor/api/comments/_comments.json.erb +1 -0
  773. data/vendor/rails/actionview/test/fixtures/digestor/comments/_comment.html.erb +1 -0
  774. data/vendor/rails/actionview/test/fixtures/digestor/comments/_comments.html.erb +1 -0
  775. data/vendor/rails/actionview/test/fixtures/digestor/comments/show.js.erb +1 -0
  776. data/vendor/rails/actionview/test/fixtures/digestor/events/_completed.html.erb +0 -0
  777. data/vendor/rails/actionview/test/fixtures/digestor/events/_event.html.erb +0 -0
  778. data/vendor/rails/actionview/test/fixtures/digestor/events/index.html.erb +1 -0
  779. data/vendor/rails/actionview/test/fixtures/digestor/level/_recursion.html.erb +1 -0
  780. data/vendor/rails/actionview/test/fixtures/digestor/level/below/_header.html.erb +0 -0
  781. data/vendor/rails/actionview/test/fixtures/digestor/level/below/index.html.erb +1 -0
  782. data/vendor/rails/actionview/test/fixtures/digestor/level/recursion.html.erb +1 -0
  783. data/vendor/rails/actionview/test/fixtures/digestor/messages/_form.html.erb +0 -0
  784. data/vendor/rails/actionview/test/fixtures/digestor/messages/_header.html.erb +0 -0
  785. data/vendor/rails/actionview/test/fixtures/digestor/messages/_message.html.erb +1 -0
  786. data/vendor/rails/actionview/test/fixtures/digestor/messages/actions/_move.html.erb +0 -0
  787. data/vendor/rails/actionview/test/fixtures/digestor/messages/edit.html.erb +5 -0
  788. data/vendor/rails/actionview/test/fixtures/digestor/messages/index.html.erb +2 -0
  789. data/vendor/rails/actionview/test/fixtures/digestor/messages/new.html+iphone.erb +15 -0
  790. data/vendor/rails/actionview/test/fixtures/digestor/messages/peek.html.erb +2 -0
  791. data/vendor/rails/actionview/test/fixtures/digestor/messages/show.html.erb +14 -0
  792. data/vendor/rails/actionview/test/fixtures/digestor/messages/thread.json.erb +1 -0
  793. data/vendor/rails/actionview/test/fixtures/fun/games/_game.erb +1 -0
  794. data/vendor/rails/actionview/test/fixtures/fun/games/hello_world.erb +1 -0
  795. data/vendor/rails/actionview/test/fixtures/fun/serious/games/_game.erb +1 -0
  796. data/vendor/rails/actionview/test/fixtures/games/_game.erb +1 -0
  797. data/vendor/rails/actionview/test/fixtures/good_customers/_good_customer.html.erb +1 -0
  798. data/vendor/rails/actionview/test/fixtures/helpers/abc_helper.rb +5 -0
  799. data/vendor/rails/actionview/test/fixtures/helpers/helpery_test_helper.rb +7 -0
  800. data/vendor/rails/actionview/test/fixtures/helpers_missing/invalid_require_helper.rb +6 -0
  801. data/vendor/rails/actionview/test/fixtures/layout_tests/alt/hello.erb +1 -0
  802. data/vendor/rails/actionview/test/fixtures/layouts/_column.html.erb +2 -0
  803. data/vendor/rails/actionview/test/fixtures/layouts/_customers.erb +1 -0
  804. data/vendor/rails/actionview/test/fixtures/layouts/_partial_and_yield.erb +2 -0
  805. data/vendor/rails/actionview/test/fixtures/layouts/_yield_only.erb +1 -0
  806. data/vendor/rails/actionview/test/fixtures/layouts/_yield_with_params.erb +1 -0
  807. data/vendor/rails/actionview/test/fixtures/layouts/render_partial_html.erb +2 -0
  808. data/vendor/rails/actionview/test/fixtures/layouts/streaming.erb +4 -0
  809. data/vendor/rails/actionview/test/fixtures/layouts/streaming_with_capture.erb +6 -0
  810. data/vendor/rails/actionview/test/fixtures/layouts/streaming_with_locale.erb +2 -0
  811. data/vendor/rails/actionview/test/fixtures/layouts/yield.erb +2 -0
  812. data/vendor/rails/actionview/test/fixtures/layouts/yield_with_render_inline_inside.erb +2 -0
  813. data/vendor/rails/actionview/test/fixtures/layouts/yield_with_render_partial_inside.erb +2 -0
  814. data/vendor/rails/actionview/test/fixtures/mascot.rb +5 -0
  815. data/vendor/rails/actionview/test/fixtures/mascots.yml +4 -0
  816. data/vendor/rails/actionview/test/fixtures/mascots/_mascot.html.erb +1 -0
  817. data/vendor/rails/actionview/test/fixtures/override/test/hello_world.erb +1 -0
  818. data/vendor/rails/actionview/test/fixtures/override2/layouts/test/sub.erb +1 -0
  819. data/vendor/rails/actionview/test/fixtures/plain_text.raw +1 -0
  820. data/vendor/rails/actionview/test/fixtures/plain_text_with_characters.raw +1 -0
  821. data/vendor/rails/actionview/test/fixtures/project.rb +9 -0
  822. data/vendor/rails/actionview/test/fixtures/projects.yml +7 -0
  823. data/vendor/rails/actionview/test/fixtures/projects/_project.erb +1 -0
  824. data/vendor/rails/actionview/test/fixtures/public/elsewhere/cools.js +1 -0
  825. data/vendor/rails/actionview/test/fixtures/public/elsewhere/file.css +1 -0
  826. data/vendor/rails/actionview/test/fixtures/public/foo/baz.css +3 -0
  827. data/vendor/rails/actionview/test/fixtures/public/javascripts/application.js +1 -0
  828. data/vendor/rails/actionview/test/fixtures/public/javascripts/bank.js +1 -0
  829. data/vendor/rails/actionview/test/fixtures/public/javascripts/common.javascript +1 -0
  830. data/vendor/rails/actionview/test/fixtures/public/javascripts/controls.js +1 -0
  831. data/vendor/rails/actionview/test/fixtures/public/javascripts/dragdrop.js +1 -0
  832. data/vendor/rails/actionview/test/fixtures/public/javascripts/effects.js +1 -0
  833. data/vendor/rails/actionview/test/fixtures/public/javascripts/prototype.js +1 -0
  834. data/vendor/rails/actionview/test/fixtures/public/javascripts/robber.js +1 -0
  835. data/vendor/rails/actionview/test/fixtures/public/javascripts/subdir/subdir.js +1 -0
  836. data/vendor/rails/actionview/test/fixtures/public/javascripts/version.1.0.js +1 -0
  837. data/vendor/rails/actionview/test/fixtures/public/stylesheets/bank.css +1 -0
  838. data/vendor/rails/actionview/test/fixtures/public/stylesheets/random.styles +1 -0
  839. data/vendor/rails/actionview/test/fixtures/public/stylesheets/robber.css +1 -0
  840. data/vendor/rails/actionview/test/fixtures/public/stylesheets/subdir/subdir.css +1 -0
  841. data/vendor/rails/actionview/test/fixtures/public/stylesheets/version.1.0.css +1 -0
  842. data/vendor/rails/actionview/test/fixtures/replies.yml +15 -0
  843. data/vendor/rails/actionview/test/fixtures/replies/_reply.erb +1 -0
  844. data/vendor/rails/actionview/test/fixtures/reply.rb +9 -0
  845. data/vendor/rails/actionview/test/fixtures/respond_to/using_defaults_with_all.html.erb +1 -0
  846. data/vendor/rails/actionview/test/fixtures/ruby_template.ruby +2 -0
  847. data/vendor/rails/actionview/test/fixtures/shared.html.erb +1 -0
  848. data/vendor/rails/actionview/test/fixtures/test/_200.html.erb +1 -0
  849. data/vendor/rails/actionview/test/fixtures/test/_FooBar.html.erb +1 -0
  850. data/vendor/rails/actionview/test/fixtures/test/_a-in.html.erb +0 -0
  851. data/vendor/rails/actionview/test/fixtures/test/_b_layout_for_partial.html.erb +1 -0
  852. data/vendor/rails/actionview/test/fixtures/test/_b_layout_for_partial_with_object.html.erb +1 -0
  853. data/vendor/rails/actionview/test/fixtures/test/_b_layout_for_partial_with_object_counter.html.erb +1 -0
  854. data/vendor/rails/actionview/test/fixtures/test/_builder_tag_nested_in_content_tag.erb +3 -0
  855. data/vendor/rails/actionview/test/fixtures/test/_cached_customer.erb +3 -0
  856. data/vendor/rails/actionview/test/fixtures/test/_cached_customer_as.erb +3 -0
  857. data/vendor/rails/actionview/test/fixtures/test/_cached_nested_cached_customer.erb +3 -0
  858. data/vendor/rails/actionview/test/fixtures/test/_changing_priority.html.erb +1 -0
  859. data/vendor/rails/actionview/test/fixtures/test/_changing_priority.json.erb +1 -0
  860. data/vendor/rails/actionview/test/fixtures/test/_content_tag_nested_in_content_tag.erb +3 -0
  861. data/vendor/rails/actionview/test/fixtures/test/_counter.html.erb +1 -0
  862. data/vendor/rails/actionview/test/fixtures/test/_customer.erb +1 -0
  863. data/vendor/rails/actionview/test/fixtures/test/_customer.mobile.erb +1 -0
  864. data/vendor/rails/actionview/test/fixtures/test/_customer_greeting.erb +1 -0
  865. data/vendor/rails/actionview/test/fixtures/test/_customer_with_var.erb +1 -0
  866. data/vendor/rails/actionview/test/fixtures/test/_directory/_partial_with_locales.html.erb +1 -0
  867. data/vendor/rails/actionview/test/fixtures/test/_first_json_partial.json.erb +1 -0
  868. data/vendor/rails/actionview/test/fixtures/test/_from_helper.erb +1 -0
  869. data/vendor/rails/actionview/test/fixtures/test/_json_change_priority.json.erb +0 -0
  870. data/vendor/rails/actionview/test/fixtures/test/_klass.erb +1 -0
  871. data/vendor/rails/actionview/test/fixtures/test/_label_with_block.erb +4 -0
  872. data/vendor/rails/actionview/test/fixtures/test/_layout_for_block_with_args.html.erb +3 -0
  873. data/vendor/rails/actionview/test/fixtures/test/_layout_for_partial.html.erb +3 -0
  874. data/vendor/rails/actionview/test/fixtures/test/_layout_with_partial_and_yield.html.erb +4 -0
  875. data/vendor/rails/actionview/test/fixtures/test/_local_inspector.html.erb +1 -0
  876. data/vendor/rails/actionview/test/fixtures/test/_nested_cached_customer.erb +1 -0
  877. data/vendor/rails/actionview/test/fixtures/test/_object_inspector.erb +1 -0
  878. data/vendor/rails/actionview/test/fixtures/test/_one.html.erb +1 -0
  879. data/vendor/rails/actionview/test/fixtures/test/_partial.erb +1 -0
  880. data/vendor/rails/actionview/test/fixtures/test/_partial.html.erb +1 -0
  881. data/vendor/rails/actionview/test/fixtures/test/_partial.js.erb +1 -0
  882. data/vendor/rails/actionview/test/fixtures/test/_partial_for_use_in_layout.html.erb +1 -0
  883. data/vendor/rails/actionview/test/fixtures/test/_partial_iteration_1.erb +1 -0
  884. data/vendor/rails/actionview/test/fixtures/test/_partial_iteration_2.erb +1 -0
  885. data/vendor/rails/actionview/test/fixtures/test/_partial_name_in_local_assigns.erb +1 -0
  886. data/vendor/rails/actionview/test/fixtures/test/_partial_name_local_variable.erb +1 -0
  887. data/vendor/rails/actionview/test/fixtures/test/_partial_only.erb +1 -0
  888. data/vendor/rails/actionview/test/fixtures/test/_partial_shortcut_with_block_content.html.erb +3 -0
  889. data/vendor/rails/actionview/test/fixtures/test/_partial_with_layout.erb +2 -0
  890. data/vendor/rails/actionview/test/fixtures/test/_partial_with_layout_block_content.erb +4 -0
  891. data/vendor/rails/actionview/test/fixtures/test/_partial_with_layout_block_partial.erb +4 -0
  892. data/vendor/rails/actionview/test/fixtures/test/_partial_with_only_html_version.html.erb +1 -0
  893. data/vendor/rails/actionview/test/fixtures/test/_partial_with_partial.erb +2 -0
  894. data/vendor/rails/actionview/test/fixtures/test/_partial_with_variants.html+grid.erb +1 -0
  895. data/vendor/rails/actionview/test/fixtures/test/_partialhtml.html +1 -0
  896. data/vendor/rails/actionview/test/fixtures/test/_raise.html.erb +1 -0
  897. data/vendor/rails/actionview/test/fixtures/test/_raise_indentation.html.erb +13 -0
  898. data/vendor/rails/actionview/test/fixtures/test/_second_json_partial.json.erb +1 -0
  899. data/vendor/rails/actionview/test/fixtures/test/_two.html.erb +1 -0
  900. data/vendor/rails/actionview/test/fixtures/test/_utf8_partial.html.erb +1 -0
  901. data/vendor/rails/actionview/test/fixtures/test/_utf8_partial_magic.html.erb +2 -0
  902. data/vendor/rails/actionview/test/fixtures/test/_/360/237/215/243.erb +1 -0
  903. data/vendor/rails/actionview/test/fixtures/test/basic.html.erb +1 -0
  904. data/vendor/rails/actionview/test/fixtures/test/calling_partial_with_layout.html.erb +1 -0
  905. data/vendor/rails/actionview/test/fixtures/test/change_priority.html.erb +2 -0
  906. data/vendor/rails/actionview/test/fixtures/test/dont_pick_me +1 -0
  907. data/vendor/rails/actionview/test/fixtures/test/dot.directory/render_file_with_ivar.erb +1 -0
  908. data/vendor/rails/actionview/test/fixtures/test/greeting.xml.erb +1 -0
  909. data/vendor/rails/actionview/test/fixtures/test/hello.builder +4 -0
  910. data/vendor/rails/actionview/test/fixtures/test/hello/hello.erb +1 -0
  911. data/vendor/rails/actionview/test/fixtures/test/hello_world.da.html.erb +1 -0
  912. data/vendor/rails/actionview/test/fixtures/test/hello_world.erb +1 -0
  913. data/vendor/rails/actionview/test/fixtures/test/hello_world.erb~ +1 -0
  914. data/vendor/rails/actionview/test/fixtures/test/hello_world.html+phone.erb +1 -0
  915. data/vendor/rails/actionview/test/fixtures/test/hello_world.pt-BR.html.erb +1 -0
  916. data/vendor/rails/actionview/test/fixtures/test/hello_world.text+phone.erb +1 -0
  917. data/vendor/rails/actionview/test/fixtures/test/hello_world_with_partial.html.erb +2 -0
  918. data/vendor/rails/actionview/test/fixtures/test/html_template.html.erb +1 -0
  919. data/vendor/rails/actionview/test/fixtures/test/layout_render_file.erb +2 -0
  920. data/vendor/rails/actionview/test/fixtures/test/layout_render_object.erb +1 -0
  921. data/vendor/rails/actionview/test/fixtures/test/list.erb +1 -0
  922. data/vendor/rails/actionview/test/fixtures/test/malformed/malformed.en.html.erb~ +1 -0
  923. data/vendor/rails/actionview/test/fixtures/test/malformed/malformed.erb~ +1 -0
  924. data/vendor/rails/actionview/test/fixtures/test/malformed/malformed.html.erb~ +1 -0
  925. data/vendor/rails/actionview/test/fixtures/test/malformed/malformed~ +1 -0
  926. data/vendor/rails/actionview/test/fixtures/test/nested_layout.erb +3 -0
  927. data/vendor/rails/actionview/test/fixtures/test/nested_streaming.erb +3 -0
  928. data/vendor/rails/actionview/test/fixtures/test/nil_return.erb +1 -0
  929. data/vendor/rails/actionview/test/fixtures/test/one.html.erb +1 -0
  930. data/vendor/rails/actionview/test/fixtures/test/render_file_inspect_local_assigns.erb +1 -0
  931. data/vendor/rails/actionview/test/fixtures/test/render_file_instance_variable.erb +1 -0
  932. data/vendor/rails/actionview/test/fixtures/test/render_file_unicode_local.erb +1 -0
  933. data/vendor/rails/actionview/test/fixtures/test/render_file_with_ivar.erb +1 -0
  934. data/vendor/rails/actionview/test/fixtures/test/render_file_with_locals.erb +1 -0
  935. data/vendor/rails/actionview/test/fixtures/test/render_file_with_locals_and_default.erb +1 -0
  936. data/vendor/rails/actionview/test/fixtures/test/render_file_with_ruby_keyword_locals.erb +1 -0
  937. data/vendor/rails/actionview/test/fixtures/test/render_partial_inside_directory.html.erb +1 -0
  938. data/vendor/rails/actionview/test/fixtures/test/render_two_partials.html.erb +2 -0
  939. data/vendor/rails/actionview/test/fixtures/test/streaming.erb +3 -0
  940. data/vendor/rails/actionview/test/fixtures/test/streaming_buster.erb +3 -0
  941. data/vendor/rails/actionview/test/fixtures/test/streaming_with_locale.erb +1 -0
  942. data/vendor/rails/actionview/test/fixtures/test/sub_template_raise.html.erb +1 -0
  943. data/vendor/rails/actionview/test/fixtures/test/template.erb +1 -0
  944. data/vendor/rails/actionview/test/fixtures/test/test_template_with_delegation_reserved_keywords.erb +1 -0
  945. data/vendor/rails/actionview/test/fixtures/test/update_element_with_capture.erb +9 -0
  946. data/vendor/rails/actionview/test/fixtures/test/utf8.html.erb +4 -0
  947. data/vendor/rails/actionview/test/fixtures/test/utf8_magic.html.erb +5 -0
  948. data/vendor/rails/actionview/test/fixtures/test/utf8_magic_with_bare_partial.html.erb +5 -0
  949. data/vendor/rails/actionview/test/fixtures/topic.rb +5 -0
  950. data/vendor/rails/actionview/test/fixtures/topics.yml +22 -0
  951. data/vendor/rails/actionview/test/fixtures/topics/_topic.html.erb +1 -0
  952. data/vendor/rails/actionview/test/fixtures/translations/templates/array.erb +1 -0
  953. data/vendor/rails/actionview/test/fixtures/translations/templates/default.erb +1 -0
  954. data/vendor/rails/actionview/test/fixtures/translations/templates/found.erb +1 -0
  955. data/vendor/rails/actionview/test/fixtures/translations/templates/missing.erb +1 -0
  956. data/vendor/rails/actionview/test/fixtures/with_format.json.erb +1 -0
  957. data/vendor/rails/actionview/test/lib/controller/fake_models.rb +204 -0
  958. data/vendor/rails/actionview/test/template/active_model_helper_test.rb +172 -0
  959. data/vendor/rails/actionview/test/template/asset_tag_helper_test.rb +913 -0
  960. data/vendor/rails/actionview/test/template/atom_feed_helper_test.rb +375 -0
  961. data/vendor/rails/actionview/test/template/capture_helper_test.rb +228 -0
  962. data/vendor/rails/actionview/test/template/compiled_templates_test.rb +94 -0
  963. data/vendor/rails/actionview/test/template/controller_helper_test.rb +34 -0
  964. data/vendor/rails/actionview/test/template/date_helper_i18n_test.rb +166 -0
  965. data/vendor/rails/actionview/test/template/date_helper_test.rb +3642 -0
  966. data/vendor/rails/actionview/test/template/dependency_tracker_test.rb +195 -0
  967. data/vendor/rails/actionview/test/template/digestor_test.rb +389 -0
  968. data/vendor/rails/actionview/test/template/erb/form_for_test.rb +13 -0
  969. data/vendor/rails/actionview/test/template/erb/helper.rb +26 -0
  970. data/vendor/rails/actionview/test/template/erb/tag_helper_test.rb +32 -0
  971. data/vendor/rails/actionview/test/template/erb_util_test.rb +114 -0
  972. data/vendor/rails/actionview/test/template/form_collections_helper_test.rb +527 -0
  973. data/vendor/rails/actionview/test/template/form_helper/form_with_test.rb +2293 -0
  974. data/vendor/rails/actionview/test/template/form_helper_test.rb +3554 -0
  975. data/vendor/rails/actionview/test/template/form_options_helper_i18n_test.rb +30 -0
  976. data/vendor/rails/actionview/test/template/form_options_helper_test.rb +1452 -0
  977. data/vendor/rails/actionview/test/template/form_tag_helper_test.rb +785 -0
  978. data/vendor/rails/actionview/test/template/html_test.rb +19 -0
  979. data/vendor/rails/actionview/test/template/javascript_helper_test.rb +68 -0
  980. data/vendor/rails/actionview/test/template/log_subscriber_test.rb +224 -0
  981. data/vendor/rails/actionview/test/template/lookup_context_test.rb +289 -0
  982. data/vendor/rails/actionview/test/template/number_helper_test.rb +204 -0
  983. data/vendor/rails/actionview/test/template/output_safety_helper_test.rb +119 -0
  984. data/vendor/rails/actionview/test/template/partial_iteration_test.rb +35 -0
  985. data/vendor/rails/actionview/test/template/record_identifier_test.rb +93 -0
  986. data/vendor/rails/actionview/test/template/record_tag_helper_test.rb +33 -0
  987. data/vendor/rails/actionview/test/template/render_test.rb +725 -0
  988. data/vendor/rails/actionview/test/template/resolver_cache_test.rb +9 -0
  989. data/vendor/rails/actionview/test/template/resolver_patterns_test.rb +44 -0
  990. data/vendor/rails/actionview/test/template/sanitize_helper_test.rb +43 -0
  991. data/vendor/rails/actionview/test/template/streaming_render_test.rb +132 -0
  992. data/vendor/rails/actionview/test/template/tag_helper_test.rb +357 -0
  993. data/vendor/rails/actionview/test/template/template_error_test.rb +37 -0
  994. data/vendor/rails/actionview/test/template/template_test.rb +207 -0
  995. data/vendor/rails/actionview/test/template/test_case_test.rb +335 -0
  996. data/vendor/rails/actionview/test/template/test_test.rb +94 -0
  997. data/vendor/rails/actionview/test/template/testing/fixture_resolver_test.rb +20 -0
  998. data/vendor/rails/actionview/test/template/testing/null_resolver_test.rb +14 -0
  999. data/vendor/rails/actionview/test/template/text_helper_test.rb +535 -0
  1000. data/vendor/rails/actionview/test/template/text_test.rb +25 -0
  1001. data/vendor/rails/actionview/test/template/translation_helper_test.rb +238 -0
  1002. data/vendor/rails/actionview/test/template/url_helper_test.rb +976 -0
  1003. data/vendor/rails/actionview/test/ujs/config.ru +6 -0
  1004. data/vendor/rails/actionview/test/ujs/public/test/call-ajax.js +26 -0
  1005. data/vendor/rails/actionview/test/ujs/public/test/call-remote-callbacks.js +239 -0
  1006. data/vendor/rails/actionview/test/ujs/public/test/call-remote.js +275 -0
  1007. data/vendor/rails/actionview/test/ujs/public/test/csrf-refresh.js +24 -0
  1008. data/vendor/rails/actionview/test/ujs/public/test/csrf-token.js +27 -0
  1009. data/vendor/rails/actionview/test/ujs/public/test/data-confirm.js +316 -0
  1010. data/vendor/rails/actionview/test/ujs/public/test/data-disable-with.js +394 -0
  1011. data/vendor/rails/actionview/test/ujs/public/test/data-disable.js +322 -0
  1012. data/vendor/rails/actionview/test/ujs/public/test/data-method.js +85 -0
  1013. data/vendor/rails/actionview/test/ujs/public/test/data-remote.js +441 -0
  1014. data/vendor/rails/actionview/test/ujs/public/test/override.js +56 -0
  1015. data/vendor/rails/actionview/test/ujs/public/test/settings.js +118 -0
  1016. data/vendor/rails/actionview/test/ujs/public/vendor/jquery-2.2.0.js +9831 -0
  1017. data/vendor/rails/actionview/test/ujs/public/vendor/jquery.metadata.js +122 -0
  1018. data/vendor/rails/actionview/test/ujs/public/vendor/qunit.css +237 -0
  1019. data/vendor/rails/actionview/test/ujs/public/vendor/qunit.js +2288 -0
  1020. data/vendor/rails/actionview/test/ujs/server.rb +86 -0
  1021. data/vendor/rails/actionview/test/ujs/views/layouts/application.html.erb +26 -0
  1022. data/vendor/rails/actionview/test/ujs/views/tests/index.html.erb +11 -0
  1023. data/vendor/rails/ci/qunit-selenium-runner.rb +16 -0
  1024. data/vendor/rails/ci/travis.rb +187 -0
  1025. data/vendor/rails/rails.gemspec +36 -0
  1026. data/vendor/rails/version.rb +17 -0
  1027. metadata +1030 -30
@@ -0,0 +1,102 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "abstract_unit"
4
+ require "controller/fake_models"
5
+ require "pathname"
6
+
7
+ class RenderXmlTest < ActionController::TestCase
8
+ class XmlRenderable
9
+ def to_xml(options)
10
+ options[:root] ||= "i-am-xml"
11
+ "<#{options[:root]}/>"
12
+ end
13
+ end
14
+
15
+ class TestController < ActionController::Base
16
+ protect_from_forgery
17
+
18
+ def self.controller_path
19
+ "test"
20
+ end
21
+
22
+ def render_with_location
23
+ render xml: "<hello/>", location: "http://example.com", status: 201
24
+ end
25
+
26
+ def render_with_object_location
27
+ customer = Customer.new("Some guy", 1)
28
+ render xml: "<customer/>", location: customer, status: :created
29
+ end
30
+
31
+ def render_with_to_xml
32
+ render xml: XmlRenderable.new
33
+ end
34
+
35
+ def formatted_xml_erb
36
+ end
37
+
38
+ def render_xml_with_custom_content_type
39
+ render xml: "<blah/>", content_type: "application/atomsvc+xml"
40
+ end
41
+
42
+ def render_xml_with_custom_options
43
+ render xml: XmlRenderable.new, root: "i-am-THE-xml"
44
+ end
45
+ end
46
+
47
+ tests TestController
48
+
49
+ def setup
50
+ # enable a logger so that (e.g.) the benchmarking stuff runs, so we can get
51
+ # a more accurate simulation of what happens in "real life".
52
+ super
53
+ @controller.logger = ActiveSupport::Logger.new(nil)
54
+
55
+ @request.host = "www.nextangle.com"
56
+ end
57
+
58
+ def test_rendering_with_location_should_set_header
59
+ get :render_with_location
60
+ assert_equal "http://example.com", @response.headers["Location"]
61
+ end
62
+
63
+ def test_rendering_xml_should_call_to_xml_if_possible
64
+ get :render_with_to_xml
65
+ assert_equal "<i-am-xml/>", @response.body
66
+ end
67
+
68
+ def test_rendering_xml_should_call_to_xml_with_extra_options
69
+ get :render_xml_with_custom_options
70
+ assert_equal "<i-am-THE-xml/>", @response.body
71
+ end
72
+
73
+ def test_rendering_with_object_location_should_set_header_with_url_for
74
+ with_routing do |set|
75
+ set.draw do
76
+ resources :customers
77
+
78
+ ActiveSupport::Deprecation.silence do
79
+ get ":controller/:action"
80
+ end
81
+ end
82
+
83
+ get :render_with_object_location
84
+ assert_equal "http://www.nextangle.com/customers/1", @response.headers["Location"]
85
+ end
86
+ end
87
+
88
+ def test_should_render_formatted_xml_erb_template
89
+ get :formatted_xml_erb, format: :xml
90
+ assert_equal "<test>passed formatted xml erb</test>", @response.body
91
+ end
92
+
93
+ def test_should_render_xml_but_keep_custom_content_type
94
+ get :render_xml_with_custom_content_type
95
+ assert_equal "application/atomsvc+xml", @response.content_type
96
+ end
97
+
98
+ def test_should_use_implicit_content_type
99
+ get :implicit_content_type, format: "atom"
100
+ assert_equal Mime[:atom], @response.content_type
101
+ end
102
+ end
@@ -0,0 +1,136 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "abstract_unit"
4
+
5
+ class RendererTest < ActiveSupport::TestCase
6
+ test "action controller base has a renderer" do
7
+ assert ActionController::Base.renderer
8
+ end
9
+
10
+ test "creating with a controller" do
11
+ controller = CommentsController
12
+ renderer = ActionController::Renderer.for controller
13
+
14
+ assert_equal controller, renderer.controller
15
+ end
16
+
17
+ test "creating from a controller" do
18
+ controller = AccountsController
19
+ renderer = controller.renderer
20
+
21
+ assert_equal controller, renderer.controller
22
+ end
23
+
24
+ test "creating with new defaults" do
25
+ renderer = ApplicationController.renderer
26
+
27
+ new_defaults = { https: true }
28
+ new_renderer = renderer.with_defaults(new_defaults).new
29
+ content = new_renderer.render(inline: "<%= request.ssl? %>")
30
+
31
+ assert_equal "true", content
32
+ end
33
+
34
+ test "rendering with a class renderer" do
35
+ renderer = ApplicationController.renderer
36
+ content = renderer.render template: "ruby_template"
37
+
38
+ assert_equal "Hello from Ruby code", content
39
+ end
40
+
41
+ test "rendering with an instance renderer" do
42
+ renderer = ApplicationController.renderer.new
43
+ content = renderer.render file: "test/hello_world"
44
+
45
+ assert_equal "Hello world!", content
46
+ end
47
+
48
+ test "rendering with a controller class" do
49
+ assert_equal "Hello world!", ApplicationController.render("test/hello_world")
50
+ end
51
+
52
+ test "rendering with locals" do
53
+ renderer = ApplicationController.renderer
54
+ content = renderer.render template: "test/render_file_with_locals",
55
+ locals: { secret: "bar" }
56
+
57
+ assert_equal "The secret is bar\n", content
58
+ end
59
+
60
+ test "rendering with assigns" do
61
+ renderer = ApplicationController.renderer
62
+ content = renderer.render template: "test/render_file_with_ivar",
63
+ assigns: { secret: "foo" }
64
+
65
+ assert_equal "The secret is foo\n", content
66
+ end
67
+
68
+ test "rendering with custom env" do
69
+ renderer = ApplicationController.renderer.new method: "post"
70
+ content = renderer.render inline: "<%= request.post? %>"
71
+
72
+ assert_equal "true", content
73
+ end
74
+
75
+ test "rendering with custom env using a key that is not in RACK_KEY_TRANSLATION" do
76
+ value = "warden is here"
77
+ renderer = ApplicationController.renderer.new warden: value
78
+ content = renderer.render inline: "<%= request.env['warden'] %>"
79
+
80
+ assert_equal value, content
81
+ end
82
+
83
+ test "rendering with defaults" do
84
+ renderer = ApplicationController.renderer.new https: true
85
+ content = renderer.render inline: "<%= request.ssl? %>"
86
+
87
+ assert_equal "true", content
88
+ end
89
+
90
+ test "same defaults from the same controller" do
91
+ renderer_defaults = ->(controller) { controller.renderer.defaults }
92
+
93
+ assert_equal renderer_defaults[AccountsController], renderer_defaults[AccountsController]
94
+ assert_equal renderer_defaults[AccountsController], renderer_defaults[CommentsController]
95
+ end
96
+
97
+ test "rendering with different formats" do
98
+ html = "Hello world!"
99
+ xml = "<p>Hello world!</p>\n"
100
+
101
+ assert_equal html, render["respond_to/using_defaults"]
102
+ assert_equal xml, render["respond_to/using_defaults.xml.builder"]
103
+ assert_equal xml, render["respond_to/using_defaults", formats: :xml]
104
+ end
105
+
106
+ test "rendering with helpers" do
107
+ assert_equal "<p>1\n<br />2</p>", render[inline: '<%= simple_format "1\n2" %>']
108
+ end
109
+
110
+ test "rendering with user specified defaults" do
111
+ ApplicationController.renderer.defaults.merge!(hello: "hello", https: true)
112
+ renderer = ApplicationController.renderer.new
113
+ content = renderer.render inline: "<%= request.ssl? %>"
114
+
115
+ assert_equal "true", content
116
+ end
117
+
118
+ test "return valid asset url with defaults" do
119
+ renderer = ApplicationController.renderer
120
+ content = renderer.render inline: "<%= asset_url 'asset.jpg' %>"
121
+
122
+ assert_equal "http://example.org/asset.jpg", content
123
+ end
124
+
125
+ test "return valid asset url when https is true" do
126
+ renderer = ApplicationController.renderer.new https: true
127
+ content = renderer.render inline: "<%= asset_url 'asset.jpg' %>"
128
+
129
+ assert_equal "https://example.org/asset.jpg", content
130
+ end
131
+
132
+ private
133
+ def render
134
+ @render ||= ApplicationController.renderer.method(:render)
135
+ end
136
+ end
@@ -0,0 +1,91 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "abstract_unit"
4
+ require "controller/fake_models"
5
+ require "active_support/logger"
6
+
7
+ class RenderersTest < ActionController::TestCase
8
+ class XmlRenderable
9
+ def to_xml(options)
10
+ options[:root] ||= "i-am-xml"
11
+ "<#{options[:root]}/>"
12
+ end
13
+ end
14
+ class JsonRenderable
15
+ def as_json(options = {})
16
+ hash = { a: :b, c: :d, e: :f }
17
+ hash.except!(*options[:except]) if options[:except]
18
+ hash
19
+ end
20
+
21
+ def to_json(options = {})
22
+ super except: [:c, :e]
23
+ end
24
+ end
25
+ class CsvRenderable
26
+ def to_csv
27
+ "c,s,v"
28
+ end
29
+ end
30
+ class TestController < ActionController::Base
31
+ def render_simon_says
32
+ render simon: "foo"
33
+ end
34
+
35
+ def respond_to_mime
36
+ respond_to do |type|
37
+ type.json do
38
+ render json: JsonRenderable.new
39
+ end
40
+ type.js { render json: "JS", callback: "alert" }
41
+ type.csv { render csv: CsvRenderable.new }
42
+ type.xml { render xml: XmlRenderable.new }
43
+ type.html { render body: "HTML" }
44
+ type.rss { render body: "RSS" }
45
+ type.all { render body: "Nothing" }
46
+ type.any(:js, :xml) { render body: "Either JS or XML" }
47
+ end
48
+ end
49
+ end
50
+
51
+ tests TestController
52
+
53
+ def setup
54
+ # enable a logger so that (e.g.) the benchmarking stuff runs, so we can get
55
+ # a more accurate simulation of what happens in "real life".
56
+ super
57
+ @controller.logger = ActiveSupport::Logger.new(nil)
58
+ end
59
+
60
+ def test_using_custom_render_option
61
+ ActionController.add_renderer :simon do |says, options|
62
+ self.content_type = Mime[:text]
63
+ self.response_body = "Simon says: #{says}"
64
+ end
65
+
66
+ get :render_simon_says
67
+ assert_equal "Simon says: foo", @response.body
68
+ ensure
69
+ ActionController.remove_renderer :simon
70
+ end
71
+
72
+ def test_raises_missing_template_no_renderer
73
+ assert_raise ActionView::MissingTemplate do
74
+ get :respond_to_mime, format: "csv"
75
+ end
76
+ assert_equal Mime[:csv], @response.content_type
77
+ assert_equal "", @response.body
78
+ end
79
+
80
+ def test_adding_csv_rendering_via_renderers_add
81
+ ActionController::Renderers.add :csv do |value, options|
82
+ send_data value.to_csv, type: Mime[:csv]
83
+ end
84
+ @request.accept = "text/csv"
85
+ get :respond_to_mime, format: "csv"
86
+ assert_equal Mime[:csv], @response.content_type
87
+ assert_equal "c,s,v", @response.body
88
+ ensure
89
+ ActionController::Renderers.remove :csv
90
+ end
91
+ end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "abstract_unit"
4
+ require "stringio"
5
+
6
+ class ActionController::TestRequestTest < ActionController::TestCase
7
+ def test_test_request_has_session_options_initialized
8
+ assert @request.session_options
9
+ end
10
+
11
+ def test_mutating_session_options_does_not_affect_default_options
12
+ @request.session_options[:myparam] = 123
13
+ assert_nil ActionController::TestSession::DEFAULT_OPTIONS[:myparam]
14
+ end
15
+
16
+ def test_content_length_has_bytes_count_value
17
+ non_ascii_parameters = { data: { content: "Latin + Кириллица" } }
18
+ @request.set_header "REQUEST_METHOD", "POST"
19
+ @request.set_header "CONTENT_TYPE", "application/json"
20
+ @request.assign_parameters(@routes, "test", "create", non_ascii_parameters,
21
+ "/test", [:data, :controller, :action])
22
+ assert_equal(StringIO.new(non_ascii_parameters.to_json).length.to_s,
23
+ @request.get_header("CONTENT_LENGTH"))
24
+ end
25
+
26
+ ActionDispatch::Session::AbstractStore::DEFAULT_OPTIONS.each_pair do |key, value|
27
+ test "rack default session options #{key} exists in session options and is default" do
28
+ if value.nil?
29
+ assert_nil(@request.session_options[key],
30
+ "Missing rack session default option #{key} in request.session_options")
31
+ else
32
+ assert_equal(value, @request.session_options[key],
33
+ "Missing rack session default option #{key} in request.session_options")
34
+ end
35
+ end
36
+
37
+ test "rack default session options #{key} exists in session options" do
38
+ assert(@request.session_options.has_key?(key),
39
+ "Missing rack session option #{key} in request.session_options")
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,1013 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "abstract_unit"
4
+ require "active_support/log_subscriber/test_helper"
5
+ require "active_support/messages/rotation_configuration"
6
+
7
+ # common controller actions
8
+ module RequestForgeryProtectionActions
9
+ def index
10
+ render inline: "<%= form_tag('/') {} %>"
11
+ end
12
+
13
+ def show_button
14
+ render inline: "<%= button_to('New', '/') %>"
15
+ end
16
+
17
+ def unsafe
18
+ render plain: "pwn"
19
+ end
20
+
21
+ def meta
22
+ render inline: "<%= csrf_meta_tags %>"
23
+ end
24
+
25
+ def form_for_remote
26
+ render inline: "<%= form_for(:some_resource, :remote => true ) {} %>"
27
+ end
28
+
29
+ def form_for_remote_with_token
30
+ render inline: "<%= form_for(:some_resource, :remote => true, :authenticity_token => true ) {} %>"
31
+ end
32
+
33
+ def form_for_with_token
34
+ render inline: "<%= form_for(:some_resource, :authenticity_token => true ) {} %>"
35
+ end
36
+
37
+ def form_for_remote_with_external_token
38
+ render inline: "<%= form_for(:some_resource, :remote => true, :authenticity_token => 'external_token') {} %>"
39
+ end
40
+
41
+ def form_with_remote
42
+ render inline: "<%= form_with(scope: :some_resource) {} %>"
43
+ end
44
+
45
+ def form_with_remote_with_token
46
+ render inline: "<%= form_with(scope: :some_resource, authenticity_token: true) {} %>"
47
+ end
48
+
49
+ def form_with_local_with_token
50
+ render inline: "<%= form_with(scope: :some_resource, local: true, authenticity_token: true) {} %>"
51
+ end
52
+
53
+ def form_with_remote_with_external_token
54
+ render inline: "<%= form_with(scope: :some_resource, authenticity_token: 'external_token') {} %>"
55
+ end
56
+
57
+ def same_origin_js
58
+ render js: "foo();"
59
+ end
60
+
61
+ def negotiate_same_origin
62
+ respond_to do |format|
63
+ format.js { same_origin_js }
64
+ end
65
+ end
66
+
67
+ def cross_origin_js
68
+ same_origin_js
69
+ end
70
+
71
+ def negotiate_cross_origin
72
+ negotiate_same_origin
73
+ end
74
+ end
75
+
76
+ # sample controllers
77
+ class RequestForgeryProtectionControllerUsingResetSession < ActionController::Base
78
+ include RequestForgeryProtectionActions
79
+ protect_from_forgery only: %w(index meta same_origin_js negotiate_same_origin), with: :reset_session
80
+ end
81
+
82
+ class RequestForgeryProtectionControllerUsingException < ActionController::Base
83
+ include RequestForgeryProtectionActions
84
+ protect_from_forgery only: %w(index meta same_origin_js negotiate_same_origin), with: :exception
85
+ end
86
+
87
+ class RequestForgeryProtectionControllerUsingNullSession < ActionController::Base
88
+ protect_from_forgery with: :null_session
89
+
90
+ def signed
91
+ cookies.signed[:foo] = "bar"
92
+ head :ok
93
+ end
94
+
95
+ def encrypted
96
+ cookies.encrypted[:foo] = "bar"
97
+ head :ok
98
+ end
99
+
100
+ def try_to_reset_session
101
+ reset_session
102
+ head :ok
103
+ end
104
+ end
105
+
106
+ class PrependProtectForgeryBaseController < ActionController::Base
107
+ before_action :custom_action
108
+ attr_accessor :called_callbacks
109
+
110
+ def index
111
+ render inline: "OK"
112
+ end
113
+
114
+ private
115
+
116
+ def add_called_callback(name)
117
+ @called_callbacks ||= []
118
+ @called_callbacks << name
119
+ end
120
+
121
+ def custom_action
122
+ add_called_callback("custom_action")
123
+ end
124
+
125
+ def verify_authenticity_token
126
+ add_called_callback("verify_authenticity_token")
127
+ end
128
+ end
129
+
130
+ class FreeCookieController < RequestForgeryProtectionControllerUsingResetSession
131
+ self.allow_forgery_protection = false
132
+
133
+ def index
134
+ render inline: "<%= form_tag('/') {} %>"
135
+ end
136
+
137
+ def show_button
138
+ render inline: "<%= button_to('New', '/') %>"
139
+ end
140
+ end
141
+
142
+ class CustomAuthenticityParamController < RequestForgeryProtectionControllerUsingResetSession
143
+ def form_authenticity_param
144
+ "foobar"
145
+ end
146
+ end
147
+
148
+ class PerFormTokensController < ActionController::Base
149
+ protect_from_forgery with: :exception
150
+ self.per_form_csrf_tokens = true
151
+
152
+ def index
153
+ render inline: "<%= form_tag (params[:form_path] || '/per_form_tokens/post_one'), method: params[:form_method] %>"
154
+ end
155
+
156
+ def button_to
157
+ render inline: "<%= button_to 'Button', (params[:form_path] || '/per_form_tokens/post_one'), method: params[:form_method] %>"
158
+ end
159
+
160
+ def post_one
161
+ render plain: ""
162
+ end
163
+
164
+ def post_two
165
+ render plain: ""
166
+ end
167
+ end
168
+
169
+ class SkipProtectionController < ActionController::Base
170
+ include RequestForgeryProtectionActions
171
+ protect_from_forgery with: :exception
172
+ skip_forgery_protection if: :skip_requested
173
+ attr_accessor :skip_requested
174
+ end
175
+
176
+ # common test methods
177
+ module RequestForgeryProtectionTests
178
+ def setup
179
+ @token = Base64.strict_encode64("railstestrailstestrailstestrails")
180
+ @old_request_forgery_protection_token = ActionController::Base.request_forgery_protection_token
181
+ ActionController::Base.request_forgery_protection_token = :custom_authenticity_token
182
+ end
183
+
184
+ def teardown
185
+ ActionController::Base.request_forgery_protection_token = @old_request_forgery_protection_token
186
+ end
187
+
188
+ def test_should_render_form_with_token_tag
189
+ @controller.stub :form_authenticity_token, @token do
190
+ assert_not_blocked do
191
+ get :index
192
+ end
193
+ assert_select "form>input[name=?][value=?]", "custom_authenticity_token", @token
194
+ end
195
+ end
196
+
197
+ def test_should_render_button_to_with_token_tag
198
+ @controller.stub :form_authenticity_token, @token do
199
+ assert_not_blocked do
200
+ get :show_button
201
+ end
202
+ assert_select "form>input[name=?][value=?]", "custom_authenticity_token", @token
203
+ end
204
+ end
205
+
206
+ def test_should_render_form_without_token_tag_if_remote
207
+ assert_not_blocked do
208
+ get :form_for_remote
209
+ end
210
+ assert_no_match(/authenticity_token/, response.body)
211
+ end
212
+
213
+ def test_should_render_form_with_token_tag_if_remote_and_embedding_token_is_on
214
+ original = ActionView::Helpers::FormTagHelper.embed_authenticity_token_in_remote_forms
215
+ begin
216
+ ActionView::Helpers::FormTagHelper.embed_authenticity_token_in_remote_forms = true
217
+ assert_not_blocked do
218
+ get :form_for_remote
219
+ end
220
+ assert_match(/authenticity_token/, response.body)
221
+ ensure
222
+ ActionView::Helpers::FormTagHelper.embed_authenticity_token_in_remote_forms = original
223
+ end
224
+ end
225
+
226
+ def test_should_render_form_with_token_tag_if_remote_and_external_authenticity_token_requested_and_embedding_is_on
227
+ original = ActionView::Helpers::FormTagHelper.embed_authenticity_token_in_remote_forms
228
+ begin
229
+ ActionView::Helpers::FormTagHelper.embed_authenticity_token_in_remote_forms = true
230
+ assert_not_blocked do
231
+ get :form_for_remote_with_external_token
232
+ end
233
+ assert_select "form>input[name=?][value=?]", "custom_authenticity_token", "external_token"
234
+ ensure
235
+ ActionView::Helpers::FormTagHelper.embed_authenticity_token_in_remote_forms = original
236
+ end
237
+ end
238
+
239
+ def test_should_render_form_with_token_tag_if_remote_and_external_authenticity_token_requested
240
+ assert_not_blocked do
241
+ get :form_for_remote_with_external_token
242
+ end
243
+ assert_select "form>input[name=?][value=?]", "custom_authenticity_token", "external_token"
244
+ end
245
+
246
+ def test_should_render_form_with_token_tag_if_remote_and_authenticity_token_requested
247
+ @controller.stub :form_authenticity_token, @token do
248
+ assert_not_blocked do
249
+ get :form_for_remote_with_token
250
+ end
251
+ assert_select "form>input[name=?][value=?]", "custom_authenticity_token", @token
252
+ end
253
+ end
254
+
255
+ def test_should_render_form_with_token_tag_with_authenticity_token_requested
256
+ @controller.stub :form_authenticity_token, @token do
257
+ assert_not_blocked do
258
+ get :form_for_with_token
259
+ end
260
+ assert_select "form>input[name=?][value=?]", "custom_authenticity_token", @token
261
+ end
262
+ end
263
+
264
+ def test_should_render_form_with_with_token_tag_if_remote
265
+ assert_not_blocked do
266
+ get :form_with_remote
267
+ end
268
+ assert_match(/authenticity_token/, response.body)
269
+ end
270
+
271
+ def test_should_render_form_with_without_token_tag_if_remote_and_embedding_token_is_off
272
+ original = ActionView::Helpers::FormTagHelper.embed_authenticity_token_in_remote_forms
273
+ begin
274
+ ActionView::Helpers::FormTagHelper.embed_authenticity_token_in_remote_forms = false
275
+ assert_not_blocked do
276
+ get :form_with_remote
277
+ end
278
+ assert_no_match(/authenticity_token/, response.body)
279
+ ensure
280
+ ActionView::Helpers::FormTagHelper.embed_authenticity_token_in_remote_forms = original
281
+ end
282
+ end
283
+
284
+ def test_should_render_form_with_with_token_tag_if_remote_and_external_authenticity_token_requested_and_embedding_is_on
285
+ original = ActionView::Helpers::FormTagHelper.embed_authenticity_token_in_remote_forms
286
+ begin
287
+ ActionView::Helpers::FormTagHelper.embed_authenticity_token_in_remote_forms = true
288
+ assert_not_blocked do
289
+ get :form_with_remote_with_external_token
290
+ end
291
+ assert_select "form>input[name=?][value=?]", "custom_authenticity_token", "external_token"
292
+ ensure
293
+ ActionView::Helpers::FormTagHelper.embed_authenticity_token_in_remote_forms = original
294
+ end
295
+ end
296
+
297
+ def test_should_render_form_with_with_token_tag_if_remote_and_external_authenticity_token_requested
298
+ assert_not_blocked do
299
+ get :form_with_remote_with_external_token
300
+ end
301
+ assert_select "form>input[name=?][value=?]", "custom_authenticity_token", "external_token"
302
+ end
303
+
304
+ def test_should_render_form_with_with_token_tag_if_remote_and_authenticity_token_requested
305
+ @controller.stub :form_authenticity_token, @token do
306
+ assert_not_blocked do
307
+ get :form_with_remote_with_token
308
+ end
309
+ assert_select "form>input[name=?][value=?]", "custom_authenticity_token", @token
310
+ end
311
+ end
312
+
313
+ def test_should_render_form_with_with_token_tag_with_authenticity_token_requested
314
+ @controller.stub :form_authenticity_token, @token do
315
+ assert_not_blocked do
316
+ get :form_with_local_with_token
317
+ end
318
+ assert_select "form>input[name=?][value=?]", "custom_authenticity_token", @token
319
+ end
320
+ end
321
+
322
+ def test_should_render_form_with_with_token_tag_if_remote_and_embedding_token_is_on
323
+ original = ActionView::Helpers::FormTagHelper.embed_authenticity_token_in_remote_forms
324
+ begin
325
+ ActionView::Helpers::FormTagHelper.embed_authenticity_token_in_remote_forms = true
326
+
327
+ @controller.stub :form_authenticity_token, @token do
328
+ assert_not_blocked do
329
+ get :form_with_remote
330
+ end
331
+ end
332
+ assert_select "form>input[name=?][value=?]", "custom_authenticity_token", @token
333
+ ensure
334
+ ActionView::Helpers::FormTagHelper.embed_authenticity_token_in_remote_forms = original
335
+ end
336
+ end
337
+
338
+ def test_should_allow_get
339
+ assert_not_blocked { get :index }
340
+ end
341
+
342
+ def test_should_allow_head
343
+ assert_not_blocked { head :index }
344
+ end
345
+
346
+ def test_should_allow_post_without_token_on_unsafe_action
347
+ assert_not_blocked { post :unsafe }
348
+ end
349
+
350
+ def test_should_not_allow_post_without_token
351
+ assert_blocked { post :index }
352
+ end
353
+
354
+ def test_should_not_allow_post_without_token_irrespective_of_format
355
+ assert_blocked { post :index, format: "xml" }
356
+ end
357
+
358
+ def test_should_not_allow_patch_without_token
359
+ assert_blocked { patch :index }
360
+ end
361
+
362
+ def test_should_not_allow_put_without_token
363
+ assert_blocked { put :index }
364
+ end
365
+
366
+ def test_should_not_allow_delete_without_token
367
+ assert_blocked { delete :index }
368
+ end
369
+
370
+ def test_should_not_allow_xhr_post_without_token
371
+ assert_blocked { post :index, xhr: true }
372
+ end
373
+
374
+ def test_should_allow_post_with_token
375
+ session[:_csrf_token] = @token
376
+ @controller.stub :form_authenticity_token, @token do
377
+ assert_not_blocked { post :index, params: { custom_authenticity_token: @token } }
378
+ end
379
+ end
380
+
381
+ def test_should_allow_patch_with_token
382
+ session[:_csrf_token] = @token
383
+ @controller.stub :form_authenticity_token, @token do
384
+ assert_not_blocked { patch :index, params: { custom_authenticity_token: @token } }
385
+ end
386
+ end
387
+
388
+ def test_should_allow_put_with_token
389
+ session[:_csrf_token] = @token
390
+ @controller.stub :form_authenticity_token, @token do
391
+ assert_not_blocked { put :index, params: { custom_authenticity_token: @token } }
392
+ end
393
+ end
394
+
395
+ def test_should_allow_delete_with_token
396
+ session[:_csrf_token] = @token
397
+ @controller.stub :form_authenticity_token, @token do
398
+ assert_not_blocked { delete :index, params: { custom_authenticity_token: @token } }
399
+ end
400
+ end
401
+
402
+ def test_should_allow_post_with_token_in_header
403
+ session[:_csrf_token] = @token
404
+ @request.env["HTTP_X_CSRF_TOKEN"] = @token
405
+ assert_not_blocked { post :index }
406
+ end
407
+
408
+ def test_should_allow_delete_with_token_in_header
409
+ session[:_csrf_token] = @token
410
+ @request.env["HTTP_X_CSRF_TOKEN"] = @token
411
+ assert_not_blocked { delete :index }
412
+ end
413
+
414
+ def test_should_allow_patch_with_token_in_header
415
+ session[:_csrf_token] = @token
416
+ @request.env["HTTP_X_CSRF_TOKEN"] = @token
417
+ assert_not_blocked { patch :index }
418
+ end
419
+
420
+ def test_should_allow_put_with_token_in_header
421
+ session[:_csrf_token] = @token
422
+ @request.env["HTTP_X_CSRF_TOKEN"] = @token
423
+ assert_not_blocked { put :index }
424
+ end
425
+
426
+ def test_should_allow_post_with_origin_checking_and_correct_origin
427
+ forgery_protection_origin_check do
428
+ session[:_csrf_token] = @token
429
+ @controller.stub :form_authenticity_token, @token do
430
+ assert_not_blocked do
431
+ @request.set_header "HTTP_ORIGIN", "http://test.host"
432
+ post :index, params: { custom_authenticity_token: @token }
433
+ end
434
+ end
435
+ end
436
+ end
437
+
438
+ def test_should_allow_post_with_origin_checking_and_no_origin
439
+ forgery_protection_origin_check do
440
+ session[:_csrf_token] = @token
441
+ @controller.stub :form_authenticity_token, @token do
442
+ assert_not_blocked do
443
+ post :index, params: { custom_authenticity_token: @token }
444
+ end
445
+ end
446
+ end
447
+ end
448
+
449
+ def test_should_raise_for_post_with_null_origin
450
+ forgery_protection_origin_check do
451
+ session[:_csrf_token] = @token
452
+ @controller.stub :form_authenticity_token, @token do
453
+ exception = assert_raises(ActionController::InvalidAuthenticityToken) do
454
+ @request.set_header "HTTP_ORIGIN", "null"
455
+ post :index, params: { custom_authenticity_token: @token }
456
+ end
457
+ assert_match "The browser returned a 'null' origin for a request", exception.message
458
+ end
459
+ end
460
+ end
461
+
462
+ def test_should_block_post_with_origin_checking_and_wrong_origin
463
+ old_logger = ActionController::Base.logger
464
+ logger = ActiveSupport::LogSubscriber::TestHelper::MockLogger.new
465
+ ActionController::Base.logger = logger
466
+
467
+ forgery_protection_origin_check do
468
+ session[:_csrf_token] = @token
469
+ @controller.stub :form_authenticity_token, @token do
470
+ assert_blocked do
471
+ @request.set_header "HTTP_ORIGIN", "http://bad.host"
472
+ post :index, params: { custom_authenticity_token: @token }
473
+ end
474
+ end
475
+ end
476
+
477
+ assert_match(
478
+ "HTTP Origin header (http://bad.host) didn't match request.base_url (http://test.host)",
479
+ logger.logged(:warn).last
480
+ )
481
+ ensure
482
+ ActionController::Base.logger = old_logger
483
+ end
484
+
485
+ def test_should_warn_on_missing_csrf_token
486
+ old_logger = ActionController::Base.logger
487
+ logger = ActiveSupport::LogSubscriber::TestHelper::MockLogger.new
488
+ ActionController::Base.logger = logger
489
+
490
+ begin
491
+ assert_blocked { post :index }
492
+
493
+ assert_equal 1, logger.logged(:warn).size
494
+ assert_match(/CSRF token authenticity/, logger.logged(:warn).last)
495
+ ensure
496
+ ActionController::Base.logger = old_logger
497
+ end
498
+ end
499
+
500
+ def test_should_not_warn_if_csrf_logging_disabled
501
+ old_logger = ActionController::Base.logger
502
+ logger = ActiveSupport::LogSubscriber::TestHelper::MockLogger.new
503
+ ActionController::Base.logger = logger
504
+ ActionController::Base.log_warning_on_csrf_failure = false
505
+
506
+ begin
507
+ assert_blocked { post :index }
508
+
509
+ assert_equal 0, logger.logged(:warn).size
510
+ ensure
511
+ ActionController::Base.logger = old_logger
512
+ ActionController::Base.log_warning_on_csrf_failure = true
513
+ end
514
+ end
515
+
516
+ def test_should_only_allow_same_origin_js_get_with_xhr_header
517
+ assert_cross_origin_blocked { get :same_origin_js }
518
+ assert_cross_origin_blocked { get :same_origin_js, format: "js" }
519
+ assert_cross_origin_blocked do
520
+ @request.accept = "text/javascript"
521
+ get :negotiate_same_origin
522
+ end
523
+
524
+ assert_cross_origin_not_blocked { get :same_origin_js, xhr: true }
525
+ assert_cross_origin_not_blocked { get :same_origin_js, xhr: true, format: "js" }
526
+ assert_cross_origin_not_blocked do
527
+ @request.accept = "text/javascript"
528
+ get :negotiate_same_origin, xhr: true
529
+ end
530
+ end
531
+
532
+ def test_should_warn_on_not_same_origin_js
533
+ old_logger = ActionController::Base.logger
534
+ logger = ActiveSupport::LogSubscriber::TestHelper::MockLogger.new
535
+ ActionController::Base.logger = logger
536
+
537
+ begin
538
+ assert_cross_origin_blocked { get :same_origin_js }
539
+
540
+ assert_equal 1, logger.logged(:warn).size
541
+ assert_match(/<script> tag on another site requested protected JavaScript/, logger.logged(:warn).last)
542
+ ensure
543
+ ActionController::Base.logger = old_logger
544
+ end
545
+ end
546
+
547
+ def test_should_not_warn_if_csrf_logging_disabled_and_not_same_origin_js
548
+ old_logger = ActionController::Base.logger
549
+ logger = ActiveSupport::LogSubscriber::TestHelper::MockLogger.new
550
+ ActionController::Base.logger = logger
551
+ ActionController::Base.log_warning_on_csrf_failure = false
552
+
553
+ begin
554
+ assert_cross_origin_blocked { get :same_origin_js }
555
+
556
+ assert_equal 0, logger.logged(:warn).size
557
+ ensure
558
+ ActionController::Base.logger = old_logger
559
+ ActionController::Base.log_warning_on_csrf_failure = true
560
+ end
561
+ end
562
+
563
+ # Allow non-GET requests since GET is all a remote <script> tag can muster.
564
+ def test_should_allow_non_get_js_without_xhr_header
565
+ session[:_csrf_token] = @token
566
+ assert_cross_origin_not_blocked { post :same_origin_js, params: { custom_authenticity_token: @token } }
567
+ assert_cross_origin_not_blocked { post :same_origin_js, params: { format: "js", custom_authenticity_token: @token } }
568
+ assert_cross_origin_not_blocked do
569
+ @request.accept = "text/javascript"
570
+ post :negotiate_same_origin, params: { custom_authenticity_token: @token }
571
+ end
572
+ end
573
+
574
+ def test_should_only_allow_cross_origin_js_get_without_xhr_header_if_protection_disabled
575
+ assert_cross_origin_not_blocked { get :cross_origin_js }
576
+ assert_cross_origin_not_blocked { get :cross_origin_js, format: "js" }
577
+ assert_cross_origin_not_blocked do
578
+ @request.accept = "text/javascript"
579
+ get :negotiate_cross_origin
580
+ end
581
+
582
+ assert_cross_origin_not_blocked { get :cross_origin_js, xhr: true }
583
+ assert_cross_origin_not_blocked { get :cross_origin_js, xhr: true, format: "js" }
584
+ assert_cross_origin_not_blocked do
585
+ @request.accept = "text/javascript"
586
+ get :negotiate_cross_origin, xhr: true
587
+ end
588
+ end
589
+
590
+ def test_should_not_raise_error_if_token_is_not_a_string
591
+ assert_blocked do
592
+ patch :index, params: { custom_authenticity_token: { foo: "bar" } }
593
+ end
594
+ end
595
+
596
+ def assert_blocked
597
+ session[:something_like_user_id] = 1
598
+ yield
599
+ assert_nil session[:something_like_user_id], "session values are still present"
600
+ assert_response :success
601
+ end
602
+
603
+ def assert_not_blocked
604
+ assert_nothing_raised { yield }
605
+ assert_response :success
606
+ end
607
+
608
+ def assert_cross_origin_blocked
609
+ assert_raises(ActionController::InvalidCrossOriginRequest) do
610
+ yield
611
+ end
612
+ end
613
+
614
+ def assert_cross_origin_not_blocked
615
+ assert_not_blocked { yield }
616
+ end
617
+
618
+ def forgery_protection_origin_check
619
+ old_setting = ActionController::Base.forgery_protection_origin_check
620
+ ActionController::Base.forgery_protection_origin_check = true
621
+ begin
622
+ yield
623
+ ensure
624
+ ActionController::Base.forgery_protection_origin_check = old_setting
625
+ end
626
+ end
627
+ end
628
+
629
+ # OK let's get our test on
630
+
631
+ class RequestForgeryProtectionControllerUsingResetSessionTest < ActionController::TestCase
632
+ include RequestForgeryProtectionTests
633
+
634
+ test "should emit a csrf-param meta tag and a csrf-token meta tag" do
635
+ @controller.stub :form_authenticity_token, @token + "<=?" do
636
+ get :meta
637
+ assert_select "meta[name=?][content=?]", "csrf-param", "custom_authenticity_token"
638
+ assert_select "meta[name=?]", "csrf-token"
639
+ regexp = "#{@token}&lt;=\?"
640
+ assert_match(/#{regexp}/, @response.body)
641
+ end
642
+ end
643
+ end
644
+
645
+ class RequestForgeryProtectionControllerUsingNullSessionTest < ActionController::TestCase
646
+ class NullSessionDummyKeyGenerator
647
+ def generate_key(secret, length = nil)
648
+ "03312270731a2ed0d11ed091c2338a06"
649
+ end
650
+ end
651
+
652
+ def setup
653
+ @request.env[ActionDispatch::Cookies::GENERATOR_KEY] = NullSessionDummyKeyGenerator.new
654
+ @request.env[ActionDispatch::Cookies::COOKIES_ROTATIONS] = ActiveSupport::Messages::RotationConfiguration.new
655
+ end
656
+
657
+ test "should allow to set signed cookies" do
658
+ post :signed
659
+ assert_response :ok
660
+ end
661
+
662
+ test "should allow to set encrypted cookies" do
663
+ post :encrypted
664
+ assert_response :ok
665
+ end
666
+
667
+ test "should allow reset_session" do
668
+ post :try_to_reset_session
669
+ assert_response :ok
670
+ end
671
+ end
672
+
673
+ class RequestForgeryProtectionControllerUsingExceptionTest < ActionController::TestCase
674
+ include RequestForgeryProtectionTests
675
+ def assert_blocked
676
+ assert_raises(ActionController::InvalidAuthenticityToken) do
677
+ yield
678
+ end
679
+ end
680
+ end
681
+
682
+ class PrependProtectForgeryBaseControllerTest < ActionController::TestCase
683
+ PrependTrueController = Class.new(PrependProtectForgeryBaseController) do
684
+ protect_from_forgery prepend: true
685
+ end
686
+
687
+ PrependFalseController = Class.new(PrependProtectForgeryBaseController) do
688
+ protect_from_forgery prepend: false
689
+ end
690
+
691
+ PrependDefaultController = Class.new(PrependProtectForgeryBaseController) do
692
+ protect_from_forgery
693
+ end
694
+
695
+ def test_verify_authenticity_token_is_prepended
696
+ @controller = PrependTrueController.new
697
+ get :index
698
+ expected_callback_order = ["verify_authenticity_token", "custom_action"]
699
+ assert_equal(expected_callback_order, @controller.called_callbacks)
700
+ end
701
+
702
+ def test_verify_authenticity_token_is_not_prepended
703
+ @controller = PrependFalseController.new
704
+ get :index
705
+ expected_callback_order = ["custom_action", "verify_authenticity_token"]
706
+ assert_equal(expected_callback_order, @controller.called_callbacks)
707
+ end
708
+
709
+ def test_verify_authenticity_token_is_not_prepended_by_default
710
+ @controller = PrependDefaultController.new
711
+ get :index
712
+ expected_callback_order = ["custom_action", "verify_authenticity_token"]
713
+ assert_equal(expected_callback_order, @controller.called_callbacks)
714
+ end
715
+ end
716
+
717
+ class FreeCookieControllerTest < ActionController::TestCase
718
+ def setup
719
+ @controller = FreeCookieController.new
720
+ @token = "cf50faa3fe97702ca1ae"
721
+ super
722
+ end
723
+
724
+ def test_should_not_render_form_with_token_tag
725
+ SecureRandom.stub :base64, @token do
726
+ get :index
727
+ assert_select "form>div>input[name=?][value=?]", "authenticity_token", @token, false
728
+ end
729
+ end
730
+
731
+ def test_should_not_render_button_to_with_token_tag
732
+ SecureRandom.stub :base64, @token do
733
+ get :show_button
734
+ assert_select "form>div>input[name=?][value=?]", "authenticity_token", @token, false
735
+ end
736
+ end
737
+
738
+ def test_should_allow_all_methods_without_token
739
+ SecureRandom.stub :base64, @token do
740
+ [:post, :patch, :put, :delete].each do |method|
741
+ assert_nothing_raised { send(method, :index) }
742
+ end
743
+ end
744
+ end
745
+
746
+ test "should not emit a csrf-token meta tag" do
747
+ SecureRandom.stub :base64, @token do
748
+ get :meta
749
+ assert_predicate @response.body, :blank?
750
+ end
751
+ end
752
+ end
753
+
754
+ class CustomAuthenticityParamControllerTest < ActionController::TestCase
755
+ def setup
756
+ super
757
+ @old_logger = ActionController::Base.logger
758
+ @logger = ActiveSupport::LogSubscriber::TestHelper::MockLogger.new
759
+ @token = Base64.strict_encode64(SecureRandom.random_bytes(32))
760
+ @old_request_forgery_protection_token = ActionController::Base.request_forgery_protection_token
761
+ ActionController::Base.request_forgery_protection_token = @token
762
+ end
763
+
764
+ def teardown
765
+ ActionController::Base.request_forgery_protection_token = @old_request_forgery_protection_token
766
+ super
767
+ end
768
+
769
+ def test_should_not_warn_if_form_authenticity_param_matches_form_authenticity_token
770
+ ActionController::Base.logger = @logger
771
+ begin
772
+ @controller.stub :valid_authenticity_token?, :true do
773
+ post :index, params: { custom_token_name: "foobar" }
774
+ assert_equal 0, @logger.logged(:warn).size
775
+ end
776
+ ensure
777
+ ActionController::Base.logger = @old_logger
778
+ end
779
+ end
780
+
781
+ def test_should_warn_if_form_authenticity_param_does_not_match_form_authenticity_token
782
+ ActionController::Base.logger = @logger
783
+
784
+ begin
785
+ post :index, params: { custom_token_name: "bazqux" }
786
+ assert_equal 1, @logger.logged(:warn).size
787
+ ensure
788
+ ActionController::Base.logger = @old_logger
789
+ end
790
+ end
791
+ end
792
+
793
+ class PerFormTokensControllerTest < ActionController::TestCase
794
+ def setup
795
+ @old_request_forgery_protection_token = ActionController::Base.request_forgery_protection_token
796
+ ActionController::Base.request_forgery_protection_token = :custom_authenticity_token
797
+ end
798
+
799
+ def teardown
800
+ ActionController::Base.request_forgery_protection_token = @old_request_forgery_protection_token
801
+ end
802
+
803
+ def test_per_form_token_is_same_size_as_global_token
804
+ get :index
805
+ expected = ActionController::RequestForgeryProtection::AUTHENTICITY_TOKEN_LENGTH
806
+ actual = @controller.send(:per_form_csrf_token, session, "/path", "post").size
807
+ assert_equal expected, actual
808
+ end
809
+
810
+ def test_accepts_token_for_correct_path_and_method
811
+ get :index
812
+
813
+ form_token = assert_presence_and_fetch_form_csrf_token
814
+
815
+ assert_matches_session_token_on_server form_token
816
+
817
+ # This is required because PATH_INFO isn't reset between requests.
818
+ @request.env["PATH_INFO"] = "/per_form_tokens/post_one"
819
+ assert_nothing_raised do
820
+ post :post_one, params: { custom_authenticity_token: form_token }
821
+ end
822
+ assert_response :success
823
+ end
824
+
825
+ def test_rejects_token_for_incorrect_path
826
+ get :index
827
+
828
+ form_token = assert_presence_and_fetch_form_csrf_token
829
+
830
+ assert_matches_session_token_on_server form_token
831
+
832
+ # This is required because PATH_INFO isn't reset between requests.
833
+ @request.env["PATH_INFO"] = "/per_form_tokens/post_two"
834
+ assert_raises(ActionController::InvalidAuthenticityToken) do
835
+ post :post_two, params: { custom_authenticity_token: form_token }
836
+ end
837
+ end
838
+
839
+ def test_rejects_token_for_incorrect_method
840
+ get :index
841
+
842
+ form_token = assert_presence_and_fetch_form_csrf_token
843
+
844
+ assert_matches_session_token_on_server form_token
845
+
846
+ # This is required because PATH_INFO isn't reset between requests.
847
+ @request.env["PATH_INFO"] = "/per_form_tokens/post_one"
848
+ assert_raises(ActionController::InvalidAuthenticityToken) do
849
+ patch :post_one, params: { custom_authenticity_token: form_token }
850
+ end
851
+ end
852
+
853
+ def test_rejects_token_for_incorrect_method_button_to
854
+ get :button_to, params: { form_method: "delete" }
855
+
856
+ form_token = assert_presence_and_fetch_form_csrf_token
857
+
858
+ assert_matches_session_token_on_server form_token, "delete"
859
+
860
+ # This is required because PATH_INFO isn't reset between requests.
861
+ @request.env["PATH_INFO"] = "/per_form_tokens/post_one"
862
+ assert_raises(ActionController::InvalidAuthenticityToken) do
863
+ patch :post_one, params: { custom_authenticity_token: form_token }
864
+ end
865
+ end
866
+
867
+ test "Accepts proper token for implicit post method on button_to tag" do
868
+ get :button_to
869
+
870
+ form_token = assert_presence_and_fetch_form_csrf_token
871
+
872
+ assert_matches_session_token_on_server form_token, "post"
873
+
874
+ # This is required because PATH_INFO isn't reset between requests.
875
+ @request.env["PATH_INFO"] = "/per_form_tokens/post_one"
876
+ assert_nothing_raised do
877
+ post :post_one, params: { custom_authenticity_token: form_token }
878
+ end
879
+ end
880
+
881
+ %w{delete post patch}.each do |verb|
882
+ test "Accepts proper token for #{verb} method on button_to tag" do
883
+ get :button_to, params: { form_method: verb }
884
+
885
+ form_token = assert_presence_and_fetch_form_csrf_token
886
+
887
+ assert_matches_session_token_on_server form_token, verb
888
+
889
+ # This is required because PATH_INFO isn't reset between requests.
890
+ @request.env["PATH_INFO"] = "/per_form_tokens/post_one"
891
+ assert_nothing_raised do
892
+ send verb, :post_one, params: { custom_authenticity_token: form_token }
893
+ end
894
+ end
895
+ end
896
+
897
+ def test_accepts_global_csrf_token
898
+ get :index
899
+
900
+ token = @controller.send(:form_authenticity_token)
901
+
902
+ # This is required because PATH_INFO isn't reset between requests.
903
+ @request.env["PATH_INFO"] = "/per_form_tokens/post_one"
904
+ assert_nothing_raised do
905
+ post :post_one, params: { custom_authenticity_token: token }
906
+ end
907
+ assert_response :success
908
+ end
909
+
910
+ def test_ignores_params
911
+ get :index, params: { form_path: "/per_form_tokens/post_one?foo=bar" }
912
+
913
+ form_token = assert_presence_and_fetch_form_csrf_token
914
+
915
+ assert_matches_session_token_on_server form_token
916
+
917
+ # This is required because PATH_INFO isn't reset between requests.
918
+ @request.env["PATH_INFO"] = "/per_form_tokens/post_one?foo=baz"
919
+ assert_nothing_raised do
920
+ post :post_one, params: { custom_authenticity_token: form_token, baz: "foo" }
921
+ end
922
+ assert_response :success
923
+ end
924
+
925
+ def test_ignores_trailing_slash_during_generation
926
+ get :index, params: { form_path: "/per_form_tokens/post_one/" }
927
+
928
+ form_token = assert_presence_and_fetch_form_csrf_token
929
+
930
+ # This is required because PATH_INFO isn't reset between requests.
931
+ @request.env["PATH_INFO"] = "/per_form_tokens/post_one"
932
+ assert_nothing_raised do
933
+ post :post_one, params: { custom_authenticity_token: form_token }
934
+ end
935
+ assert_response :success
936
+ end
937
+
938
+ def test_ignores_origin_during_generation
939
+ get :index, params: { form_path: "https://example.com/per_form_tokens/post_one/" }
940
+
941
+ form_token = assert_presence_and_fetch_form_csrf_token
942
+
943
+ # This is required because PATH_INFO isn't reset between requests.
944
+ @request.env["PATH_INFO"] = "/per_form_tokens/post_one"
945
+ assert_nothing_raised do
946
+ post :post_one, params: { custom_authenticity_token: form_token }
947
+ end
948
+ assert_response :success
949
+ end
950
+
951
+ def test_ignores_trailing_slash_during_validation
952
+ get :index
953
+
954
+ form_token = assert_presence_and_fetch_form_csrf_token
955
+
956
+ # This is required because PATH_INFO isn't reset between requests.
957
+ @request.env["PATH_INFO"] = "/per_form_tokens/post_one/"
958
+ assert_nothing_raised do
959
+ post :post_one, params: { custom_authenticity_token: form_token }
960
+ end
961
+ assert_response :success
962
+ end
963
+
964
+ def test_method_is_case_insensitive
965
+ get :index, params: { form_method: "POST" }
966
+
967
+ form_token = assert_presence_and_fetch_form_csrf_token
968
+ # This is required because PATH_INFO isn't reset between requests.
969
+ @request.env["PATH_INFO"] = "/per_form_tokens/post_one/"
970
+ assert_nothing_raised do
971
+ post :post_one, params: { custom_authenticity_token: form_token }
972
+ end
973
+ assert_response :success
974
+ end
975
+
976
+ private
977
+ def assert_presence_and_fetch_form_csrf_token
978
+ assert_select 'input[name="custom_authenticity_token"]' do |input|
979
+ form_csrf_token = input.first["value"]
980
+ assert_not_nil form_csrf_token
981
+ return form_csrf_token
982
+ end
983
+ end
984
+
985
+ def assert_matches_session_token_on_server(form_token, method = "post")
986
+ actual = @controller.send(:unmask_token, Base64.strict_decode64(form_token))
987
+ expected = @controller.send(:per_form_csrf_token, session, "/per_form_tokens/post_one", method)
988
+ assert_equal expected, actual
989
+ end
990
+ end
991
+
992
+ class SkipProtectionControllerTest < ActionController::TestCase
993
+ def test_should_not_allow_post_without_token_when_not_skipping
994
+ @controller.skip_requested = false
995
+ assert_blocked { post :index }
996
+ end
997
+
998
+ def test_should_allow_post_without_token_when_skipping
999
+ @controller.skip_requested = true
1000
+ assert_not_blocked { post :index }
1001
+ end
1002
+
1003
+ def assert_blocked
1004
+ assert_raises(ActionController::InvalidAuthenticityToken) do
1005
+ yield
1006
+ end
1007
+ end
1008
+
1009
+ def assert_not_blocked
1010
+ assert_nothing_raised { yield }
1011
+ assert_response :success
1012
+ end
1013
+ end