Class: Capybara::Result

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Includes:
Enumerable
Defined in:
lib/capybara/result.rb

Instance Method Summary collapse

Constructor Details

#initialize(elements, query) ⇒ Result

Returns a new instance of Result.



8
9
10
11
12
13
# File 'lib/capybara/result.rb', line 8

def initialize(elements, query)
  @elements = elements
  @result = elements.select { |node| query.matches_filters?(node) }
  @rest = @elements - @result
  @query = query
end

Instance Method Details

#failure_messageObject



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/capybara/result.rb', line 34

def failure_message
  message = if @query.options[:count]
    "expected #{@query.description} to be found #{@query.options[:count]} #{declension("time", "times", @query.options[:count])}"
  elsif @query.options[:between]
    "expected #{@query.description} to be found between #{@query.options[:between].first} and #{@query.options[:between].last} times"
  elsif @query.options[:maximum]
    "expected #{@query.description} to be found at most #{@query.options[:maximum]} #{declension("time", "times", @query.options[:maximum])}"
  elsif @query.options[:minimum]
    "expected #{@query.description} to be found at least #{@query.options[:minimum]} #{declension("time", "times", @query.options[:minimum])}"
  else
    "expected to find #{@query.description}"
  end
  if count > 0
    message << ", found #{count} #{declension("match", "matches")}: " << @result.map(&:text).map(&:inspect).join(", ")
  else
    message << " but there were no matches"
  end
  unless @rest.empty?
    elements = @rest.map(&:text).map(&:inspect).join(", ")
    message << ". Also found " << elements << ", which matched the selector but not all filters."
  end
  message
end

#find!Object



21
22
23
24
# File 'lib/capybara/result.rb', line 21

def find!
  raise find_error if @result.size != 1
  @result.first
end

#find_errorObject



26
27
28
29
30
31
32
# File 'lib/capybara/result.rb', line 26

def find_error
  if @result.size == 0
    Capybara::ElementNotFound.new("Unable to find #{@query.description}")
  elsif @result.size > 1
    Capybara::Ambiguous.new("Ambiguous match, found #{size} elements matching #{@query.description}")
  end
end

#matches_count?Boolean

Returns:

  • (Boolean)


17
18
19
# File 'lib/capybara/result.rb', line 17

def matches_count?
  @query.matches_count?(@result.size)
end

#negative_failure_messageObject



58
59
60
# File 'lib/capybara/result.rb', line 58

def negative_failure_message
  "expected not to find #{@query.description}, but there #{declension("was", "were")} #{count} #{declension("match", "matches")}"
end