capybara 3.13.2 → 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 +587 -16
- data/README.md +240 -90
- data/lib/capybara/config.rb +24 -11
- data/lib/capybara/cucumber.rb +1 -1
- data/lib/capybara/driver/base.rb +8 -0
- data/lib/capybara/driver/node.rb +20 -4
- data/lib/capybara/dsl.rb +5 -3
- data/lib/capybara/helpers.rb +25 -4
- data/lib/capybara/minitest/spec.rb +174 -90
- data/lib/capybara/minitest.rb +256 -142
- data/lib/capybara/node/actions.rb +123 -77
- data/lib/capybara/node/base.rb +20 -12
- data/lib/capybara/node/document.rb +2 -2
- data/lib/capybara/node/document_matchers.rb +3 -3
- data/lib/capybara/node/element.rb +223 -117
- data/lib/capybara/node/finders.rb +81 -71
- data/lib/capybara/node/matchers.rb +271 -134
- data/lib/capybara/node/simple.rb +18 -5
- 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 +3 -2
- data/lib/capybara/queries/current_path_query.rb +15 -5
- data/lib/capybara/queries/selector_query.rb +364 -54
- data/lib/capybara/queries/sibling_query.rb +8 -6
- data/lib/capybara/queries/style_query.rb +2 -2
- data/lib/capybara/queries/text_query.rb +13 -1
- data/lib/capybara/queries/title_query.rb +1 -1
- data/lib/capybara/rack_test/browser.rb +76 -11
- data/lib/capybara/rack_test/driver.rb +10 -5
- data/lib/capybara/rack_test/errors.rb +6 -0
- data/lib/capybara/rack_test/form.rb +31 -9
- data/lib/capybara/rack_test/node.rb +74 -23
- 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 +44 -20
- data/lib/capybara/rspec/matcher_proxies.rb +13 -11
- data/lib/capybara/rspec/matchers/base.rb +31 -16
- data/lib/capybara/rspec/matchers/compound.rb +1 -1
- 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 +2 -2
- data/lib/capybara/rspec/matchers/have_selector.rb +21 -21
- data/lib/capybara/rspec/matchers/have_sibling.rb +27 -0
- data/lib/capybara/rspec/matchers/have_text.rb +4 -4
- data/lib/capybara/rspec/matchers/have_title.rb +2 -2
- data/lib/capybara/rspec/matchers/match_selector.rb +3 -3
- data/lib/capybara/rspec/matchers/match_style.rb +7 -2
- data/lib/capybara/rspec/matchers/spatial_sugar.rb +39 -0
- data/lib/capybara/rspec/matchers.rb +111 -68
- data/lib/capybara/rspec.rb +2 -0
- data/lib/capybara/selector/builders/css_builder.rb +11 -7
- data/lib/capybara/selector/builders/xpath_builder.rb +5 -3
- data/lib/capybara/selector/css.rb +11 -9
- 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_set.rb +19 -18
- data/lib/capybara/selector/filters/base.rb +11 -2
- data/lib/capybara/selector/filters/locator_filter.rb +13 -3
- data/lib/capybara/selector/regexp_disassembler.rb +11 -7
- data/lib/capybara/selector/selector.rb +50 -440
- data/lib/capybara/selector/xpath_extensions.rb +17 -0
- data/lib/capybara/selector.rb +473 -482
- 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 +174 -62
- data/lib/capybara/selenium/driver_specializations/chrome_driver.rb +74 -18
- data/lib/capybara/selenium/driver_specializations/edge_driver.rb +128 -0
- data/lib/capybara/selenium/driver_specializations/firefox_driver.rb +37 -3
- data/lib/capybara/selenium/driver_specializations/internet_explorer_driver.rb +14 -1
- 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 +68 -45
- data/lib/capybara/selenium/extensions/html5_drag.rb +192 -22
- data/lib/capybara/selenium/extensions/modifier_keys_stack.rb +28 -0
- data/lib/capybara/selenium/extensions/scroll.rb +8 -10
- data/lib/capybara/selenium/node.rb +268 -72
- data/lib/capybara/selenium/nodes/chrome_node.rb +105 -9
- data/lib/capybara/selenium/nodes/edge_node.rb +110 -0
- data/lib/capybara/selenium/nodes/firefox_node.rb +51 -61
- 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 +1 -1
- data/lib/capybara/selenium/patches/persistent_client.rb +20 -0
- data/lib/capybara/server/animation_disabler.rb +43 -21
- data/lib/capybara/server/checker.rb +6 -2
- data/lib/capybara/server/middleware.rb +25 -13
- data/lib/capybara/server.rb +20 -4
- data/lib/capybara/session/config.rb +15 -11
- data/lib/capybara/session/matchers.rb +11 -11
- data/lib/capybara/session.rb +162 -131
- data/lib/capybara/spec/public/offset.js +6 -0
- data/lib/capybara/spec/public/test.js +105 -6
- data/lib/capybara/spec/session/accept_alert_spec.rb +1 -1
- data/lib/capybara/spec/session/active_element_spec.rb +31 -0
- data/lib/capybara/spec/session/all_spec.rb +89 -15
- data/lib/capybara/spec/session/ancestor_spec.rb +5 -0
- data/lib/capybara/spec/session/assert_current_path_spec.rb +5 -2
- data/lib/capybara/spec/session/assert_text_spec.rb +26 -22
- data/lib/capybara/spec/session/attach_file_spec.rb +64 -31
- data/lib/capybara/spec/session/check_spec.rb +26 -4
- data/lib/capybara/spec/session/choose_spec.rb +14 -2
- data/lib/capybara/spec/session/click_button_spec.rb +109 -61
- data/lib/capybara/spec/session/click_link_or_button_spec.rb +9 -0
- data/lib/capybara/spec/session/click_link_spec.rb +23 -1
- data/lib/capybara/spec/session/current_scope_spec.rb +1 -1
- data/lib/capybara/spec/session/current_url_spec.rb +11 -1
- data/lib/capybara/spec/session/element/matches_selector_spec.rb +40 -39
- data/lib/capybara/spec/session/evaluate_script_spec.rb +12 -0
- data/lib/capybara/spec/session/fill_in_spec.rb +46 -5
- data/lib/capybara/spec/session/find_link_spec.rb +10 -0
- data/lib/capybara/spec/session/find_spec.rb +80 -7
- data/lib/capybara/spec/session/first_spec.rb +2 -2
- data/lib/capybara/spec/session/frame/switch_to_frame_spec.rb +14 -1
- data/lib/capybara/spec/session/frame/within_frame_spec.rb +14 -1
- data/lib/capybara/spec/session/has_all_selectors_spec.rb +5 -5
- data/lib/capybara/spec/session/has_ancestor_spec.rb +46 -0
- data/lib/capybara/spec/session/has_any_selectors_spec.rb +6 -2
- data/lib/capybara/spec/session/has_button_spec.rb +81 -0
- data/lib/capybara/spec/session/has_css_spec.rb +45 -8
- data/lib/capybara/spec/session/has_current_path_spec.rb +22 -7
- data/lib/capybara/spec/session/has_element_spec.rb +47 -0
- data/lib/capybara/spec/session/has_field_spec.rb +59 -1
- data/lib/capybara/spec/session/has_link_spec.rb +40 -0
- data/lib/capybara/spec/session/has_none_selectors_spec.rb +7 -7
- data/lib/capybara/spec/session/has_select_spec.rb +42 -8
- data/lib/capybara/spec/session/has_selector_spec.rb +19 -4
- data/lib/capybara/spec/session/has_sibling_spec.rb +50 -0
- data/lib/capybara/spec/session/has_table_spec.rb +177 -0
- data/lib/capybara/spec/session/has_text_spec.rb +31 -3
- data/lib/capybara/spec/session/html_spec.rb +1 -1
- data/lib/capybara/spec/session/matches_style_spec.rb +6 -4
- data/lib/capybara/spec/session/node_spec.rb +697 -23
- data/lib/capybara/spec/session/node_wrapper_spec.rb +1 -1
- data/lib/capybara/spec/session/refresh_spec.rb +2 -1
- data/lib/capybara/spec/session/reset_session_spec.rb +21 -7
- data/lib/capybara/spec/session/save_and_open_screenshot_spec.rb +2 -2
- data/lib/capybara/spec/session/save_page_spec.rb +4 -4
- data/lib/capybara/spec/session/save_screenshot_spec.rb +4 -4
- data/lib/capybara/spec/session/scroll_spec.rb +9 -7
- data/lib/capybara/spec/session/select_spec.rb +5 -10
- data/lib/capybara/spec/session/selectors_spec.rb +24 -3
- data/lib/capybara/spec/session/uncheck_spec.rb +3 -3
- data/lib/capybara/spec/session/unselect_spec.rb +1 -1
- data/lib/capybara/spec/session/visit_spec.rb +20 -0
- data/lib/capybara/spec/session/window/become_closed_spec.rb +20 -17
- data/lib/capybara/spec/session/window/switch_to_window_spec.rb +1 -1
- data/lib/capybara/spec/session/window/window_opened_by_spec.rb +1 -1
- data/lib/capybara/spec/session/window/window_spec.rb +54 -57
- data/lib/capybara/spec/session/window/windows_spec.rb +2 -2
- data/lib/capybara/spec/session/within_spec.rb +36 -0
- data/lib/capybara/spec/spec_helper.rb +30 -19
- data/lib/capybara/spec/test_app.rb +122 -34
- data/lib/capybara/spec/views/animated.erb +49 -0
- data/lib/capybara/spec/views/form.erb +86 -8
- data/lib/capybara/spec/views/frame_child.erb +3 -2
- 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 +10 -10
- 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 +2 -1
- 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 +34 -6
- data/lib/capybara/spec/views/with_jquery_animation.erb +24 -0
- data/lib/capybara/spec/views/with_js.erb +7 -4
- 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 +14 -18
- data/lib/capybara.rb +91 -126
- data/spec/basic_node_spec.rb +30 -16
- data/spec/capybara_spec.rb +40 -28
- data/spec/counter_spec.rb +35 -0
- data/spec/css_builder_spec.rb +3 -1
- data/spec/css_splitter_spec.rb +1 -1
- data/spec/dsl_spec.rb +33 -22
- data/spec/filter_set_spec.rb +5 -5
- data/spec/fixtures/selenium_driver_rspec_failure.rb +3 -3
- data/spec/fixtures/selenium_driver_rspec_success.rb +3 -3
- data/spec/minitest_spec.rb +24 -2
- data/spec/minitest_spec_spec.rb +60 -45
- data/spec/per_session_config_spec.rb +1 -1
- data/spec/rack_test_spec.rb +131 -98
- data/spec/regexp_dissassembler_spec.rb +53 -39
- data/spec/result_spec.rb +68 -66
- data/spec/rspec/features_spec.rb +9 -4
- data/spec/rspec/scenarios_spec.rb +6 -2
- data/spec/rspec/shared_spec_matchers.rb +137 -98
- data/spec/rspec_matchers_spec.rb +25 -0
- data/spec/rspec_spec.rb +23 -21
- data/spec/sauce_spec_chrome.rb +43 -0
- data/spec/selector_spec.rb +77 -21
- data/spec/selenium_spec_chrome.rb +141 -39
- data/spec/selenium_spec_chrome_remote.rb +32 -17
- data/spec/selenium_spec_edge.rb +36 -8
- data/spec/selenium_spec_firefox.rb +110 -68
- data/spec/selenium_spec_firefox_remote.rb +22 -15
- data/spec/selenium_spec_ie.rb +29 -22
- data/spec/selenium_spec_safari.rb +162 -0
- data/spec/server_spec.rb +153 -81
- data/spec/session_spec.rb +11 -4
- data/spec/shared_selenium_node.rb +79 -0
- data/spec/shared_selenium_session.rb +179 -74
- data/spec/spec_helper.rb +80 -5
- data/spec/whitespace_normalizer_spec.rb +54 -0
- data/spec/xpath_builder_spec.rb +3 -1
- metadata +218 -30
- data/lib/capybara/spec/session/source_spec.rb +0 -0
- data/lib/capybara/spec/views/with_title.erb +0 -5
data/spec/result_spec.rb
CHANGED
@@ -30,6 +30,15 @@ RSpec.describe Capybara::Result 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
|
@@ -44,9 +53,9 @@ RSpec.describe Capybara::Result do
|
|
44
53
|
end
|
45
54
|
|
46
55
|
it 'can be selected' do
|
47
|
-
expect(result.
|
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
61
|
it 'can be reduced' do
|
@@ -65,104 +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(
|
75
|
-
expect(
|
76
|
-
expect(
|
77
|
-
expect(
|
78
|
-
|
79
|
-
expect(result[2..].map(&:text)).to eq %w[Gamma Delta]
|
80
|
-
TEST
|
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]
|
81
92
|
end
|
82
93
|
|
83
|
-
it '
|
84
|
-
result
|
85
|
-
expect(result.size).to eq 1
|
94
|
+
it 'supports endless ranges' do
|
95
|
+
expect(result[2..].map(&:text)).to eq %w[Gamma Delta]
|
86
96
|
end
|
87
97
|
|
88
|
-
it '
|
89
|
-
|
90
|
-
allow_any_instance_of(Capybara::Node::Simple).to receive(:session).and_return(
|
91
|
-
instance_double('Capybara::Session', driver: instance_double('Capybara::Driver::Base', invalid_element_errors: [StandardError], wait?: false))
|
92
|
-
)
|
93
|
-
result = string.all('//li', text: 'Alpha')
|
94
|
-
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]
|
95
100
|
end
|
96
101
|
|
97
|
-
it '
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
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
|
105
119
|
end
|
106
120
|
|
107
121
|
# Not a great test but it indirectly tests what is needed
|
108
122
|
it 'should evaluate filters lazily for idx' do
|
109
|
-
skip 'JRuby has an issue with lazy enumerator evaluation' if
|
123
|
+
skip 'JRuby has an issue with lazy enumerator evaluation' if jruby_lazy_enumerator_workaround?
|
110
124
|
# Not processed until accessed
|
111
|
-
expect(result.instance_variable_get(
|
125
|
+
expect(result.instance_variable_get(:@result_cache).size).to be 0
|
112
126
|
|
113
127
|
# Only one retrieved when needed
|
114
128
|
result.first
|
115
|
-
expect(result.instance_variable_get(
|
129
|
+
expect(result.instance_variable_get(:@result_cache).size).to be 1
|
116
130
|
|
117
131
|
# works for indexed access
|
118
132
|
result[0]
|
119
|
-
expect(result.instance_variable_get(
|
133
|
+
expect(result.instance_variable_get(:@result_cache).size).to be 1
|
120
134
|
|
121
135
|
result[2]
|
122
|
-
expect(result.instance_variable_get(
|
136
|
+
expect(result.instance_variable_get(:@result_cache).size).to be 3
|
123
137
|
|
124
138
|
# All cached when converted to array
|
125
139
|
result.to_a
|
126
|
-
expect(result.instance_variable_get(
|
140
|
+
expect(result.instance_variable_get(:@result_cache).size).to eq 4
|
127
141
|
end
|
128
142
|
|
129
143
|
it 'should evaluate filters lazily for range' do
|
130
|
-
skip 'JRuby has an issue with lazy enumerator evaluation' if
|
144
|
+
skip 'JRuby has an issue with lazy enumerator evaluation' if jruby_lazy_enumerator_workaround?
|
131
145
|
result[0..1]
|
132
|
-
expect(result.instance_variable_get(
|
146
|
+
expect(result.instance_variable_get(:@result_cache).size).to be 2
|
133
147
|
|
134
148
|
expect(result[0..7].size).to eq 4
|
135
|
-
expect(result.instance_variable_get(
|
149
|
+
expect(result.instance_variable_get(:@result_cache).size).to be 4
|
136
150
|
end
|
137
151
|
|
138
152
|
it 'should evaluate filters lazily for idx and length' do
|
139
|
-
skip 'JRuby has an issue with lazy enumerator evaluation' if
|
153
|
+
skip 'JRuby has an issue with lazy enumerator evaluation' if jruby_lazy_enumerator_workaround?
|
140
154
|
result[1, 2]
|
141
|
-
expect(result.instance_variable_get(
|
155
|
+
expect(result.instance_variable_get(:@result_cache).size).to be 3
|
142
156
|
|
143
157
|
expect(result[2, 5].size).to eq 2
|
144
|
-
expect(result.instance_variable_get(
|
158
|
+
expect(result.instance_variable_get(:@result_cache).size).to be 4
|
145
159
|
end
|
146
160
|
|
147
161
|
it 'should only need to evaluate one result for any?' do
|
148
|
-
skip 'JRuby has an issue with lazy enumerator evaluation' if
|
162
|
+
skip 'JRuby has an issue with lazy enumerator evaluation' if jruby_lazy_enumerator_workaround?
|
149
163
|
result.any?
|
150
|
-
expect(result.instance_variable_get(
|
164
|
+
expect(result.instance_variable_get(:@result_cache).size).to be 1
|
151
165
|
end
|
152
166
|
|
153
167
|
it 'should evaluate all elements when #to_a called' do
|
154
168
|
# All cached when converted to array
|
155
169
|
result.to_a
|
156
|
-
expect(result.instance_variable_get(
|
170
|
+
expect(result.instance_variable_get(:@result_cache).size).to eq 4
|
157
171
|
end
|
158
172
|
|
159
|
-
|
173
|
+
describe '#each' do
|
160
174
|
it 'lazily evaluates' do
|
161
|
-
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?
|
162
176
|
results = []
|
163
177
|
result.each do |el|
|
164
178
|
results << el
|
165
|
-
expect(result.instance_variable_get(
|
179
|
+
expect(result.instance_variable_get(:@result_cache).size).to eq results.size
|
166
180
|
end
|
167
181
|
|
168
182
|
expect(results.size).to eq 4
|
@@ -174,27 +188,15 @@ RSpec.describe Capybara::Result do
|
|
174
188
|
end
|
175
189
|
|
176
190
|
it 'lazily evaluates' do
|
177
|
-
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?
|
178
192
|
result.each.with_index do |_el, idx|
|
179
|
-
expect(result.instance_variable_get(
|
193
|
+
expect(result.instance_variable_get(:@result_cache).size).to eq(idx + 1) # 0 indexing
|
180
194
|
end
|
181
195
|
end
|
182
196
|
end
|
183
197
|
end
|
184
198
|
|
185
|
-
|
186
|
-
|
187
|
-
# This test will let us know when JRuby fixes lazy select so we can re-enable it in Result
|
188
|
-
pending 'JRuby has an issue with lazy enumberator evaluation' if RUBY_PLATFORM == 'java'
|
189
|
-
eval_count = 0
|
190
|
-
enum = %w[Text1 Text2 Text3].lazy.select do
|
191
|
-
eval_count += 1
|
192
|
-
true
|
193
|
-
end
|
194
|
-
expect(eval_count).to eq 0
|
195
|
-
enum.next
|
196
|
-
sleep 1
|
197
|
-
expect(eval_count).to eq 1
|
198
|
-
end
|
199
|
+
def jruby_lazy_enumerator_workaround?
|
200
|
+
RUBY_PLATFORM == 'java'
|
199
201
|
end
|
200
202
|
end
|
data/spec/rspec/features_spec.rb
CHANGED
@@ -1,8 +1,11 @@
|
|
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
|
|
8
|
+
# rubocop:disable RSpec/InstanceVariable
|
6
9
|
RSpec.configuration.before(:each, file_path: './spec/rspec/features_spec.rb') do
|
7
10
|
@in_filtered_hook = true
|
8
11
|
end
|
@@ -53,6 +56,7 @@ feature "Capybara's feature DSL" do
|
|
53
56
|
end
|
54
57
|
end
|
55
58
|
end
|
59
|
+
# rubocop:enable RSpec/InstanceVariable
|
56
60
|
|
57
61
|
feature 'given and given! aliases to let and let!' do
|
58
62
|
given(:value) { :available }
|
@@ -79,6 +83,7 @@ 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
|
@@ -86,11 +91,11 @@ end
|
|
86
91
|
|
87
92
|
ffeature 'if ffeature aliases focused tag then' do # rubocop:disable RSpec/Focus
|
88
93
|
scenario 'scenario inside this feature has metatag focus tag' do |example|
|
89
|
-
expect(example.metadata[:focus]).to
|
94
|
+
expect(example.metadata[:focus]).to be true
|
90
95
|
end
|
91
96
|
|
92
|
-
scenario 'other scenarios also has metatag focus tag
|
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,5 +1,7 @@
|
|
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
|
|
@@ -9,11 +11,13 @@ end
|
|
9
11
|
|
10
12
|
feature 'if fscenario aliases focused tag then' do
|
11
13
|
fscenario 'scenario should have focused meta tag' do |example| # rubocop:disable RSpec/Focus
|
12
|
-
expect(example.metadata[:focus]).to
|
14
|
+
expect(example.metadata[:focus]).to be true
|
13
15
|
end
|
14
16
|
end
|
15
17
|
|
16
18
|
feature 'if xscenario aliases to pending then' do
|
17
|
-
xscenario "this test should be 'temporarily disabled with xscenario'" 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
|