class RuboCop::Cop::RSpec::ExpectOutput


expect { my_app.print_report }.to output(‘Hello World’).to_stdout
# good
expect($stdout.string).to eq(‘Hello World’)
$stdout = STDOUT
my_app.print_report
$stdout = StringIO.new
# bad
@example
Checks for opportunities to use ‘expect { … }.to output`.

def inside_example_scope?(node)

don't matter.
within a `before(:all)` or otherwise outside of an example
an expectation. Therefore, assignments to stderr or stdout
we only care about situations where you would replace with
We want to encourage using `expect { ... }.to output` so

Detect if we are inside the scope of a single example
def inside_example_scope?(node)
  return false if node.nil? || example_group?(node)
  return true if example?(node)
  return RuboCop::RSpec::Hook.new(node).example? if hook?(node)
  inside_example_scope?(node.parent)
end

def on_gvasgn(node)

def on_gvasgn(node)
  return unless inside_example_scope?(node)
  name = node.name[1..]
  return unless name.eql?('stdout') || name.eql?('stderr')
  add_offense(node.loc.name, message: format(MSG, name: name))
end