capybara 2.18.0 → 3.40.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (316) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +1 -1
  3. data/History.md +945 -12
  4. data/License.txt +1 -1
  5. data/README.md +264 -90
  6. data/lib/capybara/config.rb +29 -57
  7. data/lib/capybara/cucumber.rb +2 -3
  8. data/lib/capybara/driver/base.rb +35 -18
  9. data/lib/capybara/driver/node.rb +40 -10
  10. data/lib/capybara/dsl.rb +10 -7
  11. data/lib/capybara/helpers.rb +70 -31
  12. data/lib/capybara/minitest/spec.rb +185 -83
  13. data/lib/capybara/minitest.rb +232 -112
  14. data/lib/capybara/node/actions.rb +274 -171
  15. data/lib/capybara/node/base.rb +42 -34
  16. data/lib/capybara/node/document.rb +15 -3
  17. data/lib/capybara/node/document_matchers.rb +19 -21
  18. data/lib/capybara/node/element.rb +362 -135
  19. data/lib/capybara/node/finders.rb +151 -137
  20. data/lib/capybara/node/matchers.rb +394 -209
  21. data/lib/capybara/node/simple.rb +59 -26
  22. data/lib/capybara/node/whitespace_normalizer.rb +81 -0
  23. data/lib/capybara/queries/active_element_query.rb +18 -0
  24. data/lib/capybara/queries/ancestor_query.rb +12 -9
  25. data/lib/capybara/queries/base_query.rb +39 -28
  26. data/lib/capybara/queries/current_path_query.rb +21 -27
  27. data/lib/capybara/queries/match_query.rb +14 -7
  28. data/lib/capybara/queries/selector_query.rb +659 -149
  29. data/lib/capybara/queries/sibling_query.rb +11 -9
  30. data/lib/capybara/queries/style_query.rb +45 -0
  31. data/lib/capybara/queries/text_query.rb +56 -38
  32. data/lib/capybara/queries/title_query.rb +8 -11
  33. data/lib/capybara/rack_test/browser.rb +114 -42
  34. data/lib/capybara/rack_test/css_handlers.rb +6 -4
  35. data/lib/capybara/rack_test/driver.rb +22 -17
  36. data/lib/capybara/rack_test/errors.rb +6 -0
  37. data/lib/capybara/rack_test/form.rb +93 -58
  38. data/lib/capybara/rack_test/node.rb +184 -81
  39. data/lib/capybara/rails.rb +3 -7
  40. data/lib/capybara/registration_container.rb +41 -0
  41. data/lib/capybara/registrations/drivers.rb +42 -0
  42. data/lib/capybara/registrations/patches/puma_ssl.rb +29 -0
  43. data/lib/capybara/registrations/servers.rb +66 -0
  44. data/lib/capybara/result.rb +97 -63
  45. data/lib/capybara/rspec/features.rb +17 -50
  46. data/lib/capybara/rspec/matcher_proxies.rb +52 -15
  47. data/lib/capybara/rspec/matchers/base.rb +113 -0
  48. data/lib/capybara/rspec/matchers/become_closed.rb +33 -0
  49. data/lib/capybara/rspec/matchers/compound.rb +88 -0
  50. data/lib/capybara/rspec/matchers/count_sugar.rb +37 -0
  51. data/lib/capybara/rspec/matchers/have_ancestor.rb +28 -0
  52. data/lib/capybara/rspec/matchers/have_current_path.rb +29 -0
  53. data/lib/capybara/rspec/matchers/have_selector.rb +69 -0
  54. data/lib/capybara/rspec/matchers/have_sibling.rb +27 -0
  55. data/lib/capybara/rspec/matchers/have_text.rb +33 -0
  56. data/lib/capybara/rspec/matchers/have_title.rb +29 -0
  57. data/lib/capybara/rspec/matchers/match_selector.rb +27 -0
  58. data/lib/capybara/rspec/matchers/match_style.rb +43 -0
  59. data/lib/capybara/rspec/matchers/spatial_sugar.rb +39 -0
  60. data/lib/capybara/rspec/matchers.rb +146 -310
  61. data/lib/capybara/rspec.rb +7 -11
  62. data/lib/capybara/selector/builders/css_builder.rb +84 -0
  63. data/lib/capybara/selector/builders/xpath_builder.rb +71 -0
  64. data/lib/capybara/selector/css.rb +85 -13
  65. data/lib/capybara/selector/definition/button.rb +68 -0
  66. data/lib/capybara/selector/definition/checkbox.rb +26 -0
  67. data/lib/capybara/selector/definition/css.rb +10 -0
  68. data/lib/capybara/selector/definition/datalist_input.rb +35 -0
  69. data/lib/capybara/selector/definition/datalist_option.rb +25 -0
  70. data/lib/capybara/selector/definition/element.rb +28 -0
  71. data/lib/capybara/selector/definition/field.rb +40 -0
  72. data/lib/capybara/selector/definition/fieldset.rb +14 -0
  73. data/lib/capybara/selector/definition/file_field.rb +13 -0
  74. data/lib/capybara/selector/definition/fillable_field.rb +33 -0
  75. data/lib/capybara/selector/definition/frame.rb +17 -0
  76. data/lib/capybara/selector/definition/id.rb +6 -0
  77. data/lib/capybara/selector/definition/label.rb +62 -0
  78. data/lib/capybara/selector/definition/link.rb +55 -0
  79. data/lib/capybara/selector/definition/link_or_button.rb +16 -0
  80. data/lib/capybara/selector/definition/option.rb +27 -0
  81. data/lib/capybara/selector/definition/radio_button.rb +27 -0
  82. data/lib/capybara/selector/definition/select.rb +81 -0
  83. data/lib/capybara/selector/definition/table.rb +109 -0
  84. data/lib/capybara/selector/definition/table_row.rb +21 -0
  85. data/lib/capybara/selector/definition/xpath.rb +5 -0
  86. data/lib/capybara/selector/definition.rb +280 -0
  87. data/lib/capybara/selector/filter.rb +2 -17
  88. data/lib/capybara/selector/filter_set.rb +80 -33
  89. data/lib/capybara/selector/filters/base.rb +50 -6
  90. data/lib/capybara/selector/filters/expression_filter.rb +8 -26
  91. data/lib/capybara/selector/filters/locator_filter.rb +29 -0
  92. data/lib/capybara/selector/filters/node_filter.rb +16 -12
  93. data/lib/capybara/selector/regexp_disassembler.rb +211 -0
  94. data/lib/capybara/selector/selector.rb +93 -210
  95. data/lib/capybara/selector/xpath_extensions.rb +17 -0
  96. data/lib/capybara/selector.rb +475 -523
  97. data/lib/capybara/selenium/atoms/getAttribute.min.js +1 -0
  98. data/lib/capybara/selenium/atoms/isDisplayed.min.js +1 -0
  99. data/lib/capybara/selenium/atoms/src/getAttribute.js +161 -0
  100. data/lib/capybara/selenium/atoms/src/isDisplayed.js +454 -0
  101. data/lib/capybara/selenium/driver.rb +298 -267
  102. data/lib/capybara/selenium/driver_specializations/chrome_driver.rb +117 -0
  103. data/lib/capybara/selenium/driver_specializations/edge_driver.rb +128 -0
  104. data/lib/capybara/selenium/driver_specializations/firefox_driver.rb +84 -0
  105. data/lib/capybara/selenium/driver_specializations/internet_explorer_driver.rb +26 -0
  106. data/lib/capybara/selenium/driver_specializations/safari_driver.rb +24 -0
  107. data/lib/capybara/selenium/extensions/file_input_click_emulation.rb +34 -0
  108. data/lib/capybara/selenium/extensions/find.rb +110 -0
  109. data/lib/capybara/selenium/extensions/html5_drag.rb +229 -0
  110. data/lib/capybara/selenium/extensions/modifier_keys_stack.rb +28 -0
  111. data/lib/capybara/selenium/extensions/scroll.rb +76 -0
  112. data/lib/capybara/selenium/node.rb +517 -145
  113. data/lib/capybara/selenium/nodes/chrome_node.rb +125 -0
  114. data/lib/capybara/selenium/nodes/edge_node.rb +110 -0
  115. data/lib/capybara/selenium/nodes/firefox_node.rb +136 -0
  116. data/lib/capybara/selenium/nodes/ie_node.rb +22 -0
  117. data/lib/capybara/selenium/nodes/safari_node.rb +118 -0
  118. data/lib/capybara/selenium/patches/atoms.rb +18 -0
  119. data/lib/capybara/selenium/patches/is_displayed.rb +16 -0
  120. data/lib/capybara/selenium/patches/logs.rb +45 -0
  121. data/lib/capybara/selenium/patches/pause_duration_fix.rb +9 -0
  122. data/lib/capybara/selenium/patches/persistent_client.rb +20 -0
  123. data/lib/capybara/server/animation_disabler.rb +80 -0
  124. data/lib/capybara/server/checker.rb +44 -0
  125. data/lib/capybara/server/middleware.rb +71 -0
  126. data/lib/capybara/server.rb +59 -67
  127. data/lib/capybara/session/config.rb +81 -67
  128. data/lib/capybara/session/matchers.rb +28 -20
  129. data/lib/capybara/session.rb +337 -365
  130. data/lib/capybara/spec/public/jquery.js +5 -5
  131. data/lib/capybara/spec/public/offset.js +6 -0
  132. data/lib/capybara/spec/public/test.js +151 -12
  133. data/lib/capybara/spec/session/accept_alert_spec.rb +12 -11
  134. data/lib/capybara/spec/session/accept_confirm_spec.rb +6 -5
  135. data/lib/capybara/spec/session/accept_prompt_spec.rb +10 -10
  136. data/lib/capybara/spec/session/active_element_spec.rb +31 -0
  137. data/lib/capybara/spec/session/all_spec.rb +161 -57
  138. data/lib/capybara/spec/session/ancestor_spec.rb +27 -24
  139. data/lib/capybara/spec/session/assert_all_of_selectors_spec.rb +68 -38
  140. data/lib/capybara/spec/session/assert_current_path_spec.rb +75 -0
  141. data/lib/capybara/spec/session/assert_selector_spec.rb +143 -0
  142. data/lib/capybara/spec/session/assert_style_spec.rb +26 -0
  143. data/lib/capybara/spec/session/assert_text_spec.rb +258 -0
  144. data/lib/capybara/spec/session/{assert_title.rb → assert_title_spec.rb} +22 -12
  145. data/lib/capybara/spec/session/attach_file_spec.rb +144 -69
  146. data/lib/capybara/spec/session/body_spec.rb +12 -13
  147. data/lib/capybara/spec/session/check_spec.rb +117 -55
  148. data/lib/capybara/spec/session/choose_spec.rb +64 -31
  149. data/lib/capybara/spec/session/click_button_spec.rb +231 -173
  150. data/lib/capybara/spec/session/click_link_or_button_spec.rb +55 -35
  151. data/lib/capybara/spec/session/click_link_spec.rb +93 -58
  152. data/lib/capybara/spec/session/current_scope_spec.rb +12 -11
  153. data/lib/capybara/spec/session/current_url_spec.rb +57 -39
  154. data/lib/capybara/spec/session/dismiss_confirm_spec.rb +4 -4
  155. data/lib/capybara/spec/session/dismiss_prompt_spec.rb +3 -2
  156. data/lib/capybara/spec/session/element/{assert_match_selector.rb → assert_match_selector_spec.rb} +11 -9
  157. data/lib/capybara/spec/session/element/match_css_spec.rb +18 -10
  158. data/lib/capybara/spec/session/element/match_xpath_spec.rb +9 -7
  159. data/lib/capybara/spec/session/element/matches_selector_spec.rb +71 -57
  160. data/lib/capybara/spec/session/evaluate_async_script_spec.rb +8 -7
  161. data/lib/capybara/spec/session/evaluate_script_spec.rb +29 -8
  162. data/lib/capybara/spec/session/execute_script_spec.rb +10 -8
  163. data/lib/capybara/spec/session/fill_in_spec.rb +134 -43
  164. data/lib/capybara/spec/session/find_button_spec.rb +25 -24
  165. data/lib/capybara/spec/session/find_by_id_spec.rb +10 -9
  166. data/lib/capybara/spec/session/find_field_spec.rb +37 -41
  167. data/lib/capybara/spec/session/find_link_spec.rb +46 -17
  168. data/lib/capybara/spec/session/find_spec.rb +260 -145
  169. data/lib/capybara/spec/session/first_spec.rb +80 -52
  170. data/lib/capybara/spec/session/frame/frame_title_spec.rb +23 -0
  171. data/lib/capybara/spec/session/frame/frame_url_spec.rb +23 -0
  172. data/lib/capybara/spec/session/frame/switch_to_frame_spec.rb +33 -20
  173. data/lib/capybara/spec/session/frame/within_frame_spec.rb +52 -32
  174. data/lib/capybara/spec/session/go_back_spec.rb +2 -1
  175. data/lib/capybara/spec/session/go_forward_spec.rb +2 -1
  176. data/lib/capybara/spec/session/has_all_selectors_spec.rb +31 -31
  177. data/lib/capybara/spec/session/has_ancestor_spec.rb +46 -0
  178. data/lib/capybara/spec/session/has_any_selectors_spec.rb +29 -0
  179. data/lib/capybara/spec/session/has_button_spec.rb +100 -13
  180. data/lib/capybara/spec/session/has_css_spec.rb +272 -137
  181. data/lib/capybara/spec/session/has_current_path_spec.rb +60 -61
  182. data/lib/capybara/spec/session/has_element_spec.rb +47 -0
  183. data/lib/capybara/spec/session/has_field_spec.rb +139 -59
  184. data/lib/capybara/spec/session/has_link_spec.rb +47 -6
  185. data/lib/capybara/spec/session/has_none_selectors_spec.rb +42 -40
  186. data/lib/capybara/spec/session/has_select_spec.rb +107 -72
  187. data/lib/capybara/spec/session/has_selector_spec.rb +120 -71
  188. data/lib/capybara/spec/session/has_sibling_spec.rb +50 -0
  189. data/lib/capybara/spec/session/has_table_spec.rb +183 -5
  190. data/lib/capybara/spec/session/has_text_spec.rb +106 -62
  191. data/lib/capybara/spec/session/has_title_spec.rb +20 -14
  192. data/lib/capybara/spec/session/has_xpath_spec.rb +57 -38
  193. data/lib/capybara/spec/session/{headers.rb → headers_spec.rb} +3 -2
  194. data/lib/capybara/spec/session/html_spec.rb +14 -6
  195. data/lib/capybara/spec/session/matches_style_spec.rb +37 -0
  196. data/lib/capybara/spec/session/node_spec.rb +1024 -153
  197. data/lib/capybara/spec/session/node_wrapper_spec.rb +39 -0
  198. data/lib/capybara/spec/session/refresh_spec.rb +12 -6
  199. data/lib/capybara/spec/session/reset_session_spec.rb +82 -35
  200. data/lib/capybara/spec/session/{response_code.rb → response_code_spec.rb} +2 -1
  201. data/lib/capybara/spec/session/save_and_open_page_spec.rb +3 -2
  202. data/lib/capybara/spec/session/save_and_open_screenshot_spec.rb +8 -12
  203. data/lib/capybara/spec/session/save_page_spec.rb +42 -55
  204. data/lib/capybara/spec/session/save_screenshot_spec.rb +16 -14
  205. data/lib/capybara/spec/session/screenshot_spec.rb +2 -2
  206. data/lib/capybara/spec/session/scroll_spec.rb +119 -0
  207. data/lib/capybara/spec/session/select_spec.rb +107 -81
  208. data/lib/capybara/spec/session/selectors_spec.rb +52 -19
  209. data/lib/capybara/spec/session/sibling_spec.rb +10 -10
  210. data/lib/capybara/spec/session/text_spec.rb +37 -21
  211. data/lib/capybara/spec/session/title_spec.rb +17 -5
  212. data/lib/capybara/spec/session/uncheck_spec.rb +43 -23
  213. data/lib/capybara/spec/session/unselect_spec.rb +39 -38
  214. data/lib/capybara/spec/session/visit_spec.rb +85 -53
  215. data/lib/capybara/spec/session/window/become_closed_spec.rb +24 -20
  216. data/lib/capybara/spec/session/window/current_window_spec.rb +5 -3
  217. data/lib/capybara/spec/session/window/open_new_window_spec.rb +5 -3
  218. data/lib/capybara/spec/session/window/switch_to_window_spec.rb +27 -22
  219. data/lib/capybara/spec/session/window/window_opened_by_spec.rb +12 -6
  220. data/lib/capybara/spec/session/window/window_spec.rb +97 -63
  221. data/lib/capybara/spec/session/window/windows_spec.rb +12 -10
  222. data/lib/capybara/spec/session/window/within_window_spec.rb +31 -86
  223. data/lib/capybara/spec/session/within_spec.rb +83 -44
  224. data/lib/capybara/spec/spec_helper.rb +54 -44
  225. data/lib/capybara/spec/test_app.rb +158 -43
  226. data/lib/capybara/spec/views/animated.erb +49 -0
  227. data/lib/capybara/spec/views/form.erb +163 -42
  228. data/lib/capybara/spec/views/frame_child.erb +4 -3
  229. data/lib/capybara/spec/views/frame_one.erb +2 -1
  230. data/lib/capybara/spec/views/frame_parent.erb +1 -1
  231. data/lib/capybara/spec/views/frame_two.erb +1 -1
  232. data/lib/capybara/spec/views/initial_alert.erb +2 -1
  233. data/lib/capybara/spec/views/layout.erb +10 -0
  234. data/lib/capybara/spec/views/obscured.erb +47 -0
  235. data/lib/capybara/spec/views/offset.erb +33 -0
  236. data/lib/capybara/spec/views/path.erb +2 -2
  237. data/lib/capybara/spec/views/popup_one.erb +1 -1
  238. data/lib/capybara/spec/views/popup_two.erb +1 -1
  239. data/lib/capybara/spec/views/react.erb +45 -0
  240. data/lib/capybara/spec/views/scroll.erb +21 -0
  241. data/lib/capybara/spec/views/spatial.erb +31 -0
  242. data/lib/capybara/spec/views/tables.erb +68 -1
  243. data/lib/capybara/spec/views/with_animation.erb +81 -0
  244. data/lib/capybara/spec/views/with_base_tag.erb +2 -2
  245. data/lib/capybara/spec/views/with_dragula.erb +24 -0
  246. data/lib/capybara/spec/views/with_fixed_header_footer.erb +2 -1
  247. data/lib/capybara/spec/views/with_hover.erb +3 -2
  248. data/lib/capybara/spec/views/with_hover1.erb +10 -0
  249. data/lib/capybara/spec/views/with_html.erb +69 -12
  250. data/lib/capybara/spec/views/with_html5_svg.erb +20 -0
  251. data/lib/capybara/spec/views/with_jquery_animation.erb +24 -0
  252. data/lib/capybara/spec/views/with_js.erb +30 -5
  253. data/lib/capybara/spec/views/with_jstree.erb +26 -0
  254. data/lib/capybara/spec/views/with_namespace.erb +21 -0
  255. data/lib/capybara/spec/views/with_scope.erb +2 -2
  256. data/lib/capybara/spec/views/with_scope_other.erb +6 -0
  257. data/lib/capybara/spec/views/with_shadow.erb +31 -0
  258. data/lib/capybara/spec/views/with_slow_unload.erb +2 -1
  259. data/lib/capybara/spec/views/with_sortable_js.erb +21 -0
  260. data/lib/capybara/spec/views/with_unload_alert.erb +1 -0
  261. data/lib/capybara/spec/views/with_windows.erb +1 -1
  262. data/lib/capybara/spec/views/within_frames.erb +5 -2
  263. data/lib/capybara/version.rb +2 -1
  264. data/lib/capybara/window.rb +36 -34
  265. data/lib/capybara.rb +134 -107
  266. data/spec/basic_node_spec.rb +60 -34
  267. data/spec/capybara_spec.rb +63 -88
  268. data/spec/counter_spec.rb +35 -0
  269. data/spec/css_builder_spec.rb +101 -0
  270. data/spec/css_splitter_spec.rb +38 -0
  271. data/spec/dsl_spec.rb +85 -64
  272. data/spec/filter_set_spec.rb +27 -9
  273. data/spec/fixtures/certificate.pem +25 -0
  274. data/spec/fixtures/key.pem +27 -0
  275. data/spec/fixtures/selenium_driver_rspec_failure.rb +6 -5
  276. data/spec/fixtures/selenium_driver_rspec_success.rb +6 -5
  277. data/spec/minitest_spec.rb +52 -7
  278. data/spec/minitest_spec_spec.rb +94 -63
  279. data/spec/per_session_config_spec.rb +14 -13
  280. data/spec/rack_test_spec.rb +194 -125
  281. data/spec/regexp_dissassembler_spec.rb +250 -0
  282. data/spec/result_spec.rb +111 -50
  283. data/spec/rspec/features_spec.rb +37 -31
  284. data/spec/rspec/scenarios_spec.rb +10 -8
  285. data/spec/rspec/shared_spec_matchers.rb +473 -422
  286. data/spec/rspec/views_spec.rb +5 -3
  287. data/spec/rspec_matchers_spec.rb +52 -11
  288. data/spec/rspec_spec.rb +109 -89
  289. data/spec/sauce_spec_chrome.rb +43 -0
  290. data/spec/selector_spec.rb +397 -68
  291. data/spec/selenium_spec_chrome.rb +187 -40
  292. data/spec/selenium_spec_chrome_remote.rb +96 -0
  293. data/spec/selenium_spec_edge.rb +60 -0
  294. data/spec/selenium_spec_firefox.rb +201 -41
  295. data/spec/selenium_spec_firefox_remote.rb +94 -0
  296. data/spec/selenium_spec_ie.rb +149 -0
  297. data/spec/selenium_spec_safari.rb +162 -0
  298. data/spec/server_spec.rb +213 -102
  299. data/spec/session_spec.rb +53 -16
  300. data/spec/shared_selenium_node.rb +79 -0
  301. data/spec/shared_selenium_session.rb +473 -122
  302. data/spec/spec_helper.rb +126 -7
  303. data/spec/whitespace_normalizer_spec.rb +54 -0
  304. data/spec/xpath_builder_spec.rb +93 -0
  305. metadata +355 -73
  306. data/.yard/templates_custom/default/class/html/selectors.erb +0 -38
  307. data/.yard/templates_custom/default/class/html/setup.rb +0 -17
  308. data/.yard/yard_extensions.rb +0 -78
  309. data/lib/capybara/query.rb +0 -7
  310. data/lib/capybara/rspec/compound.rb +0 -95
  311. data/lib/capybara/spec/session/assert_current_path.rb +0 -72
  312. data/lib/capybara/spec/session/assert_selector.rb +0 -148
  313. data/lib/capybara/spec/session/assert_text.rb +0 -234
  314. data/lib/capybara/spec/session/source_spec.rb +0 -0
  315. data/lib/capybara/spec/views/with_title.erb +0 -5
  316. data/spec/selenium_spec_marionette.rb +0 -127
@@ -1,177 +1,279 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'minitest/spec'
2
4
 
3
5
  module Capybara
4
6
  module Minitest
5
7
  module Expectations
6
- %w(text content title current_path).each do |assertion|
7
- infect_an_assertion "assert_#{assertion}", "must_have_#{assertion}", :reverse
8
- infect_an_assertion "refute_#{assertion}", "wont_have_#{assertion}", :reverse
9
- end
8
+ ##
9
+ # Expectation that there is an ancestor
10
+ #
11
+ # @!method must_have_ancestor
12
+ # See {Capybara::Node::Matchers#has_ancestor?}
10
13
 
11
- (%w(selector xpath css link button field select table checked_field unchecked_field).flat_map do |assertion|
12
- [["assert_#{assertion}", "must_have_#{assertion}"],
13
- ["refute_#{assertion}", "wont_have_#{assertion}"]]
14
- end + [["assert_all_of_selectors", "must_have_all_of_selectors"],
15
- ["assert_none_of_selectors", "must_have_none_of_selectors"]] +
16
- %w(selector xpath css).flat_map do |assertion|
17
- [["assert_matches_#{assertion}", "must_match_#{assertion}"],
18
- ["refute_matches_#{assertion}", "wont_match_#{assertion}"]]
19
- end).each do |(meth, new_name)|
20
- self.class_eval <<-EOM, __FILE__, __LINE__ + 1
21
- def #{new_name} *args, &block
22
- ::Minitest::Expectation.new(self, ::Minitest::Spec.current).#{new_name}(*args, &block)
23
- end
24
- EOM
14
+ ##
15
+ # Expectation that there is button
16
+ #
17
+ # @!method must_have_button
18
+ # See {Capybara::Node::Matchers#has_button?}
25
19
 
26
- ::Minitest::Expectation.class_eval <<-EOM, __FILE__, __LINE__ + 1
27
- def #{new_name} *args, &block
28
- ctx.#{meth}(target, *args, &block)
29
- end
30
- EOM
31
- end
20
+ ##
21
+ # Expectation that there is no button
22
+ #
23
+ # @!method wont_have_button
24
+ # See {Capybara::Node::Matchers#has_no_button?}
32
25
 
33
26
  ##
34
- # Expectation that there is xpath
27
+ # Expectation that there is checked_field
35
28
  #
36
- # @!method must_have_xpath
37
- # see Capybara::Node::Matchers#has_xpath?
29
+ # @!method must_have_checked_field
30
+ # See {Capybara::Node::Matchers#has_checked_field?}
38
31
 
39
32
  ##
40
- # Expectation that there is no xpath
33
+ # Expectation that there is no checked_field
41
34
  #
42
- # @!method wont_have_xpath
43
- # see Capybara::Node::Matchers#has_no_xpath?
35
+ # @!method wont_have_checked_field
36
+ # See {Capybara::Node::Matchers#has_no_checked_field?}
44
37
 
45
38
  ##
46
- # Expectation that there is css
39
+ # Expectation that there is unchecked_field
47
40
  #
48
- # @!method must_have_css
49
- # see Capybara::Node::Matchers#has_css?
41
+ # @!method must_have_unchecked_field
42
+ # See {Capybara::Node::Matchers#has_unchecked_field?}
50
43
 
51
44
  ##
52
- # Expectation that there is no css
45
+ # Expectation that there is no unchecked_field
53
46
  #
54
- # @!method wont_have_css
55
- # see Capybara::Node::Matchers#has_no_css?
47
+ # @!method wont_have_unchecked_field
48
+ # See {Capybara::Node::Matchers#has_no_unchecked_field?}
56
49
 
57
50
  ##
58
- # Expectation that there is link
51
+ # Expectation that page content does match
59
52
  #
60
- # @!method must_have_link
61
- # see {Capybara::Node::Matchers#has_link?}
53
+ # @!method must_have_content
54
+ # See {Capybara::Node::Matchers#has_content?}
62
55
 
63
56
  ##
64
- # Expectation that there is no link
57
+ # Expectation that page content does not match
65
58
  #
66
- # @!method wont_have_link
67
- # see {Capybara::Node::Matchers#has_no_link?}
59
+ # @!method wont_have_content
60
+ # See {Capybara::Node::Matchers#has_no_content?}
68
61
 
69
62
  ##
70
- # Expectation that there is button
63
+ # Expectation that there is css
71
64
  #
72
- # @!method must_have_button
73
- # see {Capybara::Node::Matchers#has_button?}
65
+ # @!method must_have_css
66
+ # See {Capybara::Node::Matchers#has_css?}
74
67
 
75
68
  ##
76
- # Expectation that there is no button
69
+ # Expectation that there is no css
77
70
  #
78
- # @!method wont_have_button
79
- # see {Capybara::Node::Matchers#has_no_button?}
71
+ # @!method wont_have_css
72
+ # See {Capybara::Node::Matchers#has_no_css?}
73
+
74
+ ##
75
+ # Expectation that current path matches
76
+ #
77
+ # @!method must_have_current_path
78
+ # See {Capybara::SessionMatchers#has_current_path?}
79
+
80
+ ##
81
+ # Expectation that current page does not match
82
+ #
83
+ # @!method wont_have_current_path
84
+ # See {Capybara::SessionMatchers#has_no_current_path?}
80
85
 
81
86
  ##
82
87
  # Expectation that there is field
83
88
  #
84
89
  # @!method must_have_field
85
- # see {Capybara::Node::Matchers#has_field?}
90
+ # See {Capybara::Node::Matchers#has_field?}
86
91
 
87
92
  ##
88
93
  # Expectation that there is no field
89
94
  #
90
95
  # @!method wont_have_field
91
- # see {Capybara::Node::Matchers#has_no_field?}
96
+ # See {Capybara::Node::Matchers#has_no_field?}
92
97
 
93
98
  ##
94
- # Expectation that there is checked_field
99
+ # Expectation that there is element
95
100
  #
96
- # @!method must_have_checked_field
97
- # see {Capybara::Node::Matchers#has_checked_field?}
101
+ # @!method must_have_element
102
+ # See {Capybara::Node::Matchers#has_element?}
98
103
 
99
104
  ##
100
- # Expectation that there is no checked_field
105
+ # Expectation that there is no element
101
106
  #
102
- # @!method wont_have_chceked_field
107
+ # @!method wont_have_element
108
+ # See {Capybara::Node::Matchers#has_no_element?}
103
109
 
104
110
  ##
105
- # Expectation that there is unchecked_field
111
+ # Expectation that there is link
106
112
  #
107
- # @!method must_have_unchecked_field
108
- # see {Capybara::Node::Matchers#has_unchecked_field?}
113
+ # @!method must_have_link
114
+ # See {Capybara::Node::Matchers#has_link?}
109
115
 
110
116
  ##
111
- # Expectation that there is no unchecked_field
117
+ # Expectation that there is no link
112
118
  #
113
- # @!method wont_have_unchceked_field
119
+ # @!method wont_have_link
120
+ # See {Capybara::Node::Matchers#has_no_link?}
121
+
122
+ ##
123
+ # Expectation that page text does match
124
+ #
125
+ # @!method must_have_text
126
+ # See {Capybara::Node::Matchers#has_text?}
127
+
128
+ ##
129
+ # Expectation that page text does not match
130
+ #
131
+ # @!method wont_have_text
132
+ # See {Capybara::Node::Matchers#has_no_text?}
133
+
134
+ ##
135
+ # Expectation that page title does match
136
+ #
137
+ # @!method must_have_title
138
+ # See {Capybara::Node::DocumentMatchers#has_title?}
139
+
140
+ ##
141
+ # Expectation that page title does not match
142
+ #
143
+ # @!method wont_have_title
144
+ # See {Capybara::Node::DocumentMatchers#has_no_title?}
114
145
 
115
146
  ##
116
147
  # Expectation that there is select
117
148
  #
118
149
  # @!method must_have_select
119
- # see {Capybara::Node::Matchers#has_select?}
150
+ # See {Capybara::Node::Matchers#has_select?}
120
151
 
121
152
  ##
122
153
  # Expectation that there is no select
123
154
  #
124
155
  # @!method wont_have_select
125
- # see {Capybara::Node::Matchers#has_no_select?}
156
+ # See {Capybara::Node::Matchers#has_no_select?}
126
157
 
127
158
  ##
128
- # Expectation that there is table
159
+ # Expectation that there is a selector
129
160
  #
130
- # @!method must_have_table
131
- # see {Capybara::Node::Matchers#has_table?}
161
+ # @!method must_have_selector
162
+ # See {Capybara::Node::Matchers#has_selector?}
132
163
 
133
164
  ##
134
- # Expectation that there is no table
165
+ # Expectation that there is no selector
135
166
  #
136
- # @!method wont_have_table
137
- # see {Capybara::Node::Matchers#has_no_table?}
167
+ # @!method wont_have_selector
168
+ # See {Capybara::Node::Matchers#has_no_selector?}
138
169
 
139
170
  ##
140
- # Expectation that page title does match
171
+ # Expectation that all of the provided selectors are present
141
172
  #
142
- # @!method must_have_title
143
- # see {Capybara::Node::DocumentMatchers#assert_title}
173
+ # @!method must_have_all_of_selectors
174
+ # See {Capybara::Node::Matchers#assert_all_of_selectors}
144
175
 
145
176
  ##
146
- # Expectation that page title does not match
177
+ # Expectation that none of the provided selectors are present
147
178
  #
148
- # @!method wont_have_title
149
- # see {Capybara::Node::DocumentMatchers#assert_no_title}
179
+ # @!method must_have_none_of_selectors
180
+ # See {Capybara::Node::Matchers#assert_none_of_selectors}
150
181
 
151
182
  ##
152
- # Expectation that current path matches
183
+ # Expectation that any of the provided selectors are present
153
184
  #
154
- # @!method must_have_current_path
155
- # see {Capybara::SessionMatchers#assert_current_path}
185
+ # @!method must_have_any_of_selectors
186
+ # See {Capybara::Node::Matchers#assert_any_of_selectors}
156
187
 
157
188
  ##
158
- # Expectation that current page does not match
189
+ # Expectation that there is a sibling
159
190
  #
160
- # @!method wont_have_current_path
161
- # see {Capybara::SessionMatchers#assert_no_current_path}
191
+ # @!method must_have_sibling
192
+ # See {Capybara::Node::Matchers#has_sibling?}
162
193
 
194
+ ##
195
+ # Expectation that element has style
196
+ #
197
+ # @!method must_match_style
198
+ # See {Capybara::Node::Matchers#matches_style?}
199
+
200
+ ##
201
+ # Expectation that there is table
202
+ #
203
+ # @!method must_have_table
204
+ # See {Capybara::Node::Matchers#has_table?}
205
+
206
+ ##
207
+ # Expectation that there is no table
208
+ #
209
+ # @!method wont_have_table
210
+ # See {Capybara::Node::Matchers#has_no_table?}
211
+
212
+ ##
213
+ # Expectation that there is xpath
214
+ #
215
+ # @!method must_have_xpath
216
+ # See {Capybara::Node::Matchers#has_xpath?}
217
+
218
+ ##
219
+ # Expectation that there is no xpath
220
+ #
221
+ # @!method wont_have_xpath
222
+ # See {Capybara::Node::Matchers#has_no_xpath?}
223
+
224
+ # This currently doesn't work for Ruby 2.8 due to Minitest not forwarding keyword args separately
225
+ # %w[text content title current_path].each do |assertion|
226
+ # infect_an_assertion "assert_#{assertion}", "must_have_#{assertion}", :reverse
227
+ # infect_an_assertion "refute_#{assertion}", "wont_have_#{assertion}", :reverse
228
+ # end
229
+
230
+ # rubocop:disable Style/MultilineBlockChain
231
+ (%w[text content title current_path
232
+ selector xpath css link button field select table checked_field unchecked_field
233
+ ancestor sibling].flat_map do |assertion|
234
+ [%W[assert_#{assertion} must_have_#{assertion}],
235
+ %W[refute_#{assertion} wont_have_#{assertion}]]
236
+ end + [%w[assert_all_of_selectors must_have_all_of_selectors],
237
+ %w[assert_none_of_selectors must_have_none_of_selectors],
238
+ %w[assert_any_of_selectors must_have_any_of_selectors],
239
+ %w[assert_matches_style must_match_style]] +
240
+ %w[selector xpath css].flat_map do |assertion|
241
+ [%W[assert_matches_#{assertion} must_match_#{assertion}],
242
+ %W[refute_matches_#{assertion} wont_match_#{assertion}]]
243
+ end).each do |(meth, new_name)|
244
+ class_eval <<-ASSERTION, __FILE__, __LINE__ + 1
245
+ def #{new_name}(...)
246
+ ::Minitest::Expectation.new(self, ::Minitest::Spec.current).#{new_name}(...)
247
+ end
248
+ ASSERTION
249
+
250
+ ::Minitest::Expectation.class_eval <<-ASSERTION, __FILE__, __LINE__ + 1
251
+ def #{new_name}(...)
252
+ raise "Calling ##{new_name} outside of test." unless ctx
253
+ ctx.#{meth}(target, ...)
254
+ end
255
+ ASSERTION
256
+ end
257
+ # rubocop:enable Style/MultilineBlockChain
258
+
259
+ ##
260
+ # @deprecated
261
+ def must_have_style(...)
262
+ warn 'must_have_style is deprecated, please use must_match_style'
263
+ must_match_style(...)
264
+ end
163
265
  end
164
266
  end
165
267
  end
166
268
 
167
269
  class Capybara::Session
168
- include Capybara::Minitest::Expectations unless ENV["MT_NO_EXPECTATIONS"]
270
+ include Capybara::Minitest::Expectations unless ENV['MT_NO_EXPECTATIONS']
169
271
  end
170
272
 
171
273
  class Capybara::Node::Base
172
- include Capybara::Minitest::Expectations unless ENV["MT_NO_EXPECTATIONS"]
274
+ include Capybara::Minitest::Expectations unless ENV['MT_NO_EXPECTATIONS']
173
275
  end
174
276
 
175
277
  class Capybara::Node::Simple
176
- include Capybara::Minitest::Expectations unless ENV["MT_NO_EXPECTATIONS"]
278
+ include Capybara::Minitest::Expectations unless ENV['MT_NO_EXPECTATIONS']
177
279
  end