-
Notifications
You must be signed in to change notification settings - Fork 0
/
gulpfile.js
133 lines (104 loc) · 3.2 KB
/
gulpfile.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
const through = require("through2");
const gulp = require("gulp");
const spawn = require("child_process").spawn;
//= ================================== Global Variable ===================================
//= ================================== Method ===================================
const replaceSpecialWording = (str, replaceWording, id) => {
if (str.indexOf(replaceWording) == -1) {
return str;
}
if (str.indexOf(" ==> ") != -1) {
return str;
}
return str.replace(`${replaceWording} `, `${replaceWording} ${id} ==> `);
};
const getSpecialLetters = (len) => {
const chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_";
let out = "";
for (let i = 0, clen = chars.length; i < len; i++) {
out += chars.substr(0 | (Math.random() * clen), 1);
}
return out;
};
const generateUIDNotMoreThan1million = function () {
return ("0000" + ((Math.random() * Math.pow(36, 4)) << 0).toString(36)).slice(
-4
);
};
const getNewBuffer = (buffer) => {
const str = buffer.toString();
const arr = str.split("\n");
if (arr.length == 0) {
return buffer;
}
let id = getSpecialLetters(4);
//const id = generateUIDNotMoreThan1million();
const newArr = [];
if (arr[0].indexOf("@") != 0) {
newArr.push(`@${id}`);
} else {
id = arr[0].replace("@", "");
}
for (let item of arr) {
let s = item;
s = replaceSpecialWording(s, "Given", id);
s = replaceSpecialWording(s, "When", id);
s = replaceSpecialWording(s, "Then", id);
s = replaceSpecialWording(s, "And", id);
s = replaceSpecialWording(s, "But", id);
newArr.push(s);
}
const newStr = newArr.join("\n");
return Buffer.from(newStr);
};
const addTagForFeatureFiles = () => {
const toProcess = () => {
// creating a stream through which each file will pass
const stream = through.obj(function (file, enc, done) {
if (file.isBuffer()) {
file.contents = getNewBuffer(file.contents);
}
// make sure the file goes through the next gulp plugin
this.push(file);
// tell the stream engine that we are done with this file
done();
});
return stream;
};
return gulp
.src("./features/**/*.feature")
.pipe(toProcess())
.pipe(gulp.dest("./features/"));
};
const cmd = (str) => async (cb) => {
const arr = str.split(" ");
const c0 = arr.shift();
console.log("exec => ", str);
await new Promise((resolve, reject) => {
const ssp = spawn(c0, arr, { stdio: "inherit" });
ssp.on("close", (code) => {
resolve(code);
});
ssp.on("error", function (err) {
reject(err);
});
});
cb();
};
//= ================================== Tasks ===================================
exports.test = cmd(
"cucumber-js --require features/tests.setup.js --require features/**/*.ts --format node_modules/cucumber-pretty"
);
exports.testCI = cmd(
"cucumber-js --require features/tests.setup.js --require features/**/*.ts"
);
exports.addTagForFeatureFiles = gulp.series(
addTagForFeatureFiles,
cmd(
"cucumber-js --require features/tests.setup.js --require features/**/*.ts --format node_modules/cucumber-pretty"
)
);
exports.build = gulp.parallel(
cmd("tsc -p ./tsconfig.json"),
cmd("tsc -p ./tsconfig.esm5.json")
);