5e98c8b1312b6d43f977a175656c5f0477af029c
[platform/framework/web/crosswalk-tizen.git] /
1 /**
2  * @fileoverview CheckStyle XML reporter
3  * @author Ian Christian Myers
4  */
5 "use strict";
6
7 //------------------------------------------------------------------------------
8 // Helper Functions
9 //------------------------------------------------------------------------------
10
11 function getMessageType(message) {
12     if (message.fatal || message.severity === 2) {
13         return "error";
14     } else {
15         return "warning";
16     }
17 }
18
19 function xmlEscape(s) {
20     return ("" + s).replace(/[<>&"']/g, function(c) {
21         switch (c) {
22             case "<":
23                 return "&lt;";
24             case ">":
25                 return "&gt;";
26             case "&":
27                 return "&amp;";
28             case "\"":
29                 return "&quot;";
30             case "'":
31                 return "&apos;";
32             // no default
33         }
34     });
35 }
36
37 //------------------------------------------------------------------------------
38 // Public Interface
39 //------------------------------------------------------------------------------
40
41 module.exports = function(results) {
42
43     var output = "";
44
45     output += "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
46     output += "<checkstyle version=\"4.3\">";
47
48     results.forEach(function(result) {
49         var messages = result.messages;
50
51         output += "<file name=\"" + xmlEscape(result.filePath) + "\">";
52
53         messages.forEach(function(message) {
54             output += "<error line=\"" + xmlEscape(message.line) + "\" " +
55                 "column=\"" + xmlEscape(message.column) + "\" " +
56                 "severity=\"" + xmlEscape(getMessageType(message)) + "\" " +
57                 "message=\"" + xmlEscape(message.message) +
58                 (message.ruleId ? " (" + message.ruleId + ")" : "") + "\" />";
59         });
60
61         output += "</file>";
62
63     });
64
65     output += "</checkstyle>";
66
67     return output;
68 };