-
Notifications
You must be signed in to change notification settings - Fork 0
/
utilities.js
134 lines (111 loc) · 3.94 KB
/
utilities.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
const csv = require('csv-parser');
const fs = require('fs');
const path = require("path");
const createCsvWriter = require('csv-writer').createObjectCsvWriter;
class Utilities {
static readCSV(path) {
return new Promise(((resolve, reject) => {
const results = [];
fs.createReadStream(path)
.pipe(csv())
.on('data', data => results.push(data))
.on('end', () => {
resolve(results);
})
.on('error', reject);
}));
}
static async writeCSV(path, data){
let existingData = [];
if (Utilities.fileExists(path)){
existingData = await Utilities.readCSV(path);
}
const csvWriter = createCsvWriter({
path: path,
header: [
{id: 'Project', title: 'Project'},
{id: 'Project URL', title: 'Project URL'},
{id: 'SHA Confirmed', title: 'SHA Confirmed'},
{id: 'Module Path', title: 'Module Path'},
{id: 'Fully-Qualified Test Name (packageName.ClassName.methodName)', title: 'Fully-Qualified Test Name (packageName.ClassName.methodName)'},
{id: 'Category', title: 'Category'},
{id: 'Confirmation', title: 'Confirmation'},
]
});
data = data.concat(existingData);
await csvWriter.writeRecords(data);
}
static async writeDetailsCSV(path, data){
let existingData = [];
if (Utilities.fileExists(path)){
existingData = await Utilities.readCSV(path);
}
const csvWriter = createCsvWriter({
path: path,
header: [
{id: 'testFilePath', title: 'testFilePath'},
{id: 'deletedCommit', title: 'deletedCommit'},
{id: 'deletedDate', title: 'deletedDate'},
{id: 'modifiedCommit', title: 'modifiedCommit'},
{id: 'modifiedDate', title: 'modifiedDate'},
{id: 'createdCommit', title: 'createdCommit'},
{id: 'createdDate', title: 'createdDate'},
]});
data = data.concat(existingData);
await csvWriter.writeRecords(data);
}
static readFile(path) {
return fs.readFileSync(path).toString();
}
static writeFile(path, content) {
fs.writeFileSync(path, content);
}
static removeFilePart(dirname){
return path.parse(dirname).dir;
};
static fileExists(path) {
return fs.existsSync(path);
}
static groupBy(key, array) {
const result = [];
for (let i = 0; i < array.length; i++) {
let added = false;
for (let j = 0; j < result.length; j++) {
if (result[j][key] === array[i][key]) {
result[j].items.push(array[i]);
added = true;
break;
}
}
if (!added) {
const entry = {items: []};
entry[key] = array[i][key];
entry.items.push(array[i]);
result.push(entry);
}
}
return result;
}
static fromDir(startPath,filter){
if (!fs.existsSync(startPath)){
return [];
}
let files=fs.readdirSync(startPath);
const results = [];
for(let i=0;i<files.length;i++){
const filename=path.join(startPath,files[i]);
const stat = fs.lstatSync(filename);
if (!stat.isDirectory() && filename.indexOf(filter)>=0) {
results.push(path.basename(filename));
}
}
return results;
};
static isDirectory(source){
return fs.lstatSync(source).isDirectory();
}
static getDirectories(source){
return fs.readdirSync(source).map(name => path.join(source, name)).filter(x=>Utilities.isDirectory(x));
}
}
module.exports = Utilities;