module Minitest::Assertions

def capture_subprocess_io

def capture_subprocess_io
  _synchronize do
    begin
      require "tempfile"
      captured_stdout, captured_stderr = Tempfile.new("out"), Tempfile.new("err")
      orig_stdout, orig_stderr = $stdout.dup, $stderr.dup
      $stdout.reopen captured_stdout
      $stderr.reopen captured_stderr
      yield
      $stdout.rewind
      $stderr.rewind
      return captured_stdout.read, captured_stderr.read
    ensure
      $stdout.reopen orig_stdout
      $stderr.reopen orig_stderr
      orig_stdout.close
      orig_stderr.close
      captured_stdout.close!
      captured_stderr.close!
    end
  end
end