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,212 @@
1
+ # frozen_string_literal: true
2
+
3
+ Capybara::SpecHelper.spec '#within' do
4
+ before do
5
+ @session.visit('/with_scope')
6
+ end
7
+
8
+ context 'with CSS selector' do
9
+ it 'should click links in the given scope' do
10
+ @session.within(:css, '#for_bar li:first-child') do
11
+ @session.click_link('Go')
12
+ end
13
+ expect(@session).to have_content('Bar')
14
+ end
15
+
16
+ it 'should assert content in the given scope' do
17
+ @session.within(:css, '#for_foo') do
18
+ expect(@session).not_to have_content('First Name')
19
+ end
20
+ expect(@session).to have_content('First Name')
21
+ end
22
+
23
+ it 'should accept additional options' do
24
+ @session.within(:css, '#for_bar li', text: 'With Simple HTML') do
25
+ @session.click_link('Go')
26
+ end
27
+ expect(@session).to have_content('Bar')
28
+ end
29
+
30
+ it 'should reload the node if the page is changed' do
31
+ @session.within(:css, '#for_foo') do
32
+ @session.visit('/with_scope_other')
33
+ expect(@session).to have_content('Different text')
34
+ end
35
+ end
36
+
37
+ it 'should reload multiple nodes if the page is changed' do
38
+ @session.within(:css, '#for_bar') do
39
+ @session.within(:css, 'form[action="/redirect"]') do
40
+ @session.refresh
41
+ expect(@session).to have_content('First Name')
42
+ end
43
+ end
44
+ end
45
+
46
+ it 'should error if the page is changed and a matching node no longer exists' do
47
+ @session.within(:css, '#for_foo') do
48
+ @session.visit('/')
49
+ expect { @session.text }.to raise_error(StandardError)
50
+ end
51
+ end
52
+
53
+ it 'should pass scope element to the block' do
54
+ @session.within(:css, '#another_foo') do |scope|
55
+ expect(scope).to match_css('#another_foo')
56
+ end
57
+ end
58
+
59
+ it 'should scope click', requires: [:js] do
60
+ @session.within(:css, '#another_foo') do |scope|
61
+ @session.click
62
+ expect(scope).to have_text('I was clicked')
63
+ end
64
+ end
65
+ end
66
+
67
+ context 'with XPath selector' do
68
+ it 'should click links in the given scope' do
69
+ @session.within(:xpath, "//div[@id='for_bar']//li[contains(.,'With Simple HTML')]") do
70
+ @session.click_link('Go')
71
+ end
72
+ expect(@session).to have_content('Bar')
73
+ end
74
+ end
75
+
76
+ context 'with the default selector' do
77
+ it 'should use XPath' do
78
+ @session.within("//div[@id='for_bar']//li[contains(.,'With Simple HTML')]") do
79
+ @session.click_link('Go')
80
+ end
81
+ expect(@session).to have_content('Bar')
82
+ end
83
+ end
84
+
85
+ context 'with Node rather than selector' do
86
+ it 'should click links in the given scope' do
87
+ node_of_interest = @session.find(:css, '#for_bar li', text: 'With Simple HTML')
88
+
89
+ @session.within(node_of_interest) do
90
+ @session.click_link('Go')
91
+ end
92
+ expect(@session).to have_content('Bar')
93
+ end
94
+ end
95
+
96
+ context 'with the default selector set to CSS' do
97
+ before { Capybara.default_selector = :css }
98
+
99
+ after { Capybara.default_selector = :xpath }
100
+
101
+ it 'should use CSS' do
102
+ @session.within('#for_bar li', text: 'With Simple HTML') do
103
+ @session.click_link('Go')
104
+ end
105
+ expect(@session).to have_content('Bar')
106
+ end
107
+ end
108
+
109
+ context 'with nested scopes' do
110
+ it 'should respect the inner scope' do
111
+ @session.within("//div[@id='for_bar']") do
112
+ @session.within(".//li[contains(.,'Bar')]") do
113
+ @session.click_link('Go')
114
+ end
115
+ end
116
+ expect(@session).to have_content('Another World')
117
+ end
118
+
119
+ it 'should respect the outer scope' do
120
+ @session.within("//div[@id='another_foo']") do
121
+ @session.within(".//li[contains(.,'With Simple HTML')]") do
122
+ @session.click_link('Go')
123
+ end
124
+ end
125
+ expect(@session).to have_content('Hello world')
126
+ end
127
+ end
128
+
129
+ it 'should raise an error if the scope is not found on the page' do
130
+ expect do
131
+ @session.within("//div[@id='doesnotexist']") do
132
+ end
133
+ end.to raise_error(Capybara::ElementNotFound)
134
+ end
135
+
136
+ it 'should restore the scope when an error is raised' do
137
+ expect do
138
+ @session.within("//div[@id='for_bar']") do
139
+ expect do
140
+ expect do
141
+ @session.within(".//div[@id='doesnotexist']") do
142
+ end
143
+ end.to raise_error(Capybara::ElementNotFound)
144
+ end.not_to change { @session.has_xpath?(".//div[@id='another_foo']") }.from(false)
145
+ end
146
+ end.not_to change { @session.has_xpath?(".//div[@id='another_foo']") }.from(true)
147
+ end
148
+
149
+ it 'should fill in a field and click a button' do
150
+ @session.within("//li[contains(.,'Bar')]") do
151
+ @session.click_button('Go')
152
+ end
153
+ expect(extract_results(@session)['first_name']).to eq('Peter')
154
+ @session.visit('/with_scope')
155
+ @session.within("//li[contains(.,'Bar')]") do
156
+ @session.fill_in('First Name', with: 'Dagobert')
157
+ @session.click_button('Go')
158
+ end
159
+ expect(extract_results(@session)['first_name']).to eq('Dagobert')
160
+ end
161
+
162
+ it 'should have #within_element as an alias' do
163
+ expect(Capybara::Session.instance_method(:within)).to eq Capybara::Session.instance_method(:within_element)
164
+ @session.within_element(:css, '#for_foo') do
165
+ expect(@session).not_to have_content('First Name')
166
+ end
167
+ end
168
+ end
169
+
170
+ Capybara::SpecHelper.spec '#within_fieldset' do
171
+ before do
172
+ @session.visit('/fieldsets')
173
+ end
174
+
175
+ it 'should restrict scope to a fieldset given by id' do
176
+ @session.within_fieldset('villain_fieldset') do
177
+ @session.fill_in('Name', with: 'Goldfinger')
178
+ @session.click_button('Create')
179
+ end
180
+ expect(extract_results(@session)['villain_name']).to eq('Goldfinger')
181
+ end
182
+
183
+ it 'should restrict scope to a fieldset given by legend' do
184
+ @session.within_fieldset('Villain') do
185
+ @session.fill_in('Name', with: 'Goldfinger')
186
+ @session.click_button('Create')
187
+ end
188
+ expect(extract_results(@session)['villain_name']).to eq('Goldfinger')
189
+ end
190
+ end
191
+
192
+ Capybara::SpecHelper.spec '#within_table' do
193
+ before do
194
+ @session.visit('/tables')
195
+ end
196
+
197
+ it 'should restrict scope to a fieldset given by id' do
198
+ @session.within_table('girl_table') do
199
+ @session.fill_in('Name', with: 'Christmas')
200
+ @session.click_button('Create')
201
+ end
202
+ expect(extract_results(@session)['girl_name']).to eq('Christmas')
203
+ end
204
+
205
+ it 'should restrict scope to a fieldset given by legend' do
206
+ @session.within_table('Villain') do
207
+ @session.fill_in('Name', with: 'Quantum')
208
+ @session.click_button('Create')
209
+ end
210
+ expect(extract_results(@session)['villain_name']).to eq('Quantum')
211
+ end
212
+ end
@@ -0,0 +1,141 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rspec'
4
+ require 'rspec/expectations'
5
+ require 'capybara'
6
+ require 'capybara/rspec' # Required here instead of in rspec_spec to avoid RSpec deprecation warning
7
+ require 'capybara/spec/test_app'
8
+ require 'nokogiri'
9
+
10
+ Capybara.save_path = File.join(Dir.pwd, 'save_path_tmp')
11
+
12
+ module Capybara
13
+ module SpecHelper
14
+ class << self
15
+ def configure(config)
16
+ config.filter_run_excluding requires: method(:filter).to_proc
17
+ config.before { Capybara::SpecHelper.reset! }
18
+ config.after { Capybara::SpecHelper.reset! }
19
+ config.shared_context_metadata_behavior = :apply_to_host_groups
20
+ end
21
+
22
+ def reset!
23
+ Capybara.app = TestApp
24
+ Capybara.app_host = nil
25
+ Capybara.default_selector = :xpath
26
+ Capybara.default_max_wait_time = 1
27
+ Capybara.default_retry_interval = 0.01
28
+ Capybara.ignore_hidden_elements = true
29
+ Capybara.exact = false
30
+ Capybara.raise_server_errors = true
31
+ Capybara.visible_text_only = false
32
+ Capybara.match = :smart
33
+ Capybara.enable_aria_label = false
34
+ Capybara.enable_aria_role = false
35
+ Capybara.default_set_options = {}
36
+ Capybara.disable_animation = false
37
+ Capybara.test_id = nil
38
+ Capybara.predicates_wait = true
39
+ Capybara.default_normalize_ws = false
40
+ Capybara.use_html5_parsing = !ENV['HTML5_PARSING'].nil?
41
+ Capybara.w3c_click_offset = true
42
+ reset_threadsafe
43
+ end
44
+
45
+ def filter(requires, metadata)
46
+ if requires && metadata[:capybara_skip]
47
+ requires.any? do |require|
48
+ metadata[:capybara_skip].include?(require)
49
+ end
50
+ else
51
+ false
52
+ end
53
+ end
54
+
55
+ def spec(name, *options, &block)
56
+ @specs ||= []
57
+ @specs << [name, options, block]
58
+ end
59
+
60
+ def run_specs(session, name, **options, &filter_block)
61
+ specs = @specs
62
+ RSpec.describe Capybara::Session, name, options do
63
+ include Capybara::SpecHelper
64
+ include Capybara::RSpecMatchers
65
+
66
+ before do |example|
67
+ @session = session
68
+ instance_exec(example, &filter_block) if filter_block
69
+ end
70
+
71
+ after do
72
+ session.reset_session!
73
+ end
74
+
75
+ before :each, :psc do
76
+ SpecHelper.reset_threadsafe(bool: true, session: session)
77
+ end
78
+
79
+ after psc: true do
80
+ SpecHelper.reset_threadsafe(session: session)
81
+ end
82
+
83
+ before :each, :exact_false do
84
+ Capybara.exact = false
85
+ end
86
+
87
+ specs.each do |spec_name, spec_options, block|
88
+ describe spec_name, *spec_options do
89
+ class_eval(&block)
90
+ end
91
+ end
92
+ end
93
+ end
94
+
95
+ def reset_threadsafe(bool: false, session: nil)
96
+ # Work around limit on when threadsafe can be changed
97
+ Capybara::Session.class_variable_set(:@@instance_created, false) # rubocop:disable Style/ClassVars
98
+ Capybara.threadsafe = bool
99
+ session = session.current_session if session.respond_to?(:current_session)
100
+ session&.instance_variable_set(:@config, nil)
101
+ end
102
+ end
103
+
104
+ def silence_stream(stream)
105
+ old_stream = stream.dup
106
+ stream.reopen(RbConfig::CONFIG['host_os'].match?(/rmswin|mingw/) ? 'NUL:' : '/dev/null')
107
+ stream.sync = true
108
+ yield
109
+ ensure
110
+ stream.reopen(old_stream)
111
+ end
112
+
113
+ def quietly(&block)
114
+ silence_stream($stdout) do
115
+ silence_stream($stderr, &block)
116
+ end
117
+ end
118
+
119
+ def extract_results(session)
120
+ expect(session).to have_xpath("//pre[@id='results']")
121
+ perms = [(::Sinatra::IndifferentHash if defined? ::Sinatra::IndifferentHash)].compact
122
+ results = Capybara::HTML(session.body).xpath("//pre[@id='results']").first.inner_html.lstrip
123
+ YAML.safe_load results, permitted_classes: perms
124
+ end
125
+
126
+ def extract_content_type(session)
127
+ expect(session).to have_xpath("//pre[@id='content_type']")
128
+ Capybara::HTML(session.body).xpath("//pre[@id='content_type']").first.text
129
+ end
130
+
131
+ def be_an_invalid_element_error(session)
132
+ satisfy { |error| session.driver.invalid_element_errors.any? { |e| error.is_a? e } }
133
+ end
134
+
135
+ def with_os_path_separators(path)
136
+ Gem.win_platform? ? path.to_s.tr('/', '\\') : path.to_s
137
+ end
138
+ end
139
+ end
140
+
141
+ Dir["#{File.dirname(__FILE__)}/session/**/*.rb"].each { |file| require_relative file }
@@ -0,0 +1,305 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'sinatra/base'
4
+ require 'tilt/erb'
5
+ require 'rack'
6
+ require 'yaml'
7
+
8
+ class TestApp < Sinatra::Base
9
+ class TestAppError < Exception; end # rubocop:disable Lint/InheritException
10
+
11
+ class TestAppOtherError < Exception # rubocop:disable Lint/InheritException
12
+ def initialize(string1, msg)
13
+ super()
14
+ @something = string1
15
+ @message = msg
16
+ end
17
+ end
18
+ set :root, File.dirname(__FILE__)
19
+ set :static, true
20
+ set :raise_errors, true
21
+ set :show_exceptions, false
22
+
23
+ # Also check lib/capybara/spec/views/*.erb for pages not listed here
24
+
25
+ get '/' do
26
+ response.set_cookie('capybara', value: 'root cookie', domain: request.host, path: request.path)
27
+ 'Hello world! <a href="with_html">Relative</a>'
28
+ end
29
+
30
+ get '/foo' do
31
+ 'Another World'
32
+ end
33
+
34
+ get '/redirect' do
35
+ redirect '/redirect_again'
36
+ end
37
+
38
+ get '/redirect_with_fragment' do
39
+ redirect '/landed#with_fragment'
40
+ end
41
+
42
+ get '/redirect_again' do
43
+ redirect '/landed'
44
+ end
45
+
46
+ post '/redirect_307' do
47
+ redirect '/landed', 307
48
+ end
49
+
50
+ post '/redirect_308' do
51
+ redirect '/landed', 308
52
+ end
53
+
54
+ get '/referer_base' do
55
+ '<a href="/get_referer">direct link</a>' \
56
+ '<a href="/redirect_to_get_referer">link via redirect</a>' \
57
+ '<form action="/get_referer" method="get"><input type="submit"></form>'
58
+ end
59
+
60
+ get '/redirect_to_get_referer' do
61
+ redirect '/get_referer'
62
+ end
63
+
64
+ get '/get_referer' do
65
+ request.referer.nil? ? 'No referer' : "Got referer: #{request.referer}"
66
+ end
67
+
68
+ get '/host' do
69
+ "Current host is #{request.scheme}://#{request.host}:#{request.port}"
70
+ end
71
+
72
+ get '/redirect/:times/times' do
73
+ times = params[:times].to_i
74
+ if times.zero?
75
+ 'redirection complete'
76
+ else
77
+ redirect "/redirect/#{times - 1}/times"
78
+ end
79
+ end
80
+
81
+ get '/landed' do
82
+ 'You landed'
83
+ end
84
+
85
+ post '/landed' do
86
+ "You post landed: #{params.dig(:form, 'data')}"
87
+ end
88
+
89
+ get '/with-quotes' do
90
+ %q("No," he said, "you can't do that.")
91
+ end
92
+
93
+ get '/form/get' do
94
+ %(<pre id="results">#{params[:form].to_yaml}</pre>)
95
+ end
96
+
97
+ post '/relative' do
98
+ %(<pre id="results">#{params[:form].to_yaml}</pre>)
99
+ end
100
+
101
+ get '/favicon.ico' do
102
+ nil
103
+ end
104
+
105
+ post '/redirect' do
106
+ redirect '/redirect_again'
107
+ end
108
+
109
+ delete '/delete' do
110
+ 'The requested object was deleted'
111
+ end
112
+
113
+ get '/delete' do
114
+ 'Not deleted'
115
+ end
116
+
117
+ get '/redirect_back' do
118
+ redirect back
119
+ end
120
+
121
+ get '/redirect_secure' do
122
+ redirect "https://#{request.host}:#{request.port}/host"
123
+ end
124
+
125
+ get '/slow_response' do
126
+ sleep 2
127
+ 'Finally!'
128
+ end
129
+
130
+ get '/set_cookie' do
131
+ cookie_value = 'test_cookie'
132
+ response.set_cookie('capybara', cookie_value)
133
+ "Cookie set to #{cookie_value}"
134
+ end
135
+
136
+ get '/get_cookie' do
137
+ request.cookies['capybara']
138
+ end
139
+
140
+ get '/get_header' do
141
+ env['HTTP_FOO']
142
+ end
143
+
144
+ get '/get_header_via_redirect' do
145
+ redirect '/get_header'
146
+ end
147
+
148
+ get '/error' do
149
+ raise TestAppError, 'some error'
150
+ end
151
+
152
+ get '/other_error' do
153
+ raise TestAppOtherError.new('something', 'other error')
154
+ end
155
+
156
+ get '/load_error' do
157
+ raise LoadError
158
+ end
159
+
160
+ get '/with.*html' do
161
+ erb :with_html, locals: { referrer: request.referrer }
162
+ end
163
+
164
+ get '/with_title' do
165
+ <<-HTML
166
+ <!DOCTYPE html>
167
+ <html lang="en">
168
+ <head>
169
+ <meta http-equiv="Content-type" content="text/html; charset=utf-8"/>
170
+ <title>#{params[:title] || 'Test Title'}</title>
171
+ </head>
172
+
173
+ <body>
174
+ <svg><title>abcdefg</title></svg>
175
+ </body>
176
+ </html>
177
+ HTML
178
+ end
179
+
180
+ get '/with_iframe' do
181
+ <<-HTML
182
+ <!DOCTYPE html>
183
+ <html lang="en">
184
+ <head>
185
+ <meta http-equiv="Content-type" content="text/html; charset=utf-8"/>
186
+ <title>Test with Iframe</title>
187
+ </head>
188
+
189
+ <body>
190
+ <iframe src="#{params[:url]}" id="#{params[:id]}"></iframe>
191
+ </body>
192
+ </html>
193
+ HTML
194
+ end
195
+
196
+ get '/base/with_base' do
197
+ <<-HTML
198
+ <!DOCTYPE html>
199
+ <html>
200
+ <head>
201
+ <base href="/">
202
+ <title>Origin</title>
203
+ </head>
204
+ <body>
205
+ <a href="with_title">Title page</a>
206
+ <a href="?a=3">Bare query</a>
207
+ </body>
208
+ </html>
209
+ HTML
210
+ end
211
+
212
+ get '/base/with_other_base' do
213
+ <<-HTML
214
+ <!DOCTYPE html>
215
+ <html>
216
+ <head>
217
+ <base href="/base/">
218
+ <title>Origin</title>
219
+ </head>
220
+ <body>
221
+ <a href="with_title">Title page</a>
222
+ <a href="?a=3">Bare query</a>
223
+ </body>
224
+ </html>
225
+ HTML
226
+ end
227
+
228
+ get '/csp' do
229
+ response.headers['Content-Security-Policy'] = "default-src 'none'; connect-src 'self'; base-uri 'none'; font-src 'self'; img-src 'self' data:; object-src 'none'; script-src 'self' 'nonce-jAviMuMisoTisVXjgLoWdA=='; style-src 'self' 'nonce-jAviMuMisoTisVXjgLoWdA=='; form-action 'self';"
230
+ <<-HTML
231
+ <!DOCTYPE html>
232
+ <html lang="en">
233
+ <head>
234
+ <meta http-equiv="Content-type" content="text/html; charset=utf-8"/>
235
+ <title>CSP</title>
236
+ </head>
237
+
238
+ <body>
239
+ <div>CSP</div>
240
+ </body>
241
+ </html>
242
+ HTML
243
+ end
244
+
245
+ get '/download.csv' do
246
+ content_type 'text/csv'
247
+ 'This, is, comma, separated' \
248
+ 'Thomas, Walpole, was , here'
249
+ end
250
+
251
+ get %r{/apple-touch-.*\.png/} do
252
+ halt(404)
253
+ end
254
+
255
+ get '/:view' do |view|
256
+ view_template = "#{__dir__}/views/#{view}.erb"
257
+ has_layout = File.exist?(view_template) && File.open(view_template) { |f| f.first.downcase.include?('doctype') }
258
+ erb view.to_sym, locals: { referrer: request.referrer }, layout: !has_layout
259
+ end
260
+
261
+ post '/form' do
262
+ self.class.form_post_count += 1
263
+ %(
264
+ <pre id="content_type">#{request.content_type}</pre>
265
+ <pre id="results">#{params.fetch(:form, {}).merge('post_count' => self.class.form_post_count).to_yaml}</pre>
266
+ )
267
+ end
268
+
269
+ post '/upload_empty' do
270
+ if params[:form][:file].nil?
271
+ "Successfully ignored empty file field. Content type was #{request.content_type}"
272
+ else
273
+ 'Something went wrong.'
274
+ end
275
+ end
276
+
277
+ post '/upload' do
278
+ buffer = []
279
+ buffer << "Content-type: #{params.dig(:form, :document, :type)}"
280
+ buffer << "File content: #{params.dig(:form, :document, :tempfile).read}"
281
+ buffer.join(' | ')
282
+ rescue StandardError
283
+ 'No file uploaded'
284
+ end
285
+
286
+ post '/upload_multiple' do
287
+ docs = params.dig(:form, :multiple_documents)
288
+ buffer = [docs.size.to_s]
289
+ docs.each do |doc|
290
+ buffer << "Content-type: #{doc[:type]}"
291
+ buffer << "File content: #{doc[:tempfile].read}"
292
+ end
293
+ buffer.join(' | ')
294
+ rescue StandardError
295
+ 'No files uploaded'
296
+ end
297
+
298
+ class << self
299
+ attr_accessor :form_post_count
300
+ end
301
+
302
+ @form_post_count = 0
303
+ end
304
+
305
+ Rack::Handler::Puma.run TestApp, Port: 8070 if $PROGRAM_NAME == __FILE__
@@ -0,0 +1,49 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta http-equiv="Content-type" content="text/html; charset=utf-8"/>
5
+ <title>with_animation</title>
6
+ <script src="/jquery.js" type="text/javascript" charset="utf-8"></script>
7
+ <script>
8
+ $(document).on('contextmenu', function(e){ e.preventDefault(); });
9
+ </script>
10
+ <style>
11
+ div {
12
+ width: 400px;
13
+ height: 400px;
14
+ position: absolute;
15
+ }
16
+ #obscured {
17
+ z-index: 1;
18
+ background-color: red;
19
+ }
20
+ #cover {
21
+ z-index: 2;
22
+ background-color: blue;
23
+ }
24
+ #offscreen {
25
+ top: 2000px;
26
+ left: 2000px;
27
+ background-color: green;
28
+ }
29
+ #offscreen_wrapper {
30
+ top: 2000px;
31
+ left: 2000px;
32
+ overflow-x: scroll;
33
+ background-color: yellow;
34
+ }
35
+ </style>
36
+ </head>
37
+
38
+ <body id="with_animation">
39
+ <div id="obscured">
40
+ <input id="obscured_input"/>
41
+ </div>
42
+ <div id="cover"></div>
43
+ <div id="offscreen_wrapper">
44
+ <div id="offscreen"></div>
45
+ </div>
46
+ </body>
47
+
48
+ <iframe id="frameOne" src="/frame_one"></iframe>
49
+ </html>