LCOV - code coverage report
Current view: top level - test - wpt-xhr.cmd.js (source / functions) Hit Total Coverage
Test: lcov.info Lines: 303 304 99.7 %
Date: 2024-12-07 00:20:21 Functions: 4 4 100.0 %
Branches: 17 18 94.4 %

           Branch data     Line data    Source code
       1            [ + ]:         28 : /**
       2                 :         28 :  * @module  wpt-xhr-cmd
       3                 :         28 :  * @desc    The wpt-xhr command line interface module.
       4                 :         28 :  * @version 1.0.0
       5                 :         28 :  * @author  Essam A. El-Sherif
       6                 :         28 :  */
       7                 :         28 : 
       8                 :         28 : /** Import nodeJS core modules */
       9                 :         28 : import process from 'node:process';
      10                 :         28 : 
      11                 :         28 : /** @const {object} cmdOptions - Command line options */
      12                 :         28 : const cmdOptions = {
      13                 :         28 :         host    : 'wpt.local',       // -h --host <host>
      14                 :         28 :         port    : '8000',            // -p --port <port>
      15                 :         28 :         path    : '/xhr/resources/', //    --path <path>
      16                 :         28 :         url     : 'http://wpt.local:8000/xhr/resources/',
      17                 :         28 : 
      18                 :         28 :         node   : true,               // -n --node {boolean} / -d --def {boolean}
      19                 :         28 :         verbose: false,              // -v --verbose {boolean}
      20                 :         28 : };
      21                 :         28 : 
      22                 :         28 : export default cmdOptions;
      23                 :         28 : 
      24                 :         28 : const CMD = 'wpt-xhr';
      25                 :         28 : const CMD_VER = 'v1.0.0';
      26                 :         28 : 
      27                 :         28 : /**
      28                 :         28 :  *     function main
      29                 :         28 :  * function parseCmdLine()
      30                 :         28 :  * function getHelp()
      31                 :         28 :  * function getError(n)
      32                 :         28 :  *
      33                 :         28 :  * @func Main
      34                 :         28 :  * @desc The application entry point function
      35                 :         28 :  */
      36            [ + ]:         28 : (() => {
      37                 :         28 :     parseCmdLine();
      38                 :         28 :     if(
      39                 :         28 :                 process.env.WPT_XHR_TEST &&
      40                 :         28 :                 (
      41            [ - ]:         28 :                         process.env.WPT_XHR_TEST.toLowerCase() === 'node' ||
      42                 :          0 :                         process.env.WPT_XHR_TEST.toLowerCase() === 'default'
      43                 :         28 :                 )
      44                 :         28 :         ){
      45                 :         28 :                 process.stdout.write(JSON.stringify(cmdOptions));
      46                 :         28 :     }
      47                 :         28 : })('Main Function');
      48                 :         28 : 
      49                 :         28 : /**
      50                 :         28 :  * function main()
      51                 :         28 :  *     function parseCmdLine()
      52                 :         28 :  * function getHelp()
      53                 :         28 :  * function getError(n)
      54                 :         28 :  *
      55                 :         28 :  * @func parseCmdLine
      56                 :         28 :  * @desc Command line parser function
      57                 :         28 :  */
      58            [ + ]:         28 : function parseCmdLine(){
      59                 :         28 : 
      60                 :         28 :         const args = process.argv;
      61                 :         28 : 
      62            [ + ]:         28 :         for(let i = 2; i < args.length; i++){
      63                 :         20 :                 if(args[i] === '--help' || args[i] === '-h'){
      64                 :         20 :                         process.stdout.write(`${getHelp()}\n`);
      65                 :         20 :                         process.exit(0);
      66                 :         20 :                 }
      67                 :         20 :                 else
      68                 :         20 :                 if(args[i] === '--version'){
      69                 :         20 :                         process.stdout.write(`${CMD_VER}\n`);
      70                 :         20 :                         process.exit(0);
      71                 :         20 :                 }
      72                 :         20 :                 else
      73            [ + ]:         20 :                 if(args[i].startsWith('--host=')){
      74                 :          1 :                         let str = args[i].replace('--host=', '');
      75                 :          1 : 
      76                 :          1 :                         if(!str){
      77                 :          1 :                                 process.stderr.write(`${getError(0).replace('_', '--host')}\n`);
      78                 :          1 :                                 process.exit(1);
      79                 :          1 :                         }
      80                 :          1 :                         else
      81                 :          1 :                         if(str.startsWith('-')){
      82                 :          1 :                                 process.stderr.write(`${getError(1).replace('_', str).replace('_', '--host')}\n`);
      83                 :          1 :                                 process.exit(1);
      84                 :          1 :                         }
      85                 :          1 :                         else{
      86                 :          1 :                                 let url = new URL(cmdOptions.url);
      87                 :          1 :                                 url.hostname = str;
      88                 :          1 :                                 cmdOptions.url = url.href;
      89                 :          1 :                                 cmdOptions.host = url.hostname;
      90                 :          1 :                         }
      91            [ + ]:          1 :                 }
      92                 :          1 :                 else
      93                 :          1 :                 if(args[i].startsWith('--port=')){
      94                 :          1 :                         let str = args[i].replace('--port=', '');
      95                 :          1 : 
      96                 :          1 :                         if(!str){
      97                 :          1 :                                 process.stderr.write(`${getError(0).replace('_', '--port')}\n`);
      98                 :          1 :                                 process.exit(1);
      99                 :          1 :                         }
     100                 :          1 :                         else
     101                 :          1 :                         if(str.startsWith('-')){
     102                 :          1 :                                 process.stderr.write(`${getError(1).replace('_', str).replace('_', '--port')}\n`);
     103                 :          1 :                                 process.exit(1);
     104                 :          1 :                         }
     105                 :          1 :                         else{
     106                 :          1 :                                 let url = new URL(cmdOptions.url);
     107                 :          1 :                                 url.port = str;
     108                 :          1 :                                 cmdOptions.url = url.href;
     109                 :          1 :                                 cmdOptions.port = url.port;
     110                 :          1 :                         }
     111                 :          1 :                 }
     112                 :          1 :                 else
     113                 :          1 :                 if(args[i].startsWith('--path=')){
     114                 :          1 :                         let str = args[i].replace('--path=', '');
     115                 :          1 : 
     116                 :          1 :                         if(!str){
     117                 :          1 :                                 process.stderr.write(`${getError(0).replace('_', '--path')}\n`);
     118                 :          1 :                                 process.exit(1);
     119                 :          1 :                         }
     120                 :          1 :                         else
     121                 :          1 :                         if(str.startsWith('/')){
     122                 :          1 :                                 let url = new URL(cmdOptions.url);
     123                 :          1 :                                 url.pathname = str;
     124                 :          1 :                                 cmdOptions.url = url.href;
     125                 :          1 :                                 cmdOptions.path = url.pathname;
     126                 :          1 :                         }
     127                 :          1 :                         else{
     128                 :          1 :                                 process.stderr.write(`${getError(1).replace('_', str).replace('_', '--path')}\n`);
     129                 :          1 :                                 process.exit(1);
     130                 :          1 :                         }
     131                 :          1 :                 }
     132                 :          1 :                 else
     133       [ + ][ + ]:          1 :                 if(args[i] === '--host' || args[i] === '-t'){
     134                 :          1 :                         if(i === args.length - 1){
     135                 :          1 :                                 process.stderr.write(`${getError(0).replace('_', args[i])}\n`);
     136                 :          1 :                                 process.exit(1);
     137                 :          1 :                         }
     138                 :          1 :                         else
     139                 :          1 :                         if(args[i + 1].startsWith('-')){
     140                 :          1 :                                 process.stderr.write(`${getError(1).replace('_', args[i+1]).replace('_', args[i])}\n`);
     141                 :          1 :                                 process.exit(1);
     142                 :          1 :                         }
     143                 :          1 :                         else{
     144                 :          1 :                                 let url = new URL(cmdOptions.url);
     145                 :          1 :                                 url.hostname = args[++i];
     146                 :          1 :                                 cmdOptions.url = url.href;
     147                 :          1 :                                 cmdOptions.host = url.hostname;
     148                 :          1 :                         }
     149            [ + ]:          1 :                 }
     150                 :          1 :                 else
     151            [ + ]:          1 :                 if(args[i] === '--port' || args[i] === '-p'){
     152                 :          1 :                         if(i === args.length - 1){
     153                 :          1 :                                 process.stderr.write(`${getError(0).replace('_', args[i])}\n`);
     154                 :          1 :                                 process.exit(1);
     155                 :          1 :                         }
     156                 :          1 :                         else
     157                 :          1 :                         if(args[i + 1].startsWith('-')){
     158                 :          1 :                                 process.stderr.write(`${getError(1).replace('_', args[i+1]).replace('_', args[i])}\n`);
     159                 :          1 :                                 process.exit(1);
     160                 :          1 :                         }
     161                 :          1 :                         else{
     162                 :          1 :                                 let url = new URL(cmdOptions.url);
     163                 :          1 :                                 url.port = args[++i];
     164                 :          1 :                                 cmdOptions.url = url.href;
     165                 :          1 :                                 cmdOptions.port = url.port;
     166                 :          1 :                         }
     167            [ + ]:          1 :                 }
     168                 :          1 :                 else
     169                 :          1 :                 if(args[i] === '--path'){
     170                 :          1 :                         if(i === args.length - 1){
     171                 :          1 :                                 process.stderr.write(`${getError(0).replace('_', args[i])}\n`);
     172                 :          1 :                                 process.exit(1);
     173                 :          1 :                         }
     174                 :          1 :                         else
     175                 :          1 :                         if(args[i+1].startsWith('/')){
     176                 :          1 :                                 let url = new URL(cmdOptions.url);
     177                 :          1 :                                 url.pathname = args[++i];
     178                 :          1 :                                 cmdOptions.url = url.href;
     179                 :          1 :                                 cmdOptions.path = url.pathname;
     180                 :          1 :                         }
     181                 :          1 :                         else{
     182                 :          1 :                                 process.stderr.write(`${getError(1).replace('_', args[i+1]).replace('_', args[i])}\n`);
     183                 :          1 :                                 process.exit(1);
     184                 :          1 :                         }
     185                 :          1 :                 }
     186                 :          1 :                 else
     187       [ + ][ + ]:          1 :                 if(args[i] === '-v' || args[i] === '--verbose'){
     188                 :          1 :                         cmdOptions.verbose = true;
     189                 :          1 :                 }
     190                 :          1 :                 else
     191       [ + ][ + ]:          1 :                 if(args[i] === '-n' || args[i] === '--node'){
     192                 :          1 :                         cmdOptions.node = true;
     193                 :          1 :                 }
     194                 :          1 :                 else
     195                 :          1 :                 if(args[i] === '-d' || args[i] === '--def'){
     196                 :          1 :                         cmdOptions.node = false;
     197                 :          1 :                 }
     198                 :          1 :                 else
     199                 :          1 :                 if(args[i].startsWith('--')){
     200                 :          1 :                         process.stderr.write(`${getError(3).replace('_', args[i].substr(2))}\n`);
     201                 :          1 :                         process.exit(1);
     202                 :          1 :                 }
     203                 :          1 :                 else
     204                 :          1 :                 if(args[i].startsWith('-')){
     205                 :          1 :                         process.stderr.write(`${getError(2).replace('_', args[i])}\n`);
     206                 :          1 :                         process.exit(1);
     207                 :          1 :                 }
     208                 :          1 :                 else{
     209                 :          1 :                         try{
     210                 :          1 :                                 let url = new URL(args[i]);
     211                 :          1 :                                 cmdOptions.url = url.href;
     212                 :          1 :                                 cmdOptions.host = url.hostname;
     213                 :          1 :                                 cmdOptions.port = url.port;
     214                 :          1 :                                 cmdOptions.path = url.pathname;
     215                 :          1 :                         }
     216                 :          1 :                         catch(e){
     217                 :          1 :                                 process.stderr.write(`${getError(4).replace('_', args[i])}\n`);
     218                 :          1 :                                 process.exit(1);
     219                 :          1 :                         }
     220                 :          1 :                 }
     221                 :         20 :         }
     222                 :         28 : }
     223                 :         28 : 
     224                 :         28 : /**
     225                 :         28 :  * function main
     226                 :         28 :  * function parseCmdLine()
     227                 :         28 :  *     function getHelp()
     228                 :         28 :  * function getError(n)
     229                 :         28 :  *
     230                 :         28 :  * @func   getHelp
     231                 :         28 :  * @return {string} Help information
     232                 :         28 :  * @desc   Function to return help info
     233                 :         28 :  */
     234            [ + ]:          1 : function getHelp(){
     235                 :          1 :         return `\
     236                 :          1 : Usage: wpt-xhr [OPTIONS]... [URL]
     237                 :          1 : 
     238                 :          1 : Test the developed *XMLHttpRequest* module for compliance with
     239                 :          1 : WHATWG XMLHttpRequest specs using the web-platform-tests live
     240                 :          1 : or locally installed server as the testing server.
     241                 :          1 : 
     242                 :          1 : With no URL, testing server is determined by the options given.
     243                 :          1 : 
     244                 :          1 :   -t, --host[=<host>]  wpt host (default wpt.live)
     245                 :          1 :   -p, --port[=<port>]  wpt port (default 80)
     246                 :          1 :       --path[=<path>]  wpt path (default /xhr/resources/)
     247                 :          1 :   -n  --node           use nodejs test runner API if supported
     248                 :          1 :   -d  --def            use default test runner
     249                 :          1 :   -v  --verbose        make the testing operation more talkative
     250                 :          1 :   -h  --help           display this help and exit
     251                 :          1 :       --version        output version information and exit
     252                 :          1 : 
     253                 :          1 : Note that invalid host, port or path will not be accepted.
     254                 :          1 : 
     255                 :          1 : Examples:
     256                 :          1 :   wpt-xhr -t wpt.local -p 8000  Means <http://wpt.local:8000/xhr/resources/>
     257                 :          1 :   wpt-xhr                       Means <http://wpt.live/xhr/resources/>
     258                 :          1 : 
     259                 :          1 : web-platforms-tests online help: <https://web-platform-tests.org/>
     260                 :          1 : Full documentation <https://essamatefelsherif.github.io/whatwg-xhr/>`;
     261                 :          1 : }
     262                 :         28 : 
     263                 :         28 : /**
     264                 :         28 :  * function main
     265                 :         28 :  * function parseCmdLine()
     266                 :         28 :  * function getHelp()
     267                 :         28 :  *     function getError(n)
     268                 :         28 :  *
     269                 :         28 :  * @func   getError
     270                 :         28 :  * @param  {number} Error number
     271                 :         28 :  * @return {string} Error message
     272                 :         28 :  * @desc   Function to return error message
     273                 :         28 :  */
     274            [ + ]:         14 : function getError(n){
     275                 :         14 : 
     276                 :         14 : const error = [
     277                 :         14 : 
     278                 :         14 : // error[0]
     279                 :         14 : `\
     280                 :         14 : ${CMD}: ambiguous argument ‘’ for ‘_’
     281                 :         14 : Try '${CMD} --help' for more information.`,
     282                 :         14 : 
     283                 :         14 : // error[1]
     284                 :         14 : `\
     285                 :         14 : ${CMD}: invalid argument ‘_’ for ‘_’
     286                 :         14 : Try '${CMD} --help' for more information.`,
     287                 :         14 : 
     288                 :         14 : // error[2]
     289                 :         14 : `\
     290                 :         14 : ${CMD}: unrecognized option '_'
     291                 :         14 : Try '${CMD} --help' for more information.`,
     292                 :         14 : 
     293                 :         14 : // error[3]
     294                 :         14 : `\
     295                 :         14 : ${CMD}: invalid option -- '_'
     296                 :         14 : Try '${CMD} --help' for more information.`,
     297                 :         14 : 
     298                 :         14 : // error[4]
     299                 :         14 : `\
     300                 :         14 : ${CMD}: invalid url '_'
     301                 :         14 : Try '${CMD} --help' for more information.`,
     302                 :         14 : ];
     303                 :         14 :         return error[n];
     304                 :         14 : }

Generated by: LCOV version 1.14