You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
82 lines
2.7 KiB
82 lines
2.7 KiB
/** |
|
* @fileoverview jUnit Reporter |
|
* @author Jamund Ferguson |
|
*/ |
|
"use strict"; |
|
|
|
const xmlEscape = require("../xml-escape"); |
|
const path = require("path"); |
|
|
|
//------------------------------------------------------------------------------ |
|
// Helper Functions |
|
//------------------------------------------------------------------------------ |
|
|
|
/** |
|
* Returns the severity of warning or error |
|
* @param {Object} message message object to examine |
|
* @returns {string} severity level |
|
* @private |
|
*/ |
|
function getMessageType(message) { |
|
if (message.fatal || message.severity === 2) { |
|
return "Error"; |
|
} |
|
return "Warning"; |
|
|
|
} |
|
|
|
/** |
|
* Returns a full file path without extension |
|
* @param {string} filePath input file path |
|
* @returns {string} file path without extension |
|
* @private |
|
*/ |
|
function pathWithoutExt(filePath) { |
|
return path.join(path.dirname(filePath), path.basename(filePath, path.extname(filePath))); |
|
} |
|
|
|
//------------------------------------------------------------------------------ |
|
// Public Interface |
|
//------------------------------------------------------------------------------ |
|
|
|
module.exports = function(results) { |
|
|
|
let output = ""; |
|
|
|
output += "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"; |
|
output += "<testsuites>\n"; |
|
|
|
results.forEach(result => { |
|
|
|
const messages = result.messages; |
|
const classname = pathWithoutExt(result.filePath); |
|
|
|
if (messages.length > 0) { |
|
output += `<testsuite package="org.eslint" time="0" tests="${messages.length}" errors="${messages.length}" name="${result.filePath}">\n`; |
|
messages.forEach(message => { |
|
const type = message.fatal ? "error" : "failure"; |
|
|
|
output += `<testcase time="0" name="org.eslint.${message.ruleId || "unknown"}" classname="${classname}">`; |
|
output += `<${type} message="${xmlEscape(message.message || "")}">`; |
|
output += "<![CDATA["; |
|
output += `line ${message.line || 0}, col `; |
|
output += `${message.column || 0}, ${getMessageType(message)}`; |
|
output += ` - ${xmlEscape(message.message || "")}`; |
|
output += (message.ruleId ? ` (${message.ruleId})` : ""); |
|
output += "]]>"; |
|
output += `</${type}>`; |
|
output += "</testcase>\n"; |
|
}); |
|
output += "</testsuite>\n"; |
|
} else { |
|
output += `<testsuite package="org.eslint" time="0" tests="1" errors="0" name="${result.filePath}">\n`; |
|
output += `<testcase time="0" name="${result.filePath}" classname="${classname}" />\n`; |
|
output += "</testsuite>\n"; |
|
} |
|
|
|
}); |
|
|
|
output += "</testsuites>\n"; |
|
|
|
return output; |
|
};
|
|
|