UNPKG

4.12 kBJavaScriptView Raw
1/*
2 * Copyright 2012 Amadeus s.a.s.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16var fs = require('fs');
17var path = require('path');
18
19var xmlReport = require('./xml-report.js');
20var lcovReport = require('./lcov-report.js');
21
22var 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
129module.exports = writeReports;