1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 | var fs = require('fs');
|
17 | var path = require('path');
|
18 |
|
19 | var xmlReport = require('./xml-report.js');
|
20 | var lcovReport = require('./lcov-report.js');
|
21 |
|
22 | var writeReports = function (config, results, callback) {
|
23 | var mkdirsCache = {};
|
24 | var expectedCallbacks = 1;
|
25 | var errors = null;
|
26 | var decreaseCallbacks = function (err) {
|
27 | if (err) {
|
28 | if (!errors) {
|
29 | errors = [];
|
30 | }
|
31 | errors.push(err);
|
32 | }
|
33 | expectedCallbacks--;
|
34 | if (expectedCallbacks === 0) {
|
35 | callback(errors);
|
36 | }
|
37 | };
|
38 |
|
39 | var mkdirs = function (directory, callback) {
|
40 | var cacheEntry = mkdirsCache[directory];
|
41 | if (cacheEntry === true) {
|
42 | return callback();
|
43 | } else if (cacheEntry) {
|
44 | cacheEntry.push(callback);
|
45 | return;
|
46 | }
|
47 | cacheEntry = [callback];
|
48 | mkdirsCache[directory] = cacheEntry;
|
49 | var end = function () {
|
50 | mkdirsCache[directory] = true;
|
51 | for (var i = 0, l = cacheEntry.length; i < l; i++) {
|
52 | cacheEntry[i]();
|
53 | }
|
54 | };
|
55 | fs.exists(directory, function (doesExist) {
|
56 | if (doesExist) {
|
57 | return end();
|
58 | }
|
59 | mkdirs(path.dirname(directory), function () {
|
60 | fs.mkdir(directory, end);
|
61 | });
|
62 | });
|
63 | };
|
64 |
|
65 | var writeFile = function (file, fileContent) {
|
66 | expectedCallbacks++;
|
67 | mkdirs(path.dirname(file), function () {
|
68 | fs.writeFile(file, fileContent, 'utf8', decreaseCallbacks);
|
69 | });
|
70 | };
|
71 |
|
72 | var writeMultipleFiles = function (files, fileContent) {
|
73 | for (var i = 0, l = files.length; i < l; i++) {
|
74 | writeFile(files[i], fileContent);
|
75 | }
|
76 | };
|
77 |
|
78 | var writeJson = function (files, json) {
|
79 | if (json && files.length > 0) {
|
80 | writeMultipleFiles(files, JSON.stringify(json));
|
81 | }
|
82 | };
|
83 |
|
84 | var writeXMLFile = function (files, root) {
|
85 | if (files.length > 0) {
|
86 | var xmlContent = xmlReport.xmlFileReport(root);
|
87 | writeMultipleFiles(files, xmlContent);
|
88 | }
|
89 | };
|
90 |
|
91 | var writeXMLDirectory = function (directories, flatReport) {
|
92 | var nbDirectories = directories.length;
|
93 | if (nbDirectories > 0) {
|
94 | var xmlReports = xmlReport.xmlDirectoryReport(flatReport);
|
95 | for (var i = 0, l = xmlReports.length; i < l; i++) {
|
96 | for (var j = 0; j < nbDirectories; j++) {
|
97 | writeFile(path.join(directories[j], xmlReports[i].name), xmlReports[i].content);
|
98 | }
|
99 | }
|
100 | }
|
101 | };
|
102 |
|
103 | var writeLcovFile = function (files, report) {
|
104 | if (files.length > 0 && report) {
|
105 | var lcovContent = lcovReport(report);
|
106 | writeMultipleFiles(files, lcovContent);
|
107 | }
|
108 | };
|
109 |
|
110 | var testConfig = config.test;
|
111 | var coverageConfig = config.coverage;
|
112 | var testResults = results.test;
|
113 | var coverageResults = results.coverage;
|
114 |
|
115 | writeJson(testConfig['json-file'], testResults.report);
|
116 | writeXMLFile(testConfig['xml-file'], {
|
117 | name: "Campaign " + testResults.report.campaignId,
|
118 | subTasks: testResults.report.tasks
|
119 | });
|
120 | writeXMLDirectory(testConfig['xml-directory'], testResults.flatReport);
|
121 | if (coverageResults) {
|
122 | writeJson(coverageConfig['json-file'], coverageResults);
|
123 | writeLcovFile(coverageConfig['lcov-file'], coverageResults);
|
124 | }
|
125 |
|
126 | decreaseCallbacks();
|
127 | };
|
128 |
|
129 | module.exports = writeReports;
|