class SimpleCov::Formatter::CoberturaFormatter
Constants
- DTD_URL
- RESULT_FILE_NAME
- VERSION
Public Instance Methods
format(result)
click to toggle source
# File lib/simplecov-cobertura.rb, line 15 def format(result) xml_doc = result_to_xml result result_path = File.join(SimpleCov.coverage_path, RESULT_FILE_NAME) formatter = REXML::Formatters::Pretty.new formatter.compact = true string_io = StringIO.new formatter.write(xml_doc, string_io) xml_str = string_io.string File.write(result_path, xml_str) puts "Coverage report generated for #{result.command_name} to #{result_path}. #{coverage_output(result)}" xml_str end
Private Instance Methods
coverage_output(result)
click to toggle source
# File lib/simplecov-cobertura.rb, line 118 def coverage_output(result) "#{result.covered_lines} / #{result.covered_lines + result.missed_lines} LOC (#{result.covered_percent.round(2)}%) covered." end
project_root()
click to toggle source
# File lib/simplecov-cobertura.rb, line 126 def project_root @project_root ||= Pathname.new(SimpleCov.root) end
resolve_filename(filename)
click to toggle source
# File lib/simplecov-cobertura.rb, line 122 def resolve_filename(filename) Pathname.new(filename).relative_path_from(project_root).to_s end
result_to_xml(result)
click to toggle source
# File lib/simplecov-cobertura.rb, line 31 def result_to_xml(result) doc = REXML::Document.new set_xml_head doc.context[:attribute_quote] = :quote doc.add_element REXML::Element.new('coverage') coverage = doc.root set_coverage_attributes(coverage, result) coverage.add_element(sources = REXML::Element.new('sources')) sources.add_element(source = REXML::Element.new('source')) source.text = SimpleCov.root coverage.add_element(packages = REXML::Element.new('packages')) if result.groups.empty? groups = {File.basename(SimpleCov.root) => result.files} else groups = result.groups end groups.map do |name, files| packages.add_element(package = REXML::Element.new('package')) set_package_attributes(package, name, files) package.add_element(classes = REXML::Element.new('classes')) files.each do |file| classes.add_element(class_ = REXML::Element.new('class')) set_class_attributes(class_, file) class_.add_element(REXML::Element.new('methods')) class_.add_element(lines = REXML::Element.new('lines')) file.lines.each do |file_line| if file_line.covered? || file_line.missed? lines.add_element(line = REXML::Element.new('line')) set_line_attributes(line, file_line) end end end end doc end
set_class_attributes(class_, file)
click to toggle source
# File lib/simplecov-cobertura.rb, line 96 def set_class_attributes(class_, file) filename = file.filename class_.attributes['name'] = File.basename(filename, '.*') class_.attributes['filename'] = resolve_filename(filename) class_.attributes['line-rate'] = (file.covered_percent/100).round(2).to_s class_.attributes['branch-rate'] = '0' class_.attributes['complexity'] = '0' end
set_coverage_attributes(coverage, result)
click to toggle source
# File lib/simplecov-cobertura.rb, line 76 def set_coverage_attributes(coverage, result) coverage.attributes['line-rate'] = (result.covered_percent/100).round(2).to_s coverage.attributes['branch-rate'] = '0' coverage.attributes['lines-covered'] = result.covered_lines.to_s coverage.attributes['lines-valid'] = (result.covered_lines + result.missed_lines).to_s coverage.attributes['branches-covered'] = '0' coverage.attributes['branches-valid'] = '0' coverage.attributes['branch-rate'] = '0' coverage.attributes['complexity'] = '0' coverage.attributes['version'] = '0' coverage.attributes['timestamp'] = Time.now.to_i.to_s end
set_line_attributes(line, file_line)
click to toggle source
# File lib/simplecov-cobertura.rb, line 105 def set_line_attributes(line, file_line) line.attributes['number'] = file_line.line_number.to_s line.attributes['branch'] = 'false' line.attributes['hits'] = file_line.coverage.to_s end
set_package_attributes(package, name, result)
click to toggle source
# File lib/simplecov-cobertura.rb, line 89 def set_package_attributes(package, name, result) package.attributes['name'] = name package.attributes['line-rate'] = (result.covered_percent/100).round(2).to_s package.attributes['branch-rate'] = '0' package.attributes['complexity'] = '0' end
set_xml_head(lines=[])
click to toggle source
# File lib/simplecov-cobertura.rb, line 111 def set_xml_head(lines=[]) lines << "<?xml version=\"1.0\"?>" lines << "<!DOCTYPE coverage SYSTEM \"#{DTD_URL}\">" lines << "<!-- Generated by simplecov-cobertura version #{VERSION} (https://github.com/dashingrocket/simplecov-cobertura) -->" lines.join("\n") end