Disable jruby lazy results evaluation again

This commit is contained in:
Thomas Walpole 2017-02-16 12:31:33 -08:00
parent 2c357e35ce
commit 047098ad3f
2 changed files with 9 additions and 9 deletions

View File

@ -28,11 +28,6 @@ module Capybara
@result_cache = []
@results_enum = lazy_select_elements { |node| query.matches_filters?(node) }
@query = query
# JRuby < 9.1.6.0 has an issue with eagerly finding next in lazy enumerators which
# causes a concurrency issue with network requests here
# https://github.com/jruby/jruby/issues/4212
# Just force all the results to be evaluated
full_results if RUBY_PLATFORM == 'java' && (Gem::Version.new(JRUBY_VERSION) < Gem::Version.new('9.1.6.0'))
end
def_delegators :full_results, :size, :length, :last, :values_at, :inspect, :sample
@ -138,7 +133,12 @@ module Capybara
end
def lazy_select_elements(&block)
if @elements.respond_to? :lazy #Ruby 2.0+
# JRuby has an issue with lazy enumerators which
# causes a concurrency issue with network requests here
# https://github.com/jruby/jruby/issues/4212
if RUBY_PLATFORM == 'java'
@elements.select(&block).to_enum # non-lazy evaluation
elsif @elements.respond_to? :lazy #Ruby 2.0+
@elements.lazy.select(&block)
else
Enumerator.new do |yielder|

View File

@ -73,7 +73,7 @@ RSpec.describe Capybara::Result do
#Not a great test but it indirectly tests what is needed
it "should evaluate filters lazily" do
skip 'JRuby has an issue with lazy enumerator next evaluation' if RUBY_PLATFORM == 'java' && (Gem::Version.new(JRUBY_VERSION) < Gem::Version.new('9.1.6.0'))
skip 'JRuby has an issue with lazy enumerator evaluation' if RUBY_PLATFORM == 'java'
#Not processed until accessed
expect(result.instance_variable_get('@result_cache').size).to be 0
@ -95,7 +95,7 @@ RSpec.describe Capybara::Result do
context '#each' do
it 'lazily evaluates' do
skip 'JRuby has an issue with lazy enumerator next evaluation' if RUBY_PLATFORM == 'java' && (Gem::Version.new(JRUBY_VERSION) < Gem::Version.new('9.1.6.0'))
skip 'JRuby has an issue with lazy enumerator evaluation' if RUBY_PLATFORM == 'java'
results=[]
result.each do |el|
results << el
@ -111,7 +111,7 @@ RSpec.describe Capybara::Result do
end
it 'lazily evaluates' do
skip 'JRuby has an issue with lazy enumerator next evaluation' if RUBY_PLATFORM == 'java' && (Gem::Version.new(JRUBY_VERSION) < Gem::Version.new('9.1.6.0'))
skip 'JRuby has an issue with lazy enumerator evaluation' if RUBY_PLATFORM == 'java'
result.each.with_index do |el, idx|
expect(result.instance_variable_get('@result_cache').size).to eq(idx+1) # 0 indexing
end