Skip to content

Instantly share code, notes, and snippets.

@quantizor
Last active May 31, 2016 03:31
Show Gist options
  • Save quantizor/265698eaa52ae8f7ed73be15e9c049be to your computer and use it in GitHub Desktop.
Save quantizor/265698eaa52ae8f7ed73be15e9c049be to your computer and use it in GitHub Desktop.
Part 1 of 2: Merge Cobertura XML & Read the Source Files for Line Coverage
require 'nokogiri'
require 'digest'
files = ARGV
source_files = []
cwd_prefix = Dir.pwd + '/'
unless files.empty?
files.each do |filename|
xml = Nokogiri::XML(File.open(filename).read, 'r')
source_path = xml.css('sources source')[0].content
xml.css('classes class').each do |klass|
klass_path = klass.attr('filename')
klass_absolute_path = source_path + '/' + klass_path
klass_repo_path = klass_absolute_path[
cwd_prefix.length..klass_absolute_path.length
]
klass_file = File.open(klass_absolute_path, 'r')
klass_file_num_lines = klass_file.each_line.count
klass_file_md5 = Digest::MD5.hexdigest(klass_file.read)
klass_file.close
klass_line_coverage = Array.new(klass_file_num_lines)
klass.css('lines line').each do |line|
klass_line_coverage[line.attr('number').to_i - 1] = line.attr('hits').to_i
end
source_files.push({
:name => klass_repo_path,
:source_digest => klass_file_md5,
:coverage => klass_line_coverage,
})
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment