mirror of
https://gitea.invidious.io/iv-org/shard-spectator.git
synced 2024-08-15 00:53:35 +00:00
105 lines
3.2 KiB
Crystal
105 lines
3.2 KiB
Crystal
|
require "./src/spectator"
|
||
|
|
||
|
module Thing
|
||
|
def self.original_method
|
||
|
:original
|
||
|
end
|
||
|
|
||
|
def self.default_method
|
||
|
:original
|
||
|
end
|
||
|
|
||
|
def self.stubbed_method(_value = 42)
|
||
|
:original
|
||
|
end
|
||
|
|
||
|
macro finished
|
||
|
def self.debug
|
||
|
{% begin %}puts "Methods: ", {{@type.methods.map &.name.stringify}} of String{% end %}
|
||
|
{% begin %}puts "Class Methods: ", {{@type.class.methods.map &.name.stringify}} of String{% end %}
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
Thing.debug
|
||
|
|
||
|
# Spectator::Mock.define_subtype(:module, Thing, MockThing, default_method: :default) do
|
||
|
# stub def stubbed_method(_value = 42)
|
||
|
# :stubbed
|
||
|
# end
|
||
|
# end
|
||
|
|
||
|
# Spectator.describe "Mock modules" do
|
||
|
# let(mock) { MockThing }
|
||
|
|
||
|
# after { mock._spectator_clear_stubs }
|
||
|
|
||
|
# it "overrides an existing method" do
|
||
|
# stub = Spectator::ValueStub.new(:original_method, :override)
|
||
|
# expect { mock._spectator_define_stub(stub) }.to change { mock.original_method }.from(:original).to(:override)
|
||
|
# end
|
||
|
|
||
|
# it "doesn't affect other methods" do
|
||
|
# stub = Spectator::ValueStub.new(:stubbed_method, :override)
|
||
|
# expect { mock._spectator_define_stub(stub) }.to_not change { mock.original_method }
|
||
|
# end
|
||
|
|
||
|
# it "replaces an existing default stub" do
|
||
|
# stub = Spectator::ValueStub.new(:default_method, :override)
|
||
|
# expect { mock._spectator_define_stub(stub) }.to change { mock.default_method }.to(:override)
|
||
|
# end
|
||
|
|
||
|
# it "replaces an existing stubbed method" do
|
||
|
# stub = Spectator::ValueStub.new(:stubbed_method, :override)
|
||
|
# expect { mock._spectator_define_stub(stub) }.to change { mock.stubbed_method }.to(:override)
|
||
|
# end
|
||
|
|
||
|
# def restricted(thing : Thing.class)
|
||
|
# thing.default_method
|
||
|
# end
|
||
|
|
||
|
# describe "._spectator_clear_stubs" do
|
||
|
# before do
|
||
|
# stub = Spectator::ValueStub.new(:original_method, :override)
|
||
|
# mock._spectator_define_stub(stub)
|
||
|
# end
|
||
|
|
||
|
# it "removes previously defined stubs" do
|
||
|
# expect { mock._spectator_clear_stubs }.to change { mock.original_method }.from(:override).to(:original)
|
||
|
# end
|
||
|
# end
|
||
|
|
||
|
# describe "._spectator_calls" do
|
||
|
# before { mock._spectator_clear_calls }
|
||
|
|
||
|
# # Retrieves symbolic names of methods called on a mock.
|
||
|
# def called_method_names(mock)
|
||
|
# mock._spectator_calls.map(&.method)
|
||
|
# end
|
||
|
|
||
|
# it "stores calls to original methods" do
|
||
|
# expect { mock.original_method }.to change { called_method_names(mock) }.from(%i[]).to(%i[original_method])
|
||
|
# end
|
||
|
|
||
|
# it "stores calls to default methods" do
|
||
|
# expect { mock.default_method }.to change { called_method_names(mock) }.from(%i[]).to(%i[default_method])
|
||
|
# end
|
||
|
|
||
|
# it "stores calls to stubbed methods" do
|
||
|
# expect { mock.stubbed_method }.to change { called_method_names(mock) }.from(%i[]).to(%i[stubbed_method])
|
||
|
# end
|
||
|
|
||
|
# it "stores multiple calls to the same stub" do
|
||
|
# mock.stubbed_method
|
||
|
# expect { mock.stubbed_method }.to change { called_method_names(mock) }.from(%i[stubbed_method]).to(%i[stubbed_method stubbed_method])
|
||
|
# end
|
||
|
|
||
|
# it "stores arguments for a call" do
|
||
|
# mock.stubbed_method(5)
|
||
|
# args = Spectator::Arguments.capture(5)
|
||
|
# call = mock._spectator_calls.first
|
||
|
# expect(call.arguments).to eq(args)
|
||
|
# end
|
||
|
# end
|
||
|
# end
|