All files / wdio-junit-reporter/src utils.js

100% Statements 35/35
95% Branches 19/20
100% Functions 1/1
100% Lines 32/32

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51      1x 1x 1x 1x   1x 113x     112x 112x   112x 53x 1x     52x 1x     51x 59x 1x 1x 1x 1x   1x 58x 57x 57x 57x 44x 43x   1x 1x     57x 1x   57x   1x    
import stringify from 'json-stringify-safe'
import validator from 'validator'
 
const OBJLENGTH = 10
const ARRLENGTH = 10
const STRINGLIMIT = 1000
const STRINGTRUNCATE = 200
 
export const limit = function (rawVal) {
    if (!rawVal) return rawVal
 
    // Ensure we're working with a copy
    let val = JSON.parse(stringify(rawVal))
    const type = Object.prototype.toString.call(val)
 
    if (type === '[object String]') {
        if (val.length > 100 && validator.isBase64(val)) {
            return `[base64] ${val.length} bytes`
        }
 
        if (val.length > STRINGLIMIT) {
            return val.substr(0, STRINGTRUNCATE) + ` ... (${val.length - STRINGTRUNCATE} more bytes)`
        }
 
        return val
    } else if (type === '[object Array]') {
        const length = val.length
        Eif (length > ARRLENGTH) {
            val = val.slice(0, ARRLENGTH)
            val.push(`(${length - ARRLENGTH} more items)`)
        }
        return val.map(limit)
    } else if (type === '[object Object]') {
        const keys = Object.keys(val)
        const removed = []
        for (let i = 0, l = keys.length; i < l; i++) {
            if (i < OBJLENGTH) {
                val[keys[i]] = limit(val[keys[i]])
            } else {
                delete val[keys[i]]
                removed.push(keys[i])
            }
        }
        if (removed.length) {
            val._ = (keys.length - OBJLENGTH) + ' more keys: ' + JSON.stringify(removed)
        }
        return val
    }
    return val
}