capybara 3.3.0 → 3.40.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.yardopts +1 -0
- data/History.md +803 -13
- data/License.txt +1 -1
- data/README.md +257 -84
- data/lib/capybara/config.rb +25 -9
- data/lib/capybara/cucumber.rb +1 -1
- data/lib/capybara/driver/base.rb +17 -3
- data/lib/capybara/driver/node.rb +31 -6
- data/lib/capybara/dsl.rb +9 -7
- data/lib/capybara/helpers.rb +31 -7
- data/lib/capybara/minitest/spec.rb +180 -88
- data/lib/capybara/minitest.rb +262 -149
- data/lib/capybara/node/actions.rb +202 -116
- data/lib/capybara/node/base.rb +34 -19
- data/lib/capybara/node/document.rb +14 -2
- data/lib/capybara/node/document_matchers.rb +10 -12
- data/lib/capybara/node/element.rb +269 -115
- data/lib/capybara/node/finders.rb +99 -77
- data/lib/capybara/node/matchers.rb +327 -151
- data/lib/capybara/node/simple.rb +48 -13
- data/lib/capybara/node/whitespace_normalizer.rb +81 -0
- data/lib/capybara/queries/active_element_query.rb +18 -0
- data/lib/capybara/queries/ancestor_query.rb +8 -9
- data/lib/capybara/queries/base_query.rb +23 -16
- data/lib/capybara/queries/current_path_query.rb +16 -6
- data/lib/capybara/queries/match_query.rb +1 -0
- data/lib/capybara/queries/selector_query.rb +587 -130
- data/lib/capybara/queries/sibling_query.rb +8 -6
- data/lib/capybara/queries/style_query.rb +6 -2
- data/lib/capybara/queries/text_query.rb +28 -14
- data/lib/capybara/queries/title_query.rb +2 -2
- data/lib/capybara/rack_test/browser.rb +92 -25
- data/lib/capybara/rack_test/driver.rb +16 -7
- data/lib/capybara/rack_test/errors.rb +6 -0
- data/lib/capybara/rack_test/form.rb +68 -41
- data/lib/capybara/rack_test/node.rb +106 -39
- data/lib/capybara/rails.rb +1 -1
- data/lib/capybara/registration_container.rb +41 -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 +66 -0
- data/lib/capybara/result.rb +75 -52
- data/lib/capybara/rspec/features.rb +7 -7
- data/lib/capybara/rspec/matcher_proxies.rb +39 -18
- data/lib/capybara/rspec/matchers/base.rb +113 -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 +69 -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 +141 -339
- data/lib/capybara/rspec.rb +2 -0
- 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 +27 -25
- 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 +55 -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 +280 -0
- data/lib/capybara/selector/filter.rb +1 -0
- data/lib/capybara/selector/filter_set.rb +73 -25
- data/lib/capybara/selector/filters/base.rb +24 -5
- data/lib/capybara/selector/filters/expression_filter.rb +3 -3
- data/lib/capybara/selector/filters/locator_filter.rb +29 -0
- data/lib/capybara/selector/filters/node_filter.rb +16 -2
- data/lib/capybara/selector/regexp_disassembler.rb +211 -0
- data/lib/capybara/selector/selector.rb +85 -348
- data/lib/capybara/selector/xpath_extensions.rb +17 -0
- data/lib/capybara/selector.rb +474 -447
- 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 +255 -143
- data/lib/capybara/selenium/driver_specializations/chrome_driver.rb +93 -11
- data/lib/capybara/selenium/driver_specializations/edge_driver.rb +128 -0
- data/lib/capybara/selenium/driver_specializations/firefox_driver.rb +84 -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 +229 -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/node.rb +436 -134
- data/lib/capybara/selenium/nodes/chrome_node.rb +125 -0
- data/lib/capybara/selenium/nodes/edge_node.rb +110 -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/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 +56 -19
- data/lib/capybara/server/checker.rb +9 -3
- data/lib/capybara/server/middleware.rb +28 -12
- data/lib/capybara/server.rb +33 -10
- data/lib/capybara/session/config.rb +34 -10
- data/lib/capybara/session/matchers.rb +23 -16
- data/lib/capybara/session.rb +230 -170
- 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 +121 -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 +127 -40
- 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_spec.rb +21 -18
- data/lib/capybara/spec/session/assert_selector_spec.rb +52 -58
- data/lib/capybara/spec/session/assert_style_spec.rb +7 -7
- data/lib/capybara/spec/session/assert_text_spec.rb +74 -50
- data/lib/capybara/spec/session/assert_title_spec.rb +12 -12
- data/lib/capybara/spec/session/attach_file_spec.rb +126 -72
- data/lib/capybara/spec/session/body_spec.rb +6 -6
- data/lib/capybara/spec/session/check_spec.rb +102 -47
- data/lib/capybara/spec/session/choose_spec.rb +58 -32
- data/lib/capybara/spec/session/click_button_spec.rb +219 -163
- data/lib/capybara/spec/session/click_link_or_button_spec.rb +49 -23
- data/lib/capybara/spec/session/click_link_spec.rb +77 -54
- data/lib/capybara/spec/session/current_scope_spec.rb +8 -8
- data/lib/capybara/spec/session/current_url_spec.rb +38 -29
- 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_spec.rb +8 -8
- data/lib/capybara/spec/session/element/match_css_spec.rb +16 -10
- data/lib/capybara/spec/session/element/match_xpath_spec.rb +6 -6
- data/lib/capybara/spec/session/element/matches_selector_spec.rb +68 -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 +101 -46
- data/lib/capybara/spec/session/find_button_spec.rb +23 -23
- data/lib/capybara/spec/session/find_by_id_spec.rb +7 -7
- data/lib/capybara/spec/session/find_field_spec.rb +32 -30
- data/lib/capybara/spec/session/find_link_spec.rb +31 -21
- data/lib/capybara/spec/session/find_spec.rb +244 -141
- data/lib/capybara/spec/session/first_spec.rb +43 -43
- data/lib/capybara/spec/session/frame/frame_title_spec.rb +5 -5
- data/lib/capybara/spec/session/frame/frame_url_spec.rb +5 -5
- data/lib/capybara/spec/session/frame/switch_to_frame_spec.rb +30 -18
- data/lib/capybara/spec/session/frame/within_frame_spec.rb +45 -18
- 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 +23 -23
- 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 +94 -13
- data/lib/capybara/spec/session/has_css_spec.rb +272 -132
- data/lib/capybara/spec/session/has_current_path_spec.rb +50 -35
- data/lib/capybara/spec/session/has_element_spec.rb +47 -0
- data/lib/capybara/spec/session/has_field_spec.rb +137 -58
- data/lib/capybara/spec/session/has_link_spec.rb +44 -4
- data/lib/capybara/spec/session/has_none_selectors_spec.rb +31 -31
- data/lib/capybara/spec/session/has_select_spec.rb +84 -50
- data/lib/capybara/spec/session/has_selector_spec.rb +111 -71
- data/lib/capybara/spec/session/has_sibling_spec.rb +50 -0
- data/lib/capybara/spec/session/has_table_spec.rb +181 -4
- data/lib/capybara/spec/session/has_text_spec.rb +101 -53
- 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_spec.rb +1 -1
- data/lib/capybara/spec/session/html_spec.rb +13 -6
- data/lib/capybara/spec/session/matches_style_spec.rb +37 -0
- data/lib/capybara/spec/session/node_spec.rb +894 -142
- data/lib/capybara/spec/session/node_wrapper_spec.rb +10 -7
- data/lib/capybara/spec/session/refresh_spec.rb +9 -7
- data/lib/capybara/spec/session/reset_session_spec.rb +63 -35
- data/lib/capybara/spec/session/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 +2 -2
- data/lib/capybara/spec/session/save_page_spec.rb +37 -37
- data/lib/capybara/spec/session/save_screenshot_spec.rb +10 -10
- data/lib/capybara/spec/session/screenshot_spec.rb +2 -2
- data/lib/capybara/spec/session/scroll_spec.rb +119 -0
- data/lib/capybara/spec/session/select_spec.rb +85 -85
- data/lib/capybara/spec/session/selectors_spec.rb +49 -18
- data/lib/capybara/spec/session/sibling_spec.rb +9 -9
- data/lib/capybara/spec/session/text_spec.rb +25 -24
- data/lib/capybara/spec/session/title_spec.rb +7 -6
- data/lib/capybara/spec/session/uncheck_spec.rb +33 -21
- data/lib/capybara/spec/session/unselect_spec.rb +37 -37
- data/lib/capybara/spec/session/visit_spec.rb +68 -49
- data/lib/capybara/spec/session/window/become_closed_spec.rb +20 -17
- data/lib/capybara/spec/session/window/current_window_spec.rb +1 -1
- data/lib/capybara/spec/session/window/switch_to_window_spec.rb +20 -16
- data/lib/capybara/spec/session/window/window_opened_by_spec.rb +6 -2
- data/lib/capybara/spec/session/window/window_spec.rb +62 -63
- data/lib/capybara/spec/session/window/windows_spec.rb +5 -1
- data/lib/capybara/spec/session/window/within_window_spec.rb +14 -14
- data/lib/capybara/spec/session/within_spec.rb +79 -42
- data/lib/capybara/spec/spec_helper.rb +41 -53
- data/lib/capybara/spec/test_app.rb +132 -43
- data/lib/capybara/spec/views/animated.erb +49 -0
- data/lib/capybara/spec/views/form.erb +139 -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 +67 -0
- data/lib/capybara/spec/views/with_animation.erb +39 -4
- 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 +37 -9
- 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 +26 -5
- data/lib/capybara/spec/views/with_jstree.erb +26 -0
- data/lib/capybara/spec/views/with_namespace.erb +1 -0
- data/lib/capybara/spec/views/with_scope.erb +2 -2
- data/lib/capybara/spec/views/with_scope_other.erb +6 -0
- data/lib/capybara/spec/views/with_shadow.erb +31 -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 +19 -25
- data/lib/capybara.rb +126 -111
- data/spec/basic_node_spec.rb +59 -34
- data/spec/capybara_spec.rb +56 -44
- data/spec/counter_spec.rb +35 -0
- data/spec/css_builder_spec.rb +101 -0
- data/spec/css_splitter_spec.rb +8 -8
- data/spec/dsl_spec.rb +79 -52
- data/spec/filter_set_spec.rb +9 -9
- 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 +45 -7
- data/spec/minitest_spec_spec.rb +87 -64
- data/spec/per_session_config_spec.rb +6 -6
- data/spec/rack_test_spec.rb +172 -116
- data/spec/regexp_dissassembler_spec.rb +250 -0
- data/spec/result_spec.rb +80 -72
- data/spec/rspec/features_spec.rb +21 -16
- data/spec/rspec/scenarios_spec.rb +10 -6
- data/spec/rspec/shared_spec_matchers.rb +407 -365
- data/spec/rspec/views_spec.rb +3 -3
- data/spec/rspec_matchers_spec.rb +35 -10
- data/spec/rspec_spec.rb +63 -41
- data/spec/sauce_spec_chrome.rb +43 -0
- data/spec/selector_spec.rb +334 -89
- data/spec/selenium_spec_chrome.rb +176 -62
- data/spec/selenium_spec_chrome_remote.rb +54 -14
- data/spec/selenium_spec_edge.rb +41 -8
- data/spec/selenium_spec_firefox.rb +228 -0
- data/spec/selenium_spec_firefox_remote.rb +94 -0
- data/spec/selenium_spec_ie.rb +129 -11
- data/spec/selenium_spec_safari.rb +162 -0
- data/spec/server_spec.rb +171 -97
- data/spec/session_spec.rb +34 -18
- data/spec/shared_selenium_node.rb +79 -0
- data/spec/shared_selenium_session.rb +344 -80
- data/spec/spec_helper.rb +124 -2
- data/spec/whitespace_normalizer_spec.rb +54 -0
- data/spec/xpath_builder_spec.rb +93 -0
- metadata +326 -28
- data/lib/capybara/rspec/compound.rb +0 -94
- data/lib/capybara/selenium/driver_specializations/marionette_driver.rb +0 -31
- data/lib/capybara/selenium/nodes/marionette_node.rb +0 -31
- data/lib/capybara/spec/session/has_style_spec.rb +0 -25
- 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 -167
data/spec/result_spec.rb
CHANGED
|
@@ -18,38 +18,47 @@ 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
|
|
|
33
|
+
it 'splats into multiple assignment' do
|
|
34
|
+
first, *rest, last = result
|
|
35
|
+
|
|
36
|
+
expect(first).to have_text 'Alpha'
|
|
37
|
+
expect(rest.first).to have_text 'Beta'
|
|
38
|
+
expect(rest.last).to have_text 'Gamma'
|
|
39
|
+
expect(last).to have_text 'Delta'
|
|
40
|
+
end
|
|
41
|
+
|
|
33
42
|
it 'can supports values_at method' do
|
|
34
43
|
expect(result.values_at(0, 2).map(&:text)).to eq(%w[Alpha Gamma])
|
|
35
44
|
end
|
|
36
45
|
|
|
37
|
-
it
|
|
46
|
+
it 'can return an element by its index' do
|
|
38
47
|
expect(result.at(1).text).to eq('Beta')
|
|
39
48
|
expect(result[2].text).to eq('Gamma')
|
|
40
49
|
end
|
|
41
50
|
|
|
42
|
-
it
|
|
51
|
+
it 'can be mapped' do
|
|
43
52
|
expect(result.map(&:text)).to eq(%w[Alpha Beta Gamma Delta])
|
|
44
53
|
end
|
|
45
54
|
|
|
46
|
-
it
|
|
47
|
-
expect(result.
|
|
55
|
+
it 'can be selected' do
|
|
56
|
+
expect(result.count do |element|
|
|
48
57
|
element.text.include? 't'
|
|
49
|
-
end
|
|
58
|
+
end).to eq(2)
|
|
50
59
|
end
|
|
51
60
|
|
|
52
|
-
it
|
|
61
|
+
it 'can be reduced' do
|
|
53
62
|
expect(result.reduce('') do |memo, element|
|
|
54
63
|
memo + element.text[0]
|
|
55
64
|
end).to eq('ABGD')
|
|
@@ -65,98 +74,109 @@ RSpec.describe Capybara::Result do
|
|
|
65
74
|
end).to eq(2)
|
|
66
75
|
end
|
|
67
76
|
|
|
77
|
+
def recalc_result
|
|
78
|
+
string.all '//li', minimum: 0 # pass minimum: 0 so lazy evaluation doesn't get triggered yet
|
|
79
|
+
end
|
|
80
|
+
|
|
68
81
|
it 'supports all modes of []' do
|
|
69
|
-
expect(
|
|
70
|
-
expect(
|
|
71
|
-
expect(
|
|
72
|
-
expect(
|
|
73
|
-
expect(
|
|
74
|
-
expect(
|
|
82
|
+
expect(recalc_result[1].text).to eq 'Beta'
|
|
83
|
+
expect(recalc_result[0, 2].map(&:text)).to eq %w[Alpha Beta]
|
|
84
|
+
expect(recalc_result[1..3].map(&:text)).to eq %w[Beta Gamma Delta]
|
|
85
|
+
expect(recalc_result[-1].text).to eq 'Delta'
|
|
86
|
+
expect(recalc_result[-2, 3].map(&:text)).to eq %w[Gamma Delta]
|
|
87
|
+
expect(recalc_result[1...3].map(&:text)).to eq %w[Beta Gamma]
|
|
88
|
+
expect(recalc_result[1..7].map(&:text)).to eq %w[Beta Gamma Delta]
|
|
89
|
+
expect(recalc_result[2...-1].map(&:text)).to eq %w[Gamma]
|
|
90
|
+
expect(recalc_result[2..-1].map(&:text)).to eq %w[Gamma Delta] # rubocop:disable Style/SlicingWithRange
|
|
91
|
+
expect(recalc_result[2..].map(&:text)).to eq %w[Gamma Delta]
|
|
75
92
|
end
|
|
76
93
|
|
|
77
|
-
it '
|
|
78
|
-
result
|
|
79
|
-
expect(result.size).to eq 1
|
|
94
|
+
it 'supports endless ranges' do
|
|
95
|
+
expect(result[2..].map(&:text)).to eq %w[Gamma Delta]
|
|
80
96
|
end
|
|
81
97
|
|
|
82
|
-
it '
|
|
83
|
-
|
|
84
|
-
allow_any_instance_of(Capybara::Node::Simple).to receive(:session).and_return(
|
|
85
|
-
instance_double("Capybara::Session", driver: instance_double("Capybara::Driver::Base", invalid_element_errors: [StandardError]))
|
|
86
|
-
)
|
|
87
|
-
result = string.all('//li', text: 'Alpha')
|
|
88
|
-
expect(result.size).to eq 0
|
|
98
|
+
it 'supports inclusive positive beginless ranges' do
|
|
99
|
+
expect(result[..2].map(&:text)).to eq %w[Alpha Beta Gamma]
|
|
89
100
|
end
|
|
90
101
|
|
|
91
|
-
it '
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
102
|
+
it 'supports inclusive negative beginless ranges' do
|
|
103
|
+
expect(result[..-2].map(&:text)).to eq %w[Alpha Beta Gamma]
|
|
104
|
+
expect(result[..-1].map(&:text)).to eq %w[Alpha Beta Gamma Delta]
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
it 'supports exclusive positive beginless ranges' do
|
|
108
|
+
expect(result[...2].map(&:text)).to eq %w[Alpha Beta]
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
it 'supports exclusive negative beginless ranges' do
|
|
112
|
+
expect(result[...-2].map(&:text)).to eq %w[Alpha Beta]
|
|
113
|
+
expect(result[...-1].map(&:text)).to eq %w[Alpha Beta Gamma]
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
it 'works with filter blocks' do
|
|
117
|
+
result = string.all('//li') { |node| node.text == 'Alpha' }
|
|
118
|
+
expect(result.size).to eq 1
|
|
99
119
|
end
|
|
100
120
|
|
|
101
121
|
# Not a great test but it indirectly tests what is needed
|
|
102
|
-
it
|
|
103
|
-
skip 'JRuby has an issue with lazy enumerator evaluation' if
|
|
122
|
+
it 'should evaluate filters lazily for idx' do
|
|
123
|
+
skip 'JRuby has an issue with lazy enumerator evaluation' if jruby_lazy_enumerator_workaround?
|
|
104
124
|
# Not processed until accessed
|
|
105
|
-
expect(result.instance_variable_get(
|
|
125
|
+
expect(result.instance_variable_get(:@result_cache).size).to be 0
|
|
106
126
|
|
|
107
127
|
# Only one retrieved when needed
|
|
108
128
|
result.first
|
|
109
|
-
expect(result.instance_variable_get(
|
|
129
|
+
expect(result.instance_variable_get(:@result_cache).size).to be 1
|
|
110
130
|
|
|
111
131
|
# works for indexed access
|
|
112
132
|
result[0]
|
|
113
|
-
expect(result.instance_variable_get(
|
|
133
|
+
expect(result.instance_variable_get(:@result_cache).size).to be 1
|
|
114
134
|
|
|
115
135
|
result[2]
|
|
116
|
-
expect(result.instance_variable_get(
|
|
136
|
+
expect(result.instance_variable_get(:@result_cache).size).to be 3
|
|
117
137
|
|
|
118
138
|
# All cached when converted to array
|
|
119
139
|
result.to_a
|
|
120
|
-
expect(result.instance_variable_get(
|
|
140
|
+
expect(result.instance_variable_get(:@result_cache).size).to eq 4
|
|
121
141
|
end
|
|
122
142
|
|
|
123
|
-
it
|
|
124
|
-
skip 'JRuby has an issue with lazy enumerator evaluation' if
|
|
143
|
+
it 'should evaluate filters lazily for range' do
|
|
144
|
+
skip 'JRuby has an issue with lazy enumerator evaluation' if jruby_lazy_enumerator_workaround?
|
|
125
145
|
result[0..1]
|
|
126
|
-
expect(result.instance_variable_get(
|
|
146
|
+
expect(result.instance_variable_get(:@result_cache).size).to be 2
|
|
127
147
|
|
|
128
148
|
expect(result[0..7].size).to eq 4
|
|
129
|
-
expect(result.instance_variable_get(
|
|
149
|
+
expect(result.instance_variable_get(:@result_cache).size).to be 4
|
|
130
150
|
end
|
|
131
151
|
|
|
132
|
-
it
|
|
133
|
-
skip 'JRuby has an issue with lazy enumerator evaluation' if
|
|
152
|
+
it 'should evaluate filters lazily for idx and length' do
|
|
153
|
+
skip 'JRuby has an issue with lazy enumerator evaluation' if jruby_lazy_enumerator_workaround?
|
|
134
154
|
result[1, 2]
|
|
135
|
-
expect(result.instance_variable_get(
|
|
155
|
+
expect(result.instance_variable_get(:@result_cache).size).to be 3
|
|
136
156
|
|
|
137
157
|
expect(result[2, 5].size).to eq 2
|
|
138
|
-
expect(result.instance_variable_get(
|
|
158
|
+
expect(result.instance_variable_get(:@result_cache).size).to be 4
|
|
139
159
|
end
|
|
140
160
|
|
|
141
|
-
it
|
|
142
|
-
skip 'JRuby has an issue with lazy enumerator evaluation' if
|
|
161
|
+
it 'should only need to evaluate one result for any?' do
|
|
162
|
+
skip 'JRuby has an issue with lazy enumerator evaluation' if jruby_lazy_enumerator_workaround?
|
|
143
163
|
result.any?
|
|
144
|
-
expect(result.instance_variable_get(
|
|
164
|
+
expect(result.instance_variable_get(:@result_cache).size).to be 1
|
|
145
165
|
end
|
|
146
166
|
|
|
147
|
-
it
|
|
167
|
+
it 'should evaluate all elements when #to_a called' do
|
|
148
168
|
# All cached when converted to array
|
|
149
169
|
result.to_a
|
|
150
|
-
expect(result.instance_variable_get(
|
|
170
|
+
expect(result.instance_variable_get(:@result_cache).size).to eq 4
|
|
151
171
|
end
|
|
152
172
|
|
|
153
|
-
|
|
173
|
+
describe '#each' do
|
|
154
174
|
it 'lazily evaluates' do
|
|
155
|
-
skip 'JRuby has an issue with lazy enumerator evaluation' if
|
|
175
|
+
skip 'JRuby has an issue with lazy enumerator evaluation' if jruby_lazy_enumerator_workaround?
|
|
156
176
|
results = []
|
|
157
177
|
result.each do |el|
|
|
158
178
|
results << el
|
|
159
|
-
expect(result.instance_variable_get(
|
|
179
|
+
expect(result.instance_variable_get(:@result_cache).size).to eq results.size
|
|
160
180
|
end
|
|
161
181
|
|
|
162
182
|
expect(results.size).to eq 4
|
|
@@ -168,27 +188,15 @@ RSpec.describe Capybara::Result do
|
|
|
168
188
|
end
|
|
169
189
|
|
|
170
190
|
it 'lazily evaluates' do
|
|
171
|
-
skip 'JRuby has an issue with lazy enumerator evaluation' if
|
|
191
|
+
skip 'JRuby has an issue with lazy enumerator evaluation' if jruby_lazy_enumerator_workaround?
|
|
172
192
|
result.each.with_index do |_el, idx|
|
|
173
|
-
expect(result.instance_variable_get(
|
|
193
|
+
expect(result.instance_variable_get(:@result_cache).size).to eq(idx + 1) # 0 indexing
|
|
174
194
|
end
|
|
175
195
|
end
|
|
176
196
|
end
|
|
177
197
|
end
|
|
178
198
|
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
# This test will let us know when JRuby fixes lazy select so we can re-enable it in Result
|
|
182
|
-
pending 'JRuby has an issue with lazy enumberator evaluation' if RUBY_PLATFORM == 'java'
|
|
183
|
-
eval_count = 0
|
|
184
|
-
enum = %w[Text1 Text2 Text3].lazy.select do
|
|
185
|
-
eval_count += 1
|
|
186
|
-
true
|
|
187
|
-
end
|
|
188
|
-
expect(eval_count).to eq 0
|
|
189
|
-
enum.next
|
|
190
|
-
sleep 1
|
|
191
|
-
expect(eval_count).to eq 1
|
|
192
|
-
end
|
|
199
|
+
def jruby_lazy_enumerator_workaround?
|
|
200
|
+
RUBY_PLATFORM == 'java'
|
|
193
201
|
end
|
|
194
202
|
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,25 +15,25 @@ feature "Capybara's feature DSL" do
|
|
|
12
15
|
@in_background = true
|
|
13
16
|
end
|
|
14
17
|
|
|
15
|
-
scenario
|
|
18
|
+
scenario 'includes Capybara' do
|
|
16
19
|
visit('/')
|
|
17
20
|
expect(page).to have_content('Hello world!')
|
|
18
21
|
end
|
|
19
22
|
|
|
20
|
-
scenario
|
|
23
|
+
scenario 'preserves description' do |ex|
|
|
21
24
|
expect(ex.metadata[:full_description])
|
|
22
25
|
.to eq("Capybara's feature DSL preserves description")
|
|
23
26
|
end
|
|
24
27
|
|
|
25
|
-
scenario
|
|
28
|
+
scenario 'allows driver switching', driver: :selenium do
|
|
26
29
|
expect(Capybara.current_driver).to eq(:selenium)
|
|
27
30
|
end
|
|
28
31
|
|
|
29
|
-
scenario
|
|
32
|
+
scenario 'runs background' do
|
|
30
33
|
expect(@in_background).to be_truthy
|
|
31
34
|
end
|
|
32
35
|
|
|
33
|
-
scenario
|
|
36
|
+
scenario 'runs hooks filtered by file path' do
|
|
34
37
|
expect(@in_filtered_hook).to be_truthy
|
|
35
38
|
end
|
|
36
39
|
|
|
@@ -53,8 +56,9 @@ feature "Capybara's feature DSL" do
|
|
|
53
56
|
end
|
|
54
57
|
end
|
|
55
58
|
end
|
|
59
|
+
# rubocop:enable RSpec/InstanceVariable
|
|
56
60
|
|
|
57
|
-
feature
|
|
61
|
+
feature 'given and given! aliases to let and let!' do
|
|
58
62
|
given(:value) { :available }
|
|
59
63
|
given!(:value_in_background) { :available }
|
|
60
64
|
|
|
@@ -62,35 +66,36 @@ feature "given and given! aliases to let and let!" do
|
|
|
62
66
|
expect(value_in_background).to be(:available)
|
|
63
67
|
end
|
|
64
68
|
|
|
65
|
-
scenario
|
|
69
|
+
scenario 'given and given! work as intended' do
|
|
66
70
|
expect(value).to be(:available)
|
|
67
71
|
expect(value_in_background).to be(:available)
|
|
68
72
|
end
|
|
69
73
|
end
|
|
70
74
|
|
|
71
75
|
feature "Capybara's feature DSL with driver", driver: :culerity do
|
|
72
|
-
scenario
|
|
76
|
+
scenario 'switches driver' do
|
|
73
77
|
expect(Capybara.current_driver).to eq(:culerity)
|
|
74
78
|
end
|
|
75
79
|
end
|
|
76
80
|
|
|
77
81
|
# rubocop:disable RSpec/RepeatedExample
|
|
78
|
-
xfeature
|
|
82
|
+
xfeature 'if xfeature aliases to pending then' do
|
|
79
83
|
scenario "this should be 'temporarily disabled with xfeature'" do
|
|
80
84
|
# dummy
|
|
81
85
|
end
|
|
86
|
+
|
|
82
87
|
scenario "this also should be 'temporarily disabled with xfeature'" do
|
|
83
88
|
# dummy
|
|
84
89
|
end
|
|
85
90
|
end
|
|
86
91
|
|
|
87
|
-
ffeature
|
|
88
|
-
scenario
|
|
89
|
-
expect(example.metadata[:focus]).to
|
|
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|
|
|
94
|
+
expect(example.metadata[:focus]).to be true
|
|
90
95
|
end
|
|
91
96
|
|
|
92
|
-
scenario
|
|
93
|
-
expect(example.metadata[:focus]).to
|
|
97
|
+
scenario 'other scenarios also has metatag focus tag' do |example|
|
|
98
|
+
expect(example.metadata[:focus]).to be true
|
|
94
99
|
end
|
|
95
100
|
end
|
|
96
|
-
# rubocop:enable RSpec/RepeatedExample
|
|
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
|
-
expect(example.metadata[:focus]).to
|
|
12
|
+
feature 'if fscenario aliases focused tag then' do
|
|
13
|
+
fscenario 'scenario should have focused meta tag' do |example| # rubocop:disable RSpec/Focus
|
|
14
|
+
expect(example.metadata[:focus]).to be true
|
|
13
15
|
end
|
|
14
16
|
end
|
|
15
17
|
|
|
16
|
-
feature
|
|
17
|
-
xscenario "this test should be 'temporarily disabled with xscenario'" do
|
|
18
|
+
feature 'if xscenario aliases to pending then' do
|
|
19
|
+
xscenario "this test should be 'temporarily disabled with xscenario'" do # rubocop:disable RSpec/PendingWithoutReason
|
|
18
20
|
end
|
|
19
21
|
end
|
|
22
|
+
|
|
23
|
+
# rubocop:enable RSpec/MultipleDescribes
|