capybara 3.0.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 -1
- data/History.md +891 -12
- data/License.txt +1 -1
- data/README.md +257 -84
- 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 +38 -9
- data/lib/capybara/dsl.rb +9 -7
- data/lib/capybara/helpers.rb +57 -8
- data/lib/capybara/minitest/spec.rb +185 -84
- data/lib/capybara/minitest.rb +264 -145
- data/lib/capybara/node/actions.rb +248 -124
- data/lib/capybara/node/base.rb +35 -20
- data/lib/capybara/node/document.rb +14 -2
- data/lib/capybara/node/document_matchers.rb +13 -15
- data/lib/capybara/node/element.rb +350 -113
- data/lib/capybara/node/finders.rb +104 -82
- data/lib/capybara/node/matchers.rb +363 -157
- data/lib/capybara/node/simple.rb +54 -15
- 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 +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 +617 -104
- 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 +106 -31
- 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 +74 -49
- data/lib/capybara/rack_test/node.rb +120 -47
- 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 +87 -53
- data/lib/capybara/rspec/features.rb +8 -10
- 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 +142 -315
- 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 +85 -8
- 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 +72 -28
- 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 +211 -0
- data/lib/capybara/selector/selector.rb +89 -200
- data/lib/capybara/selector/xpath_extensions.rb +17 -0
- data/lib/capybara/selector.rb +474 -534
- 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 +270 -245
- data/lib/capybara/selenium/driver_specializations/chrome_driver.rb +117 -0
- 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 +460 -170
- 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 +80 -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 +40 -6
- data/lib/capybara/session/matchers.rb +26 -19
- data/lib/capybara/session.rb +252 -194
- 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 +126 -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 -44
- 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} +76 -52
- data/lib/capybara/spec/session/{assert_title.rb → 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 +11 -13
- data/lib/capybara/spec/session/check_spec.rb +112 -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 +89 -55
- data/lib/capybara/spec/session/current_scope_spec.rb +8 -8
- 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 +110 -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 +42 -14
- data/lib/capybara/spec/session/find_spec.rb +251 -142
- data/lib/capybara/spec/session/first_spec.rb +45 -44
- 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 +46 -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 +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 +98 -12
- data/lib/capybara/spec/session/has_css_spec.rb +271 -137
- 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 +46 -6
- data/lib/capybara/spec/session/has_none_selectors_spec.rb +33 -31
- data/lib/capybara/spec/session/has_select_spec.rb +84 -50
- data/lib/capybara/spec/session/has_selector_spec.rb +117 -69
- 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.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 +37 -0
- data/lib/capybara/spec/session/node_spec.rb +958 -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 +65 -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 +119 -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 +41 -22
- data/lib/capybara/spec/session/unselect_spec.rb +37 -37
- data/lib/capybara/spec/session/visit_spec.rb +79 -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 +11 -8
- data/lib/capybara/spec/session/window/within_window_spec.rb +17 -16
- data/lib/capybara/spec/session/within_spec.rb +82 -44
- data/lib/capybara/spec/spec_helper.rb +46 -52
- data/lib/capybara/spec/test_app.rb +148 -41
- data/lib/capybara/spec/views/animated.erb +49 -0
- data/lib/capybara/spec/views/form.erb +156 -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 +46 -11
- 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.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 +32 -26
- data/lib/capybara.rb +128 -104
- data/spec/basic_node_spec.rb +59 -34
- data/spec/capybara_spec.rb +65 -51
- data/spec/counter_spec.rb +35 -0
- data/spec/css_builder_spec.rb +101 -0
- data/spec/css_splitter_spec.rb +38 -0
- data/spec/dsl_spec.rb +84 -55
- 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 +5 -5
- data/spec/fixtures/selenium_driver_rspec_success.rb +5 -5
- data/spec/minitest_spec.rb +49 -5
- data/spec/minitest_spec_spec.rb +92 -62
- data/spec/per_session_config_spec.rb +6 -6
- data/spec/rack_test_spec.rb +183 -115
- data/spec/regexp_dissassembler_spec.rb +250 -0
- data/spec/result_spec.rb +99 -39
- data/spec/rspec/features_spec.rb +28 -25
- data/spec/rspec/scenarios_spec.rb +10 -6
- data/spec/rspec/shared_spec_matchers.rb +418 -364
- data/spec/rspec/views_spec.rb +4 -3
- data/spec/rspec_matchers_spec.rb +35 -10
- data/spec/rspec_spec.rb +109 -85
- data/spec/sauce_spec_chrome.rb +43 -0
- data/spec/selector_spec.rb +392 -62
- data/spec/selenium_spec_chrome.rb +183 -41
- data/spec/selenium_spec_chrome_remote.rb +96 -0
- 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 +192 -81
- data/spec/session_spec.rb +52 -16
- data/spec/shared_selenium_node.rb +79 -0
- data/spec/shared_selenium_session.rb +460 -123
- data/spec/spec_helper.rb +124 -2
- data/spec/whitespace_normalizer_spec.rb +54 -0
- data/spec/xpath_builder_spec.rb +93 -0
- metadata +344 -45
- 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,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,62 +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(
|
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]
|
73
92
|
end
|
74
93
|
|
75
|
-
it '
|
76
|
-
result
|
77
|
-
|
94
|
+
it 'supports endless ranges' do
|
95
|
+
expect(result[2..].map(&:text)).to eq %w[Gamma Delta]
|
96
|
+
end
|
97
|
+
|
98
|
+
it 'supports inclusive positive beginless ranges' do
|
99
|
+
expect(result[..2].map(&:text)).to eq %w[Alpha Beta Gamma]
|
100
|
+
end
|
101
|
+
|
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]
|
78
105
|
end
|
79
106
|
|
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
|
107
|
+
it 'supports exclusive positive beginless ranges' do
|
108
|
+
expect(result[...2].map(&:text)).to eq %w[Alpha Beta]
|
85
109
|
end
|
86
110
|
|
87
|
-
it '
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
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
|
93
119
|
end
|
94
120
|
|
95
121
|
# Not a great test but it indirectly tests what is needed
|
96
|
-
it
|
97
|
-
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?
|
98
124
|
# Not processed until accessed
|
99
|
-
expect(result.instance_variable_get(
|
125
|
+
expect(result.instance_variable_get(:@result_cache).size).to be 0
|
100
126
|
|
101
127
|
# Only one retrieved when needed
|
102
128
|
result.first
|
103
|
-
expect(result.instance_variable_get(
|
129
|
+
expect(result.instance_variable_get(:@result_cache).size).to be 1
|
104
130
|
|
105
131
|
# works for indexed access
|
106
132
|
result[0]
|
107
|
-
expect(result.instance_variable_get(
|
133
|
+
expect(result.instance_variable_get(:@result_cache).size).to be 1
|
108
134
|
|
109
135
|
result[2]
|
110
|
-
expect(result.instance_variable_get(
|
136
|
+
expect(result.instance_variable_get(:@result_cache).size).to be 3
|
137
|
+
|
138
|
+
# All cached when converted to array
|
139
|
+
result.to_a
|
140
|
+
expect(result.instance_variable_get(:@result_cache).size).to eq 4
|
141
|
+
end
|
142
|
+
|
143
|
+
it 'should evaluate filters lazily for range' do
|
144
|
+
skip 'JRuby has an issue with lazy enumerator evaluation' if jruby_lazy_enumerator_workaround?
|
145
|
+
result[0..1]
|
146
|
+
expect(result.instance_variable_get(:@result_cache).size).to be 2
|
147
|
+
|
148
|
+
expect(result[0..7].size).to eq 4
|
149
|
+
expect(result.instance_variable_get(:@result_cache).size).to be 4
|
150
|
+
end
|
151
|
+
|
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?
|
154
|
+
result[1, 2]
|
155
|
+
expect(result.instance_variable_get(:@result_cache).size).to be 3
|
156
|
+
|
157
|
+
expect(result[2, 5].size).to eq 2
|
158
|
+
expect(result.instance_variable_get(:@result_cache).size).to be 4
|
159
|
+
end
|
111
160
|
|
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?
|
163
|
+
result.any?
|
164
|
+
expect(result.instance_variable_get(:@result_cache).size).to be 1
|
165
|
+
end
|
166
|
+
|
167
|
+
it 'should evaluate all elements when #to_a called' do
|
112
168
|
# All cached when converted to array
|
113
169
|
result.to_a
|
114
|
-
expect(result.instance_variable_get(
|
170
|
+
expect(result.instance_variable_get(:@result_cache).size).to eq 4
|
115
171
|
end
|
116
172
|
|
117
|
-
|
173
|
+
describe '#each' do
|
118
174
|
it 'lazily evaluates' do
|
119
|
-
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?
|
120
176
|
results = []
|
121
177
|
result.each do |el|
|
122
178
|
results << el
|
123
|
-
expect(result.instance_variable_get(
|
179
|
+
expect(result.instance_variable_get(:@result_cache).size).to eq results.size
|
124
180
|
end
|
125
181
|
|
126
182
|
expect(results.size).to eq 4
|
@@ -132,11 +188,15 @@ RSpec.describe Capybara::Result do
|
|
132
188
|
end
|
133
189
|
|
134
190
|
it 'lazily evaluates' do
|
135
|
-
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?
|
136
192
|
result.each.with_index do |_el, idx|
|
137
|
-
expect(result.instance_variable_get(
|
193
|
+
expect(result.instance_variable_get(:@result_cache).size).to eq(idx + 1) # 0 indexing
|
138
194
|
end
|
139
195
|
end
|
140
196
|
end
|
141
197
|
end
|
198
|
+
|
199
|
+
def jruby_lazy_enumerator_workaround?
|
200
|
+
RUBY_PLATFORM == 'java'
|
201
|
+
end
|
142
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,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
|
-
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
|
93
95
|
end
|
94
96
|
|
95
|
-
scenario
|
96
|
-
expect(example.metadata[:focus]).to
|
97
|
+
scenario 'other scenarios also has metatag focus tag' do |example|
|
98
|
+
expect(example.metadata[:focus]).to be 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
|
-
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
|