capybara 3.0.0 → 3.36.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.yardopts +1 -1
- data/History.md +777 -10
- data/License.txt +1 -1
- data/README.md +75 -58
- data/lib/capybara/config.rb +29 -10
- data/lib/capybara/cucumber.rb +1 -1
- data/lib/capybara/driver/base.rb +22 -4
- data/lib/capybara/driver/node.rb +34 -9
- data/lib/capybara/dsl.rb +14 -6
- data/lib/capybara/helpers.rb +52 -7
- data/lib/capybara/minitest/spec.rb +173 -84
- data/lib/capybara/minitest.rb +250 -144
- data/lib/capybara/node/actions.rb +248 -124
- data/lib/capybara/node/base.rb +34 -20
- data/lib/capybara/node/document.rb +14 -2
- data/lib/capybara/node/document_matchers.rb +13 -15
- data/lib/capybara/node/element.rb +339 -113
- data/lib/capybara/node/finders.rb +95 -82
- data/lib/capybara/node/matchers.rb +338 -157
- data/lib/capybara/node/simple.rb +54 -15
- data/lib/capybara/queries/active_element_query.rb +18 -0
- data/lib/capybara/queries/ancestor_query.rb +9 -10
- data/lib/capybara/queries/base_query.rb +25 -18
- data/lib/capybara/queries/current_path_query.rb +16 -6
- data/lib/capybara/queries/match_query.rb +11 -0
- data/lib/capybara/queries/selector_query.rb +600 -103
- data/lib/capybara/queries/sibling_query.rb +9 -7
- data/lib/capybara/queries/style_query.rb +45 -0
- data/lib/capybara/queries/text_query.rb +40 -22
- data/lib/capybara/queries/title_query.rb +2 -2
- data/lib/capybara/rack_test/browser.rb +47 -28
- data/lib/capybara/rack_test/driver.rb +12 -3
- data/lib/capybara/rack_test/errors.rb +6 -0
- data/lib/capybara/rack_test/form.rb +53 -50
- data/lib/capybara/rack_test/node.rb +114 -37
- data/lib/capybara/rails.rb +1 -1
- data/lib/capybara/registration_container.rb +44 -0
- data/lib/capybara/registrations/drivers.rb +42 -0
- data/lib/capybara/registrations/patches/puma_ssl.rb +29 -0
- data/lib/capybara/registrations/servers.rb +45 -0
- data/lib/capybara/result.rb +86 -52
- data/lib/capybara/rspec/features.rb +8 -10
- data/lib/capybara/rspec/matcher_proxies.rb +39 -18
- data/lib/capybara/rspec/matchers/base.rb +111 -0
- data/lib/capybara/rspec/matchers/become_closed.rb +33 -0
- data/lib/capybara/rspec/matchers/compound.rb +88 -0
- data/lib/capybara/rspec/matchers/count_sugar.rb +37 -0
- data/lib/capybara/rspec/matchers/have_ancestor.rb +28 -0
- data/lib/capybara/rspec/matchers/have_current_path.rb +29 -0
- data/lib/capybara/rspec/matchers/have_selector.rb +77 -0
- data/lib/capybara/rspec/matchers/have_sibling.rb +27 -0
- data/lib/capybara/rspec/matchers/have_text.rb +33 -0
- data/lib/capybara/rspec/matchers/have_title.rb +29 -0
- data/lib/capybara/rspec/matchers/match_selector.rb +27 -0
- data/lib/capybara/rspec/matchers/match_style.rb +43 -0
- data/lib/capybara/rspec/matchers/spatial_sugar.rb +39 -0
- data/lib/capybara/rspec/matchers.rb +138 -316
- data/lib/capybara/rspec.rb +3 -2
- data/lib/capybara/selector/builders/css_builder.rb +84 -0
- data/lib/capybara/selector/builders/xpath_builder.rb +71 -0
- data/lib/capybara/selector/css.rb +89 -12
- data/lib/capybara/selector/definition/button.rb +68 -0
- data/lib/capybara/selector/definition/checkbox.rb +26 -0
- data/lib/capybara/selector/definition/css.rb +10 -0
- data/lib/capybara/selector/definition/datalist_input.rb +35 -0
- data/lib/capybara/selector/definition/datalist_option.rb +25 -0
- data/lib/capybara/selector/definition/element.rb +28 -0
- data/lib/capybara/selector/definition/field.rb +40 -0
- data/lib/capybara/selector/definition/fieldset.rb +14 -0
- data/lib/capybara/selector/definition/file_field.rb +13 -0
- data/lib/capybara/selector/definition/fillable_field.rb +33 -0
- data/lib/capybara/selector/definition/frame.rb +17 -0
- data/lib/capybara/selector/definition/id.rb +6 -0
- data/lib/capybara/selector/definition/label.rb +62 -0
- data/lib/capybara/selector/definition/link.rb +54 -0
- data/lib/capybara/selector/definition/link_or_button.rb +16 -0
- data/lib/capybara/selector/definition/option.rb +27 -0
- data/lib/capybara/selector/definition/radio_button.rb +27 -0
- data/lib/capybara/selector/definition/select.rb +81 -0
- data/lib/capybara/selector/definition/table.rb +109 -0
- data/lib/capybara/selector/definition/table_row.rb +21 -0
- data/lib/capybara/selector/definition/xpath.rb +5 -0
- data/lib/capybara/selector/definition.rb +279 -0
- data/lib/capybara/selector/filter.rb +1 -0
- data/lib/capybara/selector/filter_set.rb +72 -27
- data/lib/capybara/selector/filters/base.rb +45 -2
- data/lib/capybara/selector/filters/expression_filter.rb +5 -6
- data/lib/capybara/selector/filters/locator_filter.rb +29 -0
- data/lib/capybara/selector/filters/node_filter.rb +18 -4
- data/lib/capybara/selector/regexp_disassembler.rb +214 -0
- data/lib/capybara/selector/selector.rb +85 -200
- data/lib/capybara/selector/xpath_extensions.rb +17 -0
- data/lib/capybara/selector.rb +226 -537
- data/lib/capybara/selenium/atoms/getAttribute.min.js +1 -0
- data/lib/capybara/selenium/atoms/isDisplayed.min.js +1 -0
- data/lib/capybara/selenium/atoms/src/getAttribute.js +161 -0
- data/lib/capybara/selenium/atoms/src/isDisplayed.js +454 -0
- data/lib/capybara/selenium/driver.rb +296 -238
- data/lib/capybara/selenium/driver_specializations/chrome_driver.rb +117 -0
- data/lib/capybara/selenium/driver_specializations/edge_driver.rb +124 -0
- data/lib/capybara/selenium/driver_specializations/firefox_driver.rb +89 -0
- data/lib/capybara/selenium/driver_specializations/internet_explorer_driver.rb +26 -0
- data/lib/capybara/selenium/driver_specializations/safari_driver.rb +24 -0
- data/lib/capybara/selenium/extensions/file_input_click_emulation.rb +34 -0
- data/lib/capybara/selenium/extensions/find.rb +110 -0
- data/lib/capybara/selenium/extensions/html5_drag.rb +228 -0
- data/lib/capybara/selenium/extensions/modifier_keys_stack.rb +28 -0
- data/lib/capybara/selenium/extensions/scroll.rb +76 -0
- data/lib/capybara/selenium/logger_suppressor.rb +40 -0
- data/lib/capybara/selenium/node.rb +436 -166
- data/lib/capybara/selenium/nodes/chrome_node.rb +137 -0
- data/lib/capybara/selenium/nodes/edge_node.rb +104 -0
- data/lib/capybara/selenium/nodes/firefox_node.rb +136 -0
- data/lib/capybara/selenium/nodes/ie_node.rb +22 -0
- data/lib/capybara/selenium/nodes/safari_node.rb +118 -0
- data/lib/capybara/selenium/patches/action_pauser.rb +26 -0
- data/lib/capybara/selenium/patches/atoms.rb +18 -0
- data/lib/capybara/selenium/patches/is_displayed.rb +16 -0
- data/lib/capybara/selenium/patches/logs.rb +45 -0
- data/lib/capybara/selenium/patches/pause_duration_fix.rb +9 -0
- data/lib/capybara/selenium/patches/persistent_client.rb +20 -0
- data/lib/capybara/server/animation_disabler.rb +69 -0
- data/lib/capybara/server/checker.rb +44 -0
- data/lib/capybara/server/middleware.rb +71 -0
- data/lib/capybara/server.rb +58 -67
- data/lib/capybara/session/config.rb +38 -6
- data/lib/capybara/session/matchers.rb +26 -19
- data/lib/capybara/session.rb +258 -190
- data/lib/capybara/spec/public/jquery.js +5 -5
- data/lib/capybara/spec/public/offset.js +6 -0
- data/lib/capybara/spec/public/test.js +122 -8
- data/lib/capybara/spec/session/accept_alert_spec.rb +11 -11
- data/lib/capybara/spec/session/accept_confirm_spec.rb +3 -3
- data/lib/capybara/spec/session/accept_prompt_spec.rb +9 -10
- data/lib/capybara/spec/session/active_element_spec.rb +31 -0
- data/lib/capybara/spec/session/all_spec.rb +135 -42
- data/lib/capybara/spec/session/ancestor_spec.rb +24 -19
- data/lib/capybara/spec/session/assert_all_of_selectors_spec.rb +67 -38
- data/lib/capybara/spec/session/{assert_current_path.rb → assert_current_path_spec.rb} +20 -18
- data/lib/capybara/spec/session/assert_selector_spec.rb +143 -0
- data/lib/capybara/spec/session/assert_style_spec.rb +26 -0
- data/lib/capybara/spec/session/{assert_text.rb → assert_text_spec.rb} +62 -38
- data/lib/capybara/spec/session/{assert_title.rb → assert_title_spec.rb} +12 -12
- data/lib/capybara/spec/session/attach_file_spec.rb +120 -72
- data/lib/capybara/spec/session/body_spec.rb +11 -13
- data/lib/capybara/spec/session/check_spec.rb +111 -51
- data/lib/capybara/spec/session/choose_spec.rb +62 -30
- data/lib/capybara/spec/session/click_button_spec.rb +227 -161
- data/lib/capybara/spec/session/click_link_or_button_spec.rb +49 -30
- data/lib/capybara/spec/session/click_link_spec.rb +78 -55
- data/lib/capybara/spec/session/current_scope_spec.rb +7 -7
- data/lib/capybara/spec/session/current_url_spec.rb +44 -37
- data/lib/capybara/spec/session/dismiss_confirm_spec.rb +3 -3
- data/lib/capybara/spec/session/dismiss_prompt_spec.rb +2 -2
- data/lib/capybara/spec/session/element/{assert_match_selector.rb → assert_match_selector_spec.rb} +11 -9
- data/lib/capybara/spec/session/element/match_css_spec.rb +18 -10
- data/lib/capybara/spec/session/element/match_xpath_spec.rb +8 -6
- data/lib/capybara/spec/session/element/matches_selector_spec.rb +70 -56
- data/lib/capybara/spec/session/evaluate_async_script_spec.rb +7 -7
- data/lib/capybara/spec/session/evaluate_script_spec.rb +28 -8
- data/lib/capybara/spec/session/execute_script_spec.rb +8 -7
- data/lib/capybara/spec/session/fill_in_spec.rb +104 -44
- data/lib/capybara/spec/session/find_button_spec.rb +23 -23
- data/lib/capybara/spec/session/find_by_id_spec.rb +8 -8
- data/lib/capybara/spec/session/find_field_spec.rb +33 -31
- data/lib/capybara/spec/session/find_link_spec.rb +32 -14
- data/lib/capybara/spec/session/find_spec.rb +236 -141
- data/lib/capybara/spec/session/first_spec.rb +44 -43
- data/lib/capybara/spec/session/frame/frame_title_spec.rb +6 -6
- data/lib/capybara/spec/session/frame/frame_url_spec.rb +6 -6
- data/lib/capybara/spec/session/frame/switch_to_frame_spec.rb +32 -20
- data/lib/capybara/spec/session/frame/within_frame_spec.rb +44 -19
- data/lib/capybara/spec/session/go_back_spec.rb +1 -1
- data/lib/capybara/spec/session/go_forward_spec.rb +1 -1
- data/lib/capybara/spec/session/has_all_selectors_spec.rb +18 -18
- data/lib/capybara/spec/session/has_ancestor_spec.rb +46 -0
- data/lib/capybara/spec/session/has_any_selectors_spec.rb +29 -0
- data/lib/capybara/spec/session/has_button_spec.rb +92 -12
- data/lib/capybara/spec/session/has_css_spec.rb +271 -137
- data/lib/capybara/spec/session/has_current_path_spec.rb +48 -33
- data/lib/capybara/spec/session/has_field_spec.rb +137 -58
- data/lib/capybara/spec/session/has_link_spec.rb +30 -6
- data/lib/capybara/spec/session/has_none_selectors_spec.rb +26 -24
- data/lib/capybara/spec/session/has_select_spec.rb +75 -47
- data/lib/capybara/spec/session/has_selector_spec.rb +102 -69
- data/lib/capybara/spec/session/has_sibling_spec.rb +50 -0
- data/lib/capybara/spec/session/has_table_spec.rb +170 -4
- data/lib/capybara/spec/session/has_text_spec.rb +108 -52
- data/lib/capybara/spec/session/has_title_spec.rb +19 -14
- data/lib/capybara/spec/session/has_xpath_spec.rb +56 -38
- data/lib/capybara/spec/session/{headers.rb → headers_spec.rb} +1 -1
- data/lib/capybara/spec/session/html_spec.rb +13 -6
- data/lib/capybara/spec/session/matches_style_spec.rb +35 -0
- data/lib/capybara/spec/session/node_spec.rb +871 -122
- data/lib/capybara/spec/session/node_wrapper_spec.rb +15 -12
- data/lib/capybara/spec/session/refresh_spec.rb +9 -7
- data/lib/capybara/spec/session/reset_session_spec.rb +52 -37
- data/lib/capybara/spec/session/{response_code.rb → response_code_spec.rb} +1 -1
- data/lib/capybara/spec/session/save_and_open_page_spec.rb +2 -2
- data/lib/capybara/spec/session/save_and_open_screenshot_spec.rb +5 -4
- data/lib/capybara/spec/session/save_page_spec.rb +41 -38
- data/lib/capybara/spec/session/save_screenshot_spec.rb +13 -11
- data/lib/capybara/spec/session/screenshot_spec.rb +2 -2
- data/lib/capybara/spec/session/scroll_spec.rb +117 -0
- data/lib/capybara/spec/session/select_spec.rb +102 -76
- data/lib/capybara/spec/session/selectors_spec.rb +51 -18
- data/lib/capybara/spec/session/sibling_spec.rb +9 -9
- data/lib/capybara/spec/session/text_spec.rb +26 -24
- data/lib/capybara/spec/session/title_spec.rb +8 -6
- data/lib/capybara/spec/session/uncheck_spec.rb +40 -21
- data/lib/capybara/spec/session/unselect_spec.rb +37 -37
- data/lib/capybara/spec/session/visit_spec.rb +59 -53
- data/lib/capybara/spec/session/window/become_closed_spec.rb +22 -19
- data/lib/capybara/spec/session/window/current_window_spec.rb +4 -3
- data/lib/capybara/spec/session/window/open_new_window_spec.rb +4 -3
- data/lib/capybara/spec/session/window/switch_to_window_spec.rb +25 -21
- data/lib/capybara/spec/session/window/window_opened_by_spec.rb +10 -5
- data/lib/capybara/spec/session/window/window_spec.rb +88 -54
- data/lib/capybara/spec/session/window/windows_spec.rb +10 -7
- data/lib/capybara/spec/session/window/within_window_spec.rb +17 -16
- data/lib/capybara/spec/session/within_spec.rb +69 -44
- data/lib/capybara/spec/spec_helper.rb +41 -53
- data/lib/capybara/spec/test_app.rb +79 -40
- data/lib/capybara/spec/views/animated.erb +49 -0
- data/lib/capybara/spec/views/form.erb +134 -42
- data/lib/capybara/spec/views/frame_child.erb +4 -3
- data/lib/capybara/spec/views/frame_one.erb +2 -1
- data/lib/capybara/spec/views/frame_parent.erb +1 -1
- data/lib/capybara/spec/views/frame_two.erb +1 -1
- data/lib/capybara/spec/views/initial_alert.erb +2 -1
- data/lib/capybara/spec/views/layout.erb +10 -0
- data/lib/capybara/spec/views/obscured.erb +47 -0
- data/lib/capybara/spec/views/offset.erb +33 -0
- data/lib/capybara/spec/views/path.erb +2 -2
- data/lib/capybara/spec/views/popup_one.erb +1 -1
- data/lib/capybara/spec/views/popup_two.erb +1 -1
- data/lib/capybara/spec/views/react.erb +45 -0
- data/lib/capybara/spec/views/scroll.erb +21 -0
- data/lib/capybara/spec/views/spatial.erb +31 -0
- data/lib/capybara/spec/views/tables.erb +68 -1
- data/lib/capybara/spec/views/with_animation.erb +81 -0
- data/lib/capybara/spec/views/with_base_tag.erb +2 -2
- data/lib/capybara/spec/views/with_dragula.erb +24 -0
- data/lib/capybara/spec/views/with_fixed_header_footer.erb +2 -1
- data/lib/capybara/spec/views/with_hover.erb +3 -2
- data/lib/capybara/spec/views/with_hover1.erb +10 -0
- data/lib/capybara/spec/views/with_html.erb +43 -10
- data/lib/capybara/spec/views/with_html5_svg.erb +20 -0
- data/lib/capybara/spec/views/with_jquery_animation.erb +24 -0
- data/lib/capybara/spec/views/with_js.erb +30 -5
- data/lib/capybara/spec/views/with_jstree.erb +26 -0
- data/lib/capybara/spec/views/with_namespace.erb +21 -0
- data/lib/capybara/spec/views/with_scope_other.erb +6 -0
- data/lib/capybara/spec/views/with_slow_unload.erb +2 -1
- data/lib/capybara/spec/views/with_sortable_js.erb +21 -0
- data/lib/capybara/spec/views/with_unload_alert.erb +1 -0
- data/lib/capybara/spec/views/with_windows.erb +1 -1
- data/lib/capybara/spec/views/within_frames.erb +1 -1
- data/lib/capybara/version.rb +1 -1
- data/lib/capybara/window.rb +31 -25
- data/lib/capybara.rb +120 -100
- data/spec/basic_node_spec.rb +59 -34
- data/spec/capybara_spec.rb +54 -52
- data/spec/css_builder_spec.rb +101 -0
- data/spec/css_splitter_spec.rb +38 -0
- data/spec/dsl_spec.rb +80 -53
- data/spec/filter_set_spec.rb +24 -7
- data/spec/fixtures/certificate.pem +25 -0
- data/spec/fixtures/key.pem +27 -0
- data/spec/fixtures/selenium_driver_rspec_failure.rb +4 -4
- data/spec/fixtures/selenium_driver_rspec_success.rb +4 -4
- data/spec/minitest_spec.rb +38 -5
- data/spec/minitest_spec_spec.rb +88 -62
- data/spec/per_session_config_spec.rb +5 -5
- data/spec/rack_test_spec.rb +169 -115
- data/spec/regexp_dissassembler_spec.rb +250 -0
- data/spec/result_spec.rb +86 -33
- data/spec/rspec/features_spec.rb +26 -23
- data/spec/rspec/scenarios_spec.rb +8 -4
- data/spec/rspec/shared_spec_matchers.rb +393 -363
- data/spec/rspec/views_spec.rb +4 -3
- data/spec/rspec_matchers_spec.rb +10 -10
- data/spec/rspec_spec.rb +109 -85
- data/spec/sauce_spec_chrome.rb +43 -0
- data/spec/selector_spec.rb +391 -61
- data/spec/selenium_spec_chrome.rb +180 -41
- data/spec/selenium_spec_chrome_remote.rb +101 -0
- data/spec/selenium_spec_edge.rb +28 -8
- data/spec/selenium_spec_firefox.rb +211 -0
- data/spec/selenium_spec_firefox_remote.rb +80 -0
- data/spec/selenium_spec_ie.rb +127 -11
- data/spec/selenium_spec_safari.rb +156 -0
- data/spec/server_spec.rb +177 -78
- data/spec/session_spec.rb +52 -16
- data/spec/shared_selenium_node.rb +79 -0
- data/spec/shared_selenium_session.rb +455 -123
- data/spec/spec_helper.rb +91 -2
- data/spec/xpath_builder_spec.rb +93 -0
- metadata +343 -42
- data/.yard/templates_custom/default/class/html/selectors.erb +0 -38
- data/.yard/templates_custom/default/class/html/setup.rb +0 -17
- data/.yard/yard_extensions.rb +0 -78
- data/lib/capybara/rspec/compound.rb +0 -90
- data/lib/capybara/spec/session/assert_selector.rb +0 -149
- data/lib/capybara/spec/session/source_spec.rb +0 -0
- data/lib/capybara/spec/views/with_title.erb +0 -5
- data/spec/selenium_spec_marionette.rb +0 -143
data/spec/result_spec.rb
CHANGED
|
@@ -18,15 +18,15 @@ RSpec.describe Capybara::Result do
|
|
|
18
18
|
string.all '//li', minimum: 0 # pass minimum: 0 so lazy evaluation doesn't get triggered yet
|
|
19
19
|
end
|
|
20
20
|
|
|
21
|
-
it
|
|
21
|
+
it 'has a length' do
|
|
22
22
|
expect(result.length).to eq(4)
|
|
23
23
|
end
|
|
24
24
|
|
|
25
|
-
it
|
|
25
|
+
it 'has a first element' do
|
|
26
26
|
result.first.text == 'Alpha'
|
|
27
27
|
end
|
|
28
28
|
|
|
29
|
-
it
|
|
29
|
+
it 'has a last element' do
|
|
30
30
|
result.last.text == 'Delta'
|
|
31
31
|
end
|
|
32
32
|
|
|
@@ -34,22 +34,22 @@ RSpec.describe Capybara::Result do
|
|
|
34
34
|
expect(result.values_at(0, 2).map(&:text)).to eq(%w[Alpha Gamma])
|
|
35
35
|
end
|
|
36
36
|
|
|
37
|
-
it
|
|
37
|
+
it 'can return an element by its index' do
|
|
38
38
|
expect(result.at(1).text).to eq('Beta')
|
|
39
39
|
expect(result[2].text).to eq('Gamma')
|
|
40
40
|
end
|
|
41
41
|
|
|
42
|
-
it
|
|
42
|
+
it 'can be mapped' do
|
|
43
43
|
expect(result.map(&:text)).to eq(%w[Alpha Beta Gamma Delta])
|
|
44
44
|
end
|
|
45
45
|
|
|
46
|
-
it
|
|
47
|
-
expect(result.
|
|
46
|
+
it 'can be selected' do
|
|
47
|
+
expect(result.count do |element|
|
|
48
48
|
element.text.include? 't'
|
|
49
|
-
end
|
|
49
|
+
end).to eq(2)
|
|
50
50
|
end
|
|
51
51
|
|
|
52
|
-
it
|
|
52
|
+
it 'can be reduced' do
|
|
53
53
|
expect(result.reduce('') do |memo, element|
|
|
54
54
|
memo + element.text[0]
|
|
55
55
|
end).to eq('ABGD')
|
|
@@ -65,36 +65,55 @@ RSpec.describe Capybara::Result do
|
|
|
65
65
|
end).to eq(2)
|
|
66
66
|
end
|
|
67
67
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
expect(result[0, 2].map(&:text)).to eq %w[Alpha Beta]
|
|
71
|
-
expect(result[1..3].map(&:text)).to eq %w[Beta Gamma Delta]
|
|
72
|
-
expect(result[-1].text).to eq 'Delta'
|
|
68
|
+
def recalc_result
|
|
69
|
+
string.all '//li', minimum: 0 # pass minimum: 0 so lazy evaluation doesn't get triggered yet
|
|
73
70
|
end
|
|
74
71
|
|
|
75
|
-
it '
|
|
76
|
-
|
|
77
|
-
expect(
|
|
72
|
+
it 'supports all modes of []' do
|
|
73
|
+
expect(recalc_result[1].text).to eq 'Beta'
|
|
74
|
+
expect(recalc_result[0, 2].map(&:text)).to eq %w[Alpha Beta]
|
|
75
|
+
expect(recalc_result[1..3].map(&:text)).to eq %w[Beta Gamma Delta]
|
|
76
|
+
expect(recalc_result[-1].text).to eq 'Delta'
|
|
77
|
+
expect(recalc_result[-2, 3].map(&:text)).to eq %w[Gamma Delta]
|
|
78
|
+
expect(recalc_result[1...3].map(&:text)).to eq %w[Beta Gamma]
|
|
79
|
+
expect(recalc_result[1..7].map(&:text)).to eq %w[Beta Gamma Delta]
|
|
80
|
+
expect(recalc_result[2...-1].map(&:text)).to eq %w[Gamma]
|
|
81
|
+
expect(recalc_result[2..-1].map(&:text)).to eq %w[Gamma Delta] # rubocop:disable Style/SlicingWithRange
|
|
82
|
+
expect(recalc_result[2..].map(&:text)).to eq %w[Gamma Delta]
|
|
78
83
|
end
|
|
79
84
|
|
|
80
|
-
it '
|
|
81
|
-
|
|
82
|
-
allow_any_instance_of(Capybara::Node::Simple).to receive(:session).and_return(double("session", driver: double("driver", invalid_element_errors: [StandardError])))
|
|
83
|
-
result = string.all('//li', text: 'Alpha')
|
|
84
|
-
expect(result.size).to eq 0
|
|
85
|
+
it 'supports endless ranges' do
|
|
86
|
+
expect(result[2..].map(&:text)).to eq %w[Gamma Delta]
|
|
85
87
|
end
|
|
86
88
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
89
|
+
eval <<~TEST, binding, __FILE__, __LINE__ + 1 if RUBY_VERSION.to_f > 2.6
|
|
90
|
+
it 'supports inclusive positive beginless ranges' do
|
|
91
|
+
expect(result[..2].map(&:text)).to eq %w[Alpha Beta Gamma]
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
it 'supports inclusive negative beginless ranges' do
|
|
95
|
+
expect(result[..-2].map(&:text)).to eq %w[Alpha Beta Gamma]
|
|
96
|
+
expect(result[..-1].map(&:text)).to eq %w[Alpha Beta Gamma Delta]
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
it 'supports exclusive positive beginless ranges' do
|
|
100
|
+
expect(result[...2].map(&:text)).to eq %w[Alpha Beta]
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
it 'supports exclusive negative beginless ranges' do
|
|
104
|
+
expect(result[...-2].map(&:text)).to eq %w[Alpha Beta]
|
|
105
|
+
expect(result[...-1].map(&:text)).to eq %w[Alpha Beta Gamma]
|
|
106
|
+
end
|
|
107
|
+
TEST
|
|
108
|
+
|
|
109
|
+
it 'works with filter blocks' do
|
|
110
|
+
result = string.all('//li') { |node| node.text == 'Alpha' }
|
|
111
|
+
expect(result.size).to eq 1
|
|
93
112
|
end
|
|
94
113
|
|
|
95
114
|
# Not a great test but it indirectly tests what is needed
|
|
96
|
-
it
|
|
97
|
-
skip 'JRuby has an issue with lazy enumerator evaluation' if
|
|
115
|
+
it 'should evaluate filters lazily for idx' do
|
|
116
|
+
skip 'JRuby has an issue with lazy enumerator evaluation' if jruby_lazy_enumerator_workaround?
|
|
98
117
|
# Not processed until accessed
|
|
99
118
|
expect(result.instance_variable_get('@result_cache').size).to be 0
|
|
100
119
|
|
|
@@ -114,9 +133,39 @@ RSpec.describe Capybara::Result do
|
|
|
114
133
|
expect(result.instance_variable_get('@result_cache').size).to eq 4
|
|
115
134
|
end
|
|
116
135
|
|
|
117
|
-
|
|
136
|
+
it 'should evaluate filters lazily for range' do
|
|
137
|
+
skip 'JRuby has an issue with lazy enumerator evaluation' if jruby_lazy_enumerator_workaround?
|
|
138
|
+
result[0..1]
|
|
139
|
+
expect(result.instance_variable_get('@result_cache').size).to be 2
|
|
140
|
+
|
|
141
|
+
expect(result[0..7].size).to eq 4
|
|
142
|
+
expect(result.instance_variable_get('@result_cache').size).to be 4
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
it 'should evaluate filters lazily for idx and length' do
|
|
146
|
+
skip 'JRuby has an issue with lazy enumerator evaluation' if jruby_lazy_enumerator_workaround?
|
|
147
|
+
result[1, 2]
|
|
148
|
+
expect(result.instance_variable_get('@result_cache').size).to be 3
|
|
149
|
+
|
|
150
|
+
expect(result[2, 5].size).to eq 2
|
|
151
|
+
expect(result.instance_variable_get('@result_cache').size).to be 4
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
it 'should only need to evaluate one result for any?' do
|
|
155
|
+
skip 'JRuby has an issue with lazy enumerator evaluation' if jruby_lazy_enumerator_workaround?
|
|
156
|
+
result.any?
|
|
157
|
+
expect(result.instance_variable_get('@result_cache').size).to be 1
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
it 'should evaluate all elements when #to_a called' do
|
|
161
|
+
# All cached when converted to array
|
|
162
|
+
result.to_a
|
|
163
|
+
expect(result.instance_variable_get('@result_cache').size).to eq 4
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
describe '#each' do
|
|
118
167
|
it 'lazily evaluates' do
|
|
119
|
-
skip 'JRuby has an issue with lazy enumerator evaluation' if
|
|
168
|
+
skip 'JRuby has an issue with lazy enumerator evaluation' if jruby_lazy_enumerator_workaround?
|
|
120
169
|
results = []
|
|
121
170
|
result.each do |el|
|
|
122
171
|
results << el
|
|
@@ -132,11 +181,15 @@ RSpec.describe Capybara::Result do
|
|
|
132
181
|
end
|
|
133
182
|
|
|
134
183
|
it 'lazily evaluates' do
|
|
135
|
-
skip 'JRuby has an issue with lazy enumerator evaluation' if
|
|
184
|
+
skip 'JRuby has an issue with lazy enumerator evaluation' if jruby_lazy_enumerator_workaround?
|
|
136
185
|
result.each.with_index do |_el, idx|
|
|
137
186
|
expect(result.instance_variable_get('@result_cache').size).to eq(idx + 1) # 0 indexing
|
|
138
187
|
end
|
|
139
188
|
end
|
|
140
189
|
end
|
|
141
190
|
end
|
|
191
|
+
|
|
192
|
+
def jruby_lazy_enumerator_workaround?
|
|
193
|
+
RUBY_PLATFORM == 'java'
|
|
194
|
+
end
|
|
142
195
|
end
|
data/spec/rspec/features_spec.rb
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
# rubocop:disable RSpec/MultipleDescribes
|
|
4
|
+
|
|
3
5
|
require 'spec_helper'
|
|
4
6
|
require 'capybara/rspec'
|
|
5
7
|
|
|
6
|
-
|
|
8
|
+
# rubocop:disable RSpec/InstanceVariable
|
|
9
|
+
RSpec.configuration.before(:each, file_path: './spec/rspec/features_spec.rb') do
|
|
7
10
|
@in_filtered_hook = true
|
|
8
11
|
end
|
|
9
12
|
|
|
@@ -12,34 +15,30 @@ feature "Capybara's feature DSL" do
|
|
|
12
15
|
@in_background = true
|
|
13
16
|
end
|
|
14
17
|
|
|
15
|
-
|
|
16
|
-
RSpec.respond_to?(:current_example) ? RSpec.current_example : context.example
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
scenario "includes Capybara" do
|
|
18
|
+
scenario 'includes Capybara' do
|
|
20
19
|
visit('/')
|
|
21
20
|
expect(page).to have_content('Hello world!')
|
|
22
21
|
end
|
|
23
22
|
|
|
24
|
-
scenario
|
|
25
|
-
expect(
|
|
23
|
+
scenario 'preserves description' do |ex|
|
|
24
|
+
expect(ex.metadata[:full_description])
|
|
26
25
|
.to eq("Capybara's feature DSL preserves description")
|
|
27
26
|
end
|
|
28
27
|
|
|
29
|
-
scenario
|
|
28
|
+
scenario 'allows driver switching', driver: :selenium do
|
|
30
29
|
expect(Capybara.current_driver).to eq(:selenium)
|
|
31
30
|
end
|
|
32
31
|
|
|
33
|
-
scenario
|
|
32
|
+
scenario 'runs background' do
|
|
34
33
|
expect(@in_background).to be_truthy
|
|
35
34
|
end
|
|
36
35
|
|
|
37
|
-
scenario
|
|
36
|
+
scenario 'runs hooks filtered by file path' do
|
|
38
37
|
expect(@in_filtered_hook).to be_truthy
|
|
39
38
|
end
|
|
40
39
|
|
|
41
40
|
scenario "doesn't pollute the Object namespace" do
|
|
42
|
-
expect(Object.new.respond_to
|
|
41
|
+
expect(Object.new).not_to respond_to(:feature)
|
|
43
42
|
end
|
|
44
43
|
|
|
45
44
|
feature 'nested features' do
|
|
@@ -48,17 +47,18 @@ feature "Capybara's feature DSL" do
|
|
|
48
47
|
expect(page).to have_content 'Hello world!'
|
|
49
48
|
end
|
|
50
49
|
|
|
51
|
-
scenario 'are marked in the metadata as capybara_feature' do
|
|
52
|
-
expect(
|
|
50
|
+
scenario 'are marked in the metadata as capybara_feature' do |ex|
|
|
51
|
+
expect(ex.metadata[:capybara_feature]).to be_truthy
|
|
53
52
|
end
|
|
54
53
|
|
|
55
|
-
scenario 'have a type of :feature' do
|
|
56
|
-
expect(
|
|
54
|
+
scenario 'have a type of :feature' do |ex|
|
|
55
|
+
expect(ex.metadata[:type]).to eq :feature
|
|
57
56
|
end
|
|
58
57
|
end
|
|
59
58
|
end
|
|
59
|
+
# rubocop:enable RSpec/InstanceVariable
|
|
60
60
|
|
|
61
|
-
feature
|
|
61
|
+
feature 'given and given! aliases to let and let!' do
|
|
62
62
|
given(:value) { :available }
|
|
63
63
|
given!(:value_in_background) { :available }
|
|
64
64
|
|
|
@@ -66,33 +66,36 @@ feature "given and given! aliases to let and let!" do
|
|
|
66
66
|
expect(value_in_background).to be(:available)
|
|
67
67
|
end
|
|
68
68
|
|
|
69
|
-
scenario
|
|
69
|
+
scenario 'given and given! work as intended' do
|
|
70
70
|
expect(value).to be(:available)
|
|
71
71
|
expect(value_in_background).to be(:available)
|
|
72
72
|
end
|
|
73
73
|
end
|
|
74
74
|
|
|
75
75
|
feature "Capybara's feature DSL with driver", driver: :culerity do
|
|
76
|
-
scenario
|
|
76
|
+
scenario 'switches driver' do
|
|
77
77
|
expect(Capybara.current_driver).to eq(:culerity)
|
|
78
78
|
end
|
|
79
79
|
end
|
|
80
80
|
|
|
81
|
-
|
|
81
|
+
# rubocop:disable RSpec/RepeatedExample
|
|
82
|
+
xfeature 'if xfeature aliases to pending then' do
|
|
82
83
|
scenario "this should be 'temporarily disabled with xfeature'" do
|
|
83
84
|
# dummy
|
|
84
85
|
end
|
|
86
|
+
|
|
85
87
|
scenario "this also should be 'temporarily disabled with xfeature'" do
|
|
86
88
|
# dummy
|
|
87
89
|
end
|
|
88
90
|
end
|
|
89
91
|
|
|
90
|
-
ffeature
|
|
91
|
-
scenario
|
|
92
|
+
ffeature 'if ffeature aliases focused tag then' do # rubocop:disable RSpec/Focus
|
|
93
|
+
scenario 'scenario inside this feature has metatag focus tag' do |example|
|
|
92
94
|
expect(example.metadata[:focus]).to eq true
|
|
93
95
|
end
|
|
94
96
|
|
|
95
|
-
scenario
|
|
97
|
+
scenario 'other scenarios also has metatag focus tag' do |example|
|
|
96
98
|
expect(example.metadata[:focus]).to eq true
|
|
97
99
|
end
|
|
98
100
|
end
|
|
101
|
+
# rubocop:enable RSpec/RepeatedExample, RSpec/MultipleDescribes
|
|
@@ -1,19 +1,23 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
# rubocop:disable RSpec/MultipleDescribes
|
|
4
|
+
|
|
3
5
|
require 'spec_helper'
|
|
4
6
|
require 'capybara/rspec'
|
|
5
7
|
|
|
6
|
-
RSpec.configuration.before(:each, file_path:
|
|
8
|
+
RSpec.configuration.before(:each, file_path: './spec/rspec/scenarios_spec.rb') do
|
|
7
9
|
@in_filtered_hook = true
|
|
8
10
|
end
|
|
9
11
|
|
|
10
|
-
feature
|
|
11
|
-
fscenario
|
|
12
|
+
feature 'if fscenario aliases focused tag then' do
|
|
13
|
+
fscenario 'scenario should have focused meta tag' do |example| # rubocop:disable RSpec/Focus
|
|
12
14
|
expect(example.metadata[:focus]).to eq true
|
|
13
15
|
end
|
|
14
16
|
end
|
|
15
17
|
|
|
16
|
-
feature
|
|
18
|
+
feature 'if xscenario aliases to pending then' do
|
|
17
19
|
xscenario "this test should be 'temporarily disabled with xscenario'" do
|
|
18
20
|
end
|
|
19
21
|
end
|
|
22
|
+
|
|
23
|
+
# rubocop:enable RSpec/MultipleDescribes
|