diff --git a/lib/rspec/core/output_wrapper.rb b/lib/rspec/core/output_wrapper.rb index b655025cb..8e07aa875 100644 --- a/lib/rspec/core/output_wrapper.rb +++ b/lib/rspec/core/output_wrapper.rb @@ -15,13 +15,13 @@ def respond_to?(name, priv=false) end def method_missing(name, *args, &block) - output.send(name, *args, &block) + output.__send__(name, *args, &block) end # Redirect calls for IO interface methods IO.instance_methods(false).each do |method| define_method(method) do |*args, &block| - output.send(method, *args, &block) + output.__send__(method, *args, &block) end end end diff --git a/spec/rspec/core/output_wrapper_spec.rb b/spec/rspec/core/output_wrapper_spec.rb index 8ed134135..19d8beb02 100644 --- a/spec/rspec/core/output_wrapper_spec.rb +++ b/spec/rspec/core/output_wrapper_spec.rb @@ -9,6 +9,11 @@ module RSpec::Core expect(output.string).to eq("message\nanother message").and eq(wrapper.string) end + it 'proxies IO instance methods with __send__ to be compatiable with IOs that redefine send' do + expect(output).to receive(:__send__).with(:puts, 'message') + wrapper.puts('message') + end + describe '#output=' do let(:another_output) { StringIO.new }