LCOV - code coverage report
Current view: top level - modules/script/_bootstrap - default.js (source / functions) Coverage Total Hit
Test: gjs- Code Coverage Lines: 98.1 % 107 105
Test Date: 2024-09-08 20:50:23 Functions: 100.0 % 15 15
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 77.6 % 76 59

             Branch data     Line data    Source code
       1                 :          82 : // SPDX-License-Identifier: MIT OR LGPL-2.0-or-later
       2                 :             : // SPDX-FileCopyrightText: 2013 Red Hat, Inc.
       3                 :             : // SPDX-FileCopyrightText: 2020 Evan Welsh <contact@evanwelsh.com>
       4                 :             : 
       5                 :          82 : (function (exports) {
       6                 :             :     'use strict';
       7                 :             : 
       8                 :             :     const {
       9                 :             :         print,
      10                 :             :         printerr,
      11                 :             :         log: nativeLog,
      12                 :             :         logError: nativeLogError,
      13                 :             :         setPrettyPrintFunction,
      14                 :          41 :     } = imports._print;
      15                 :             : 
      16                 :           3 :     function log(...args) {
      17         [ -  + ]:           6 :         return nativeLog(args.map(arg => typeof arg === 'string' ? arg : prettyPrint(arg)).join(' '));
      18                 :             :     }
      19                 :             : 
      20                 :          69 :     function logError(e, ...args) {
      21         [ +  + ]:          69 :         if (args.length === 0)
      22                 :          52 :             return nativeLogError(e);
      23         [ -  + ]:          34 :         return nativeLogError(e, args.map(arg => typeof arg === 'string' ? arg : prettyPrint(arg)).join(' '));
      24                 :             :     }
      25                 :             : 
      26                 :             :     // compare against the %TypedArray% intrinsic object all typed array constructors inherit from
      27                 :         127 :     function _isTypedArray(value) {
      28                 :         127 :         return value instanceof Object.getPrototypeOf(Uint8Array);
      29                 :             :     }
      30                 :             : 
      31                 :         132 :     function _hasStandardToString(value) {
      32         [ +  + ]:         132 :         return value.toString === Object.prototype.toString ||
      33         [ +  + ]:          70 :                 value.toString === Array.prototype.toString ||
      34                 :             :                 // although TypedArrays have a standard Array.prototype.toString, we currently enforce an override to warn
      35                 :             :                 // for legacy behaviour, making the toString non-standard for
      36                 :             :                 // "any Uint8Array instances created in situations where previously a ByteArray would have been created"
      37         [ +  + ]:          50 :                 _isTypedArray(value) ||
      38                 :          49 :                 value.toString === Date.prototype.toString;
      39                 :             :     }
      40                 :             : 
      41                 :         105 :     function prettyPrint(value) {
      42 [ +  + ][ +  + ]:         105 :         switch (typeof value) {
         [ -  + ][ +  + ]
                 [ +  + ]
      43                 :             :         case 'object':
      44         [ +  + ]:          39 :             if (value === null)
      45                 :           1 :                 return 'null';
      46                 :             : 
      47         [ +  + ]:          38 :             if (_hasStandardToString(value)) {
      48                 :          37 :                 const printedObjects = new WeakSet();
      49                 :          37 :                 return formatObject(value, printedObjects);
      50                 :             :             }
      51                 :             :             // If the object has a nonstandard toString, prefer that
      52                 :           1 :             return value.toString();
      53                 :             :         case 'function':
      54         [ -  + ]:           1 :             if (value.toString === Function.prototype.toString)
      55                 :           1 :                 return formatFunction(value);
      56                 :           0 :             return value.toString();
      57                 :             :         case 'string':
      58                 :           0 :             return JSON.stringify(value);
      59                 :             :         case 'symbol':
      60                 :           3 :             return formatSymbol(value);
      61                 :             :         case 'undefined':
      62                 :           1 :             return 'undefined';
      63                 :             :         default:
      64                 :          61 :             return value.toString();
      65                 :             :         }
      66                 :          37 :     }
      67                 :             : 
      68                 :        1549 :     function formatPropertyKey(key) {
      69         [ +  + ]:        1549 :         if (typeof key === 'symbol')
      70                 :           3 :             return `[${formatSymbol(key)}]`;
      71                 :        1546 :         return `${key}`;
      72                 :             :     }
      73                 :             : 
      74                 :          41 :     function formatObject(obj, printedObjects) {
      75                 :          41 :         printedObjects.add(obj);
      76 [ +  + ][ +  + ]:          41 :         if (Array.isArray(obj) || _isTypedArray(obj))
      77                 :           8 :             return formatArray(obj, printedObjects).toString();
      78                 :             : 
      79         [ +  + ]:          33 :         if (obj instanceof Date)
      80                 :           2 :             return formatDate(obj);
      81                 :             : 
      82                 :          31 :         const formattedObject = [];
      83                 :          31 :         const keys = Object.getOwnPropertyNames(obj).concat(Object.getOwnPropertySymbols(obj));
      84         [ +  + ]:        2347 :         for (const propertyKey of keys) {
      85                 :        2308 :             const value = obj[propertyKey];
      86                 :        2308 :             const key = formatPropertyKey(propertyKey);
      87 [ +  + ][ +  + ]:        2308 :             switch (typeof value) {
         [ +  + ][ -  + ]
      88                 :             :             case 'object':
      89         [ +  + ]:          49 :                 if (printedObjects.has(value))
      90                 :           2 :                     formattedObject.push(`${key}: [Circular]`);
      91         [ +  + ]:          47 :                 else if (value === null)
      92                 :           1 :                     formattedObject.push(`${key}: null`);
      93         [ +  + ]:          47 :                 else if (_hasStandardToString(value))
      94                 :          25 :                     formattedObject.push(`${key}: ${formatObject(value, printedObjects)}`);
      95                 :             :                 else
      96                 :          23 :                     formattedObject.push(`${key}: ${value.toString()}`);
      97                 :             :                 break;
      98                 :             :             case 'function':
      99                 :          45 :                 formattedObject.push(`${key}: ${formatFunction(value)}`);
     100                 :             :                 break;
     101                 :             :             case 'string':
     102                 :           4 :                 formattedObject.push(`${key}: "${value}"`);
     103                 :             :                 break;
     104                 :             :             case 'symbol':
     105                 :           3 :                 formattedObject.push(`${key}: ${formatSymbol(value)}`);
     106                 :             :                 break;
     107                 :             :             default:
     108                 :        2213 :                 formattedObject.push(`${key}: ${value}`);
     109                 :             :                 break;
     110                 :             :             }
     111                 :             :         }
     112         [ +  - ]:          30 :         return Object.keys(formattedObject).length === 0 ? '{}'
     113                 :          30 :             : `{ ${formattedObject.join(', ')} }`;
     114                 :          40 :     }
     115                 :             : 
     116                 :          21 :     function formatArray(arr, printedObjects) {
     117                 :          21 :         const formattedArray = [];
     118 [ +  + ][ -  + ]:          86 :         for (const [key, value] of arr.entries()) {
         [ -  + ][ -  + ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
     119         [ +  + ]:          65 :             if (printedObjects.has(value))
     120                 :           2 :                 formattedArray[key] = '[Circular]';
     121                 :             :             else
     122                 :          63 :                 formattedArray[key] = prettyPrint(value);
     123                 :             :         }
     124                 :          21 :         return `[${formattedArray.join(', ')}]`;
     125                 :          21 :     }
     126                 :             : 
     127                 :           2 :     function formatDate(date) {
     128                 :           2 :         return date.toISOString();
     129                 :             :     }
     130                 :             : 
     131                 :         165 :     function formatFunction(func) {
     132                 :         165 :         let funcOutput = `[ Function: ${func.name} ]`;
     133                 :         165 :         return funcOutput;
     134                 :         165 :     }
     135                 :             : 
     136                 :           9 :     function formatSymbol(sym) {
     137                 :             :         // Try to format Symbols in the same way that they would be constructed.
     138                 :             : 
     139                 :             :         // First check if this is a global registered symbol
     140                 :           9 :         const globalKey = Symbol.keyFor(sym);
     141         [ +  + ]:           9 :         if (globalKey !== undefined)
     142                 :           3 :             return `Symbol.for("${globalKey}")`;
     143                 :             : 
     144                 :           6 :         const descr = sym.description;
     145                 :             :         // Special-case the 'well-known' (built-in) Symbols
     146         [ +  + ]:           6 :         if (descr.startsWith('Symbol.'))
     147                 :           3 :             return descr;
     148                 :             : 
     149                 :             :         // Otherwise, it's just a regular symbol
     150                 :           3 :         return `Symbol("${descr}")`;
     151                 :           9 :     }
     152                 :             : 
     153                 :          82 :     Object.defineProperties(exports, {
     154                 :          41 :         ARGV: {
     155                 :          41 :             configurable: false,
     156                 :          41 :             enumerable: true,
     157                 :          41 :             get() {
     158                 :             :                 // Wait until after bootstrap or programArgs won't be set.
     159                 :           3 :                 return imports.system.programArgs;
     160                 :             :             },
     161                 :             :         },
     162                 :          41 :         print: {
     163                 :          41 :             configurable: false,
     164                 :          41 :             enumerable: true,
     165                 :          41 :             writable: true,
     166                 :          41 :             value: print,
     167                 :             :         },
     168                 :          41 :         printerr: {
     169                 :          41 :             configurable: false,
     170                 :          41 :             enumerable: true,
     171                 :          41 :             writable: true,
     172                 :          41 :             value: printerr,
     173                 :             :         },
     174                 :          41 :         log: {
     175                 :          41 :             configurable: false,
     176                 :          41 :             enumerable: true,
     177                 :          41 :             writable: true,
     178                 :          41 :             value: log,
     179                 :             :         },
     180                 :          41 :         logError: {
     181                 :          41 :             configurable: false,
     182                 :          41 :             enumerable: true,
     183                 :          41 :             writable: true,
     184                 :          41 :             value: logError,
     185                 :             :         },
     186                 :             :     });
     187                 :          41 :     setPrettyPrintFunction(exports, prettyPrint);
     188                 :          41 : })(globalThis);
        

Generated by: LCOV version 2.0-1