class Object
  # Convenience helper for specs using ARGF.
  # Set @argf to an instance of ARGF.class with the given +argv+.
  # That instance must be used instead of ARGF as ARGF is global
  # and it is not always possible to reset its state correctly.
  #
  # The helper yields to the block and then close
  # the files open by the instance. Example:
  #
  #   describe "That" do
  #     it "does something" do
  #       argf ['a', 'b'] do
  #         # do something
  #       end
  #     end
  #   end
  def argf(argv)
    if argv.empty? or argv.length > 2
      raise "Only 1 or 2 filenames are allowed for the argf helper so files can be properly closed: #{argv.inspect}"
    end
    @argf ||= nil
    raise "Cannot nest calls to the argf helper" if @argf

    @argf = ARGF.class.new(*argv)
    @__mspec_saved_argf_file__ = @argf.file
    begin
      yield
    ensure
      file1 = @__mspec_saved_argf_file__
      file2 = @argf.file # Either the first file or the second
      file1.close if !file1.closed? and file1 != STDIN
      file2.close if !file2.closed? and file2 != STDIN
      @argf = nil
      @__mspec_saved_argf_file__ = nil
    end
  end
end
