UNPKG

2.93 kBJavaScriptView Raw
1/**
2 * @fileoverview jUnit Reporter
3 * @author Jamund Ferguson
4 */
5"use strict";
6
7/*jshint node:true*/
8
9//------------------------------------------------------------------------------
10// Helper Functions
11//------------------------------------------------------------------------------
12
13function getMessageType(message, rules) {
14
15 // TODO: Get rule severity in a better way
16 var severity = null;
17
18 if (message.fatal) {
19 return "Error";
20 }
21
22 severity = rules[message.ruleId][0] || rules[message.ruleId];
23
24 if (severity === 2) {
25 return "Error";
26 }
27
28 return "Warning";
29}
30
31/**
32 * Replace special characters before write to output.
33 *
34 * Rules:
35 * - single quotes is the escape sequence for double-quotes
36 * - &lt; is the escape sequence for <
37 * - &gt; is the escape sequence for >
38 * - &quot; is the escape sequence for "
39 * - &apos; is the escape sequence for '
40 * - &amp; is the escape sequence for &
41 *
42 * @param {string} message message to escape
43 * @returns {string} escaped message
44 */
45function escapeSpecialCharacters(message) {
46
47 message = message || "";
48 var pairs = {
49 "&": "&amp;",
50 "\"": "&quot;",
51 "'": "&apos;",
52 "<": "&lt;",
53 ">": "&gt;"
54 };
55
56 return message.replace(/[&"'<>]/g, function(c) {
57 return pairs[c];
58 });
59
60}
61
62//------------------------------------------------------------------------------
63// Public Interface
64//------------------------------------------------------------------------------
65
66module.exports = function(results, config) {
67
68 var output = "",
69 rules = config.rules || {};
70
71 output += "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
72 output += "<testsuites>\n";
73
74 results.forEach(function(result) {
75
76 var messages = result.messages;
77
78 if (messages.length) {
79 output += "<testsuite package=\"org.eslint\" time=\"0\" tests=\"" + messages.length + "\" errors=\"" + messages.length + "\" name=\"" + result.filePath + "\">\n";
80 }
81
82 messages.forEach(function(message) {
83 var type = message.fatal ? "error" : "failure";
84 output += "<testcase time=\"0\" name=\"org.eslint." + (message.ruleId || "unknown") + "\">";
85 output += "<" + type + " message=\"" + escapeSpecialCharacters(message.message) + "\">";
86 output += "<![CDATA[";
87 output += "line " + (message.line || 0) + ", col ";
88 output += (message.column || 0) + ", " + getMessageType(message, rules);
89 output += " - " + escapeSpecialCharacters(message.message);
90 output += (message.ruleId ? " (" + message.ruleId + ")" : "");
91 output += "]]>";
92 output += "</" + type + ">";
93 output += "</testcase>\n";
94 });
95
96 if (messages.length) {
97 output += "</testsuite>\n";
98 }
99
100 });
101
102 output += "</testsuites>\n";
103
104 return output;
105};