1 |
|
2 |
|
3 |
|
4 |
|
5 | "use strict";
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 | function getMessageType(message, rules) {
|
14 |
|
15 |
|
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 |
|
33 |
|
34 |
|
35 |
|
36 |
|
37 |
|
38 |
|
39 |
|
40 |
|
41 |
|
42 |
|
43 |
|
44 |
|
45 | function escapeSpecialCharacters(message) {
|
46 |
|
47 | message = message || "";
|
48 | var pairs = {
|
49 | "&": "&",
|
50 | "\"": """,
|
51 | "'": "'",
|
52 | "<": "<",
|
53 | ">": ">"
|
54 | };
|
55 |
|
56 | return message.replace(/[&"'<>]/g, function(c) {
|
57 | return pairs[c];
|
58 | });
|
59 |
|
60 | }
|
61 |
|
62 |
|
63 |
|
64 |
|
65 |
|
66 | module.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 | };
|