Implement returning multiple values

This commit is contained in:
Michael Miller 2019-11-17 12:26:02 -07:00
parent 1a3f663b70
commit 6e287f864b
2 changed files with 27 additions and 0 deletions

View file

@ -0,0 +1,19 @@
require "./generic_arguments"
require "./generic_method_stub"
module Spectator::Mocks
class MultiValueMethodStub(ReturnType) < GenericMethodStub(ReturnType)
@index = 0
def initialize(name, source, @values : ReturnType, args = nil)
super(name, source, args)
raise ArgumentError.new("Values must have at least one item") if @values.size < 1
end
def call(_args : GenericArguments(T2, NT2), rt : RT.class) forall T2, NT2, RT
value = @values[@index]
@index += 1 if @index < @values.size - 1
value
end
end
end

View file

@ -8,10 +8,18 @@ module Spectator::Mocks
nil
end
def and_return
self
end
def and_return(value)
ValueMethodStub.new(@name, @source, value, @args)
end
def and_return(*values)
MultiValueMethodStub.new(@name, @source, values.to_a, @args)
end
def with(*args : *T, **opts : **NT) forall T, NT
args = GenericArguments.new(args, opts)
NilMethodStub.new(@name, @source, args)