Branch data Line data Source code
1 [ + ]: 1 : /**
2 : 1 : * @module github-activity-test
3 : 1 : * @desc Testing module for the {@link module:github-activity github-activity} module.
4 : 1 : * @version 1.0.0
5 : 1 : * @author Essam A. El-Sherif
6 : 1 : */
7 : 1 :
8 : 1 : /* Import node.js core modules */
9 : 1 : import assert from 'node:assert/strict';
10 : 1 : import { exec, execSync } from 'node:child_process';
11 : 1 : import fs from 'node:fs';
12 : 1 : import os from 'node:os';
13 : 1 : import path from 'node:path';
14 : 1 : import process from 'node:process';
15 : 1 : import { fileURLToPath } from 'node:url';
16 : 1 :
17 : 1 : /* Emulate commonJS __filename and __dirname constants */
18 : 1 : const __filename = fileURLToPath(import.meta.url);
19 : 1 : const __dirname = path.dirname(__filename);
20 : 1 :
21 : 1 : /** @const {string} CMD - The tested program command. */
22 : 1 : const CMD = 'gh-act';
23 : 1 :
24 : 1 : /** @const {string} CMD_VER - The tested program command version. */
25 : 1 : const CMD_VER = 'v1.0.0';
26 : 1 :
27 : 1 : /** @const {string} CMD_HELP - The tested program command help. */
28 : 1 : const CMD_HELP = `\
29 : 1 : Usage: ${CMD} [OPTION]... USER
30 : 1 : Use GitHub API to fetch GitHub user activities and display it in the terminal.
31 : 1 :
32 : 1 : -b --table tabular output
33 : 1 : -j --json output JSON data
34 : 1 : -c --csv output comma separated values
35 : 1 : -v --verbose verbose output (default)
36 : 1 : -d --debug show request and response headers
37 : 1 : -t --type[=TYPE] filter user activities by event type
38 : 1 : --user output user information and exit
39 : 1 : --nocache remove the cache directory and exit
40 : 1 : --list list GitHub event types and exit
41 : 1 : --help display this help and exit
42 : 1 : --version output version information and exit
43 : 1 :
44 : 1 : Writing your GitHub authentication token to the file '.auth-token' located in the
45 : 1 : package root directory is recommended for normal operation and required for testing.`;
46 : 1 :
47 : 1 : /** @const {object} cmdOptions - Options used when running the tests. */
48 : 1 : const cmdOptions = {
49 : 1 : node : true,
50 : 1 : verbose : true,
51 : 1 : };
52 : 1 :
53 : 1 : /** @const {string} cacheDir - Cache directory. */
54 : 1 : const cacheDir = path.join(os.tmpdir(), CMD);
55 : 1 :
56 : 1 : /* Prepare test environment */
57 : 1 : const cmdPath = path.join(__dirname, '..', 'lib/gh-act.js');
58 : 1 : const classPath = path.join(__dirname, '..', 'lib/gh-event.js');
59 : 1 :
60 : 1 : let testCount = 1;
61 : 1 : let passCount = 0;
62 : 1 : let failCount = 0;
63 : 1 : let cancelCount = 0;
64 : 1 : let skipCount = 0;
65 : 1 : let todoCount = 0;
66 : 1 : let startTime = Date.now();
67 : 1 :
68 : 1 : const suites = new Map();
69 : 1 :
70 : 1 : /**
71 : 1 : * function main()
72 : 1 : * function loadTestData()
73 : 1 : * function nodeRunner()
74 : 1 : * function defRunner()
75 : 1 : * async function makeTest()
76 : 1 : * function getCmdOutput()
77 : 1 : *
78 : 1 : * @func Main
79 : 1 : * @desc The application entry point function.
80 : 1 : */
81 [ + ]: 1 : (() => {
82 : 1 :
83 : 1 : loadTestData();
84 : 1 :
85 : 1 : if(cmdOptions.node){
86 : 1 :
87 : 1 : import('node:test')
88 [ + ]: 1 : .then(runner => {
89 : 1 : cmdOptions.node = true;
90 : 1 : cmdOptions.verbose = false;
91 : 1 : nodeRunner(runner);
92 : 1 : })
93 : 1 : .catch((e) => {
94 : 0 : cmdOptions.node = false;
95 : 0 : cmdOptions.verbose = true;
96 : 0 : defRunner();
97 : 1 : });
98 [ - ]: 1 : }
99 : 0 : else{
100 : 0 : cmdOptions.node = false;
101 : 0 : defRunner();
102 : 0 : }
103 : 1 :
104 : 1 : })('Main Function');
105 : 1 :
106 : 1 : /**
107 : 1 : * function main()
108 : 1 : * function loadTestData()
109 : 1 : * function nodeRunner()
110 : 1 : * function defRunner()
111 : 1 : * async function makeTest()
112 : 1 : * function getCmdOutput()
113 : 1 : *
114 : 1 : * @func loadTestData
115 : 1 : * @desc Load test data.
116 : 1 : */
117 [ + ]: 1 : function loadTestData(){
118 : 1 :
119 : 1 : let cmdData = null;
120 : 1 : let suiteDesc = '';
121 : 1 : let actFile = '', expFile = '';
122 : 1 :
123 : 1 : // TEST SUITE #1 - Test common options
124 : 1 : suiteDesc = 'Test common options';
125 : 1 : suites.set(suiteDesc, []);
126 : 1 :
127 : 1 : // TEST ### - gh-act
128 : 1 : cmdData = {run_after: null};
129 : 1 :
130 : 1 : cmdData.cmd_act = `node ${cmdPath}`;
131 : 1 : cmdData.cmd_exp = '';
132 : 1 : cmdData.cmd_inp = '';
133 : 1 :
134 : 1 : cmdData.cmd_out = `${CMD_HELP}\n`;
135 : 1 : cmdData.cmd_err = '';
136 : 1 :
137 : 1 : cmdData.cmd_opt = {encoding: 'UTF-8', env: {GH_ACT_TEST: 'parse'}};
138 : 1 : cmdData.cmd_ext = 0;
139 : 1 : cmdData.cmd_desc = `${CMD}`;
140 : 1 :
141 : 1 : cmdData.cmd_skip = false;
142 : 1 : suites.get(suiteDesc).push(cmdData);
143 : 1 :
144 : 1 : // TEST ### - gh-act --help
145 : 1 : cmdData = {run_after: null};
146 : 1 :
147 : 1 : cmdData.cmd_act = `node ${cmdPath} --help`;
148 : 1 : cmdData.cmd_exp = '';
149 : 1 : cmdData.cmd_inp = '';
150 : 1 :
151 : 1 : cmdData.cmd_out = `${CMD_HELP}\n`;
152 : 1 : cmdData.cmd_err = '';
153 : 1 :
154 : 1 : cmdData.cmd_opt = {encoding: 'UTF-8', env: {GH_ACT_TEST: 'parse'}};
155 : 1 : cmdData.cmd_ext = 0;
156 : 1 : cmdData.cmd_desc = `${CMD} --help`;
157 : 1 :
158 : 1 : cmdData.cmd_skip = false;
159 : 1 : suites.get(suiteDesc).push(cmdData);
160 : 1 :
161 : 1 : // TEST ### - gh-act --version
162 : 1 : cmdData = {run_after: null};
163 : 1 :
164 : 1 : cmdData.cmd_act = `node ${cmdPath} --version`;
165 : 1 : cmdData.cmd_exp = '';
166 : 1 : cmdData.cmd_inp = '';
167 : 1 :
168 : 1 : cmdData.cmd_out = `${CMD_VER}\n`;
169 : 1 : cmdData.cmd_err = '';
170 : 1 :
171 : 1 : cmdData.cmd_opt = {encoding: 'UTF-8', env: Object.assign({GH_ACT_TEST: 'parse'}, {} )};
172 : 1 : cmdData.cmd_ext = 0;
173 : 1 : cmdData.cmd_desc = `${CMD} --version`;
174 : 1 :
175 : 1 : cmdData.cmd_skip = false;
176 : 1 : suites.get(suiteDesc).push(cmdData);
177 : 1 :
178 : 1 : // TEST ### - gh-act --list
179 : 1 : cmdData = {run_after: null};
180 : 1 :
181 : 1 : cmdData.cmd_act = `node ${cmdPath} --list`;
182 : 1 : cmdData.cmd_exp = '';
183 : 1 : cmdData.cmd_inp = '';
184 : 1 :
185 : 1 : cmdData.cmd_out = `\
186 : 1 : CommitCommentEvent ............... A commit comment is created.
187 : 1 : CreateEvent ...................... A Git branch or tag is created.
188 : 1 : DeleteEvent ...................... A Git branch or tag is deleted.
189 : 1 : ForkEvent ........................ A user forks a repository.
190 : 1 : GollumEvent ...................... A wiki page is created or updated.
191 : 1 : IssueCommentEvent ................ Activity related to an issue or pull request comment.
192 : 1 : IssuesEvent ...................... Activity related to an issue.
193 : 1 : MemberEvent ...................... Activity related to repository collaborators.
194 : 1 : PublicEvent ...................... When a private repository is made public.
195 : 1 : PullRequestEvent ................. Activity related to pull requests.
196 : 1 : PullRequestReviewEvent ........... Activity related to pull request reviews.
197 : 1 : PullRequestReviewCommentEvent .... Activity related to pull request review comments in the pull request's unified diff.
198 : 1 : PullRequestReviewThreadEvent ..... Activity related to a comment thread on a pull request being marked as resolved or unresolved.
199 : 1 : PushEvent ........................ One or more commits are pushed to a repository branch or tag.
200 : 1 : ReleaseEvent ..................... Activity related to a release.
201 : 1 : SponsorshipEvent ................. Activity related to a sponsorship listing.
202 : 1 : WatchEvent ....................... When someone stars a repository.
203 : 1 : `;
204 : 1 : cmdData.cmd_err = '';
205 : 1 :
206 : 1 : cmdData.cmd_opt = {encoding: 'UTF-8', env: {GH_ACT_TEST: 'parse'}};
207 : 1 : cmdData.cmd_ext = 0;
208 : 1 : cmdData.cmd_desc = `${CMD} --list`;
209 : 1 :
210 : 1 : cmdData.cmd_skip = false;
211 : 1 : suites.get(suiteDesc).push(cmdData);
212 : 1 :
213 : 1 : // TEST ### - gh-act --nocache
214 : 1 : cmdData = {run_after: null};
215 : 1 :
216 : 1 : cmdData.cmd_act = `node ${cmdPath} --nocache`;
217 : 1 : cmdData.cmd_exp = '';
218 : 1 : cmdData.cmd_inp = '';
219 : 1 :
220 : 1 : cmdData.cmd_out = '';
221 : 1 : cmdData.cmd_err = '';
222 : 1 :
223 : 1 : cmdData.cmd_opt = {encoding: 'UTF-8', env: Object.assign({GH_ACT_TEST: 'parse'}, {} )};
224 : 1 : cmdData.cmd_ext = 0;
225 : 1 : cmdData.cmd_desc = `${CMD} --nocache`;
226 : 1 :
227 [ + ]: 1 : cmdData.run_after = () => {
228 : 1 : assert.strictEqual(fs.statSync(`${cacheDir}`, {throwIfNoEntry: false}), undefined);
229 : 1 : }
230 : 1 :
231 : 1 : cmdData.cmd_skip = false;
232 : 1 : suites.get(suiteDesc).push(cmdData);
233 : 1 :
234 : 1 : // TEST SUITE #2 - Test invalid multi-character options
235 : 1 : suiteDesc = 'Test invalid multi-character options';
236 : 1 : suites.set(suiteDesc, []);
237 : 1 :
238 : 1 : // TEST ### - gh-act --xxx
239 : 1 : cmdData = {run_after: null};
240 : 1 :
241 : 1 : cmdData.cmd_act = `node ${cmdPath} --xxx`;
242 : 1 : cmdData.cmd_exp = '';
243 : 1 : cmdData.cmd_inp = '';
244 : 1 :
245 : 1 : cmdData.cmd_out = '';
246 : 1 : cmdData.cmd_err = `${CMD}: unrecognized option '--xxx'
247 : 1 : Try '${CMD} --help' for more information.\n`;
248 : 1 :
249 : 1 : cmdData.cmd_opt = {encoding: 'UTF-8', env: {GH_ACT_TEST: 'parse'}};
250 : 1 : cmdData.cmd_ext = 1;
251 : 1 : cmdData.cmd_desc = `${CMD} --xxx`;
252 : 1 :
253 : 1 : cmdData.cmd_skip = false;
254 : 1 : suites.get(suiteDesc).push(cmdData);
255 : 1 :
256 : 1 : // TEST ### - gh-act --type=
257 : 1 : cmdData = {run_after: null};
258 : 1 :
259 : 1 : cmdData.cmd_act = `node ${cmdPath} --type=`;
260 : 1 : cmdData.cmd_exp = '';
261 : 1 : cmdData.cmd_inp = '';
262 : 1 :
263 : 1 : cmdData.cmd_out = '';
264 : 1 : cmdData.cmd_err = `\
265 : 1 : ${CMD}: ambiguous argument ‘’ for ‘--type’
266 : 1 : Try '${CMD} --help' for more information.
267 : 1 : `;
268 : 1 :
269 : 1 : cmdData.cmd_opt = {encoding: 'UTF-8', env: {GH_ACT_TEST: 'parse'}};
270 : 1 : cmdData.cmd_ext = 1;
271 : 1 : cmdData.cmd_desc = `${CMD} --type=`;
272 : 1 :
273 : 1 : cmdData.cmd_skip = false;
274 : 1 : suites.get(suiteDesc).push(cmdData);
275 : 1 :
276 : 1 : // TEST ### - gh-act --type
277 : 1 : cmdData = {run_after: null};
278 : 1 :
279 : 1 : cmdData.cmd_act = `node ${cmdPath} --type`;
280 : 1 : cmdData.cmd_exp = '';
281 : 1 : cmdData.cmd_inp = '';
282 : 1 :
283 : 1 : cmdData.cmd_out = '';
284 : 1 : cmdData.cmd_err = `\
285 : 1 : ${CMD}: ambiguous argument ‘’ for ‘--type’
286 : 1 : Try '${CMD} --help' for more information.
287 : 1 : `;
288 : 1 :
289 : 1 : cmdData.cmd_opt = {encoding: 'UTF-8', env: {GH_ACT_TEST: 'parse'}};
290 : 1 : cmdData.cmd_ext = 1;
291 : 1 : cmdData.cmd_desc = `${CMD} --type`;
292 : 1 :
293 : 1 : cmdData.cmd_skip = false;
294 : 1 : suites.get(suiteDesc).push(cmdData);
295 : 1 :
296 : 1 : // TEST ### - gh-act --type=InvalidType
297 : 1 : cmdData = {run_after: null};
298 : 1 :
299 : 1 : cmdData.cmd_act = `node ${cmdPath} --type=InvalidType`;
300 : 1 : cmdData.cmd_exp = '';
301 : 1 : cmdData.cmd_inp = '';
302 : 1 :
303 : 1 : cmdData.cmd_out = '';
304 : 1 : cmdData.cmd_err = `\
305 : 1 : ${CMD}: unrecognized GitHub event type 'InvalidType'
306 : 1 : Try '${CMD} --list' for more information.
307 : 1 : `;
308 : 1 :
309 : 1 : cmdData.cmd_opt = {encoding: 'UTF-8', env: {GH_ACT_TEST: 'parse'}};
310 : 1 : cmdData.cmd_ext = 1;
311 : 1 : cmdData.cmd_desc = `${CMD} --type=InvalidType`;
312 : 1 :
313 : 1 : cmdData.cmd_skip = false;
314 : 1 : suites.get(suiteDesc).push(cmdData);
315 : 1 :
316 : 1 : // TEST ### - gh-act --type InvalidType
317 : 1 : cmdData = {run_after: null};
318 : 1 :
319 : 1 : cmdData.cmd_act = `node ${cmdPath} --type InvalidType`;
320 : 1 : cmdData.cmd_exp = '';
321 : 1 : cmdData.cmd_inp = '';
322 : 1 :
323 : 1 : cmdData.cmd_out = '';
324 : 1 : cmdData.cmd_err = `\
325 : 1 : ${CMD}: unrecognized GitHub event type 'InvalidType'
326 : 1 : Try '${CMD} --list' for more information.
327 : 1 : `;
328 : 1 :
329 : 1 : cmdData.cmd_opt = {encoding: 'UTF-8', env: {GH_ACT_TEST: 'parse'}};
330 : 1 : cmdData.cmd_ext = 1;
331 : 1 : cmdData.cmd_desc = `${CMD} --type InvalidType`;
332 : 1 :
333 : 1 : cmdData.cmd_skip = false;
334 : 1 : suites.get(suiteDesc).push(cmdData);
335 : 1 :
336 : 1 : // TEST ### - gh-act --user
337 : 1 : cmdData = {run_after: null};
338 : 1 :
339 : 1 : cmdData.cmd_act = `node ${cmdPath} --user`;
340 : 1 : cmdData.cmd_exp = '';
341 : 1 : cmdData.cmd_inp = '';
342 : 1 :
343 : 1 : cmdData.cmd_out = '';
344 : 1 : cmdData.cmd_err = `\
345 : 1 : ${CMD}: no GitHub user given
346 : 1 : Try '${CMD} --help' for more information.
347 : 1 : `;
348 : 1 :
349 : 1 : cmdData.cmd_opt = {encoding: 'UTF-8', env: {GH_ACT_TEST: 'parse'}};
350 : 1 : cmdData.cmd_ext = 1;
351 : 1 : cmdData.cmd_desc = `${CMD} --user`;
352 : 1 :
353 : 1 : cmdData.cmd_skip = false;
354 : 1 : suites.get(suiteDesc).push(cmdData);
355 : 1 :
356 : 1 : // TEST SUITE #3 - Test invalid single-character options
357 : 1 : suiteDesc = 'Test invalid single-character options';
358 : 1 : suites.set(suiteDesc, []);
359 : 1 :
360 : 1 : // TEST ### - gh-act -x
361 : 1 : cmdData = {run_after: null};
362 : 1 :
363 : 1 : cmdData.cmd_act = `node ${cmdPath} -x`;
364 : 1 : cmdData.cmd_exp = '';
365 : 1 : cmdData.cmd_inp = '';
366 : 1 :
367 : 1 : cmdData.cmd_out = '';
368 : 1 : cmdData.cmd_err = `\
369 : 1 : ${CMD}: invalid option -- 'x'
370 : 1 : Try '${CMD} --help' for more information.
371 : 1 : `;
372 : 1 :
373 : 1 : cmdData.cmd_opt = {encoding: 'UTF-8', env: {GH_ACT_TEST: 'parse'}};
374 : 1 : cmdData.cmd_ext = 1;
375 : 1 : cmdData.cmd_desc = `${CMD} -x`;
376 : 1 :
377 : 1 : cmdData.cmd_skip = false;
378 : 1 : suites.get(suiteDesc).push(cmdData);
379 : 1 :
380 : 1 : // TEST ### - gh-act -xy
381 : 1 : cmdData = {run_after: null};
382 : 1 :
383 : 1 : cmdData.cmd_act = `node ${cmdPath} -xy`;
384 : 1 : cmdData.cmd_exp = '';
385 : 1 : cmdData.cmd_inp = '';
386 : 1 :
387 : 1 : cmdData.cmd_out = '';
388 : 1 : cmdData.cmd_err = `\
389 : 1 : ${CMD}: invalid option -- 'x'
390 : 1 : Try '${CMD} --help' for more information.
391 : 1 : `;
392 : 1 :
393 : 1 : cmdData.cmd_opt = {encoding: 'UTF-8', env: {GH_ACT_TEST: 'parse'}};
394 : 1 : cmdData.cmd_ext = 1;
395 : 1 : cmdData.cmd_desc = `${CMD} -uxy`;
396 : 1 :
397 : 1 : cmdData.cmd_skip = false;
398 : 1 : suites.get(suiteDesc).push(cmdData);
399 : 1 :
400 : 1 : // TEST ### - gh-act -t
401 : 1 : cmdData = {run_after: null};
402 : 1 :
403 : 1 : cmdData.cmd_act = `node ${cmdPath} -t`;
404 : 1 : cmdData.cmd_exp = '';
405 : 1 : cmdData.cmd_inp = '';
406 : 1 :
407 : 1 : cmdData.cmd_out = '';
408 : 1 : cmdData.cmd_err = `\
409 : 1 : ${CMD}: ambiguous argument ‘’ for ‘-t’
410 : 1 : Try '${CMD} --help' for more information.
411 : 1 : `;
412 : 1 :
413 : 1 : cmdData.cmd_opt = {encoding: 'UTF-8', env: {GH_ACT_TEST: 'parse'}};
414 : 1 : cmdData.cmd_ext = 1;
415 : 1 : cmdData.cmd_desc = `${CMD} -t`;
416 : 1 :
417 : 1 : cmdData.cmd_skip = false;
418 : 1 : suites.get(suiteDesc).push(cmdData);
419 : 1 :
420 : 1 : // TEST ### - gh-act -tb
421 : 1 : cmdData = {run_after: null};
422 : 1 :
423 : 1 : cmdData.cmd_act = `node ${cmdPath} -tb`;
424 : 1 : cmdData.cmd_exp = '';
425 : 1 : cmdData.cmd_inp = '';
426 : 1 :
427 : 1 : cmdData.cmd_out = '';
428 : 1 : cmdData.cmd_err = `\
429 : 1 : ${CMD}: ambiguous argument ‘’ for ‘-t’
430 : 1 : Try '${CMD} --help' for more information.
431 : 1 : `;
432 : 1 :
433 : 1 : cmdData.cmd_opt = {encoding: 'UTF-8', env: {GH_ACT_TEST: 'parse'}};
434 : 1 : cmdData.cmd_ext = 1;
435 : 1 : cmdData.cmd_desc = `${CMD} -tb`;
436 : 1 :
437 : 1 : cmdData.cmd_skip = false;
438 : 1 : suites.get(suiteDesc).push(cmdData);
439 : 1 :
440 : 1 : // TEST ### - gh-act -t InvalidType
441 : 1 : cmdData = {run_after: null};
442 : 1 :
443 : 1 : cmdData.cmd_act = `node ${cmdPath} -t InvalidType`;
444 : 1 : cmdData.cmd_exp = '';
445 : 1 : cmdData.cmd_inp = '';
446 : 1 :
447 : 1 : cmdData.cmd_out = '';
448 : 1 : cmdData.cmd_err = `\
449 : 1 : ${CMD}: unrecognized GitHub event type 'InvalidType'
450 : 1 : Try '${CMD} --list' for more information.
451 : 1 : `;
452 : 1 :
453 : 1 : cmdData.cmd_opt = {encoding: 'UTF-8', env: {GH_ACT_TEST: 'parse'}};
454 : 1 : cmdData.cmd_ext = 1;
455 : 1 : cmdData.cmd_desc = `${CMD} -t InvalidType`;
456 : 1 :
457 : 1 : cmdData.cmd_skip = false;
458 : 1 : suites.get(suiteDesc).push(cmdData);
459 : 1 :
460 : 1 : // TEST SUITE #3 - Test valid options
461 : 1 : suiteDesc = 'Test valid options';
462 : 1 : suites.set(suiteDesc, []);
463 : 1 :
464 : 1 : // TEST ### - gh-act user
465 : 1 : cmdData = {run_after: null};
466 : 1 :
467 : 1 : cmdData.cmd_act = `node ${cmdPath} user`;
468 : 1 : cmdData.cmd_exp = '';
469 : 1 : cmdData.cmd_inp = '';
470 : 1 :
471 : 1 : cmdData.cmd_out = `{"user":false,"output":"v","type":"","debug":false,"cache":true,"userAgent":"gh-act/v1.0.0","apiVersion":"2022-11-28","cacheDir":"${cacheDir}","authTokenFile":".auth-token"}`;
472 : 1 : cmdData.cmd_err = '';
473 : 1 :
474 : 1 : cmdData.cmd_opt = {encoding: 'UTF-8', env: {GH_ACT_TEST: 'parse'}};
475 : 1 : cmdData.cmd_ext = 0;
476 : 1 : cmdData.cmd_desc = `${CMD} user`;
477 : 1 :
478 : 1 : cmdData.cmd_skip = false;
479 : 1 : suites.get(suiteDesc).push(cmdData);
480 : 1 :
481 : 1 : // TEST ### - gh-act -d user
482 : 1 : cmdData = {run_after: null};
483 : 1 :
484 : 1 : cmdData.cmd_act = `node ${cmdPath} -d user`;
485 : 1 : cmdData.cmd_exp = '';
486 : 1 : cmdData.cmd_inp = '';
487 : 1 :
488 : 1 : cmdData.cmd_out = `{"user":false,"output":"v","type":"","debug":true,"cache":true,"userAgent":"gh-act/v1.0.0","apiVersion":"2022-11-28","cacheDir":"${cacheDir}","authTokenFile":".auth-token"}`;
489 : 1 : cmdData.cmd_err = '';
490 : 1 :
491 : 1 : cmdData.cmd_opt = {encoding: 'UTF-8', env: {GH_ACT_TEST: 'parse'}};
492 : 1 : cmdData.cmd_ext = 0;
493 : 1 : cmdData.cmd_desc = `${CMD} -d user`;
494 : 1 :
495 : 1 : cmdData.cmd_skip = false;
496 : 1 : suites.get(suiteDesc).push(cmdData);
497 : 1 :
498 : 1 : // TEST ### - gh-act --user --debug --table --type CreateEvent user
499 : 1 : cmdData = {run_after: null};
500 : 1 :
501 : 1 : cmdData.cmd_act = `node ${cmdPath} --user --debug --table --type CreateEvent user`;
502 : 1 : cmdData.cmd_exp = '';
503 : 1 : cmdData.cmd_inp = '';
504 : 1 :
505 : 1 : cmdData.cmd_out = `{"user":true,"output":"b","type":"CreateEvent","debug":true,"cache":true,"userAgent":"gh-act/v1.0.0","apiVersion":"2022-11-28","cacheDir":"${cacheDir}","authTokenFile":".auth-token"}`;
506 : 1 : cmdData.cmd_err = '';
507 : 1 :
508 : 1 : cmdData.cmd_opt = {encoding: 'UTF-8', env: {GH_ACT_TEST: 'parse'}};
509 : 1 : cmdData.cmd_ext = 0;
510 : 1 : cmdData.cmd_desc = `${CMD} --user --debug --table --type CreateEvent user`;
511 : 1 :
512 : 1 : cmdData.cmd_skip = false;
513 : 1 : suites.get(suiteDesc).push(cmdData);
514 : 1 :
515 : 1 : // TEST SUITE #4 - Test fetching user
516 : 1 : suiteDesc = 'Test fetching user';
517 : 1 : suites.set(suiteDesc, []);
518 : 1 :
519 : 1 : // TEST ### - gh-act github
520 : 1 : cmdData = {run_before: null, run_after: null};
521 : 1 :
522 : 1 : cmdData.cmd_act = `node ${cmdPath} github`;
523 : 1 : cmdData.cmd_exp = '';
524 : 1 : cmdData.cmd_inp = '';
525 : 1 :
526 : 1 : cmdData.cmd_out = 'https://api.github.com/orgs/github';
527 : 1 : cmdData.cmd_err = '';
528 : 1 :
529 : 1 : cmdData.cmd_opt = {encoding: 'UTF-8', env: {GH_ACT_TEST: 'fetchUser'}};
530 : 1 : cmdData.cmd_ext = 0;
531 : 1 : cmdData.cmd_desc = `${CMD} github`;
532 : 1 :
533 [ + ]: 1 : cmdData.run_before = cmdData.run_after = () => {
534 : 2 : execSync(`node ${path.join(__dirname, '../lib/gh-act.js')} --nocache`);
535 : 2 : }
536 : 1 :
537 : 1 : cmdData.cmd_skip = false;
538 : 1 : suites.get(suiteDesc).push(cmdData);
539 : 1 :
540 : 1 : // TEST ### - gh-act essamatefelsherif
541 : 1 : cmdData = {run_before: null, run_after: null};
542 : 1 :
543 : 1 : cmdData.cmd_act = `node ${cmdPath} essamatefelsherif`;
544 : 1 : cmdData.cmd_exp = '';
545 : 1 : cmdData.cmd_inp = '';
546 : 1 :
547 : 1 : cmdData.cmd_out = 'https://api.github.com/users/essamatefelsherif';
548 : 1 : cmdData.cmd_err = '';
549 : 1 :
550 : 1 : cmdData.cmd_opt = {encoding: 'UTF-8', env: {GH_ACT_TEST: 'fetchUser'}};
551 : 1 : cmdData.cmd_ext = 0;
552 : 1 : cmdData.cmd_desc = `${CMD} essamatefelsherif`;
553 : 1 :
554 [ + ]: 1 : cmdData.run_before = cmdData.run_after = () => {
555 : 2 : execSync(`node ${path.join(__dirname, '../lib/gh-act.js')} --nocache`);
556 : 2 : }
557 : 1 :
558 : 1 : cmdData.cmd_skip = false;
559 : 1 : suites.get(suiteDesc).push(cmdData);
560 : 1 :
561 : 1 : // TEST ### - gh-act --debug --user essamatefelsherif
562 : 1 : cmdData = {run_before: null, run_after: null};
563 : 1 :
564 : 1 : cmdData.cmd_act = `node ${cmdPath} --debug --user essamatefelsherif`;
565 : 1 : cmdData.cmd_exp = '';
566 : 1 : cmdData.cmd_inp = '';
567 : 1 :
568 : 1 : cmdData.cmd_out = 'https://api.github.com/users/essamatefelsherif';
569 : 1 : cmdData.cmd_err = `\
570 : 1 : GET /orgs/essamatefelsherif HTTP/1.1\
571 : 1 : GET /users/essamatefelsherif HTTP/1.1`;
572 : 1 :
573 : 1 : cmdData.cmd_opt = {encoding: 'UTF-8', env: {GH_ACT_TEST: 'fetchUser'}};
574 : 1 : cmdData.cmd_ext = 0;
575 : 1 : cmdData.cmd_desc = `${CMD} --debug --user essamatefelsherif`;
576 : 1 :
577 [ + ]: 1 : cmdData.run_before = cmdData.run_after = () => {
578 : 2 : execSync(`node ${path.join(__dirname, '../lib/gh-act.js')} --nocache`);
579 : 2 : }
580 : 1 :
581 : 1 : cmdData.cmd_skip = false;
582 : 1 : suites.get(suiteDesc).push(cmdData);
583 : 1 :
584 : 1 : // TEST ### - gh-act ___
585 : 1 : cmdData = {run_before: null, run_after: null};
586 : 1 :
587 : 1 : cmdData.cmd_act = `node ${cmdPath} ___`;
588 : 1 : cmdData.cmd_exp = '';
589 : 1 : cmdData.cmd_inp = '';
590 : 1 :
591 : 1 : cmdData.cmd_out = '';
592 : 1 : cmdData.cmd_err = `\
593 : 1 : ${CMD}: GitHub user '___' not found
594 : 1 : Try '${CMD} --help' for more information.
595 : 1 : `;
596 : 1 :
597 : 1 : cmdData.cmd_opt = {encoding: 'UTF-8', env: {GH_ACT_TEST: 'fetchUser'}};
598 : 1 : cmdData.cmd_ext = 1;
599 : 1 : cmdData.cmd_desc = `${CMD} ___`;
600 : 1 :
601 [ + ]: 1 : cmdData.run_before = cmdData.run_after = () => {
602 : 2 : execSync(`node ${path.join(__dirname, '../lib/gh-act.js')} --nocache`);
603 : 2 : }
604 : 1 :
605 : 1 : cmdData.cmd_skip = false;
606 : 1 : suites.get(suiteDesc).push(cmdData);
607 : 1 :
608 : 1 : // TEST ### - gh-act github // read from cache
609 : 1 : cmdData = {run_before: null, run_after: null};
610 : 1 :
611 : 1 : cmdData.cmd_act = `node ${cmdPath} github`;
612 : 1 : cmdData.cmd_exp = '';
613 : 1 : cmdData.cmd_inp = '';
614 : 1 :
615 : 1 : cmdData.cmd_out = 'https://api.github.com/orgs/github';
616 : 1 : cmdData.cmd_err = '';
617 : 1 :
618 : 1 : cmdData.cmd_opt = {encoding: 'UTF-8', env: {GH_ACT_TEST: 'fetchUser'}};
619 : 1 : cmdData.cmd_ext = 0;
620 : 1 : cmdData.cmd_desc = `${CMD} github // read from cache`;
621 : 1 :
622 [ + ]: 1 : cmdData.run_before = () => {
623 : 1 : execSync(`node ${path.join(__dirname, '../lib/gh-act.js')} github`, {encoding: 'UTF-8', env: {GH_ACT_TEST: 'fetchUser'}});
624 : 1 : }
625 [ + ]: 1 : cmdData.run_after = () => {
626 : 1 : execSync(`node ${path.join(__dirname, '../lib/gh-act.js')} --nocache`);
627 : 1 : }
628 : 1 :
629 : 1 : cmdData.cmd_skip = false;
630 : 1 : suites.get(suiteDesc).push(cmdData);
631 : 1 :
632 : 1 : // TEST ### - gh-act essamatefelsherif // read from cache
633 : 1 : cmdData = {run_before: null, run_after: null};
634 : 1 :
635 : 1 : cmdData.cmd_act = `node ${cmdPath} essamatefelsherif`;
636 : 1 : cmdData.cmd_exp = '';
637 : 1 : cmdData.cmd_inp = '';
638 : 1 :
639 : 1 : cmdData.cmd_out = 'https://api.github.com/users/essamatefelsherif';
640 : 1 : cmdData.cmd_err = '';
641 : 1 :
642 : 1 : cmdData.cmd_opt = {encoding: 'UTF-8', env: {GH_ACT_TEST: 'fetchUser'}};
643 : 1 : cmdData.cmd_ext = 0;
644 : 1 : cmdData.cmd_desc = `${CMD} essamatefelsherif // read from cache`;
645 : 1 :
646 [ + ]: 1 : cmdData.run_before = () => {
647 : 1 : execSync(`node ${path.join(__dirname, '../lib/gh-act.js')} essamatefelsherif`, {encoding: 'UTF-8', env: {GH_ACT_TEST: 'fetchUser'}});
648 : 1 : }
649 [ + ]: 1 : cmdData.run_after = () => {
650 : 1 : execSync(`node ${path.join(__dirname, '../lib/gh-act.js')} --nocache`);
651 : 1 : }
652 : 1 :
653 : 1 : cmdData.cmd_skip = false;
654 : 1 : suites.get(suiteDesc).push(cmdData);
655 : 1 :
656 : 1 : // TEST SUITE #5 - Test fetching user activities
657 : 1 : suiteDesc = 'Test fetching user activities';
658 : 1 : suites.set(suiteDesc, []);
659 : 1 :
660 : 1 : // TEST ### - gh-act github
661 : 1 : cmdData = {run_before: null, run_after: null};
662 : 1 :
663 : 1 : cmdData.cmd_act = `node ${cmdPath} github`;
664 : 1 : cmdData.cmd_exp = '';
665 : 1 : cmdData.cmd_inp = '';
666 : 1 :
667 : 1 : cmdData.cmd_out = '[object Array]';
668 : 1 : cmdData.cmd_err = '';
669 : 1 :
670 : 1 : cmdData.cmd_opt = {encoding: 'UTF-8', env: {GH_ACT_TEST: 'fetchAct'}};
671 : 1 : cmdData.cmd_ext = 0;
672 : 1 : cmdData.cmd_desc = `${CMD} github`;
673 : 1 :
674 [ + ]: 1 : cmdData.run_before = cmdData.run_after = () => {
675 : 2 : execSync(`node ${path.join(__dirname, '../lib/gh-act.js')} --nocache`);
676 : 2 : }
677 : 1 :
678 : 1 : cmdData.cmd_skip = false;
679 : 1 : suites.get(suiteDesc).push(cmdData);
680 : 1 :
681 : 1 : // TEST ### - gh-act essamatefelsherif
682 : 1 : cmdData = {run_before: null, run_after: null};
683 : 1 :
684 : 1 : cmdData.cmd_act = `node ${cmdPath} essamatefelsherif`;
685 : 1 : cmdData.cmd_exp = '';
686 : 1 : cmdData.cmd_inp = '';
687 : 1 :
688 : 1 : cmdData.cmd_out = '[object Array]';
689 : 1 : cmdData.cmd_err = '';
690 : 1 :
691 : 1 : cmdData.cmd_opt = {encoding: 'UTF-8', env: {GH_ACT_TEST: 'fetchAct'}};
692 : 1 : cmdData.cmd_ext = 0;
693 : 1 : cmdData.cmd_desc = `${CMD} essamatefelsherif`;
694 : 1 :
695 [ + ]: 1 : cmdData.run_before = cmdData.run_after = () => {
696 : 2 : execSync(`node ${path.join(__dirname, '../lib/gh-act.js')} --nocache`);
697 : 2 : }
698 : 1 :
699 : 1 : cmdData.cmd_skip = false;
700 : 1 : suites.get(suiteDesc).push(cmdData);
701 : 1 :
702 : 1 : // TEST ### - gh-act github // read from cache
703 : 1 : cmdData = {run_before: null, run_after: null};
704 : 1 :
705 : 1 : cmdData.cmd_act = `node ${cmdPath} github`;
706 : 1 : cmdData.cmd_exp = '';
707 : 1 : cmdData.cmd_inp = '';
708 : 1 :
709 : 1 : cmdData.cmd_out = '[object Array]';
710 : 1 : cmdData.cmd_err = '';
711 : 1 :
712 : 1 : cmdData.cmd_opt = {encoding: 'UTF-8', env: {GH_ACT_TEST: 'fetchAct'}};
713 : 1 : cmdData.cmd_ext = 0;
714 : 1 : cmdData.cmd_desc = `${CMD} github // read from cache`;
715 : 1 :
716 [ + ]: 1 : cmdData.run_before = () => {
717 : 1 : execSync(`node ${path.join(__dirname, '../lib/gh-act.js')} github`, {encoding: 'UTF-8', env: {GH_ACT_TEST: 'fetchAct'}});
718 : 1 : }
719 [ + ]: 1 : cmdData.run_after = () => {
720 : 1 : execSync(`node ${path.join(__dirname, '../lib/gh-act.js')} --nocache`);
721 : 1 : }
722 : 1 :
723 : 1 : cmdData.cmd_skip = false;
724 : 1 : suites.get(suiteDesc).push(cmdData);
725 : 1 :
726 : 1 : // TEST ### - gh-act essamatefelsherif // read from cache
727 : 1 : cmdData = {run_before: null, run_after: null};
728 : 1 :
729 : 1 : cmdData.cmd_act = `node ${cmdPath} essamatefelsherif`;
730 : 1 : cmdData.cmd_exp = '';
731 : 1 : cmdData.cmd_inp = '';
732 : 1 :
733 : 1 : cmdData.cmd_out = '[object Array]';
734 : 1 : cmdData.cmd_err = '';
735 : 1 :
736 : 1 : cmdData.cmd_opt = {encoding: 'UTF-8', env: {GH_ACT_TEST: 'fetchAct'}};
737 : 1 : cmdData.cmd_ext = 0;
738 : 1 : cmdData.cmd_desc = `${CMD} essamatefelsherif // read from cache`;
739 : 1 :
740 [ + ]: 1 : cmdData.run_before = () => {
741 : 1 : execSync(`node ${path.join(__dirname, '../lib/gh-act.js')} essamatefelsherif`, {encoding: 'UTF-8', env: {GH_ACT_TEST: 'fetchAct'}});
742 : 1 : }
743 [ + ]: 1 : cmdData.run_after = () => {
744 : 1 : execSync(`node ${path.join(__dirname, '../lib/gh-act.js')} --nocache`);
745 : 1 : }
746 : 1 :
747 : 1 : cmdData.cmd_skip = false;
748 : 1 : suites.get(suiteDesc).push(cmdData);
749 : 1 :
750 : 1 : // TEST SUITE #6 - Test similarity
751 : 1 : suiteDesc = 'Test similarity test';
752 : 1 : suites.set(suiteDesc, []);
753 : 1 :
754 : 1 : // TEST ### - gh-act --user github
755 : 1 : cmdData = {run_before: null, run_after: null};
756 : 1 :
757 : 1 : cmdData.cmd_act = `node ${cmdPath} --user github`;
758 : 1 : cmdData.cmd_exp = `node ${cmdPath} --user github`;
759 : 1 : cmdData.cmd_inp = '';
760 : 1 :
761 : 1 : cmdData.cmd_out = '';
762 : 1 : cmdData.cmd_err = '';
763 : 1 :
764 : 1 : cmdData.cmd_opt = {encoding: 'UTF-8'};
765 : 1 : cmdData.cmd_ext = 0;
766 : 1 : cmdData.cmd_desc = `${CMD} --user github`;
767 : 1 :
768 : 1 : cmdData.cmd_skip = false;
769 : 1 : suites.get(suiteDesc).push(cmdData);
770 : 1 :
771 : 1 : // TEST ### - gh-act --user essamatefelsherif
772 : 1 : cmdData = {run_before: null, run_after: null};
773 : 1 :
774 : 1 : cmdData.cmd_act = `node ${cmdPath} --user essamatefelsherif`;
775 : 1 : cmdData.cmd_exp = `node ${cmdPath} --user essamatefelsherif`;
776 : 1 : cmdData.cmd_inp = '';
777 : 1 :
778 : 1 : cmdData.cmd_out = '';
779 : 1 : cmdData.cmd_err = '';
780 : 1 :
781 : 1 : cmdData.cmd_opt = {encoding: 'UTF-8'};
782 : 1 : cmdData.cmd_ext = 0;
783 : 1 : cmdData.cmd_desc = `${CMD} --user essamatefelsherif`;
784 : 1 :
785 : 1 : cmdData.cmd_skip = false;
786 : 1 : suites.get(suiteDesc).push(cmdData);
787 : 1 :
788 : 1 : // TEST ### - gh-act github
789 : 1 : cmdData = {run_before: null, run_after: null};
790 : 1 :
791 : 1 : cmdData.cmd_act = `node ${cmdPath} github`;
792 : 1 : cmdData.cmd_exp = `node ${cmdPath} github`;
793 : 1 : cmdData.cmd_inp = '';
794 : 1 :
795 : 1 : cmdData.cmd_out = '';
796 : 1 : cmdData.cmd_err = '';
797 : 1 :
798 : 1 : cmdData.cmd_opt = {encoding: 'UTF-8'};
799 : 1 : cmdData.cmd_ext = 0;
800 : 1 : cmdData.cmd_desc = `${CMD} github`;
801 : 1 :
802 : 1 : cmdData.cmd_skip = false;
803 : 1 : suites.get(suiteDesc).push(cmdData);
804 : 1 :
805 : 1 : // TEST ### - gh-act essamatefelsherif
806 : 1 : cmdData = {run_before: null, run_after: null};
807 : 1 :
808 : 1 : cmdData.cmd_act = `node ${cmdPath} essamatefelsherif`;
809 : 1 : cmdData.cmd_exp = `node ${cmdPath} essamatefelsherif`;
810 : 1 : cmdData.cmd_inp = '';
811 : 1 :
812 : 1 : cmdData.cmd_out = '';
813 : 1 : cmdData.cmd_err = '';
814 : 1 :
815 : 1 : cmdData.cmd_opt = {encoding: 'UTF-8'};
816 : 1 : cmdData.cmd_ext = 0;
817 : 1 : cmdData.cmd_desc = `${CMD} essamatefelsherif`;
818 : 1 :
819 : 1 : cmdData.cmd_skip = false;
820 : 1 : suites.get(suiteDesc).push(cmdData);
821 : 1 :
822 : 1 : // TEST SUITE #7 - Test class GitHubEvent
823 : 1 : suiteDesc = 'Test class GitHubEvent';
824 : 1 : suites.set(suiteDesc, []);
825 : 1 :
826 : 1 : // TEST ### - test new GitHubEvent( <PushEvent> )
827 : 1 : cmdData = {run_before: null, run_after: null};
828 : 1 :
829 : 1 : cmdData.cmd_act = `node ${classPath}`;
830 : 1 : cmdData.cmd_exp = '';
831 : 1 : cmdData.cmd_inp = JSON.stringify({
832 : 1 : id: '45647032891',
833 : 1 : type: 'PushEvent',
834 : 1 : actor: {},
835 : 1 : repo: { name: 'essamatefelsherif/essamatefelsherif', },
836 : 1 : payload: {size: 1, },
837 : 1 : public: true,
838 : 1 : created_at: '2025-01-17T02:46:38Z'
839 : 1 : });
840 : 1 :
841 : 1 : cmdData.cmd_out = 'Pushed 1 commit to repository essamatefelsherif/essamatefelsherif';
842 : 1 : cmdData.cmd_err = '';
843 : 1 :
844 : 1 : cmdData.cmd_opt = {encoding: 'UTF-8', env: {GH_ACT_TEST: 'testGitHubEvent'}};
845 : 1 : cmdData.cmd_ext = 0;
846 : 1 : cmdData.cmd_desc = `test new GitHubEvent( <PushEvent> )`;
847 : 1 :
848 : 1 : cmdData.cmd_skip = false;
849 : 1 : suites.get(suiteDesc).push(cmdData);
850 : 1 :
851 : 1 : // TEST ### - test new GitHubEvent( <CreateEvent> )
852 : 1 : cmdData = {run_before: null, run_after: null};
853 : 1 :
854 : 1 : cmdData.cmd_act = `node ${classPath}`;
855 : 1 : cmdData.cmd_exp = '';
856 : 1 : cmdData.cmd_inp = JSON.stringify({
857 : 1 : id: '45951298389',
858 : 1 : type: 'CreateEvent',
859 : 1 : actor: {
860 : 1 : id: 52518661,
861 : 1 : login: 'essamatefelsherif',
862 : 1 : display_login: 'essamatefelsherif',
863 : 1 : },
864 : 1 : repo: { name: 'essamatefelsherif/whatwg-xhr', },
865 : 1 : payload: { ref: 'v1.0.0', ref_type: 'tag'},
866 : 1 : public: true,
867 : 1 : created_at: '2025-01-27T14:54:46Z'
868 : 1 : });
869 : 1 :
870 : 1 : cmdData.cmd_out = 'Created tag v1.0.0 in repository essamatefelsherif/whatwg-xhr';
871 : 1 : cmdData.cmd_err = '';
872 : 1 :
873 : 1 : cmdData.cmd_opt = {encoding: 'UTF-8', env: {GH_ACT_TEST: 'testGitHubEvent'}};
874 : 1 : cmdData.cmd_ext = 0;
875 : 1 : cmdData.cmd_desc = `test new GitHubEvent( <CreateEvent> )`;
876 : 1 :
877 : 1 : cmdData.cmd_skip = false;
878 : 1 : suites.get(suiteDesc).push(cmdData);
879 : 1 : }
880 : 1 :
881 : 1 : /**
882 : 1 : * function main()
883 : 1 : * function verifyShellCmd()
884 : 1 : * function loadTestData()
885 : 1 : * function nodeRunner()
886 : 1 : * function defRunner()
887 : 1 : * async function makeTest()
888 : 1 : * function getCmdOutput()
889 : 1 : * function parseCmdLine()
890 : 1 : * function getHelp()
891 : 1 : * function getError()
892 : 1 : *
893 : 1 : * @func nodeRunner
894 : 1 : * @param {object} runner - The node core module 'node:test' object.
895 : 1 : * @desc Carry out the loaded tests using node test runner.
896 : 1 : */
897 [ + ]: 1 : function nodeRunner(runner){
898 : 1 :
899 [ + ]: 1 : for(let [suiteDesc, suiteTests] of suites){
900 [ + ]: 8 : runner.suite(suiteDesc, () => {
901 [ + ]: 8 : for(let cmdObj of suiteTests){
902 [ + ]: 35 : runner.test(cmdObj.cmd_desc, {skip: cmdObj.cmd_skip}, async () => {
903 : 35 : await makeTest(cmdObj);
904 : 35 : });
905 : 35 : }
906 : 8 : });
907 : 8 : }
908 : 1 : }
909 : 1 :
910 : 1 : /* node:coverage disable */
911 : : /**
912 : : * function main()
913 : : * function verifyShellCmd()
914 : : * function loadTestData()
915 : : * function nodeRunner()
916 : : * function defRunner()
917 : : * async function makeTest()
918 : : * function getCmdOutput()
919 : : * function parseCmdLine()
920 : : * function getHelp()
921 : : * function getError()
922 : : *
923 : : * @func defRunner
924 : : * @async
925 : : * @desc Carry out the loaded tests using this developed test runner.
926 : : */
927 : : async function defRunner(){
928 : :
929 : : cmdOptions.verbose && process.on('exit', () => {
930 : : console.log();
931 : : console.log('▶ tests', --testCount);
932 : : console.log('▶ suites', suites.size);
933 : : console.log('▶ pass', passCount);
934 : : console.log('▶ fail', failCount);
935 : : console.log('▶ cancelled', cancelCount);
936 : : console.log('▶ skipped', skipCount);
937 : : console.log('▶ todo', todoCount);
938 : : console.log('▶ duration_ms', Math.round(Date.now() - startTime));
939 : : });
940 : :
941 : : cmdOptions.verbose && console.error();
942 : : for(let [suiteDesc, suiteTests] of suites)
943 : : for(let cmdObj of suiteTests)
944 : : if(!cmdObj.cmd_skip)
945 : : await makeTest(cmdObj);
946 : :
947 : : cmdOptions.verbose && console.log();
948 : : }
949 : : /* node:coverage enable */
950 : 1 :
951 : 1 : /**
952 : 1 : * function main()
953 : 1 : * function verifyShellCmd()
954 : 1 : * function loadTestData()
955 : 1 : * function nodeRunner()
956 : 1 : * function defRunner()
957 : 1 : * async function makeTest()
958 : 1 : * function getCmdOutput()
959 : 1 : * function parseCmdLine()
960 : 1 : * function getHelp()
961 : 1 : * function getError()
962 : 1 : *
963 : 1 : * @func makeTest
964 : 1 : * @async
965 : 1 : * @param {object} obj - The test data object.
966 : 1 : * @desc Carry out a single test.
967 : 1 : */
968 [ + ]: 35 : async function makeTest(obj){
969 : 35 :
970 : 35 : const testID = testCount++;
971 : 35 :
972 : 35 : let preMsg = `Test#${(testID).toString().padStart(3, '0')} ... `;
973 : 35 : let postMsg = preMsg;
974 : 35 :
975 : 35 : preMsg += `Initiate ... ${obj.cmd_desc}`;
976 [ - ]: 35 : cmdOptions.verbose && console.error(preMsg);
977 : 35 :
978 [ + ]: 35 : obj.run_before && obj.run_before(obj);
979 : 35 :
980 : 35 : let [out_act, out_exp, prc_act, prc_exp] = await getCmdOutput(obj);
981 : 35 :
982 [ + ]: 35 : if(out_exp === null){
983 : 31 : out_exp = {stdout: obj.cmd_out, stderr: obj.cmd_err};
984 : 31 : prc_exp = {exitCode: obj.cmd_ext};
985 : 31 : }
986 : 35 :
987 : 35 : if(!cmdOptions.verbose){
988 : 35 : assert.strictEqual(out_act.stdout, out_exp.stdout);
989 : 35 : assert.strictEqual(out_act.stderr, out_exp.stderr);
990 : 35 : assert.strictEqual(prc_act.exitCode, prc_exp.exitCode);
991 : 35 :
992 [ + ]: 35 : obj.run_after && obj.run_after(obj);
993 [ - ]: 35 : }
994 : 0 : else{
995 : 0 : try{
996 : 0 : assert.strictEqual(out_act.stdout, out_exp.stdout);
997 : 0 : assert.strictEqual(out_act.stderr, out_exp.stderr);
998 : 0 : assert.strictEqual(prc_act.exitCode, prc_exp.exitCode);
999 : 0 :
1000 : 0 : obj.run_after && obj.run_after(obj);
1001 : 0 :
1002 : 0 : passCount++;
1003 : 0 :
1004 : 0 : postMsg += `Success ... ${obj.cmd_desc}`;
1005 : 0 : cmdOptions.verbose && console.error(postMsg);
1006 : 0 : }
1007 : 0 : catch(e){
1008 : 0 : failCount++;
1009 : 0 :
1010 : 0 : postMsg += `Failure ... ${obj.cmd_desc}`;
1011 : 0 : cmdOptions.verbose && console.error(postMsg);
1012 : 0 : }
1013 : 0 : }
1014 : 35 : }
1015 : 1 :
1016 : 1 : /**
1017 : 1 : * function main()
1018 : 1 : * function verifyShellCmd()
1019 : 1 : * function loadTestData()
1020 : 1 : * function nodeRunner()
1021 : 1 : * function defRunner()
1022 : 1 : * async function makeTest()
1023 : 1 : * function getCmdOutput()
1024 : 1 : * function parseCmdLine()
1025 : 1 : * function getHelp()
1026 : 1 : * function getError()
1027 : 1 : *
1028 : 1 : * @func getCmdOutput
1029 : 1 : * @param {object} cmdObj - The test data object.
1030 : 1 : * @desc Carry out a single test.
1031 : 1 : */
1032 [ + ]: 35 : function getCmdOutput(cmdObj){
1033 : 35 :
1034 : 35 : let proc_act, proc_exp;
1035 : 35 :
1036 [ + ]: 35 : let prom_act = new Promise((resolve, reject) => {
1037 : 35 :
1038 [ + ]: 35 : proc_act = exec(cmdObj.cmd_act, cmdObj.cmd_opt, (err, stdout, stderr) => {
1039 : 35 : resolve({stdout, stderr});
1040 : 35 : });
1041 : 35 : proc_act.stdin.write(cmdObj.cmd_inp);
1042 [ - ]: 35 : cmdObj.cmd_signal && proc_act.kill(cmdObj.cmd_signal);
1043 : 35 : proc_act.stdin.end();
1044 : 35 : });
1045 : 35 :
1046 [ + ]: 35 : if(cmdObj.cmd_exp){
1047 : 4 :
1048 [ + ]: 4 : let prom_exp = new Promise((resolve, reject) => {
1049 [ + ]: 4 : proc_exp = exec(cmdObj.cmd_exp, cmdObj.cmd_opt, (err, stdout, stderr) => {
1050 : 4 : resolve({stdout, stderr});
1051 : 4 : });
1052 : 4 : proc_exp.stdin.write(cmdObj.cmd_inp);
1053 [ - ]: 4 : cmdObj.cmd_signal && proc_exp.kill(cmdObj.cmd_signal);
1054 : 4 : proc_exp.stdin.end();
1055 : 4 : });
1056 : 4 :
1057 : 4 : return Promise.all([prom_act, prom_exp, proc_act, proc_exp]);
1058 [ + ]: 4 : }
1059 : 31 :
1060 : 31 : return Promise.all([prom_act, null, proc_act, null]);
1061 : 35 : }
|