Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 3 additions & 7 deletions lib/flexmock/partial_mock.rb
Original file line number Diff line number Diff line change
Expand Up @@ -276,7 +276,7 @@ def initialize_stub(recorder, expectations_block)
expectation_blocks = @initialize_expectation_blocks = Array.new
expectation_recorders = @initialize_expectation_recorders = Array.new
@initialize_override = Module.new do
define_method :initialize do |*args, **kw, &block|
define_method :initialize do |*args, &block|
if self.class.respond_to?(:__flexmock_proxy) && (mock = self.class.__flexmock_proxy)
container = mock.flexmock_container
mock = container.flexmock(self)
Expand All @@ -287,12 +287,8 @@ def initialize_stub(recorder, expectations_block)
r.apply(mock)
end
end
if kw.empty?
# Workaround kw arg support for ruby < 2.7
super(*args, &block)
else
super(*args, **kw, &block)
end
# Workaround kw arg support for ruby < 2.7
super(*args, &block)
end
end
override = @initialize_override
Expand Down
57 changes: 56 additions & 1 deletion test/partial_mock_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -797,5 +797,60 @@ def test_interaction_between_signature_verification_and_based_partials
FlexMock.partials_are_based = false
FlexMock.partials_verify_signatures = false
end
end

class InitializeWithKwargs
attr_reader :some, :args, :kw

def initialize(some, args, **kw)
@some = some
@args = args
@kw = kw
end
end

def test_initialize_stub_handles_keyword_arguments_on_initialize
flexmock(InitializeWithKwargs)
.new_instances.should_receive(:test)
obj = InitializeWithKwargs.new(21, 42, kw: 84)
assert_equal 21, obj.some
assert_equal 42, obj.args
assert_equal({ kw: 84 }, obj.kw)
end

def test_initialize_stub_handles_empty_keyword_arguments_on_initialize
flexmock(InitializeWithKwargs)
.new_instances.should_receive(:test)
obj = InitializeWithKwargs.new(21, 42)
assert_equal 21, obj.some
assert_equal 42, obj.args
assert_equal({}, obj.kw)
end

class InitializeWithTrailingHashArg
attr_reader :some, :args, :kw

def initialize(some, args, kw)
@some = some
@args = args
@kw = kw
end
end

def test_initialize_stub_handles_a_trailing_hash_on_initialize
flexmock(InitializeWithTrailingHashArg)
.new_instances.should_receive(:test)
obj = InitializeWithTrailingHashArg.new(21, 42, kw: 84)
assert_equal 21, obj.some
assert_equal 42, obj.args
assert_equal({ kw: 84 }, obj.kw)
end

def test_initialize_stub_handles_an_empty_trailing_hash_on_initialize
flexmock(InitializeWithTrailingHashArg)
.new_instances.should_receive(:test)
obj = InitializeWithTrailingHashArg.new(21, 42, {})
assert_equal 21, obj.some
assert_equal 42, obj.args
assert_equal({}, obj.kw)
end
end