Class: RuboCop::Formatter::JUnitFormatter Private

Inherits:
BaseFormatter show all
Defined in:
lib/rubocop/formatter/junit_formatter.rb

Overview

This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.

This formatter formats the report data in JUnit format.

Instance Attribute Summary

Attributes inherited from BaseFormatter

#options, #output

Instance Method Summary collapse

Methods inherited from BaseFormatter

#file_started, #started

Constructor Details

#initialize(output, options = {}) ⇒ JUnitFormatter

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a new instance of JUnitFormatter.



18
19
20
21
22
23
24
25
26
27
# File 'lib/rubocop/formatter/junit_formatter.rb', line 18

def initialize(output, options = {})
  super

  @document = REXML::Document.new.tap { |document| document << REXML::XMLDecl.new }
  testsuites = REXML::Element.new('testsuites', @document)
  testsuite = REXML::Element.new('testsuite', testsuites)
  @testsuite = testsuite.tap { |element| element.add_attributes('name' => 'rubocop') }

  reset_count
end

Instance Method Details

#add_testcase_element_to_testsuite_element(file, target_offenses, cop) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



55
56
57
58
59
60
61
62
# File 'lib/rubocop/formatter/junit_formatter.rb', line 55

def add_testcase_element_to_testsuite_element(file, target_offenses, cop)
  REXML::Element.new('testcase', @testsuite).tap do |testcase|
    testcase.attributes['classname'] = classname_attribute_value(file)
    testcase.attributes['name'] = cop.cop_name

    add_failure_to(testcase, target_offenses, cop.cop_name)
  end
end

#classname_attribute_value(file) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



64
65
66
# File 'lib/rubocop/formatter/junit_formatter.rb', line 64

def classname_attribute_value(file)
  file.gsub(/\.rb\Z/, '').gsub("#{Dir.pwd}/", '').tr('/', '.')
end

#file_finished(file, offenses) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/rubocop/formatter/junit_formatter.rb', line 29

def file_finished(file, offenses)
  @inspected_file_count += 1

  # TODO: Returns all cops with the same behavior as
  # the original rubocop-junit-formatter.
  # https://github.com/mikian/rubocop-junit-formatter/blob/v0.1.4/lib/rubocop/formatter/junit_formatter.rb#L9
  #
  # In the future, it would be preferable to return only enabled cops.
  Cop::Registry.all.each do |cop|
    target_offenses = offenses_for_cop(offenses, cop)
    @offense_count += target_offenses.count

    next unless relevant_for_output?(options, target_offenses)

    add_testcase_element_to_testsuite_element(file, target_offenses, cop)
  end
end

#finished(_inspected_files) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



68
69
70
71
# File 'lib/rubocop/formatter/junit_formatter.rb', line 68

def finished(_inspected_files)
  @testsuite.add_attributes('tests' => @inspected_file_count, 'failures' => @offense_count)
  @document.write(output, 2)
end

#offenses_for_cop(all_offenses, cop) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



51
52
53
# File 'lib/rubocop/formatter/junit_formatter.rb', line 51

def offenses_for_cop(all_offenses, cop)
  all_offenses.select { |offense| offense.cop_name == cop.cop_name }
end

#relevant_for_output?(options, target_offenses) ⇒ Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:

  • (Boolean)


47
48
49
# File 'lib/rubocop/formatter/junit_formatter.rb', line 47

def relevant_for_output?(options, target_offenses)
  !options[:display_only_failed] || target_offenses.any?
end