Merge pull request #785 from adammck/delegate_result_to_array
Delegate common Result methods to Array
This commit is contained in:
commit
e68bc4e831
|
@ -1,6 +1,9 @@
|
||||||
|
require 'forwardable'
|
||||||
|
|
||||||
module Capybara
|
module Capybara
|
||||||
class Result
|
class Result
|
||||||
include Enumerable
|
include Enumerable
|
||||||
|
extend Forwardable
|
||||||
|
|
||||||
def initialize(elements, query)
|
def initialize(elements, query)
|
||||||
@elements = elements
|
@elements = elements
|
||||||
|
@ -9,13 +12,7 @@ module Capybara
|
||||||
@query = query
|
@query = query
|
||||||
end
|
end
|
||||||
|
|
||||||
def each(&block)
|
def_delegators :@result, :each, :[], :at, :size, :count, :length, :first, :last, :empty?
|
||||||
@result.each(&block)
|
|
||||||
end
|
|
||||||
|
|
||||||
def first
|
|
||||||
@result.first
|
|
||||||
end
|
|
||||||
|
|
||||||
def matches_count?
|
def matches_count?
|
||||||
@query.matches_count?(@result.size)
|
@query.matches_count?(@result.size)
|
||||||
|
@ -26,10 +23,6 @@ module Capybara
|
||||||
@result.first
|
@result.first
|
||||||
end
|
end
|
||||||
|
|
||||||
def size; @result.size; end
|
|
||||||
alias_method :length, :size
|
|
||||||
alias_method :count, :size
|
|
||||||
|
|
||||||
def find_error
|
def find_error
|
||||||
if @result.count == 0
|
if @result.count == 0
|
||||||
Capybara::ElementNotFound.new("Unable to find #{@query.description}")
|
Capybara::ElementNotFound.new("Unable to find #{@query.description}")
|
||||||
|
@ -66,11 +59,6 @@ module Capybara
|
||||||
"expected not to find #{@query.description}, but there #{declension("was", "were")} #{count} #{declension("match", "matches")}"
|
"expected not to find #{@query.description}, but there #{declension("was", "were")} #{count} #{declension("match", "matches")}"
|
||||||
end
|
end
|
||||||
|
|
||||||
def empty?
|
|
||||||
@result.empty?
|
|
||||||
end
|
|
||||||
def [](key); @result[key]; end
|
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def declension(singular, plural, count=count)
|
def declension(singular, plural, count=count)
|
||||||
|
|
|
@ -0,0 +1,51 @@
|
||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
describe Capybara::Result do
|
||||||
|
let :string do
|
||||||
|
Capybara.string <<-STRING
|
||||||
|
<ul>
|
||||||
|
<li>Alpha</li>
|
||||||
|
<li>Beta</li>
|
||||||
|
<li>Gamma</li>
|
||||||
|
<li>Delta</li>
|
||||||
|
</ul>
|
||||||
|
STRING
|
||||||
|
end
|
||||||
|
|
||||||
|
let :result do
|
||||||
|
string.all '//li'
|
||||||
|
end
|
||||||
|
|
||||||
|
it "has a length" do
|
||||||
|
result.length.should == 4
|
||||||
|
end
|
||||||
|
|
||||||
|
it "has a first element" do
|
||||||
|
result.first.text == 'Alpha'
|
||||||
|
end
|
||||||
|
|
||||||
|
it "has a last element" do
|
||||||
|
result.last.text == 'Delta'
|
||||||
|
end
|
||||||
|
|
||||||
|
it "can return an element by its index" do
|
||||||
|
result.at(1).text.should == 'Beta'
|
||||||
|
result[2].text.should == 'Gamma'
|
||||||
|
end
|
||||||
|
|
||||||
|
it "can be mapped" do
|
||||||
|
result.map(&:text).should == %w(Alpha Beta Gamma Delta)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "can be selected" do
|
||||||
|
result.select do |element|
|
||||||
|
element.text.include? 't'
|
||||||
|
end.length.should == 2
|
||||||
|
end
|
||||||
|
|
||||||
|
it "can be reduced" do
|
||||||
|
result.reduce('') do |memo, element|
|
||||||
|
memo += element.text[0]
|
||||||
|
end.should == 'ABGD'
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in New Issue