Branch data Line data Source code
1 [ + ]: 1 : /**
2 : 1 : * @module wpt-xhr-cmd-test
3 : 1 : * @desc The wpt-xhr.cmd command line interface test module.
4 : 1 : * @version 1.0.0
5 : 1 : * @author Essam A. El-Sherif
6 : 1 : */
7 : 1 :
8 : 1 : /** Import nodeJS core modules */
9 : 1 : import assert from 'node:assert/strict';
10 : 1 : import { exec } from 'node:child_process';
11 : 1 : import { fileURLToPath } from 'node:url';
12 : 1 : import { dirname, join } from 'node:path';
13 : 1 :
14 : 1 : /** Emulate commonJS __filename and __dirname constants */
15 : 1 : const __filename = fileURLToPath(import.meta.url);
16 : 1 : const __dirname = dirname(__filename);
17 : 1 :
18 : 1 : /** Prepare test environment */
19 : 1 : const srcFile = join(__dirname, 'wpt-xhr.cmd.js');
20 : 1 : const CMD = `node ${srcFile}`;
21 : 1 : const CMD_BIN = 'wpt-xhr';
22 : 1 :
23 : 1 : const cmdOptions = {
24 : 1 : verbose: true,
25 [ - ]: 1 : runner: process.env.WPT_XHR_TEST === 'default' ? 'default' : 'node',
26 : 1 : };
27 : 1 :
28 : 1 : let testCount = 1;
29 : 1 : let passCount = 0;
30 : 1 : let failCount = 0;
31 : 1 : let cancelCount = 0;
32 : 1 : let skipCount = 0;
33 : 1 : let todoCount = 0;
34 : 1 : let startTime = Date.now();
35 : 1 :
36 : 1 : const suites = new Map();
37 : 1 :
38 : 1 : /**
39 : 1 : * function main()
40 : 1 : * function loadTestData()
41 : 1 : * function nodeRunner()
42 : 1 : * function defRunner()
43 : 1 : * async function makeTest()
44 : 1 : * function getCmdOutput()
45 : 1 : *
46 : 1 : * @func Main
47 : 1 : * @desc The application entry point function
48 : 1 : */
49 [ + ]: 1 : (() => {
50 : 1 : loadTestData();
51 : 1 :
52 : 1 : if(cmdOptions.runner === 'node'){
53 : 1 : import('node:test')
54 [ + ]: 1 : .then(runner => {
55 : 1 : cmdOptions.verbose = false;
56 : 1 : nodeRunner(runner);
57 : 1 : })
58 : 1 : /* node:coverage disable */
59 : : .catch(() => {
60 : : defRunner();
61 : : });
62 [ - ]: : }
63 : : else
64 : : if(cmdOptions.runner === 'default'){
65 : : defRunner();
66 : : }
67 : : /* node:coverage enable */
68 : 1 :
69 : 1 : })('Main Function');
70 : 1 :
71 : 1 : /**
72 : 1 : * @func loadTestData
73 : 1 : * @desc Load test data
74 : 1 : */
75 [ + ]: 1 : function loadTestData(){
76 : 1 :
77 : 1 : let cmdData = null;
78 : 1 : let suiteDesc = '';
79 : 1 :
80 : 1 : // TEST SUITE #1 - Test common coreutils options
81 : 1 : suiteDesc = 'Test common coreutils options';
82 : 1 : suites.set(suiteDesc, []);
83 : 1 :
84 : 1 : // TEST ### - wpt-xhr --help
85 : 1 : cmdData = {};
86 : 1 :
87 : 1 : cmdData.cmd_act = `${CMD} --help`;
88 : 1 :
89 : 1 : cmdData.cmd_out = `\
90 : 1 : Usage: wpt-xhr [OPTIONS]... [URL]
91 : 1 :
92 : 1 : Test the developed *XMLHttpRequest* module for compliance with
93 : 1 : WHATWG XMLHttpRequest specs using the web-platform-tests live
94 : 1 : or locally installed server as the testing server.
95 : 1 :
96 : 1 : With no URL, testing server is determined by the options given.
97 : 1 :
98 : 1 : -t, --host[=<host>] wpt host (default wpt.live)
99 : 1 : -p, --port[=<port>] wpt port (default 80)
100 : 1 : --path[=<path>] wpt path (default /xhr/resources/)
101 : 1 : -n --node use nodejs test runner API if supported
102 : 1 : -d --def use default test runner
103 : 1 : -v --verbose make the testing operation more talkative
104 : 1 : -h --help display this help and exit
105 : 1 : --version output version information and exit
106 : 1 :
107 : 1 : Note that invalid host, port or path will not be accepted.
108 : 1 :
109 : 1 : Examples:
110 : 1 : wpt-xhr -t wpt.local -p 8000 Means <http://wpt.local:8000/xhr/resources/>
111 : 1 : wpt-xhr Means <http://wpt.live/xhr/resources/>
112 : 1 :
113 : 1 : web-platforms-tests online help: <https://web-platform-tests.org/>
114 : 1 : Full documentation <https://essamatefelsherif.github.io/whatwg-xhr/>\n`;
115 : 1 : cmdData.cmd_err = '';
116 : 1 :
117 : 1 : cmdData.cmd_opt = {encoding: 'UTF-8'};
118 : 1 : cmdData.cmd_ext = 0;
119 : 1 : cmdData.cmd_desc = cmdData.cmd_act.replace(CMD, CMD_BIN);
120 : 1 :
121 : 1 : cmdData.cmd_skip = false;
122 : 1 : suites.get(suiteDesc).push(cmdData);
123 : 1 :
124 : 1 : // TEST ### - wpt-xhr --version
125 : 1 : cmdData = {};
126 : 1 :
127 : 1 : cmdData.cmd_act = `${CMD} --version`;
128 : 1 :
129 : 1 : cmdData.cmd_out = `v1.0.0\n`;
130 : 1 : cmdData.cmd_err = '';
131 : 1 :
132 : 1 : cmdData.cmd_opt = {encoding: 'UTF-8'};
133 : 1 : cmdData.cmd_ext = 0;
134 : 1 : cmdData.cmd_desc = cmdData.cmd_act.replace(CMD, CMD_BIN);
135 : 1 :
136 : 1 : cmdData.cmd_skip = false;
137 : 1 : suites.get(suiteDesc).push(cmdData);
138 : 1 :
139 : 1 : // TEST SUITE #2 - Validate command line options
140 : 1 : suiteDesc = 'Validate command line options';
141 : 1 : suites.set(suiteDesc, []);
142 : 1 :
143 : 1 : // TEST ### - wpt-xhr --xxx
144 : 1 : cmdData = {};
145 : 1 :
146 : 1 : cmdData.cmd_act = `${CMD} --xxx`;
147 : 1 :
148 : 1 : cmdData.cmd_out = '';
149 : 1 : cmdData.cmd_err = `\
150 : 1 : ${CMD_BIN}: invalid option -- 'xxx'
151 : 1 : Try '${CMD_BIN} --help' for more information.\n`;
152 : 1 :
153 : 1 : cmdData.cmd_opt = {encoding: 'UTF-8'};
154 : 1 : cmdData.cmd_ext = 1;
155 : 1 : cmdData.cmd_desc = cmdData.cmd_act.replace(CMD, CMD_BIN);
156 : 1 :
157 : 1 : cmdData.cmd_skip = false;
158 : 1 : suites.get(suiteDesc).push(cmdData);
159 : 1 :
160 : 1 : // TEST ### - wpt-xhr -x
161 : 1 : cmdData = {};
162 : 1 :
163 : 1 : cmdData.cmd_act = `${CMD} -x`;
164 : 1 :
165 : 1 : cmdData.cmd_out = '';
166 : 1 : cmdData.cmd_err = `\
167 : 1 : ${CMD_BIN}: unrecognized option '-x'
168 : 1 : Try '${CMD_BIN} --help' for more information.\n`;
169 : 1 :
170 : 1 : cmdData.cmd_opt = {encoding: 'UTF-8'};
171 : 1 : cmdData.cmd_ext = 1;
172 : 1 : cmdData.cmd_desc = cmdData.cmd_act.replace(CMD, CMD_BIN);
173 : 1 :
174 : 1 : cmdData.cmd_skip = false;
175 : 1 : suites.get(suiteDesc).push(cmdData);
176 : 1 :
177 : 1 : // TEST SUITE #3 - Validate aruments passed to command line options
178 : 1 : suiteDesc = 'Validate aruments passed to command line options';
179 : 1 : suites.set(suiteDesc, []);
180 : 1 :
181 : 1 : // TEST ### - wpt-xhr --host
182 : 1 : cmdData = {};
183 : 1 :
184 : 1 : cmdData.cmd_act = `${CMD} --host`;
185 : 1 :
186 : 1 : cmdData.cmd_out = '';
187 : 1 : cmdData.cmd_err = `\
188 : 1 : ${CMD_BIN}: ambiguous argument ‘’ for ‘--host’
189 : 1 : Try '${CMD_BIN} --help' for more information.\n`;
190 : 1 :
191 : 1 : cmdData.cmd_opt = {encoding: 'UTF-8'};
192 : 1 : cmdData.cmd_ext = 1;
193 : 1 : cmdData.cmd_desc = cmdData.cmd_act.replace(CMD, CMD_BIN);
194 : 1 :
195 : 1 : cmdData.cmd_skip = false;
196 : 1 : suites.get(suiteDesc).push(cmdData);
197 : 1 :
198 : 1 : // TEST ### - wpt-xhr --port
199 : 1 : cmdData = {};
200 : 1 :
201 : 1 : cmdData.cmd_act = `${CMD} --port`;
202 : 1 :
203 : 1 : cmdData.cmd_out = '';
204 : 1 : cmdData.cmd_err = `\
205 : 1 : ${CMD_BIN}: ambiguous argument ‘’ for ‘--port’
206 : 1 : Try '${CMD_BIN} --help' for more information.\n`;
207 : 1 :
208 : 1 : cmdData.cmd_opt = {encoding: 'UTF-8'};
209 : 1 : cmdData.cmd_ext = 1;
210 : 1 : cmdData.cmd_desc = cmdData.cmd_act.replace(CMD, CMD_BIN);
211 : 1 :
212 : 1 : cmdData.cmd_skip = false;
213 : 1 : suites.get(suiteDesc).push(cmdData);
214 : 1 :
215 : 1 : // TEST ### - wpt-xhr --path
216 : 1 : cmdData = {};
217 : 1 :
218 : 1 : cmdData.cmd_act = `${CMD} --path`;
219 : 1 :
220 : 1 : cmdData.cmd_out = '';
221 : 1 : cmdData.cmd_err = `\
222 : 1 : ${CMD_BIN}: ambiguous argument ‘’ for ‘--path’
223 : 1 : Try '${CMD_BIN} --help' for more information.\n`;
224 : 1 :
225 : 1 : cmdData.cmd_opt = {encoding: 'UTF-8'};
226 : 1 : cmdData.cmd_ext = 1;
227 : 1 : cmdData.cmd_desc = cmdData.cmd_act.replace(CMD, CMD_BIN);
228 : 1 :
229 : 1 : cmdData.cmd_skip = false;
230 : 1 : suites.get(suiteDesc).push(cmdData);
231 : 1 :
232 : 1 : // TEST ### - wpt-xhr --host=
233 : 1 : cmdData = {};
234 : 1 :
235 : 1 : cmdData.cmd_act = `${CMD} --host=`;
236 : 1 :
237 : 1 : cmdData.cmd_out = '';
238 : 1 : cmdData.cmd_err = `\
239 : 1 : ${CMD_BIN}: ambiguous argument ‘’ for ‘--host’
240 : 1 : Try '${CMD_BIN} --help' for more information.\n`;
241 : 1 :
242 : 1 : cmdData.cmd_opt = {encoding: 'UTF-8'};
243 : 1 : cmdData.cmd_ext = 1;
244 : 1 : cmdData.cmd_desc = cmdData.cmd_act.replace(CMD, CMD_BIN);
245 : 1 :
246 : 1 : cmdData.cmd_skip = false;
247 : 1 : suites.get(suiteDesc).push(cmdData);
248 : 1 :
249 : 1 : // TEST ### - wpt-xhr --port=
250 : 1 : cmdData = {};
251 : 1 :
252 : 1 : cmdData.cmd_act = `${CMD} --port=`;
253 : 1 :
254 : 1 : cmdData.cmd_out = '';
255 : 1 : cmdData.cmd_err = `\
256 : 1 : ${CMD_BIN}: ambiguous argument ‘’ for ‘--port’
257 : 1 : Try '${CMD_BIN} --help' for more information.\n`;
258 : 1 :
259 : 1 : cmdData.cmd_opt = {encoding: 'UTF-8'};
260 : 1 : cmdData.cmd_ext = 1;
261 : 1 : cmdData.cmd_desc = cmdData.cmd_act.replace(CMD, CMD_BIN);
262 : 1 :
263 : 1 : cmdData.cmd_skip = false;
264 : 1 : suites.get(suiteDesc).push(cmdData);
265 : 1 :
266 : 1 : // TEST ### - wpt-xhr --path=
267 : 1 : cmdData = {};
268 : 1 :
269 : 1 : cmdData.cmd_act = `${CMD} --path=`;
270 : 1 :
271 : 1 : cmdData.cmd_out = '';
272 : 1 : cmdData.cmd_err = `\
273 : 1 : ${CMD_BIN}: ambiguous argument ‘’ for ‘--path’
274 : 1 : Try '${CMD_BIN} --help' for more information.\n`;
275 : 1 :
276 : 1 : cmdData.cmd_opt = {encoding: 'UTF-8'};
277 : 1 : cmdData.cmd_ext = 1;
278 : 1 : cmdData.cmd_desc = cmdData.cmd_act.replace(CMD, CMD_BIN);
279 : 1 :
280 : 1 : cmdData.cmd_skip = false;
281 : 1 : suites.get(suiteDesc).push(cmdData);
282 : 1 :
283 : 1 : // TEST ### - wpt-xhr -t
284 : 1 : cmdData = {};
285 : 1 :
286 : 1 : cmdData.cmd_act = `${CMD} -t`;
287 : 1 :
288 : 1 : cmdData.cmd_out = '';
289 : 1 : cmdData.cmd_err = `\
290 : 1 : ${CMD_BIN}: ambiguous argument ‘’ for ‘-t’
291 : 1 : Try '${CMD_BIN} --help' for more information.
292 : 1 : `;
293 : 1 :
294 : 1 : cmdData.cmd_opt = {encoding: 'UTF-8'};
295 : 1 : cmdData.cmd_ext = 1;
296 : 1 : cmdData.cmd_desc = cmdData.cmd_act.replace(CMD, CMD_BIN);
297 : 1 :
298 : 1 : cmdData.cmd_skip = false;
299 : 1 : suites.get(suiteDesc).push(cmdData);
300 : 1 :
301 : 1 : // TEST ### - wpt-xhr -p
302 : 1 : cmdData = {};
303 : 1 :
304 : 1 : cmdData.cmd_act = `${CMD} -p`;
305 : 1 :
306 : 1 : cmdData.cmd_out = '';
307 : 1 : cmdData.cmd_err = `\
308 : 1 : ${CMD_BIN}: ambiguous argument ‘’ for ‘-p’
309 : 1 : Try '${CMD_BIN} --help' for more information.\n`;
310 : 1 :
311 : 1 : cmdData.cmd_opt = {encoding: 'UTF-8'};
312 : 1 : cmdData.cmd_ext = 1;
313 : 1 : cmdData.cmd_desc = cmdData.cmd_act.replace(CMD, CMD_BIN);
314 : 1 :
315 : 1 : cmdData.cmd_skip = false;
316 : 1 : suites.get(suiteDesc).push(cmdData);
317 : 1 :
318 : 1 : // TEST ### - wpt-xhr --host -t
319 : 1 : cmdData = {};
320 : 1 :
321 : 1 : cmdData.cmd_act = `${CMD} --host -t`;
322 : 1 :
323 : 1 : cmdData.cmd_out = '';
324 : 1 : cmdData.cmd_err = `\
325 : 1 : ${CMD_BIN}: invalid argument ‘-t’ for ‘--host’
326 : 1 : Try '${CMD_BIN} --help' for more information.\n`;
327 : 1 :
328 : 1 : cmdData.cmd_opt = {encoding: 'UTF-8'};
329 : 1 : cmdData.cmd_ext = 1;
330 : 1 : cmdData.cmd_desc = cmdData.cmd_act.replace(CMD, CMD_BIN);
331 : 1 :
332 : 1 : cmdData.cmd_skip = false;
333 : 1 : suites.get(suiteDesc).push(cmdData);
334 : 1 :
335 : 1 : // TEST ### - wpt-xhr --port -p
336 : 1 : cmdData = {};
337 : 1 :
338 : 1 : cmdData.cmd_act = `${CMD} --port -p`;
339 : 1 :
340 : 1 : cmdData.cmd_out = '';
341 : 1 : cmdData.cmd_err = `\
342 : 1 : ${CMD_BIN}: invalid argument ‘-p’ for ‘--port’
343 : 1 : Try '${CMD_BIN} --help' for more information.\n`;
344 : 1 :
345 : 1 : cmdData.cmd_opt = {encoding: 'UTF-8'};
346 : 1 : cmdData.cmd_ext = 1;
347 : 1 : cmdData.cmd_desc = cmdData.cmd_act.replace(CMD, CMD_BIN);
348 : 1 :
349 : 1 : cmdData.cmd_skip = false;
350 : 1 : suites.get(suiteDesc).push(cmdData);
351 : 1 :
352 : 1 : // TEST ### - wpt-xhr --path -p
353 : 1 : cmdData = {};
354 : 1 :
355 : 1 : cmdData.cmd_act = `${CMD} --path -p`;
356 : 1 :
357 : 1 : cmdData.cmd_out = '';
358 : 1 : cmdData.cmd_err = `\
359 : 1 : ${CMD_BIN}: invalid argument ‘-p’ for ‘--path’
360 : 1 : Try '${CMD_BIN} --help' for more information.\n`;
361 : 1 :
362 : 1 : cmdData.cmd_opt = {encoding: 'UTF-8'};
363 : 1 : cmdData.cmd_ext = 1;
364 : 1 : cmdData.cmd_desc = cmdData.cmd_act.replace(CMD, CMD_BIN);
365 : 1 :
366 : 1 : cmdData.cmd_skip = false;
367 : 1 : suites.get(suiteDesc).push(cmdData);
368 : 1 :
369 : 1 : // TEST ### - wpt-xhr --path xhr
370 : 1 : cmdData = {};
371 : 1 :
372 : 1 : cmdData.cmd_act = `${CMD} --path xhr`;
373 : 1 :
374 : 1 : cmdData.cmd_out = '';
375 : 1 : cmdData.cmd_err = `\
376 : 1 : ${CMD_BIN}: invalid argument ‘xhr’ for ‘--path’
377 : 1 : Try '${CMD_BIN} --help' for more information.\n`;
378 : 1 :
379 : 1 : cmdData.cmd_opt = {encoding: 'UTF-8'};
380 : 1 : cmdData.cmd_ext = 1;
381 : 1 : cmdData.cmd_desc = cmdData.cmd_act.replace(CMD, CMD_BIN);
382 : 1 :
383 : 1 : cmdData.cmd_skip = false;
384 : 1 : suites.get(suiteDesc).push(cmdData);
385 : 1 :
386 : 1 : // TEST SUITE #4 - Test normal operation
387 : 1 : suiteDesc = 'Test normal operation';
388 : 1 : suites.set(suiteDesc, []);
389 : 1 :
390 : 1 : // TEST ### - wpt-xhr
391 : 1 : cmdData = {};
392 : 1 :
393 : 1 : cmdData.cmd_act = `${CMD}`;
394 : 1 :
395 : 1 : cmdData.cmd_out = '{"host":"wpt.live","port":"","path":"/xhr/resources/","url":"http://wpt.live/xhr/resources/","node":true,"verbose":false}';
396 : 1 : cmdData.cmd_err = '';
397 : 1 :
398 : 1 : cmdData.cmd_opt = {encoding: 'UTF-8', env: {WPT_XHR_TEST: "node"}};
399 : 1 : cmdData.cmd_ext = 0;
400 : 1 : cmdData.cmd_desc = cmdData.cmd_act.replace(CMD, CMD_BIN);
401 : 1 :
402 : 1 : cmdData.cmd_skip = false;
403 : 1 : suites.get(suiteDesc).push(cmdData);
404 : 1 :
405 : 1 : // TEST ### - wpt-xhr --host example.com --port 8040
406 : 1 : cmdData = {};
407 : 1 :
408 : 1 : cmdData.cmd_act = `${CMD} --host example.com --port 8040`;
409 : 1 :
410 : 1 : cmdData.cmd_out = '{"host":"example.com","port":"8040","path":"/xhr/resources/","url":"http://example.com:8040/xhr/resources/","node":true,"verbose":false}';
411 : 1 : cmdData.cmd_err = '';
412 : 1 :
413 : 1 : cmdData.cmd_opt = {encoding: 'UTF-8', env: {WPT_XHR_TEST: "node"}};
414 : 1 : cmdData.cmd_ext = 0;
415 : 1 : cmdData.cmd_desc = cmdData.cmd_act.replace(CMD, CMD_BIN);
416 : 1 :
417 : 1 : cmdData.cmd_skip = false;
418 : 1 : suites.get(suiteDesc).push(cmdData);
419 : 1 :
420 : 1 : // TEST ### - wpt-xhr --host=example.com --port=8040
421 : 1 : cmdData = {};
422 : 1 :
423 : 1 : cmdData.cmd_act = `${CMD} --host=example.com --port=8040`;
424 : 1 :
425 : 1 : cmdData.cmd_out = '{"host":"example.com","port":"8040","path":"/xhr/resources/","url":"http://example.com:8040/xhr/resources/","node":true,"verbose":false}';
426 : 1 : cmdData.cmd_err = '';
427 : 1 :
428 : 1 : cmdData.cmd_opt = {encoding: 'UTF-8', env: {WPT_XHR_TEST: "node"}};
429 : 1 : cmdData.cmd_ext = 0;
430 : 1 : cmdData.cmd_desc = cmdData.cmd_act.replace(CMD, CMD_BIN);
431 : 1 :
432 : 1 : cmdData.cmd_skip = false;
433 : 1 : suites.get(suiteDesc).push(cmdData);
434 : 1 :
435 : 1 : // TEST ### - wpt-xhr -t example.com -p 8040
436 : 1 : cmdData = {};
437 : 1 :
438 : 1 : cmdData.cmd_act = `${CMD} -t example.com -p 8040`;
439 : 1 :
440 : 1 : cmdData.cmd_out = '{"host":"example.com","port":"8040","path":"/xhr/resources/","url":"http://example.com:8040/xhr/resources/","node":true,"verbose":false}';
441 : 1 : cmdData.cmd_err = '';
442 : 1 :
443 : 1 : cmdData.cmd_opt = {encoding: 'UTF-8', env: {WPT_XHR_TEST: "node"}};
444 : 1 : cmdData.cmd_ext = 0;
445 : 1 : cmdData.cmd_desc = cmdData.cmd_act.replace(CMD, CMD_BIN);
446 : 1 :
447 : 1 : cmdData.cmd_skip = false;
448 : 1 : suites.get(suiteDesc).push(cmdData);
449 : 1 :
450 : 1 : // TEST ### - wpt-xhr http://www1.example.com:8080 -t www2.example.com -p 8040
451 : 1 : cmdData = {};
452 : 1 :
453 : 1 : cmdData.cmd_act = `${CMD} http://www1.example.com:8080 -t www2.example.com -p 8040`;
454 : 1 :
455 : 1 : cmdData.cmd_out = '{"host":"www2.example.com","port":"8040","path":"/","url":"http://www2.example.com:8040/","node":true,"verbose":false}';
456 : 1 : cmdData.cmd_err = '';
457 : 1 :
458 : 1 : cmdData.cmd_opt = {encoding: 'UTF-8', env: {WPT_XHR_TEST: "node"}};
459 : 1 : cmdData.cmd_ext = 0;
460 : 1 : cmdData.cmd_desc = cmdData.cmd_act.replace(CMD, CMD_BIN);
461 : 1 :
462 : 1 : cmdData.cmd_skip = false;
463 : 1 : suites.get(suiteDesc).push(cmdData);
464 : 1 :
465 : 1 : // TEST ### - wpt-xhr -t www2.example.com -p 8040 http://www1.example.com:8080/xhr
466 : 1 : cmdData = {};
467 : 1 :
468 : 1 : cmdData.cmd_act = `${CMD} -t www2.example.com -p 8040 http://www1.example.com:8080/xhr`;
469 : 1 :
470 : 1 : cmdData.cmd_out = '{"host":"www1.example.com","port":"8080","path":"/xhr","url":"http://www1.example.com:8080/xhr","node":true,"verbose":false}';
471 : 1 : cmdData.cmd_err = '';
472 : 1 :
473 : 1 : cmdData.cmd_opt = {encoding: 'UTF-8', env: {WPT_XHR_TEST: "node"}};
474 : 1 : cmdData.cmd_ext = 0;
475 : 1 : cmdData.cmd_desc = cmdData.cmd_act.replace(CMD, CMD_BIN);
476 : 1 :
477 : 1 : cmdData.cmd_skip = false;
478 : 1 : suites.get(suiteDesc).push(cmdData);
479 : 1 :
480 : 1 : // TEST ### - wpt-xhr --verbose --def
481 : 1 : cmdData = {};
482 : 1 :
483 : 1 : cmdData.cmd_act = `${CMD} --verbose --def`;
484 : 1 :
485 : 1 : cmdData.cmd_out = '{"host":"wpt.live","port":"","path":"/xhr/resources/","url":"http://wpt.live/xhr/resources/","node":false,"verbose":true}';
486 : 1 : cmdData.cmd_err = '';
487 : 1 :
488 : 1 : cmdData.cmd_opt = {encoding: 'UTF-8', env: {WPT_XHR_TEST: "node"}};
489 : 1 : cmdData.cmd_ext = 0;
490 : 1 : cmdData.cmd_desc = cmdData.cmd_act.replace(CMD, CMD_BIN);
491 : 1 :
492 : 1 : cmdData.cmd_skip = false;
493 : 1 : suites.get(suiteDesc).push(cmdData);
494 : 1 :
495 : 1 : // TEST ### - wpt-xhr -v -d
496 : 1 : cmdData = {};
497 : 1 :
498 : 1 : cmdData.cmd_act = `${CMD} -v -d`;
499 : 1 :
500 : 1 : cmdData.cmd_out = '{"host":"wpt.live","port":"","path":"/xhr/resources/","url":"http://wpt.live/xhr/resources/","node":false,"verbose":true}';
501 : 1 : cmdData.cmd_err = '';
502 : 1 :
503 : 1 : cmdData.cmd_opt = {encoding: 'UTF-8', env: {WPT_XHR_TEST: "node"}};
504 : 1 : cmdData.cmd_ext = 0;
505 : 1 : cmdData.cmd_desc = cmdData.cmd_act.replace(CMD, CMD_BIN);
506 : 1 :
507 : 1 : cmdData.cmd_skip = false;
508 : 1 : suites.get(suiteDesc).push(cmdData);
509 : 1 :
510 : 1 : // TEST ### - wpt-xhr -d -n
511 : 1 : cmdData = {};
512 : 1 :
513 : 1 : cmdData.cmd_act = `${CMD} -d -n`;
514 : 1 :
515 : 1 : cmdData.cmd_out = '{"host":"wpt.live","port":"","path":"/xhr/resources/","url":"http://wpt.live/xhr/resources/","node":true,"verbose":false}';
516 : 1 : cmdData.cmd_err = '';
517 : 1 :
518 : 1 : cmdData.cmd_opt = {encoding: 'UTF-8', env: {WPT_XHR_TEST: "node"}};
519 : 1 : cmdData.cmd_ext = 0;
520 : 1 : cmdData.cmd_desc = cmdData.cmd_act.replace(CMD, CMD_BIN);
521 : 1 :
522 : 1 : cmdData.cmd_skip = false;
523 : 1 : suites.get(suiteDesc).push(cmdData);
524 : 1 :
525 : 1 : // TEST ### - wpt-xhr --def --node
526 : 1 : cmdData = {};
527 : 1 :
528 : 1 : cmdData.cmd_act = `${CMD} --def --node`;
529 : 1 :
530 : 1 : cmdData.cmd_out = '{"host":"wpt.live","port":"","path":"/xhr/resources/","url":"http://wpt.live/xhr/resources/","node":true,"verbose":false}';
531 : 1 : cmdData.cmd_err = '';
532 : 1 :
533 : 1 : cmdData.cmd_opt = {encoding: 'UTF-8', env: {WPT_XHR_TEST: "node"}};
534 : 1 : cmdData.cmd_ext = 0;
535 : 1 : cmdData.cmd_desc = cmdData.cmd_act.replace(CMD, CMD_BIN);
536 : 1 :
537 : 1 : cmdData.cmd_skip = false;
538 : 1 : suites.get(suiteDesc).push(cmdData);
539 : 1 : }
540 : 1 :
541 : 1 : /**
542 : 1 : * @func nodeRunner
543 : 1 : * @param {object} runner - The node core module 'node:test' object
544 : 1 : * @desc Carry out the loaded tests using node test runner
545 : 1 : */
546 [ + ]: 1 : function nodeRunner(runner){
547 : 1 :
548 [ + ]: 1 : for(let [suiteDesc, suiteTests] of suites){
549 [ + ]: 4 : runner.suite(suiteDesc, () => {
550 [ + ]: 4 : for(let cmdObj of suiteTests){
551 [ + ]: 26 : runner.test(cmdObj.cmd_desc, {skip: cmdObj.cmd_skip}, async () => {
552 : 26 : await makeTest(cmdObj);
553 : 26 : });
554 : 26 : }
555 : 4 : });
556 : 4 : }
557 : 1 : }
558 : 1 :
559 : 1 : /* node:coverage disable */
560 : :
561 : : /**
562 : : * @func defRunner
563 : : * @desc Carry out the loaded tests using this developed test runner
564 : : */
565 : : function defRunner(){
566 : :
567 : : cmdOptions.verbose && process.on('exit', () => {
568 : : console.log();
569 : : console.log('▶ tests', --testCount);
570 : : console.log('▶ suites', suites.size);
571 : : console.log('▶ pass', passCount);
572 : : console.log('▶ fail', failCount);
573 : : console.log('▶ cancelled', cancelCount);
574 : : console.log('▶ skipped', skipCount);
575 : : console.log('▶ todo', todoCount);
576 : : console.log('▶ duration_ms', Math.round(Date.now() - startTime));
577 : : });
578 : :
579 : : cmdOptions.verbose && console.error();
580 : :
581 : : for(let [suiteDesc, suiteTests] of suites)
582 : : for(let cmdObj of suiteTests)
583 : : if(!cmdObj.cmd_skip)
584 : : makeTest(cmdObj);
585 : :
586 : : cmdOptions.verbose && console.log();
587 : : }
588 : :
589 : : /* node:coverage enable */
590 : 1 :
591 : 1 : /**
592 : 1 : * @func makeTest
593 : 1 : * @async
594 : 1 : * @param {object} cmdObj - The test data object
595 : 1 : * @desc Carry out a single tset
596 : 1 : */
597 [ + ]: 26 : async function makeTest(cmdObj){
598 : 26 :
599 : 26 : const testID = testCount++;
600 : 26 : const testMsg = `Test#${(testID).toString().padStart(3, '0')} ... `;
601 : 26 :
602 : 26 : /* node:coverage disable */
603 : :
604 [ - ]: : if(cmdOptions.verbose){
605 : : let preMsg = testMsg + `Initiate ... ${cmdObj.cmd_desc}`;
606 : : console.error(preMsg);
607 : : }
608 : : /* node:coverage enable */
609 : 26 :
610 : 26 : let [out_act, prc_act] = await getCmdOutput(cmdObj);
611 : 26 :
612 : 26 : let out_exp = {stdout: cmdObj.cmd_out, stderr: cmdObj.cmd_err};
613 : 26 : let prc_exp = {exitCode: cmdObj.cmd_ext};
614 : 26 :
615 : 26 : /* node:coverage disable */
616 : :
617 [ - ]: : if(cmdOptions.verbose){
618 : : try{
619 : : assert.strictEqual(out_act.stdout, out_exp.stdout);
620 : : assert.strictEqual(out_act.stderr, out_exp.stderr);
621 : : assert.strictEqual(prc_act.exitCode, prc_exp.exitCode);
622 : :
623 : : passCount++;
624 : :
625 : : let postMsg = testMsg + `Success ... ${cmdObj.cmd_desc}`;
626 : : cmdOptions.verbose && console.error(postMsg);
627 : : }
628 : : catch(e){
629 : : failCount++;
630 : :
631 : : let postMsg = testMsg + `Failure ... ${cmdObj.cmd_desc}`;
632 : : console.error(postMsg);
633 : : }
634 : : }
635 : : /* node:coverage enable */
636 : 26 : else{
637 : 26 : assert.strictEqual(out_act.stdout, out_exp.stdout);
638 : 26 : assert.strictEqual(out_act.stderr, out_exp.stderr);
639 : 26 : assert.strictEqual(prc_act.exitCode, prc_exp.exitCode);
640 : 26 : }
641 : 26 : }
642 : 1 :
643 : 1 : /**
644 : 1 : * @func getCmdOutput
645 : 1 : * @param {object} cmdObj - The command object
646 : 1 : * @return {array} Output of the tested command
647 : 1 : * @desc Run the tested and reference command
648 : 1 : */
649 [ + ]: 26 : function getCmdOutput(cmdObj){
650 : 26 :
651 : 26 : let proc_act, proc_exp;
652 : 26 :
653 [ + ]: 26 : let prom_act = new Promise((resolve, reject) => {
654 [ + ]: 26 : proc_act = exec(cmdObj.cmd_act, cmdObj.cmd_opt, (err, stdout, stderr) => {
655 : 26 : resolve({stdout, stderr});
656 : 26 : });
657 : 26 : proc_act.stdin.end();
658 : 26 : });
659 : 26 :
660 : 26 : return Promise.all([prom_act, proc_act]);
661 : 26 : }
|