source: pyenvjasmine/pyenvjasmine/envjasmine/lib/jscover/envjasmine-sonar-coverage-runner.js@ 19:ab5f65372038

Last change on this file since 19:ab5f65372038 was 19:ab5f65372038, checked in by Borja Lopez <borja@…>, 9 years ago

Imported latest envjasmine version, the initial import from darcs had the wrong version

File size: 6.0 KB
Line 
1importPackage(java.io);
2importPackage(java.lang);
3importPackage(java.util.regex);
4importPackage(org.mozilla.javascript);
5
6( function(argumentList) {
7
8 if (!this.EnvJasmine) {
9 this.EnvJasmine = {};
10 }
11
12 if (!EnvJasmine.coverage) {
13 EnvJasmine.coverage = {};
14 }
15
16 EnvJasmine.printDebug = function(str) {
17 if (EnvJasmine.debug) {
18 print(str);
19 }
20 };
21
22 var arg, nameValue;
23
24 for (var i = 0; i < argumentList.length; i++) {
25 arg = argumentList[i];
26 EnvJasmine.printDebug("ARGUMENT: " + arg);
27 if (arg.slice(0, 2) == "--") {
28 nameValue = arg.slice(2).split('=');
29
30 switch(nameValue[0]) {
31 case "projectRoot":
32 EnvJasmine.coverage.projectRoot = nameValue[1];
33 break;
34 case "originalDir":
35 EnvJasmine.coverage.originalDir = nameValue[1];
36 break;
37 case "instrumentedDir":
38 EnvJasmine.coverage.instrumentedDir = nameValue[1];
39 break;
40 case "reportsDir":
41 EnvJasmine.coverage.reportsDir = nameValue[1];
42 break;
43 case "cleanup":
44 EnvJasmine.coverage.cleanup = true;
45 break;
46 case "sonarMethod":
47 EnvJasmine.coverage.sonarMethod = nameValue[1];
48 break;
49 case "noInstrument":
50 if (EnvJasmine.coverage.noInstrument[0] == "ajaxDemo.js") {
51 // override default example
52 EnvJasmine.coverage.noInstrument = [];
53 }
54 EnvJasmine.coverage.noInstrument.push(nameValue[1]);
55 break;
56 case "debug":
57 EnvJasmine.debug = true;
58 break;
59 }
60 }
61 }
62
63 properties_file = "../lib/jscover/envjasmine-sonar-coverage-properties.js";
64
65 print("Loading Helper Files");
66 fileIn = new FileReader(properties_file);
67 Context.getCurrentContext().evaluateReader(this, fileIn, "envjasmine-sonar-coverage-properties.js", 0, null);
68 fileIn.close();
69
70 fileIn = new FileReader(EnvJasmine.coverage.jscoverDir + "envjasmine-sonar-coverage-helper.js");
71 Context.getCurrentContext().evaluateReader(this, fileIn, "envjasmine-sonar-coverage-helper.js", 0, null);
72 fileIn.close();
73
74 // create directories that will be used
75 print("Creating temp directories");
76 EnvJasmine.printDebug("INSTRUMENTED DIRECTORY: " + EnvJasmine.coverage.instrumentedDir);
77 (new File(EnvJasmine.coverage.instrumentedDir)).mkdir();
78 (new File(EnvJasmine.coverage.reportsDir)).mkdir();
79
80
81 // instrument the javascript code
82 // no-instrument documentation: http://tntim96.github.com/JSCover/manual/manual.xml#fileMode
83 print("Instrumenting")
84 no_i = ""
85 for (var i = 0; i < EnvJasmine.coverage.noInstrument.length; i++) {
86 no_i += (" --no-instrument=" + EnvJasmine.coverage.noInstrument[i]);
87 }
88 cmd = "java -jar " + EnvJasmine.coverage.jscoverJar + " -fs --branch " + no_i + " " + EnvJasmine.coverage.originalDir + " " + EnvJasmine.coverage.instrumentedDir;
89 EnvJasmine.printDebug("EXECUTING: " + cmd)
90 EnvJasmine.coverage.executeCommand(cmd);
91
92 // some evil code is neccessary to get this to work :(
93 // hopefully we'll get rid of this soon jscover can be changed a little
94 print("Exposing coverage hooks to EnvJasmine");
95 p = Pattern.compile("this\\._\\$jscoverage|(?<!\\.)_\\$jscoverage", Pattern.MULTILINE);
96 EnvJasmine.coverage.recurseTransform(EnvJasmine.coverage.instrumentedDir, function(content) {
97 return p.matcher(content).replaceAll("EnvJasmine.jscoverage");
98 });
99
100 // run tests with instrumented code
101 print("Running instrumented tests");
102 cmd = EnvJasmine.coverage.run_script + " --jsDir=" + EnvJasmine.coverage.instrumentedDir + " --plugin=" + EnvJasmine.coverage.envjasmine_coverage_js + " " + argumentList.join(" ");
103 EnvJasmine.printDebug("EXECUTING: " + cmd)
104 EnvJasmine.coverage.executeCommand(cmd);
105
106 // convert json file into lcov file which sonar can read
107 print("Converting Output to lcov")
108 cmd = "java -cp " + EnvJasmine.coverage.jscoverJar + " jscover.report.Main --format=LCOV " + EnvJasmine.coverage.reportsDir + " " + EnvJasmine.coverage.reportsDir
109 EnvJasmine.printDebug("EXECUTING: " + cmd)
110 EnvJasmine.coverage.executeCommand(cmd);
111
112 // The lcov file includes branch coverage but sonar can't read it, so remove it
113 print("converting lcov to be compatible with sonar 2");
114 file = new File(EnvJasmine.coverage.reportLcov);
115 content = (new Scanner(file)).useDelimiter("\\Z").next();
116 pattern = new Pattern.compile(EnvJasmine.coverage.reportsDir);
117 content = pattern.matcher(content).replaceAll(EnvJasmine.coverage.originalDir);
118 pattern = Pattern.compile("^BRDA:.*$", Pattern.MULTILINE);
119 content = pattern.matcher(content).replaceAll("");
120 out = new PrintWriter(EnvJasmine.coverage.reportSonar);
121 out.print(content);
122 out.close();
123
124 print("Coverage file ready to be picked up by sonar");
125
126 // run sonar, it will pick up the code coverage file
127 if (EnvJasmine.coverage.sonarMethod === "sonar-runner") {
128 print("Running Sonar");
129 EnvJasmine.coverage.executeCommand("sonar-runner -Dproject.settings="+EnvJasmine.coverage.sonar_runner_properties, EnvJasmine.coverage.rootDir); // sonar runner
130 } else if (EnvJasmine.coverage.sonarMethod === "maven") {
131 print("Running Sonar");
132 EnvJasmine.coverage.executeCommand("mvn sonar:sonar -f "+EnvJasmine.coverage.sonar_pom_xml, EnvJasmine.coverage.rootDir); // maven
133 }
134
135 if (EnvJasmine.coverage.cleanup) {
136 print("Cleanup");
137 EnvJasmine.coverage.executeCommand("rm -rf " + EnvJasmine.coverage.reportsDir);
138 EnvJasmine.coverage.executeCommand("rm -rf " + EnvJasmine.coverage.instrumentedDir);
139 }
140
141 print("envjasmine-sonar-coverage-runner complete")
142}(arguments));
Note: See TracBrowser for help on using the repository browser.