mega-max-rb 0.0.1

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 (319) hide show
  1. checksums.yaml +7 -0
  2. data/capybara-3.40.0/History.md +2043 -0
  3. data/capybara-3.40.0/License.txt +22 -0
  4. data/capybara-3.40.0/README.md +1264 -0
  5. data/capybara-3.40.0/lib/capybara/config.rb +104 -0
  6. data/capybara-3.40.0/lib/capybara/cucumber.rb +27 -0
  7. data/capybara-3.40.0/lib/capybara/driver/base.rb +178 -0
  8. data/capybara-3.40.0/lib/capybara/driver/node.rb +143 -0
  9. data/capybara-3.40.0/lib/capybara/dsl.rb +59 -0
  10. data/capybara-3.40.0/lib/capybara/helpers.rb +127 -0
  11. data/capybara-3.40.0/lib/capybara/minitest/spec.rb +279 -0
  12. data/capybara-3.40.0/lib/capybara/minitest.rb +398 -0
  13. data/capybara-3.40.0/lib/capybara/node/actions.rb +420 -0
  14. data/capybara-3.40.0/lib/capybara/node/base.rb +144 -0
  15. data/capybara-3.40.0/lib/capybara/node/document.rb +48 -0
  16. data/capybara-3.40.0/lib/capybara/node/document_matchers.rb +67 -0
  17. data/capybara-3.40.0/lib/capybara/node/element.rb +613 -0
  18. data/capybara-3.40.0/lib/capybara/node/finders.rb +335 -0
  19. data/capybara-3.40.0/lib/capybara/node/matchers.rb +908 -0
  20. data/capybara-3.40.0/lib/capybara/node/simple.rb +216 -0
  21. data/capybara-3.40.0/lib/capybara/node/whitespace_normalizer.rb +81 -0
  22. data/capybara-3.40.0/lib/capybara/queries/active_element_query.rb +18 -0
  23. data/capybara-3.40.0/lib/capybara/queries/ancestor_query.rb +28 -0
  24. data/capybara-3.40.0/lib/capybara/queries/base_query.rb +106 -0
  25. data/capybara-3.40.0/lib/capybara/queries/current_path_query.rb +61 -0
  26. data/capybara-3.40.0/lib/capybara/queries/match_query.rb +26 -0
  27. data/capybara-3.40.0/lib/capybara/queries/selector_query.rb +761 -0
  28. data/capybara-3.40.0/lib/capybara/queries/sibling_query.rb +27 -0
  29. data/capybara-3.40.0/lib/capybara/queries/style_query.rb +45 -0
  30. data/capybara-3.40.0/lib/capybara/queries/text_query.rb +116 -0
  31. data/capybara-3.40.0/lib/capybara/queries/title_query.rb +39 -0
  32. data/capybara-3.40.0/lib/capybara/rack_test/browser.rb +200 -0
  33. data/capybara-3.40.0/lib/capybara/rack_test/css_handlers.rb +13 -0
  34. data/capybara-3.40.0/lib/capybara/rack_test/driver.rb +110 -0
  35. data/capybara-3.40.0/lib/capybara/rack_test/errors.rb +6 -0
  36. data/capybara-3.40.0/lib/capybara/rack_test/form.rb +149 -0
  37. data/capybara-3.40.0/lib/capybara/rack_test/node.rb +324 -0
  38. data/capybara-3.40.0/lib/capybara/rails.rb +16 -0
  39. data/capybara-3.40.0/lib/capybara/registration_container.rb +41 -0
  40. data/capybara-3.40.0/lib/capybara/registrations/drivers.rb +42 -0
  41. data/capybara-3.40.0/lib/capybara/registrations/patches/puma_ssl.rb +29 -0
  42. data/capybara-3.40.0/lib/capybara/registrations/servers.rb +66 -0
  43. data/capybara-3.40.0/lib/capybara/result.rb +186 -0
  44. data/capybara-3.40.0/lib/capybara/rspec/features.rb +23 -0
  45. data/capybara-3.40.0/lib/capybara/rspec/matcher_proxies.rb +82 -0
  46. data/capybara-3.40.0/lib/capybara/rspec/matchers/base.rb +113 -0
  47. data/capybara-3.40.0/lib/capybara/rspec/matchers/become_closed.rb +33 -0
  48. data/capybara-3.40.0/lib/capybara/rspec/matchers/compound.rb +88 -0
  49. data/capybara-3.40.0/lib/capybara/rspec/matchers/count_sugar.rb +37 -0
  50. data/capybara-3.40.0/lib/capybara/rspec/matchers/have_ancestor.rb +28 -0
  51. data/capybara-3.40.0/lib/capybara/rspec/matchers/have_current_path.rb +29 -0
  52. data/capybara-3.40.0/lib/capybara/rspec/matchers/have_selector.rb +69 -0
  53. data/capybara-3.40.0/lib/capybara/rspec/matchers/have_sibling.rb +27 -0
  54. data/capybara-3.40.0/lib/capybara/rspec/matchers/have_text.rb +33 -0
  55. data/capybara-3.40.0/lib/capybara/rspec/matchers/have_title.rb +29 -0
  56. data/capybara-3.40.0/lib/capybara/rspec/matchers/match_selector.rb +27 -0
  57. data/capybara-3.40.0/lib/capybara/rspec/matchers/match_style.rb +43 -0
  58. data/capybara-3.40.0/lib/capybara/rspec/matchers/spatial_sugar.rb +39 -0
  59. data/capybara-3.40.0/lib/capybara/rspec/matchers.rb +207 -0
  60. data/capybara-3.40.0/lib/capybara/rspec.rb +31 -0
  61. data/capybara-3.40.0/lib/capybara/selector/builders/css_builder.rb +84 -0
  62. data/capybara-3.40.0/lib/capybara/selector/builders/xpath_builder.rb +71 -0
  63. data/capybara-3.40.0/lib/capybara/selector/css.rb +102 -0
  64. data/capybara-3.40.0/lib/capybara/selector/definition/button.rb +68 -0
  65. data/capybara-3.40.0/lib/capybara/selector/definition/checkbox.rb +26 -0
  66. data/capybara-3.40.0/lib/capybara/selector/definition/css.rb +10 -0
  67. data/capybara-3.40.0/lib/capybara/selector/definition/datalist_input.rb +35 -0
  68. data/capybara-3.40.0/lib/capybara/selector/definition/datalist_option.rb +25 -0
  69. data/capybara-3.40.0/lib/capybara/selector/definition/element.rb +28 -0
  70. data/capybara-3.40.0/lib/capybara/selector/definition/field.rb +40 -0
  71. data/capybara-3.40.0/lib/capybara/selector/definition/fieldset.rb +14 -0
  72. data/capybara-3.40.0/lib/capybara/selector/definition/file_field.rb +13 -0
  73. data/capybara-3.40.0/lib/capybara/selector/definition/fillable_field.rb +33 -0
  74. data/capybara-3.40.0/lib/capybara/selector/definition/frame.rb +17 -0
  75. data/capybara-3.40.0/lib/capybara/selector/definition/id.rb +6 -0
  76. data/capybara-3.40.0/lib/capybara/selector/definition/label.rb +62 -0
  77. data/capybara-3.40.0/lib/capybara/selector/definition/link.rb +55 -0
  78. data/capybara-3.40.0/lib/capybara/selector/definition/link_or_button.rb +16 -0
  79. data/capybara-3.40.0/lib/capybara/selector/definition/option.rb +27 -0
  80. data/capybara-3.40.0/lib/capybara/selector/definition/radio_button.rb +27 -0
  81. data/capybara-3.40.0/lib/capybara/selector/definition/select.rb +81 -0
  82. data/capybara-3.40.0/lib/capybara/selector/definition/table.rb +109 -0
  83. data/capybara-3.40.0/lib/capybara/selector/definition/table_row.rb +21 -0
  84. data/capybara-3.40.0/lib/capybara/selector/definition/xpath.rb +5 -0
  85. data/capybara-3.40.0/lib/capybara/selector/definition.rb +280 -0
  86. data/capybara-3.40.0/lib/capybara/selector/filter.rb +5 -0
  87. data/capybara-3.40.0/lib/capybara/selector/filter_set.rb +121 -0
  88. data/capybara-3.40.0/lib/capybara/selector/filters/base.rb +77 -0
  89. data/capybara-3.40.0/lib/capybara/selector/filters/expression_filter.rb +22 -0
  90. data/capybara-3.40.0/lib/capybara/selector/filters/locator_filter.rb +29 -0
  91. data/capybara-3.40.0/lib/capybara/selector/filters/node_filter.rb +31 -0
  92. data/capybara-3.40.0/lib/capybara/selector/regexp_disassembler.rb +211 -0
  93. data/capybara-3.40.0/lib/capybara/selector/selector.rb +159 -0
  94. data/capybara-3.40.0/lib/capybara/selector/xpath_extensions.rb +17 -0
  95. data/capybara-3.40.0/lib/capybara/selector.rb +494 -0
  96. data/capybara-3.40.0/lib/capybara/selenium/atoms/getAttribute.min.js +1 -0
  97. data/capybara-3.40.0/lib/capybara/selenium/atoms/isDisplayed.min.js +1 -0
  98. data/capybara-3.40.0/lib/capybara/selenium/atoms/src/getAttribute.js +161 -0
  99. data/capybara-3.40.0/lib/capybara/selenium/atoms/src/isDisplayed.js +454 -0
  100. data/capybara-3.40.0/lib/capybara/selenium/driver.rb +517 -0
  101. data/capybara-3.40.0/lib/capybara/selenium/driver_specializations/chrome_driver.rb +117 -0
  102. data/capybara-3.40.0/lib/capybara/selenium/driver_specializations/edge_driver.rb +128 -0
  103. data/capybara-3.40.0/lib/capybara/selenium/driver_specializations/firefox_driver.rb +84 -0
  104. data/capybara-3.40.0/lib/capybara/selenium/driver_specializations/internet_explorer_driver.rb +26 -0
  105. data/capybara-3.40.0/lib/capybara/selenium/driver_specializations/safari_driver.rb +24 -0
  106. data/capybara-3.40.0/lib/capybara/selenium/extensions/file_input_click_emulation.rb +34 -0
  107. data/capybara-3.40.0/lib/capybara/selenium/extensions/find.rb +110 -0
  108. data/capybara-3.40.0/lib/capybara/selenium/extensions/html5_drag.rb +229 -0
  109. data/capybara-3.40.0/lib/capybara/selenium/extensions/modifier_keys_stack.rb +28 -0
  110. data/capybara-3.40.0/lib/capybara/selenium/extensions/scroll.rb +76 -0
  111. data/capybara-3.40.0/lib/capybara/selenium/node.rb +636 -0
  112. data/capybara-3.40.0/lib/capybara/selenium/nodes/chrome_node.rb +125 -0
  113. data/capybara-3.40.0/lib/capybara/selenium/nodes/edge_node.rb +110 -0
  114. data/capybara-3.40.0/lib/capybara/selenium/nodes/firefox_node.rb +136 -0
  115. data/capybara-3.40.0/lib/capybara/selenium/nodes/ie_node.rb +22 -0
  116. data/capybara-3.40.0/lib/capybara/selenium/nodes/safari_node.rb +118 -0
  117. data/capybara-3.40.0/lib/capybara/selenium/patches/atoms.rb +18 -0
  118. data/capybara-3.40.0/lib/capybara/selenium/patches/is_displayed.rb +16 -0
  119. data/capybara-3.40.0/lib/capybara/selenium/patches/logs.rb +45 -0
  120. data/capybara-3.40.0/lib/capybara/selenium/patches/pause_duration_fix.rb +9 -0
  121. data/capybara-3.40.0/lib/capybara/selenium/patches/persistent_client.rb +20 -0
  122. data/capybara-3.40.0/lib/capybara/server/animation_disabler.rb +80 -0
  123. data/capybara-3.40.0/lib/capybara/server/checker.rb +44 -0
  124. data/capybara-3.40.0/lib/capybara/server/middleware.rb +71 -0
  125. data/capybara-3.40.0/lib/capybara/server.rb +126 -0
  126. data/capybara-3.40.0/lib/capybara/session/config.rb +128 -0
  127. data/capybara-3.40.0/lib/capybara/session/matchers.rb +87 -0
  128. data/capybara-3.40.0/lib/capybara/session.rb +951 -0
  129. data/capybara-3.40.0/lib/capybara/spec/fixtures/another_test_file.txt +1 -0
  130. data/capybara-3.40.0/lib/capybara/spec/fixtures/capybara.jpg +3 -0
  131. data/capybara-3.40.0/lib/capybara/spec/fixtures/no_extension +1 -0
  132. data/capybara-3.40.0/lib/capybara/spec/fixtures/test_file.txt +1 -0
  133. data/capybara-3.40.0/lib/capybara/spec/public/jquery-ui.js +13 -0
  134. data/capybara-3.40.0/lib/capybara/spec/public/jquery.js +5 -0
  135. data/capybara-3.40.0/lib/capybara/spec/public/offset.js +6 -0
  136. data/capybara-3.40.0/lib/capybara/spec/public/test.js +284 -0
  137. data/capybara-3.40.0/lib/capybara/spec/session/accept_alert_spec.rb +81 -0
  138. data/capybara-3.40.0/lib/capybara/spec/session/accept_confirm_spec.rb +32 -0
  139. data/capybara-3.40.0/lib/capybara/spec/session/accept_prompt_spec.rb +78 -0
  140. data/capybara-3.40.0/lib/capybara/spec/session/active_element_spec.rb +31 -0
  141. data/capybara-3.40.0/lib/capybara/spec/session/all_spec.rb +274 -0
  142. data/capybara-3.40.0/lib/capybara/spec/session/ancestor_spec.rb +88 -0
  143. data/capybara-3.40.0/lib/capybara/spec/session/assert_all_of_selectors_spec.rb +140 -0
  144. data/capybara-3.40.0/lib/capybara/spec/session/assert_current_path_spec.rb +75 -0
  145. data/capybara-3.40.0/lib/capybara/spec/session/assert_selector_spec.rb +143 -0
  146. data/capybara-3.40.0/lib/capybara/spec/session/assert_style_spec.rb +26 -0
  147. data/capybara-3.40.0/lib/capybara/spec/session/assert_text_spec.rb +258 -0
  148. data/capybara-3.40.0/lib/capybara/spec/session/assert_title_spec.rb +93 -0
  149. data/capybara-3.40.0/lib/capybara/spec/session/attach_file_spec.rb +222 -0
  150. data/capybara-3.40.0/lib/capybara/spec/session/body_spec.rb +23 -0
  151. data/capybara-3.40.0/lib/capybara/spec/session/check_spec.rb +251 -0
  152. data/capybara-3.40.0/lib/capybara/spec/session/choose_spec.rb +127 -0
  153. data/capybara-3.40.0/lib/capybara/spec/session/click_button_spec.rb +517 -0
  154. data/capybara-3.40.0/lib/capybara/spec/session/click_link_or_button_spec.rb +138 -0
  155. data/capybara-3.40.0/lib/capybara/spec/session/click_link_spec.rb +240 -0
  156. data/capybara-3.40.0/lib/capybara/spec/session/current_scope_spec.rb +31 -0
  157. data/capybara-3.40.0/lib/capybara/spec/session/current_url_spec.rb +125 -0
  158. data/capybara-3.40.0/lib/capybara/spec/session/dismiss_confirm_spec.rb +36 -0
  159. data/capybara-3.40.0/lib/capybara/spec/session/dismiss_prompt_spec.rb +21 -0
  160. data/capybara-3.40.0/lib/capybara/spec/session/element/assert_match_selector_spec.rb +38 -0
  161. data/capybara-3.40.0/lib/capybara/spec/session/element/match_css_spec.rb +31 -0
  162. data/capybara-3.40.0/lib/capybara/spec/session/element/match_xpath_spec.rb +25 -0
  163. data/capybara-3.40.0/lib/capybara/spec/session/element/matches_selector_spec.rb +120 -0
  164. data/capybara-3.40.0/lib/capybara/spec/session/evaluate_async_script_spec.rb +23 -0
  165. data/capybara-3.40.0/lib/capybara/spec/session/evaluate_script_spec.rb +49 -0
  166. data/capybara-3.40.0/lib/capybara/spec/session/execute_script_spec.rb +28 -0
  167. data/capybara-3.40.0/lib/capybara/spec/session/fill_in_spec.rb +292 -0
  168. data/capybara-3.40.0/lib/capybara/spec/session/find_button_spec.rb +74 -0
  169. data/capybara-3.40.0/lib/capybara/spec/session/find_by_id_spec.rb +33 -0
  170. data/capybara-3.40.0/lib/capybara/spec/session/find_field_spec.rb +113 -0
  171. data/capybara-3.40.0/lib/capybara/spec/session/find_link_spec.rb +80 -0
  172. data/capybara-3.40.0/lib/capybara/spec/session/find_spec.rb +545 -0
  173. data/capybara-3.40.0/lib/capybara/spec/session/first_spec.rb +156 -0
  174. data/capybara-3.40.0/lib/capybara/spec/session/frame/frame_title_spec.rb +23 -0
  175. data/capybara-3.40.0/lib/capybara/spec/session/frame/frame_url_spec.rb +23 -0
  176. data/capybara-3.40.0/lib/capybara/spec/session/frame/switch_to_frame_spec.rb +116 -0
  177. data/capybara-3.40.0/lib/capybara/spec/session/frame/within_frame_spec.rb +114 -0
  178. data/capybara-3.40.0/lib/capybara/spec/session/go_back_spec.rb +12 -0
  179. data/capybara-3.40.0/lib/capybara/spec/session/go_forward_spec.rb +14 -0
  180. data/capybara-3.40.0/lib/capybara/spec/session/has_all_selectors_spec.rb +69 -0
  181. data/capybara-3.40.0/lib/capybara/spec/session/has_ancestor_spec.rb +46 -0
  182. data/capybara-3.40.0/lib/capybara/spec/session/has_any_selectors_spec.rb +29 -0
  183. data/capybara-3.40.0/lib/capybara/spec/session/has_button_spec.rb +150 -0
  184. data/capybara-3.40.0/lib/capybara/spec/session/has_css_spec.rb +375 -0
  185. data/capybara-3.40.0/lib/capybara/spec/session/has_current_path_spec.rb +151 -0
  186. data/capybara-3.40.0/lib/capybara/spec/session/has_element_spec.rb +47 -0
  187. data/capybara-3.40.0/lib/capybara/spec/session/has_field_spec.rb +389 -0
  188. data/capybara-3.40.0/lib/capybara/spec/session/has_link_spec.rb +79 -0
  189. data/capybara-3.40.0/lib/capybara/spec/session/has_none_selectors_spec.rb +78 -0
  190. data/capybara-3.40.0/lib/capybara/spec/session/has_select_spec.rb +316 -0
  191. data/capybara-3.40.0/lib/capybara/spec/session/has_selector_spec.rb +217 -0
  192. data/capybara-3.40.0/lib/capybara/spec/session/has_sibling_spec.rb +50 -0
  193. data/capybara-3.40.0/lib/capybara/spec/session/has_table_spec.rb +209 -0
  194. data/capybara-3.40.0/lib/capybara/spec/session/has_text_spec.rb +375 -0
  195. data/capybara-3.40.0/lib/capybara/spec/session/has_title_spec.rb +71 -0
  196. data/capybara-3.40.0/lib/capybara/spec/session/has_xpath_spec.rb +149 -0
  197. data/capybara-3.40.0/lib/capybara/spec/session/headers_spec.rb +8 -0
  198. data/capybara-3.40.0/lib/capybara/spec/session/html_spec.rb +47 -0
  199. data/capybara-3.40.0/lib/capybara/spec/session/matches_style_spec.rb +37 -0
  200. data/capybara-3.40.0/lib/capybara/spec/session/node_spec.rb +1399 -0
  201. data/capybara-3.40.0/lib/capybara/spec/session/node_wrapper_spec.rb +39 -0
  202. data/capybara-3.40.0/lib/capybara/spec/session/refresh_spec.rb +34 -0
  203. data/capybara-3.40.0/lib/capybara/spec/session/reset_session_spec.rb +161 -0
  204. data/capybara-3.40.0/lib/capybara/spec/session/response_code_spec.rb +8 -0
  205. data/capybara-3.40.0/lib/capybara/spec/session/save_and_open_page_spec.rb +21 -0
  206. data/capybara-3.40.0/lib/capybara/spec/session/save_and_open_screenshot_spec.rb +43 -0
  207. data/capybara-3.40.0/lib/capybara/spec/session/save_page_spec.rb +110 -0
  208. data/capybara-3.40.0/lib/capybara/spec/session/save_screenshot_spec.rb +55 -0
  209. data/capybara-3.40.0/lib/capybara/spec/session/screenshot_spec.rb +18 -0
  210. data/capybara-3.40.0/lib/capybara/spec/session/scroll_spec.rb +119 -0
  211. data/capybara-3.40.0/lib/capybara/spec/session/select_spec.rb +229 -0
  212. data/capybara-3.40.0/lib/capybara/spec/session/selectors_spec.rb +98 -0
  213. data/capybara-3.40.0/lib/capybara/spec/session/sibling_spec.rb +52 -0
  214. data/capybara-3.40.0/lib/capybara/spec/session/text_spec.rb +74 -0
  215. data/capybara-3.40.0/lib/capybara/spec/session/title_spec.rb +29 -0
  216. data/capybara-3.40.0/lib/capybara/spec/session/uncheck_spec.rb +100 -0
  217. data/capybara-3.40.0/lib/capybara/spec/session/unselect_spec.rb +116 -0
  218. data/capybara-3.40.0/lib/capybara/spec/session/visit_spec.rb +224 -0
  219. data/capybara-3.40.0/lib/capybara/spec/session/window/become_closed_spec.rb +89 -0
  220. data/capybara-3.40.0/lib/capybara/spec/session/window/current_window_spec.rb +28 -0
  221. data/capybara-3.40.0/lib/capybara/spec/session/window/open_new_window_spec.rb +31 -0
  222. data/capybara-3.40.0/lib/capybara/spec/session/window/switch_to_window_spec.rb +132 -0
  223. data/capybara-3.40.0/lib/capybara/spec/session/window/window_opened_by_spec.rb +99 -0
  224. data/capybara-3.40.0/lib/capybara/spec/session/window/window_spec.rb +203 -0
  225. data/capybara-3.40.0/lib/capybara/spec/session/window/windows_spec.rb +34 -0
  226. data/capybara-3.40.0/lib/capybara/spec/session/window/within_window_spec.rb +157 -0
  227. data/capybara-3.40.0/lib/capybara/spec/session/within_spec.rb +212 -0
  228. data/capybara-3.40.0/lib/capybara/spec/spec_helper.rb +141 -0
  229. data/capybara-3.40.0/lib/capybara/spec/test_app.rb +305 -0
  230. data/capybara-3.40.0/lib/capybara/spec/views/animated.erb +49 -0
  231. data/capybara-3.40.0/lib/capybara/spec/views/buttons.erb +5 -0
  232. data/capybara-3.40.0/lib/capybara/spec/views/fieldsets.erb +30 -0
  233. data/capybara-3.40.0/lib/capybara/spec/views/form.erb +738 -0
  234. data/capybara-3.40.0/lib/capybara/spec/views/frame_child.erb +18 -0
  235. data/capybara-3.40.0/lib/capybara/spec/views/frame_one.erb +10 -0
  236. data/capybara-3.40.0/lib/capybara/spec/views/frame_parent.erb +9 -0
  237. data/capybara-3.40.0/lib/capybara/spec/views/frame_two.erb +9 -0
  238. data/capybara-3.40.0/lib/capybara/spec/views/header_links.erb +8 -0
  239. data/capybara-3.40.0/lib/capybara/spec/views/host_links.erb +13 -0
  240. data/capybara-3.40.0/lib/capybara/spec/views/initial_alert.erb +11 -0
  241. data/capybara-3.40.0/lib/capybara/spec/views/layout.erb +10 -0
  242. data/capybara-3.40.0/lib/capybara/spec/views/obscured.erb +47 -0
  243. data/capybara-3.40.0/lib/capybara/spec/views/offset.erb +33 -0
  244. data/capybara-3.40.0/lib/capybara/spec/views/path.erb +13 -0
  245. data/capybara-3.40.0/lib/capybara/spec/views/popup_one.erb +9 -0
  246. data/capybara-3.40.0/lib/capybara/spec/views/popup_two.erb +9 -0
  247. data/capybara-3.40.0/lib/capybara/spec/views/postback.erb +14 -0
  248. data/capybara-3.40.0/lib/capybara/spec/views/react.erb +45 -0
  249. data/capybara-3.40.0/lib/capybara/spec/views/scroll.erb +21 -0
  250. data/capybara-3.40.0/lib/capybara/spec/views/spatial.erb +31 -0
  251. data/capybara-3.40.0/lib/capybara/spec/views/tables.erb +130 -0
  252. data/capybara-3.40.0/lib/capybara/spec/views/with_animation.erb +81 -0
  253. data/capybara-3.40.0/lib/capybara/spec/views/with_base_tag.erb +11 -0
  254. data/capybara-3.40.0/lib/capybara/spec/views/with_count.erb +8 -0
  255. data/capybara-3.40.0/lib/capybara/spec/views/with_dragula.erb +24 -0
  256. data/capybara-3.40.0/lib/capybara/spec/views/with_fixed_header_footer.erb +18 -0
  257. data/capybara-3.40.0/lib/capybara/spec/views/with_hover.erb +24 -0
  258. data/capybara-3.40.0/lib/capybara/spec/views/with_hover1.erb +10 -0
  259. data/capybara-3.40.0/lib/capybara/spec/views/with_html.erb +210 -0
  260. data/capybara-3.40.0/lib/capybara/spec/views/with_html5_svg.erb +20 -0
  261. data/capybara-3.40.0/lib/capybara/spec/views/with_html_entities.erb +2 -0
  262. data/capybara-3.40.0/lib/capybara/spec/views/with_jquery_animation.erb +24 -0
  263. data/capybara-3.40.0/lib/capybara/spec/views/with_js.erb +162 -0
  264. data/capybara-3.40.0/lib/capybara/spec/views/with_jstree.erb +26 -0
  265. data/capybara-3.40.0/lib/capybara/spec/views/with_namespace.erb +21 -0
  266. data/capybara-3.40.0/lib/capybara/spec/views/with_scope.erb +42 -0
  267. data/capybara-3.40.0/lib/capybara/spec/views/with_scope_other.erb +6 -0
  268. data/capybara-3.40.0/lib/capybara/spec/views/with_shadow.erb +31 -0
  269. data/capybara-3.40.0/lib/capybara/spec/views/with_simple_html.erb +2 -0
  270. data/capybara-3.40.0/lib/capybara/spec/views/with_slow_unload.erb +18 -0
  271. data/capybara-3.40.0/lib/capybara/spec/views/with_sortable_js.erb +21 -0
  272. data/capybara-3.40.0/lib/capybara/spec/views/with_unload_alert.erb +15 -0
  273. data/capybara-3.40.0/lib/capybara/spec/views/with_windows.erb +54 -0
  274. data/capybara-3.40.0/lib/capybara/spec/views/within_frames.erb +15 -0
  275. data/capybara-3.40.0/lib/capybara/version.rb +5 -0
  276. data/capybara-3.40.0/lib/capybara/window.rb +142 -0
  277. data/capybara-3.40.0/lib/capybara.rb +521 -0
  278. data/capybara-3.40.0/spec/basic_node_spec.rb +168 -0
  279. data/capybara-3.40.0/spec/capybara_spec.rb +124 -0
  280. data/capybara-3.40.0/spec/counter_spec.rb +35 -0
  281. data/capybara-3.40.0/spec/css_builder_spec.rb +101 -0
  282. data/capybara-3.40.0/spec/css_splitter_spec.rb +38 -0
  283. data/capybara-3.40.0/spec/dsl_spec.rb +291 -0
  284. data/capybara-3.40.0/spec/filter_set_spec.rb +46 -0
  285. data/capybara-3.40.0/spec/fixtures/capybara.csv +1 -0
  286. data/capybara-3.40.0/spec/fixtures/certificate.pem +25 -0
  287. data/capybara-3.40.0/spec/fixtures/key.pem +27 -0
  288. data/capybara-3.40.0/spec/fixtures/selenium_driver_rspec_failure.rb +13 -0
  289. data/capybara-3.40.0/spec/fixtures/selenium_driver_rspec_success.rb +13 -0
  290. data/capybara-3.40.0/spec/minitest_spec.rb +175 -0
  291. data/capybara-3.40.0/spec/minitest_spec_spec.rb +166 -0
  292. data/capybara-3.40.0/spec/per_session_config_spec.rb +68 -0
  293. data/capybara-3.40.0/spec/rack_test_spec.rb +297 -0
  294. data/capybara-3.40.0/spec/regexp_dissassembler_spec.rb +250 -0
  295. data/capybara-3.40.0/spec/result_spec.rb +202 -0
  296. data/capybara-3.40.0/spec/rspec/features_spec.rb +101 -0
  297. data/capybara-3.40.0/spec/rspec/scenarios_spec.rb +23 -0
  298. data/capybara-3.40.0/spec/rspec/shared_spec_matchers.rb +983 -0
  299. data/capybara-3.40.0/spec/rspec/views_spec.rb +14 -0
  300. data/capybara-3.40.0/spec/rspec_matchers_spec.rb +87 -0
  301. data/capybara-3.40.0/spec/rspec_spec.rb +149 -0
  302. data/capybara-3.40.0/spec/sauce_spec_chrome.rb +43 -0
  303. data/capybara-3.40.0/spec/selector_spec.rb +528 -0
  304. data/capybara-3.40.0/spec/selenium_spec_chrome.rb +209 -0
  305. data/capybara-3.40.0/spec/selenium_spec_chrome_remote.rb +96 -0
  306. data/capybara-3.40.0/spec/selenium_spec_edge.rb +60 -0
  307. data/capybara-3.40.0/spec/selenium_spec_firefox.rb +228 -0
  308. data/capybara-3.40.0/spec/selenium_spec_firefox_remote.rb +94 -0
  309. data/capybara-3.40.0/spec/selenium_spec_ie.rb +149 -0
  310. data/capybara-3.40.0/spec/selenium_spec_safari.rb +162 -0
  311. data/capybara-3.40.0/spec/server_spec.rb +315 -0
  312. data/capybara-3.40.0/spec/session_spec.rb +91 -0
  313. data/capybara-3.40.0/spec/shared_selenium_node.rb +79 -0
  314. data/capybara-3.40.0/spec/shared_selenium_session.rb +566 -0
  315. data/capybara-3.40.0/spec/spec_helper.rb +133 -0
  316. data/capybara-3.40.0/spec/whitespace_normalizer_spec.rb +54 -0
  317. data/capybara-3.40.0/spec/xpath_builder_spec.rb +93 -0
  318. data/mega-max-rb.gemspec +12 -0
  319. metadata +358 -0
@@ -0,0 +1,983 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+ require 'capybara/dsl'
5
+ require 'capybara/rspec/matchers'
6
+ require 'benchmark'
7
+
8
+ # rubocop:disable RSpec/ExpectActual
9
+
10
+ RSpec.shared_examples Capybara::RSpecMatchers do |session, _mode|
11
+ include Capybara::DSL
12
+ include Capybara::RSpecMatchers
13
+
14
+ describe 'have_css matcher' do
15
+ it 'gives proper description' do
16
+ expect(have_css('h1').description).to eq('have visible css "h1"')
17
+ end
18
+
19
+ context 'on a string' do
20
+ context 'with should' do
21
+ it 'passes if has_css? returns true' do
22
+ expect('<h1>Text</h1>').to have_css('h1')
23
+ end
24
+
25
+ it 'fails if has_css? returns false' do
26
+ expect do
27
+ expect('<h1>Text</h1>').to have_css('h2')
28
+ end.to raise_error(/expected to find css "h2" but there were no matches/)
29
+ end
30
+
31
+ it 'passes if matched node count equals expected count' do
32
+ expect('<h1>Text</h1>').to have_css('h1', count: 1)
33
+ end
34
+
35
+ it 'fails if matched node count does not equal expected count' do
36
+ expect do
37
+ expect('<h1>Text</h1>').to have_css('h1', count: 2)
38
+ end.to raise_error('expected to find visible css "h1" 2 times, found 1 match: "Text"')
39
+ end
40
+
41
+ it 'fails if matched node count is less than expected minimum count' do
42
+ expect do
43
+ expect('<h1>Text</h1>').to have_css('p', minimum: 1)
44
+ end.to raise_error('expected to find css "p" at least 1 time but there were no matches')
45
+ end
46
+
47
+ it 'fails if matched node count is more than expected maximum count' do
48
+ expect do
49
+ expect('<h1>Text</h1><h1>Text</h1><h1>Text</h1>').to have_css('h1', maximum: 2)
50
+ end.to raise_error('expected to find visible css "h1" at most 2 times, found 3 matches: "Text", "Text", "Text"')
51
+ end
52
+
53
+ it 'fails if matched node count does not belong to expected range' do
54
+ expect do
55
+ expect('<h1>Text</h1>').to have_css('h1', between: 2..3)
56
+ end.to raise_error('expected to find visible css "h1" between 2 and 3 times, found 1 match: "Text"')
57
+ end
58
+ end
59
+
60
+ context 'with should_not' do
61
+ it 'passes if has_no_css? returns true' do
62
+ expect('<h1>Text</h1>').not_to have_css('h2')
63
+ end
64
+
65
+ it 'fails if has_no_css? returns false' do
66
+ expect do
67
+ expect('<h1>Text</h1>').not_to have_css('h1')
68
+ end.to raise_error(/expected not to find visible css "h1"/)
69
+ end
70
+
71
+ it 'passes if matched node count does not equal expected count' do
72
+ expect('<h1>Text</h1>').not_to have_css('h1', count: 2)
73
+ end
74
+
75
+ it 'fails if matched node count equals expected count' do
76
+ expect do
77
+ expect('<h1>Text</h1>').not_to have_css('h1', count: 1)
78
+ end.to raise_error(/expected not to find visible css "h1"/)
79
+ end
80
+ end
81
+
82
+ it 'supports compounding' do
83
+ expect('<h1>Text</h1><h2>Text</h2>').to have_css('h1').and have_css('h2')
84
+ expect('<h1>Text</h1><h2>Text</h2>').to have_css('h3').or have_css('h1')
85
+ expect('<h1>Text</h1><h2>Text</h2>').to have_no_css('h4').and have_css('h2')
86
+ expect('<h1>Text</h1><h2>Text</h2>').to have_no_css('h2').or have_css('h1')
87
+ end
88
+ end
89
+
90
+ context 'on a page or node' do
91
+ before do
92
+ session.visit('/with_html')
93
+ end
94
+
95
+ context 'with should' do
96
+ it 'passes if has_css? returns true' do
97
+ expect(session).to have_css('h1')
98
+ end
99
+
100
+ it 'fails if has_css? returns false' do
101
+ expect do
102
+ expect(session).to have_css('h1#doesnotexist')
103
+ end.to raise_error(/expected to find css "h1#doesnotexist" but there were no matches/)
104
+ end
105
+ end
106
+
107
+ context 'with should_not' do
108
+ it 'passes if has_no_css? returns true' do
109
+ expect(session).not_to have_css('h1#doesnotexist')
110
+ end
111
+
112
+ it 'fails if has_no_css? returns false' do
113
+ expect do
114
+ expect(session).not_to have_css('h1')
115
+ end.to raise_error(/expected not to find visible css "h1"/)
116
+ end
117
+ end
118
+ end
119
+ end
120
+
121
+ describe 'have_xpath matcher' do
122
+ it 'gives proper description' do
123
+ expect(have_xpath('//h1').description).to eq('have visible xpath "//h1"')
124
+ end
125
+
126
+ context 'on a string' do
127
+ context 'with should' do
128
+ it 'passes if has_xpath? returns true' do
129
+ expect('<h1>Text</h1>').to have_xpath('//h1')
130
+ end
131
+
132
+ it 'fails if has_xpath? returns false' do
133
+ expect do
134
+ expect('<h1>Text</h1>').to have_xpath('//h2')
135
+ end.to raise_error(%r{expected to find xpath "//h2" but there were no matches})
136
+ end
137
+ end
138
+
139
+ context 'with should_not' do
140
+ it 'passes if has_no_xpath? returns true' do
141
+ expect('<h1>Text</h1>').not_to have_xpath('//h2')
142
+ end
143
+
144
+ it 'fails if has_no_xpath? returns false' do
145
+ expect do
146
+ expect('<h1>Text</h1>').not_to have_xpath('//h1')
147
+ end.to raise_error(%r{expected not to find visible xpath "//h1"})
148
+ end
149
+ end
150
+
151
+ it 'supports compounding' do
152
+ expect('<h1>Text</h1><h2>Text</h2>').to have_xpath('//h1').and have_xpath('//h2')
153
+ expect('<h1>Text</h1><h2>Text</h2>').to have_xpath('//h3').or have_xpath('//h1')
154
+ expect('<h1>Text</h1><h2>Text</h2>').to have_no_xpath('//h4').and have_xpath('//h1')
155
+ expect('<h1>Text</h1><h2>Text</h2>').to have_no_xpath('//h4').or have_xpath('//h4')
156
+ end
157
+ end
158
+
159
+ context 'on a page or node' do
160
+ before do
161
+ session.visit('/with_html')
162
+ end
163
+
164
+ context 'with should' do
165
+ it 'passes if has_xpath? returns true' do
166
+ expect(session).to have_xpath('//h1')
167
+ end
168
+
169
+ it 'fails if has_xpath? returns false' do
170
+ expect do
171
+ expect(session).to have_xpath("//h1[@id='doesnotexist']")
172
+ end.to raise_error(%r{expected to find xpath "//h1\[@id='doesnotexist'\]" but there were no matches})
173
+ end
174
+ end
175
+
176
+ context 'with should_not' do
177
+ it 'passes if has_no_xpath? returns true' do
178
+ expect(session).not_to have_xpath('//h1[@id="doesnotexist"]')
179
+ end
180
+
181
+ it 'fails if has_no_xpath? returns false' do
182
+ expect do
183
+ expect(session).not_to have_xpath('//h1')
184
+ end.to raise_error(%r{expected not to find visible xpath "//h1"})
185
+ end
186
+ end
187
+ end
188
+ end
189
+
190
+ describe 'have_selector matcher' do
191
+ it 'gives proper description' do
192
+ matcher = have_selector('//h1')
193
+ expect('<h1>Text</h1>').to matcher
194
+ expect(matcher.description).to eq('have visible xpath "//h1"')
195
+ end
196
+
197
+ context 'on a string' do
198
+ context 'with should' do
199
+ it 'passes if has_selector? returns true' do
200
+ expect('<h1>Text</h1>').to have_selector('//h1')
201
+ end
202
+
203
+ it 'fails if has_selector? returns false' do
204
+ expect do
205
+ expect('<h1>Text</h1>').to have_selector('//h2')
206
+ end.to raise_error(%r{expected to find xpath "//h2" but there were no matches})
207
+ end
208
+ end
209
+
210
+ context 'with should_not' do
211
+ it 'passes if has_no_selector? returns true' do
212
+ expect('<h1>Text</h1>').not_to have_selector(:css, 'h2')
213
+ end
214
+
215
+ it 'fails if has_no_selector? returns false' do
216
+ expect do
217
+ expect('<h1>Text</h1>').not_to have_selector(:css, 'h1')
218
+ end.to raise_error(/expected not to find visible css "h1"/)
219
+ end
220
+ end
221
+ end
222
+
223
+ context 'on a page or node' do
224
+ before do
225
+ session.visit('/with_html')
226
+ end
227
+
228
+ context 'with should' do
229
+ it 'passes if has_selector? returns true' do
230
+ expect(session).to have_selector('//h1', text: 'test')
231
+ end
232
+
233
+ it 'fails if has_selector? returns false' do
234
+ expect do
235
+ expect(session).to have_selector("//h1[@id='doesnotexist']")
236
+ end.to raise_error(%r{expected to find xpath "//h1\[@id='doesnotexist'\]" but there were no matches})
237
+ end
238
+
239
+ it 'includes text in error message' do
240
+ expect do
241
+ expect(session).to have_selector('//h1', text: 'wrong text')
242
+ end.to raise_error(%r{expected to find visible xpath "//h1" with text "wrong text" but there were no matches})
243
+ end
244
+ end
245
+
246
+ context 'with should_not' do
247
+ it 'passes if has_no_css? returns true' do
248
+ expect(session).not_to have_selector(:css, 'h1#doesnotexist')
249
+ end
250
+
251
+ it 'fails if has_no_selector? returns false' do
252
+ expect do
253
+ expect(session).not_to have_selector(:css, 'h1', text: 'test')
254
+ end.to raise_error(/expected not to find visible css "h1" with text "test"/)
255
+ end
256
+ end
257
+ end
258
+
259
+ it 'supports compounding' do
260
+ expect('<h1>Text</h1><h2>Text</h2>').to have_selector('//h1').and have_selector('//h2')
261
+ expect('<h1>Text</h1><h2>Text</h2>').to have_selector('//h3').or have_selector('//h1')
262
+ expect('<h1>Text</h1><h2>Text</h2>').to have_no_selector('//h3').and have_selector('//h1')
263
+ end
264
+ end
265
+
266
+ describe 'have_content matcher' do
267
+ it 'gives proper description' do
268
+ expect(have_content('Text').description).to eq('have text "Text"')
269
+ end
270
+
271
+ context 'on a string' do
272
+ context 'with should' do
273
+ it 'passes if has_content? returns true' do
274
+ expect('<h1>Text</h1>').to have_content('Text')
275
+ end
276
+
277
+ it 'passes if has_content? returns true using regexp' do
278
+ expect('<h1>Text</h1>').to have_content(/ext/)
279
+ end
280
+
281
+ it 'fails if has_content? returns false' do
282
+ expect do
283
+ expect('<h1>Text</h1>').to have_content('No such Text')
284
+ end.to raise_error(/expected to find text "No such Text" in "Text"/)
285
+ end
286
+ end
287
+
288
+ context 'with should_not' do
289
+ it 'passes if has_no_content? returns true' do
290
+ expect('<h1>Text</h1>').not_to have_content('No such Text')
291
+ end
292
+
293
+ it 'passes because escapes any characters that would have special meaning in a regexp' do
294
+ expect('<h1>Text</h1>').not_to have_content('.')
295
+ end
296
+
297
+ it 'fails if has_no_content? returns false' do
298
+ expect do
299
+ expect('<h1>Text</h1>').not_to have_content('Text')
300
+ end.to raise_error(/expected not to find text "Text" in "Text"/)
301
+ end
302
+ end
303
+ end
304
+
305
+ context 'on a page or node' do
306
+ before do
307
+ session.visit('/with_html')
308
+ end
309
+
310
+ context 'with should' do
311
+ it 'passes if has_content? returns true' do
312
+ expect(session).to have_content('This is a test')
313
+ end
314
+
315
+ it 'passes if has_content? returns true using regexp' do
316
+ expect(session).to have_content(/test/)
317
+ end
318
+
319
+ it 'fails if has_content? returns false' do
320
+ expect do
321
+ expect(session).to have_content('No such Text')
322
+ end.to raise_error(/expected to find text "No such Text" in "(.*)This is a test(.*)"/)
323
+ end
324
+
325
+ context 'with default selector CSS' do
326
+ before { Capybara.default_selector = :css }
327
+
328
+ after { Capybara.default_selector = :xpath }
329
+
330
+ it 'fails if has_content? returns false' do
331
+ expect do
332
+ expect(session).to have_content('No such Text')
333
+ end.to raise_error(/expected to find text "No such Text" in "(.*)This is a test(.*)"/)
334
+ end
335
+ end
336
+ end
337
+
338
+ context 'with should_not' do
339
+ it 'passes if has_no_content? returns true' do
340
+ expect(session).not_to have_content('No such Text')
341
+ end
342
+
343
+ it 'fails if has_no_content? returns false' do
344
+ expect do
345
+ expect(session).not_to have_content('This is a test')
346
+ end.to raise_error(/expected not to find text "This is a test"/)
347
+ end
348
+
349
+ it 'not_to have_content behaves the same as to have_no_content' do
350
+ Capybara.using_wait_time(5) do
351
+ expect(session).to have_content('This is a test')
352
+ start = Time.now
353
+ expect(session).to have_no_content('No such Text')
354
+ to_time = Time.now
355
+ expect(session).not_to have_content('No such Text')
356
+ not_to_time = Time.now
357
+ expect(not_to_time - to_time).to be_within(0.5).of(to_time - start)
358
+ end
359
+ end
360
+ end
361
+ end
362
+
363
+ it 'supports compounding' do
364
+ expect('<h1>Text</h1><h2>And</h2>').to have_content('Text').and have_content('And')
365
+ expect('<h1>Text</h1><h2>Or</h2>').to have_content('XYZ').or have_content('Or')
366
+ expect('<h1>Text</h1><h2>Or</h2>').to have_no_content('XYZ').and have_content('Or')
367
+ end
368
+ end
369
+
370
+ describe 'have_text matcher' do
371
+ it 'gives proper description' do
372
+ expect(have_text('Text').description).to eq('have text "Text"')
373
+ end
374
+
375
+ context 'on a string' do
376
+ context 'with should' do
377
+ it 'passes if text contains given string' do
378
+ expect('<h1>Text</h1>').to have_text('Text')
379
+ end
380
+
381
+ it 'passes if text matches given regexp' do
382
+ expect('<h1>Text</h1>').to have_text(/ext/)
383
+ end
384
+
385
+ it "fails if text doesn't contain given string" do
386
+ expect do
387
+ expect('<h1>Text</h1>').to have_text('No such Text')
388
+ end.to raise_error(/expected to find text "No such Text" in "Text"/)
389
+ end
390
+
391
+ it "fails if text doesn't match given regexp" do
392
+ expect do
393
+ expect('<h1>Text</h1>').to have_text(/No such Text/)
394
+ end.to raise_error('expected to find text matching /No such Text/ in "Text"')
395
+ end
396
+
397
+ it 'casts Integer to string' do
398
+ expect do
399
+ expect('<h1>Text</h1>').to have_text(3)
400
+ end.to raise_error(/expected to find text "3" in "Text"/)
401
+ end
402
+
403
+ it 'fails if matched text count does not equal to expected count' do
404
+ expect do
405
+ expect('<h1>Text</h1>').to have_text('Text', count: 2)
406
+ end.to raise_error('expected to find text "Text" 2 times but found 1 time in "Text"')
407
+ end
408
+
409
+ it 'fails if matched text count is less than expected minimum count' do
410
+ expect do
411
+ expect('<h1>Text</h1>').to have_text('Lorem', minimum: 1)
412
+ end.to raise_error('expected to find text "Lorem" at least 1 time but found 0 times in "Text"')
413
+ end
414
+
415
+ it 'fails if matched text count is more than expected maximum count' do
416
+ expect do
417
+ expect('<h1>Text TextText</h1>').to have_text('Text', maximum: 2)
418
+ end.to raise_error('expected to find text "Text" at most 2 times but found 3 times in "Text TextText"')
419
+ end
420
+
421
+ it 'fails if matched text count does not belong to expected range' do
422
+ expect do
423
+ expect('<h1>Text</h1>').to have_text('Text', between: 2..3)
424
+ end.to raise_error('expected to find text "Text" between 2 and 3 times but found 1 time in "Text"')
425
+ end
426
+ end
427
+
428
+ context 'with should_not' do
429
+ it "passes if text doesn't contain a string" do
430
+ expect('<h1>Text</h1>').not_to have_text('No such Text')
431
+ end
432
+
433
+ it 'passes because escapes any characters that would have special meaning in a regexp' do
434
+ expect('<h1>Text</h1>').not_to have_text('.')
435
+ end
436
+
437
+ it 'fails if text contains a string' do
438
+ expect do
439
+ expect('<h1>Text</h1>').not_to have_text('Text')
440
+ end.to raise_error(/expected not to find text "Text" in "Text"/)
441
+ end
442
+ end
443
+ end
444
+
445
+ context 'on a page or node' do
446
+ before do
447
+ session.visit('/with_html')
448
+ end
449
+
450
+ context 'with should' do
451
+ it 'passes if has_text? returns true' do
452
+ expect(session).to have_text('This is a test')
453
+ end
454
+
455
+ it 'passes if has_text? returns true using regexp' do
456
+ expect(session).to have_text(/test/)
457
+ end
458
+
459
+ it 'can check for all text' do
460
+ expect(session).to have_text(:all, 'Some of this text is hidden!')
461
+ end
462
+
463
+ it 'can check for visible text' do
464
+ expect(session).to have_text(:visible, 'Some of this text is')
465
+ expect(session).not_to have_text(:visible, 'Some of this text is hidden!')
466
+ end
467
+
468
+ it 'fails if has_text? returns false' do
469
+ expect do
470
+ expect(session).to have_text('No such Text')
471
+ end.to raise_error(/expected to find text "No such Text" in "(.*)This is a test(.*)"/)
472
+ end
473
+
474
+ context 'with default selector CSS' do
475
+ before { Capybara.default_selector = :css }
476
+
477
+ after { Capybara.default_selector = :xpath }
478
+
479
+ it 'fails if has_text? returns false' do
480
+ expect do
481
+ expect(session).to have_text('No such Text')
482
+ end.to raise_error(/expected to find text "No such Text" in "(.*)This is a test(.*)"/)
483
+ end
484
+ end
485
+ end
486
+
487
+ context 'with should_not' do
488
+ it 'passes if has_no_text? returns true' do
489
+ expect(session).not_to have_text('No such Text')
490
+ end
491
+
492
+ it 'fails if has_no_text? returns false' do
493
+ expect do
494
+ expect(session).not_to have_text('This is a test')
495
+ end.to raise_error(/expected not to find text "This is a test"/)
496
+ end
497
+ end
498
+ end
499
+
500
+ it 'supports compounding' do
501
+ expect('<h1>Text</h1><h2>And</h2>').to have_text('Text').and have_text('And')
502
+ expect('<h1>Text</h1><h2>Or</h2>').to have_text('Not here').or have_text('Or')
503
+ end
504
+ end
505
+
506
+ describe 'have_element matcher' do
507
+ let(:html) { '<img src="/img.jpg" alt="a JPEG"><img src="/img.png" alt="a PNG">' }
508
+
509
+ it 'gives proper description' do
510
+ expect(have_element('img').description).to eq('have visible element "img"')
511
+ end
512
+
513
+ it 'passes if there is such a element' do
514
+ expect(html).to have_element('img', src: '/img.jpg')
515
+ end
516
+
517
+ it 'fails if there is no such element' do
518
+ expect do
519
+ expect(html).to have_element('photo')
520
+ end.to raise_error(/expected to find element "photo"/)
521
+ end
522
+
523
+ it 'supports compounding' do
524
+ expect(html).to have_element('img', alt: 'a JPEG').and have_element('img', src: '/img.png')
525
+ expect(html).to have_element('photo').or have_element('img', src: '/img.jpg')
526
+ expect(html).to have_no_element('photo').and have_element('img', alt: 'a PNG')
527
+ end
528
+ end
529
+
530
+ describe 'have_link matcher' do
531
+ let(:html) { '<a href="#">Just a link</a><a href="#">Another link</a>' }
532
+
533
+ it 'gives proper description' do
534
+ expect(have_link('Just a link').description).to eq('have visible link "Just a link"')
535
+ end
536
+
537
+ it 'passes if there is such a link' do
538
+ expect(html).to have_link('Just a link')
539
+ end
540
+
541
+ it 'fails if there is no such link' do
542
+ expect do
543
+ expect(html).to have_link('No such Link')
544
+ end.to raise_error(/expected to find link "No such Link"/)
545
+ end
546
+
547
+ it 'supports compounding' do
548
+ expect(html).to have_link('Just a link').and have_link('Another link')
549
+ expect(html).to have_link('Not a link').or have_link('Another link')
550
+ expect(html).to have_no_link('Not a link').and have_link('Another link')
551
+ end
552
+ end
553
+
554
+ describe 'have_title matcher' do
555
+ it 'gives proper description' do
556
+ expect(have_title('Just a title').description).to eq('have title "Just a title"')
557
+ end
558
+
559
+ context 'on a string' do
560
+ let(:html) { '<title>Just a title</title>' }
561
+
562
+ it 'passes if there is such a title' do
563
+ expect(html).to have_title('Just a title')
564
+ end
565
+
566
+ it 'fails if there is no such title' do
567
+ expect do
568
+ expect(html).to have_title('No such title')
569
+ end.to raise_error('expected "Just a title" to include "No such title"')
570
+ end
571
+
572
+ it "fails if title doesn't match regexp" do
573
+ expect do
574
+ expect(html).to have_title(/[[:upper:]]+[[:lower:]]+l{2}o/)
575
+ end.to raise_error('expected "Just a title" to match /[[:upper:]]+[[:lower:]]+l{2}o/')
576
+ end
577
+ end
578
+
579
+ context 'on a page or node' do
580
+ it 'passes if there is such a title' do
581
+ session.visit('/with_js')
582
+ expect(session).to have_title('with_js')
583
+ end
584
+
585
+ it 'fails if there is no such title' do
586
+ session.visit('/with_js')
587
+ expect do
588
+ expect(session).to have_title('No such title')
589
+ end.to raise_error(/ to include "No such title"/)
590
+ end
591
+
592
+ context 'with wait' do
593
+ before do
594
+ session.visit('/with_js')
595
+ end
596
+
597
+ it 'waits if wait time is more than timeout' do
598
+ session.click_link('Change title')
599
+ session.using_wait_time 0 do
600
+ expect(session).to have_title('changed title', wait: 2)
601
+ end
602
+ end
603
+
604
+ it "doesn't wait if wait time is less than timeout" do
605
+ session.click_link('Change title')
606
+ session.using_wait_time 3 do
607
+ expect(session).not_to have_title('changed title', wait: 0)
608
+ end
609
+ end
610
+ end
611
+ end
612
+
613
+ it 'supports compounding' do
614
+ expect('<title>I compound</title>').to have_title('I dont compound').or have_title('I compound')
615
+ end
616
+ end
617
+
618
+ describe 'have_current_path matcher' do
619
+ it 'gives proper description' do
620
+ expect(have_current_path('http://www.example.com').description).to eq('have current path "http://www.example.com"')
621
+ end
622
+
623
+ context 'on a page or node' do
624
+ it 'passes if there is such a current path' do
625
+ session.visit('/with_js')
626
+ expect(session).to have_current_path('/with_js')
627
+ end
628
+
629
+ it 'fails if there is no such current_path' do
630
+ visit('/with_js')
631
+ expect do
632
+ expect(session).to have_current_path('/not_with_js')
633
+ end.to raise_error(%r{to equal "/not_with_js"})
634
+ end
635
+
636
+ context 'with wait' do
637
+ before do
638
+ session.visit('/with_js')
639
+ end
640
+
641
+ it 'waits if wait time is more than timeout' do
642
+ session.click_link('Change page')
643
+ session.using_wait_time 0 do
644
+ expect(session).to have_current_path('/with_html', wait: 2)
645
+ end
646
+ end
647
+
648
+ it "doesn't wait if wait time is less than timeout" do
649
+ session.click_link('Change page')
650
+ session.using_wait_time 0 do
651
+ expect(session).not_to have_current_path('/with_html')
652
+ end
653
+ end
654
+ end
655
+ end
656
+
657
+ it 'supports compounding' do
658
+ session.visit('/with_html')
659
+ expect(session).to have_current_path('/not_with_html').or have_current_path('/with_html')
660
+ end
661
+ end
662
+
663
+ describe 'have_button matcher' do
664
+ let(:html) { '<button>A button</button><input type="submit" value="Another button"/>' }
665
+
666
+ it 'gives proper description with no options' do
667
+ expect(have_button('A button').description).to eq('have visible button "A button" that is not disabled')
668
+ end
669
+
670
+ it 'gives proper description with disabled :any option' do
671
+ expect(have_button('A button', disabled: :all).description).to eq('have visible button "A button"')
672
+ end
673
+
674
+ it 'passes if there is such a button' do
675
+ expect(html).to have_button('A button')
676
+ end
677
+
678
+ it 'fails if there is no such button' do
679
+ expect do
680
+ expect(html).to have_button('No such Button')
681
+ end.to raise_error(/expected to find button "No such Button"/)
682
+ end
683
+
684
+ it 'supports compounding' do
685
+ expect(html).to have_button('Not this button').or have_button('A button')
686
+ end
687
+ end
688
+
689
+ describe 'have_field matcher' do
690
+ let(:html) { '<p><label>Text field<input type="text" value="some value"/></label></p>' }
691
+
692
+ it 'gives proper description' do
693
+ expect(have_field('Text field').description).to eq('have visible field "Text field" that is not disabled')
694
+ end
695
+
696
+ it 'gives proper description for a given value' do
697
+ expect(have_field('Text field', with: 'some value').description).to eq('have visible field "Text field" that is not disabled with value "some value"')
698
+ end
699
+
700
+ it 'passes if there is such a field' do
701
+ expect(html).to have_field('Text field')
702
+ end
703
+
704
+ it 'passes if there is such a field with value' do
705
+ expect(html).to have_field('Text field', with: 'some value')
706
+ end
707
+
708
+ it 'fails if there is no such field' do
709
+ expect do
710
+ expect(html).to have_field('No such Field')
711
+ end.to raise_error(/expected to find field "No such Field"/)
712
+ end
713
+
714
+ it 'fails if there is such field but with false value' do
715
+ expect do
716
+ expect(html).to have_field('Text field', with: 'false value')
717
+ end.to raise_error(/expected to find visible field "Text field"/)
718
+ end
719
+
720
+ it 'treats a given value as a string' do
721
+ foo = Class.new do
722
+ def to_s
723
+ 'some value'
724
+ end
725
+ end
726
+ expect(html).to have_field('Text field', with: foo.new)
727
+ end
728
+
729
+ it 'supports compounding' do
730
+ expect(html).to have_field('Not this one').or have_field('Text field')
731
+ end
732
+ end
733
+
734
+ describe 'have_checked_field matcher' do
735
+ let(:html) do
736
+ '<label>it is checked<input type="checkbox" checked="checked"/></label>
737
+ <label>unchecked field<input type="checkbox"/></label>'
738
+ end
739
+
740
+ it 'gives proper description' do
741
+ expect(have_checked_field('it is checked').description).to eq('have visible field "it is checked" that is not disabled that is checked')
742
+ end
743
+
744
+ context 'with should' do
745
+ it 'passes if there is such a field and it is checked' do
746
+ expect(html).to have_checked_field('it is checked')
747
+ end
748
+
749
+ it 'fails if there is such a field but it is not checked' do
750
+ expect do
751
+ expect(html).to have_checked_field('unchecked field')
752
+ end.to raise_error(/expected to find visible field "unchecked field"/)
753
+ end
754
+
755
+ it 'fails if there is no such field' do
756
+ expect do
757
+ expect(html).to have_checked_field('no such field')
758
+ end.to raise_error(/expected to find field "no such field"/)
759
+ end
760
+ end
761
+
762
+ context 'with should not' do
763
+ it 'fails if there is such a field and it is checked' do
764
+ expect do
765
+ expect(html).not_to have_checked_field('it is checked')
766
+ end.to raise_error(/expected not to find visible field "it is checked"/)
767
+ end
768
+
769
+ it 'passes if there is such a field but it is not checked' do
770
+ expect(html).not_to have_checked_field('unchecked field')
771
+ end
772
+
773
+ it 'passes if there is no such field' do
774
+ expect(html).not_to have_checked_field('no such field')
775
+ end
776
+ end
777
+
778
+ it 'supports compounding' do
779
+ expect(html).to have_checked_field('not this one').or have_checked_field('it is checked')
780
+ end
781
+ end
782
+
783
+ describe 'have_unchecked_field matcher' do
784
+ let(:html) do
785
+ '<label>it is checked<input type="checkbox" checked="checked"/></label>
786
+ <label>unchecked field<input type="checkbox"/></label>'
787
+ end
788
+
789
+ it 'gives proper description' do
790
+ expect(have_unchecked_field('unchecked field').description).to eq('have visible field "unchecked field" that is not disabled that is not checked')
791
+ end
792
+
793
+ context 'with should' do
794
+ it 'passes if there is such a field and it is not checked' do
795
+ expect(html).to have_unchecked_field('unchecked field')
796
+ end
797
+
798
+ it 'fails if there is such a field but it is checked' do
799
+ expect do
800
+ expect(html).to have_unchecked_field('it is checked')
801
+ end.to raise_error(/expected to find visible field "it is checked"/)
802
+ end
803
+
804
+ it 'fails if there is no such field' do
805
+ expect do
806
+ expect(html).to have_unchecked_field('no such field')
807
+ end.to raise_error(/expected to find field "no such field"/)
808
+ end
809
+ end
810
+
811
+ context 'with should not' do
812
+ it 'fails if there is such a field and it is not checked' do
813
+ expect do
814
+ expect(html).not_to have_unchecked_field('unchecked field')
815
+ end.to raise_error(/expected not to find visible field "unchecked field"/)
816
+ end
817
+
818
+ it 'passes if there is such a field but it is checked' do
819
+ expect(html).not_to have_unchecked_field('it is checked')
820
+ end
821
+
822
+ it 'passes if there is no such field' do
823
+ expect(html).not_to have_unchecked_field('no such field')
824
+ end
825
+ end
826
+
827
+ it 'supports compounding' do
828
+ expect(html).to have_unchecked_field('it is checked').or have_unchecked_field('unchecked field')
829
+ end
830
+ end
831
+
832
+ describe 'have_select matcher' do
833
+ let(:html) { '<label>Select Box<select></select></label>' }
834
+
835
+ it 'gives proper description' do
836
+ expect(have_select('Select Box').description).to eq('have visible select box "Select Box" that is not disabled')
837
+ end
838
+
839
+ it 'gives proper description for a given selected value' do
840
+ expect(have_select('Select Box', selected: 'some value').description).to eq('have visible select box "Select Box" that is not disabled with "some value" selected')
841
+ end
842
+
843
+ it 'passes if there is such a select' do
844
+ expect(html).to have_select('Select Box')
845
+ end
846
+
847
+ it 'fails if there is no such select' do
848
+ expect do
849
+ expect(html).to have_select('No such Select box')
850
+ end.to raise_error(/expected to find select box "No such Select box"/)
851
+ end
852
+
853
+ it 'supports compounding' do
854
+ expect(html).to have_select('Not this one').or have_select('Select Box')
855
+ end
856
+ end
857
+
858
+ describe 'have_table matcher' do
859
+ let(:html) { '<table><caption>Lovely table</caption></table>' }
860
+
861
+ it 'gives proper description' do
862
+ expect(have_table('Lovely table').description).to eq('have visible table "Lovely table"')
863
+ expect(have_table('Lovely table', caption: 'my caption').description).to eq('have visible table "Lovely table" with caption "my caption"')
864
+ end
865
+
866
+ it 'gives proper description when :visible option passed' do
867
+ expect(have_table('Lovely table', visible: true).description).to eq('have visible table "Lovely table"') # rubocop:disable Capybara/VisibilityMatcher
868
+ expect(have_table('Lovely table', visible: :hidden).description).to eq('have non-visible table "Lovely table"')
869
+ expect(have_table('Lovely table', visible: :all).description).to eq('have table "Lovely table"')
870
+ expect(have_table('Lovely table', visible: false).description).to eq('have table "Lovely table"') # rubocop:disable Capybara/VisibilityMatcher
871
+ end
872
+
873
+ it 'passes if there is such a table' do
874
+ expect(html).to have_table('Lovely table')
875
+ end
876
+
877
+ it 'fails if there is no such table' do
878
+ expect do
879
+ expect(html).to have_table('No such Table')
880
+ end.to raise_error(/expected to find table "No such Table"/)
881
+ end
882
+
883
+ it 'supports compounding' do
884
+ expect(html).to have_table('nope').or have_table('Lovely table')
885
+ end
886
+ end
887
+
888
+ context 'compounding timing' do
889
+ let(:session) { session }
890
+ let(:el) { session.find(:css, '#reload-me') }
891
+
892
+ before do
893
+ session.visit('/with_js')
894
+ end
895
+
896
+ describe '#and' do
897
+ it "should run 'concurrently'" do
898
+ session.using_wait_time(2) do
899
+ matcher = have_text('this is not there').and have_text('neither is this')
900
+ expect(Benchmark.realtime do
901
+ expect do
902
+ expect(el).to matcher
903
+ end.to raise_error RSpec::Expectations::ExpectationNotMetError
904
+ end).to be_between(2, 3)
905
+ end
906
+ end
907
+
908
+ it "should run 'concurrently' and retry" do
909
+ session.click_link('reload-link')
910
+ session.using_wait_time(2) do
911
+ expect(Benchmark.realtime do
912
+ expect do
913
+ expect(el).to have_text('waiting to be reloaded').and(have_text('has been reloaded'))
914
+ end.to raise_error RSpec::Expectations::ExpectationNotMetError, /expected to find text "waiting to be reloaded" in "has been reloaded"/
915
+ end).to be_between(2, 3)
916
+ end
917
+ end
918
+
919
+ it 'should ignore :wait options' do
920
+ session.using_wait_time(2) do
921
+ matcher = have_text('this is not there', wait: 5).and have_text('neither is this', wait: 6)
922
+ expect(Benchmark.realtime do
923
+ expect do
924
+ expect(el).to matcher
925
+ end.to raise_error RSpec::Expectations::ExpectationNotMetError
926
+ end).to be_between(2, 3)
927
+ end
928
+ end
929
+
930
+ it 'should work on the session' do
931
+ session.using_wait_time(2) do
932
+ session.click_link('reload-link')
933
+ expect(session).to have_selector(:css, 'h1', text: 'FooBar').and have_text('has been reloaded')
934
+ end
935
+ end
936
+ end
937
+
938
+ describe '#and_then' do
939
+ it 'should run sequentially' do
940
+ session.click_link('reload-link')
941
+ expect(el).to have_text('waiting to be reloaded').and_then have_text('has been reloaded')
942
+ end
943
+ end
944
+
945
+ describe '#or' do
946
+ it "should run 'concurrently'" do
947
+ session.using_wait_time(3) do
948
+ expect(Benchmark.realtime do
949
+ expect(el).to have_text('has been reloaded').or have_text('waiting to be reloaded')
950
+ end).to be < 1
951
+ end
952
+ end
953
+
954
+ it 'should retry' do
955
+ session.using_wait_time(3) do
956
+ expect(Benchmark.realtime do
957
+ expect do
958
+ expect(el).to have_text('has been reloaded').or have_text('random stuff')
959
+ end.to raise_error RSpec::Expectations::ExpectationNotMetError
960
+ end).to be > 3
961
+ end
962
+ end
963
+
964
+ it 'should ignore :wait options' do
965
+ session.using_wait_time(2) do
966
+ expect(Benchmark.realtime do
967
+ expect do
968
+ expect(el).to have_text('this is not there', wait: 10).or have_text('neither is this', wait: 15)
969
+ end.to raise_error RSpec::Expectations::ExpectationNotMetError
970
+ end).to be_between(2, 3)
971
+ end
972
+ end
973
+
974
+ it 'should work on the session' do
975
+ session.using_wait_time(2) do
976
+ session.click_link('reload-link')
977
+ expect(session).to have_selector(:css, 'h1', text: 'Not on the page').or have_text('has been reloaded')
978
+ end
979
+ end
980
+ end
981
+ end
982
+ end
983
+ # rubocop:enable RSpec/ExpectActual