blob: 2e31bc93afed609950afd298a9340a3f520e6fe0 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
class BeComputedByMatcher
def initialize(sym, *args)
@method = sym
@args = args
end
def matches?(array)
array.each do |line|
@receiver = line.shift
@value = line.pop
@arguments = line
@arguments += @args
@actual = @receiver.send(@method, *@arguments)
return false unless @actual == @value
end
return true
end
def method_call
method_call = "#{@receiver.inspect}.#{@method}"
unless @arguments.empty?
method_call = "#{method_call} from #{@arguments.map { |x| x.inspect }.join(", ")}"
end
method_call
end
def failure_message
["Expected #{@value.inspect}", "to be computed by #{method_call} (computed #{@actual.inspect} instead)"]
end
end
module MSpecMatchers
private def be_computed_by(sym, *args)
BeComputedByMatcher.new(sym, *args)
end
end
|