Module: JunitParser
- Defined in:
- lib/assets/junit_parser.rb
Class Method Summary collapse
- .add_code(codefragment) ⇒ Object
- .add_failed_testcase(name, failures) ⇒ Object
- .add_failure(message, type, text) ⇒ Object
- .add_properties(property_array, value_array) ⇒ Object
- .add_success_testcase(name) ⇒ Object
- .add_testsuite(name, testcases) ⇒ Object
- .construct_failure_mes(attributes, values) ⇒ Object
-
.create_junit_xml(testsuite, result_file_name) ⇒ Object
create root xml content.
- .create_testsuites(testsuites) ⇒ Object
-
.create_xml(xml_data_custom, result_file_name) ⇒ Object
For all parsers =================.
- .get_failure_type(str) ⇒ Object
- .insert_attribute(attribute, value) ⇒ Object
- .parse_code_duplications(data_hash) ⇒ Object
- .parse_inspected_files(file_list) ⇒ Object
-
.parse_json(file) ⇒ Object
Rubocop-json Parser ================.
- .parse_location(location) ⇒ Object
-
.parse_main_json(data_hash) ⇒ Object
create main xml content.
-
.parse_xcode_log(file, project, is_warn) ⇒ Object
Xcode-log Parser ================.
-
.parse_xml(file) ⇒ Object
CPD-xml Parser ==================.
- .xml_level(level) ⇒ Object
Class Method Details
.add_code(codefragment) ⇒ Object
74 75 76 |
# File 'lib/assets/junit_parser.rb', line 74 def self.add_code(codefragment) "<![CDATA[#{codefragment}]]>" end |
.add_failed_testcase(name, failures) ⇒ Object
34 35 36 37 |
# File 'lib/assets/junit_parser.rb', line 34 def self.add_failed_testcase(name, failures) "#{xml_level(2)}<testcase name='#{name}'>" \ "#{failures}#{xml_level(2)}</testcase>" end |
.add_failure(message, type, text) ⇒ Object
43 44 45 46 47 48 |
# File 'lib/assets/junit_parser.rb', line 43 def self.add_failure(, type, text) "#{xml_level(3)}<failure #{insert_attribute('type', type)} status='failed' " \ "#{insert_attribute('message', )}>" \ "#{text}" \ "#{xml_level(3)}</failure>" end |
.add_properties(property_array, value_array) ⇒ Object
50 51 52 53 54 55 56 57 58 59 |
# File 'lib/assets/junit_parser.rb', line 50 def self.add_properties(property_array, value_array) properties = "#{xml_level(2)}<properties>" property_array.each_with_index do |property, index| value = value_array[index] unless value.nil? properties += "#{xml_level(3)}<property name='#{property}' value='#{value}' />" end end properties += "#{xml_level(2)}</properties>" end |
.add_success_testcase(name) ⇒ Object
39 40 41 |
# File 'lib/assets/junit_parser.rb', line 39 def self.add_success_testcase(name) "#{xml_level(2)}<testcase name='#{name}' status='success'/>" end |
.add_testsuite(name, testcases) ⇒ Object
28 29 30 31 32 |
# File 'lib/assets/junit_parser.rb', line 28 def self.add_testsuite(name, testcases) "#{xml_level(1)}<testsuite name='#{name}'>" \ "#{testcases}" \ "#{xml_level(1)}</testsuite>" end |
.construct_failure_mes(attributes, values) ⇒ Object
61 62 63 64 65 66 67 68 |
# File 'lib/assets/junit_parser.rb', line 61 def self.construct_failure_mes(attributes, values) properties = xml_level(0).to_s attributes.each_with_index do |property, index| value = values[index] properties += format("#{xml_level(4)}%-18s: %s", property, value) unless value.nil? end properties end |
.create_junit_xml(testsuite, result_file_name) ⇒ Object
create root xml content
95 96 97 98 |
# File 'lib/assets/junit_parser.rb', line 95 def self.create_junit_xml(testsuite, result_file_name) full_data = create_testsuites(testsuite) create_xml(full_data, result_file_name) end |
.create_testsuites(testsuites) ⇒ Object
24 25 26 |
# File 'lib/assets/junit_parser.rb', line 24 def self.create_testsuites(testsuites) "#{xml_level(0)}<testsuites>#{testsuites}#{xml_level(0)}</testsuites>" end |
.create_xml(xml_data_custom, result_file_name) ⇒ Object
For all parsers =================
16 17 18 19 20 21 22 |
# File 'lib/assets/junit_parser.rb', line 16 def self.create_xml(xml_data_custom, result_file_name) xml_data = '<?xml version="1.0" encoding="UTF-8"?>' xml_data += xml_data_custom File.open(result_file_name, 'w') do |f| f.write(xml_data) end end |
.get_failure_type(str) ⇒ Object
78 79 80 81 82 |
# File 'lib/assets/junit_parser.rb', line 78 def self.get_failure_type(str) failure_type = str[/\[(.*?)\]/, 1] failure_type = '-W' if failure_type.nil? failure_type end |
.insert_attribute(attribute, value) ⇒ Object
70 71 72 |
# File 'lib/assets/junit_parser.rb', line 70 def self.insert_attribute(attribute, value) value == '' ? '' : "#{attribute}='#{value}'" end |
.parse_code_duplications(data_hash) ⇒ Object
196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 |
# File 'lib/assets/junit_parser.rb', line 196 def self.parse_code_duplications(data_hash) xml = '' duplications = data_hash['pmd_cpd']['duplication'] if duplications.kind_of?(Array) index = 1 duplications.each do |error| parsed_files = parse_inspected_files(error['file']) failure = add_failure("lines:#{error['lines']} tokens:#{error['tokens']} #{xml_level(3)}files:#{parsed_files}", '', "\n#{add_code(error['codefragment'])}") xml += add_failed_testcase("duplication #{index}", failure) index += 1 end else parsed_files = parse_inspected_files(duplications['file']) failure = add_failure("lines:#{duplications['lines']} tokens:#{duplications['tokens']} #{xml_level(3)}files:#{parsed_files}", '', "\n #{add_code(duplications['codefragment'])}") xml += add_failed_testcase('single duplication', failure) end xml end |
.parse_inspected_files(file_list) ⇒ Object
216 217 218 219 220 221 222 223 224 |
# File 'lib/assets/junit_parser.rb', line 216 def self.parse_inspected_files(file_list) index = 1 file_list_info = [] file_list.each do |file| file_list_info.push("File #{index}: #{file['path']}::#{file['line']}") index += 1 end file_list_info end |
.parse_json(file) ⇒ Object
Rubocop-json Parser ================
139 140 141 142 143 144 145 146 147 148 149 150 |
# File 'lib/assets/junit_parser.rb', line 139 def self.parse_json(file) data_read = File.read(file) data_hash = Crack::JSON.parse(data_read) keys = data_hash['metadata'].keys.zip(data_hash['summary'].keys).flatten.compact values = data_hash['metadata'].values.zip(data_hash['summary'].values).flatten.compact properties = add_properties(keys, values) testcase = parse_main_json(data_hash) properties + testcase end |
.parse_location(location) ⇒ Object
176 177 178 |
# File 'lib/assets/junit_parser.rb', line 176 def self.parse_location(location) "#{location['line']}:#{location['column']}:#{location['length']}" end |
.parse_main_json(data_hash) ⇒ Object
create main xml content
153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 |
# File 'lib/assets/junit_parser.rb', line 153 def self.parse_main_json(data_hash) xml = '' data_hash['files'].each do |inspected_file| error_text = '' errors = inspected_file['offenses'] if errors.empty? xml += add_success_testcase((inspected_file['path']).to_s) else errors.each do |error| error_text += construct_failure_mes( ['Error isCorrected', 'Error ClassType', 'Error Line', 'Error Message'], [error['corrected'], "#{error['cop_name']} (#{error['severity']})", parse_location(error['location']), error['message'].tr("\n", '')] ) end # TODO: corrected:6 failded:0 (if needed this info) failures = add_failure('lineformat=line:column:length', '', error_text) xml += add_failed_testcase((inspected_file['path']).to_s, failures) end end xml end |
.parse_xcode_log(file, project, is_warn) ⇒ Object
Xcode-log Parser ================
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 |
# File 'lib/assets/junit_parser.rb', line 104 def self.parse_xcode_log(file, project, is_warn) if is_warn error_text = '' File.open(file).each do |line| if line =~ /warning:|error:/ warning_params = line.split(':') if warning_params.count == 5 error_text += construct_failure_mes( ['Error ClassType', 'Error in File', 'Error Line', 'Error Message'], [get_failure_type(warning_params[4]), warning_params[0].tr('<', '').tr('>', ''), "#{warning_params[1]}:#{warning_params[2]}", warning_params[4].tr("\n", '')] ) else error_text += construct_failure_mes( ['Error ClassType', 'Error Message'], ['-W', line.tr("\n", '')] ) end end next unless line =~ /BCEROR/ error_text += construct_failure_mes(['Error ClassType', 'Error in File', 'Error Message'], [get_failure_type(line), 'project configuration', line.tr("\n", '')]) end failures = add_failure('', '', error_text) add_failed_testcase(project, failures) else add_success_testcase(project) end end |
.parse_xml(file) ⇒ Object
CPD-xml Parser ==================
184 185 186 187 188 189 190 191 192 193 194 |
# File 'lib/assets/junit_parser.rb', line 184 def self.parse_xml(file) data_read = File.read(file) data_hash = Crack::XML.parse(data_read) if data_hash.empty? or data_hash['pmd_cpd']==nil puts 'empty data_hash' add_success_testcase('casino duplications') else parse_code_duplications(data_hash) end end |
.xml_level(level) ⇒ Object
84 85 86 87 88 89 90 91 92 |
# File 'lib/assets/junit_parser.rb', line 84 def self.xml_level(level) levelstr = "\n" i = 1 while i < level levelstr += "\s\s" i += 1 end levelstr end |