Add support for any_args in DSL

This commit is contained in:
Michael Miller 2022-07-12 19:05:55 -06:00
parent 4aaa8db5e2
commit 3d7655a5d1
No known key found for this signature in database
GPG key ID: 32B47AE8F388A1FF
9 changed files with 32 additions and 12 deletions

View file

@ -103,4 +103,14 @@ Spectator.describe "Stub DSL", :smoke do
end
end
end
describe "#any_args" do
it "defines a stub with no arguments constraint" do
allow(dbl).to receive(:foo).with(any_args).and_return(5)
aggregate_failures do
expect(dbl.foo).to eq(5)
expect(dbl.foo(0)).to eq(5)
end
end
end
end

View file

@ -437,5 +437,10 @@ module Spectator::DSL
def no_args
::Spectator::Arguments.none
end
# Indicates any arguments can be used (no constraint).
def any_args
::Spectator::Arguments.any
end
end
end

View file

@ -25,6 +25,11 @@ module Spectator
# Instance of empty arguments.
class_getter none : AbstractArguments = capture
# Returns unconstrained arguments.
def self.any : AbstractArguments?
nil.as(AbstractArguments?)
end
# Returns the positional argument at the specified index.
def [](index : Int)
@args[index]

View file

@ -12,7 +12,7 @@ module Spectator
end
# Returns a new stub with constrained arguments.
def with_constraint(constraint : AbstractArguments)
def with_constraint(constraint : AbstractArguments?)
self.class.new(method, @exception, constraint, location)
end

View file

@ -16,7 +16,7 @@ module Spectator
end
# Returns a new stub with constrained arguments.
def with_constraint(constraint : AbstractArguments)
def with_constraint(constraint : AbstractArguments?)
self.class.new(method, @values, constraint, location)
end

View file

@ -9,7 +9,7 @@ module Spectator
end
# Returns a new stub with constrained arguments.
def with_constraint(constraint : AbstractArguments)
def with_constraint(constraint : AbstractArguments?)
self.class.new(method, constraint, location)
end
end

View file

@ -11,7 +11,7 @@ module Spectator
end
# Returns a new stub with constrained arguments.
def with_constraint(constraint : AbstractArguments)
def with_constraint(constraint : AbstractArguments?)
self.class.new(method, @proc, constraint, location)
end

View file

@ -4,18 +4,18 @@ module Spectator
# Mixin intended for `Stub` to return new, modified stubs.
module StubModifiers
# Returns a new stub of the same type with constrained arguments.
abstract def with_constraint(constraint : AbstractArguments)
abstract def with_constraint(constraint : AbstractArguments?)
# :ditto:
@[AlwaysInline]
def with(constraint : AbstractArguments?)
with_constraint(constraint)
end
# :ditto:
def with(*args, **kwargs)
constraint = Arguments.new(args, kwargs).as(AbstractArguments)
self.with_constraint(constraint)
end
# :ditto:
@[AlwaysInline]
def with(constraint : AbstractArguments)
with_constraint(constraint)
end
end
end

View file

@ -12,7 +12,7 @@ module Spectator
end
# Returns a new stub with constrained arguments.
def with_constraint(constraint : AbstractArguments)
def with_constraint(constraint : AbstractArguments?)
self.class.new(method, @value, constraint, location)
end