class RSpec::Support::StdErrSplitter
Public Class Methods
new(original)
click to toggle source
# File lib/rspec/support/spec/stderr_splitter.rb, line 6 def initialize(original) @orig_stderr = original @output_tracker = ::StringIO.new @last_line = nil end
Public Instance Methods
==(other)
click to toggle source
# File lib/rspec/support/spec/stderr_splitter.rb, line 22 def ==(other) @orig_stderr == other end
has_output?()
click to toggle source
# File lib/rspec/support/spec/stderr_splitter.rb, line 57 def has_output? !output.empty? end
method_missing(name, *args, &block)
click to toggle source
# File lib/rspec/support/spec/stderr_splitter.rb, line 17 def method_missing(name, *args, &block) @output_tracker.__send__(name, *args, &block) if @output_tracker.respond_to?(name) @orig_stderr.__send__(name, *args, &block) end
output()
click to toggle source
# File lib/rspec/support/spec/stderr_splitter.rb, line 70 def output @output_tracker.string end
reopen(*args)
click to toggle source
# File lib/rspec/support/spec/stderr_splitter.rb, line 26 def reopen(*args) reset! @orig_stderr.reopen(*args) end
reset!()
click to toggle source
# File lib/rspec/support/spec/stderr_splitter.rb, line 61 def reset! @output_tracker = ::StringIO.new end
to_io()
click to toggle source
To work around JRuby error: can't convert RSpec::Support::StdErrSplitter
into String
# File lib/rspec/support/spec/stderr_splitter.rb, line 33 def to_io @orig_stderr.to_io end
verify_no_warnings!()
click to toggle source
# File lib/rspec/support/spec/stderr_splitter.rb, line 65 def verify_no_warnings! raise "Warnings were generated: #{output}" if has_output? reset! end
write(line)
click to toggle source
To work around JRuby error: TypeError: $stderr must have write method, RSpec::StdErrSplitter given
# File lib/rspec/support/spec/stderr_splitter.rb, line 39 def write(line) return if line =~ %r{^\S+/gems/\S+:\d+: warning:} # http://rubular.com/r/kqeUIZOfPG # Ruby 2.7.0 warnings from keyword argments span multiple lines, extend check above # to look for the next line. return if @last_line =~ %r{^\S+/gems/\S+:\d+: warning:} && line =~ %r{warning: The called method .* is defined here} # Ruby 2.7.0 complains about hashes used in place of keyword arguments # Aruba 0.14.2 uses this internally triggering that here return if line =~ %r{lib/ruby/2\.7\.0/fileutils\.rb:622: warning:} @orig_stderr.write(line) @output_tracker.write(line) ensure @last_line = line end