module RubyMemcheck::TestTaskReporter

def output_valgrind_errors

def output_valgrind_errors
  @errors.each do |error|
    configuration.output_io.puts error
    configuration.output_io.puts
  end
end

def parse_valgrind_output(xml_files)

def parse_valgrind_output(xml_files)
  require "nokogiri"
  @errors = []
  xml_files.each do |file|
    Nokogiri::XML::Reader(File.open(file)).each do |node|
      next unless node.name == "error" && node.node_type == Nokogiri::XML::Reader::TYPE_ELEMENT
      error_xml = Nokogiri::XML::Document.parse(node.outer_xml).root
      error = ValgrindError.new(configuration, error_xml)
      next if error.skip?
      @errors << error
    end
  end
end

def remove_valgrind_xml_files(xml_files)

def remove_valgrind_xml_files(xml_files)
  xml_files.each do |file|
    File.delete(file)
  end
end

def report_valgrind_errors

def report_valgrind_errors
  if configuration.valgrind_xml_dir
    xml_files = valgrind_xml_files
    parse_valgrind_output(xml_files)
    remove_valgrind_xml_files(xml_files)
    unless errors.empty?
      output_valgrind_errors
      raise VALGRIND_REPORT_MSG
    end
  end
end

def valgrind_xml_files

def valgrind_xml_files
  Dir[File.join(configuration.valgrind_xml_dir, "*")]
end