Fix oversight in Result#[] length optimization
This commit is contained in:
parent
82b50770b1
commit
bda90bb504
|
@ -62,11 +62,12 @@ module Capybara
|
|||
if max_idx.nil?
|
||||
full_results[*args]
|
||||
else
|
||||
@result_cache << @results_enum.next while @result_cache.size <= max_idx
|
||||
loop do
|
||||
break if @result_cache.size > max_idx
|
||||
@result_cache << @results_enum.next
|
||||
end
|
||||
@result_cache[*args]
|
||||
end
|
||||
rescue StopIteration
|
||||
return nil
|
||||
end
|
||||
alias :at :[]
|
||||
|
||||
|
|
|
@ -70,6 +70,8 @@ RSpec.describe Capybara::Result do
|
|||
expect(result[0, 2].map(&:text)).to eq %w[Alpha Beta]
|
||||
expect(result[1..3].map(&:text)).to eq %w[Beta Gamma Delta]
|
||||
expect(result[-1].text).to eq 'Delta'
|
||||
expect(result[-2, 3].map(&:text)).to eq %w[Gamma Delta]
|
||||
expect(result[1..7].map(&:text)).to eq %w[Beta Gamma Delta]
|
||||
end
|
||||
|
||||
it 'works with filter blocks' do
|
||||
|
@ -122,12 +124,18 @@ RSpec.describe Capybara::Result do
|
|||
skip 'JRuby has an issue with lazy enumerator evaluation' if RUBY_PLATFORM == 'java'
|
||||
result[0..1]
|
||||
expect(result.instance_variable_get('@result_cache').size).to be 2
|
||||
|
||||
expect(result[0..7].size).to eq 4
|
||||
expect(result.instance_variable_get('@result_cache').size).to be 4
|
||||
end
|
||||
|
||||
it "should evaluate filters lazily for idx and length" do
|
||||
skip 'JRuby has an issue with lazy enumerator evaluation' if RUBY_PLATFORM == 'java'
|
||||
result[1, 2]
|
||||
expect(result.instance_variable_get('@result_cache').size).to be 3
|
||||
|
||||
expect(result[2, 5].size).to eq 2
|
||||
expect(result.instance_variable_get('@result_cache').size).to be 4
|
||||
end
|
||||
|
||||
it "should evaluate all elements when #to_a called" do
|
||||
|
|
Loading…
Reference in New Issue