UNPKG

test-each

Version:

🤖 Repeat tests. Repeat tests. Repeat tests.

127 lines (86 loc) • 2.1 kB
import{stripVTControlCharacters}from"node:util"; import isPlainObj from"is-plain-obj"; import normalizeException from"normalize-exception"; import{format,plugins}from"pretty-format"; export const addTitles=(input)=>{ if(typeof input==="function"){ return input } return input.map(addTitle) }; const addTitle=(value)=>{ const title=getTitle(value); return{value,title} }; export const joinTitles=({index,indexes,values,titles})=>{ const titlesA=titles.map((paramTitle,valueIndex)=> addFuncTitle(paramTitle,values[valueIndex]) ); const title=titlesA.join(" "); return{title,titles:titlesA,index,indexes,values} }; const addFuncTitle=(title,value)=>{ if(title!==undefined){ return title } return getTitle(value) }; const getTitle=(value)=>{ if(hasTitle(value)){ return value.title } const title=serialize(value); const titleA=truncateTitle(title); return titleA }; const hasTitle=(value)=>{ try{ return( isPlainObj(value)&& typeof value.title==="string"&& value.title.trim()!=="") }catch{ return false } }; const serialize=(value)=>{ const title=safeFormat(value); const titleA=stripVTControlCharacters(title); return ESCAPE_SEQUENCES.reduce(escapeSequence,titleA) }; const safeFormat=(value)=>{ try{ return format(value,PRETTY_FORMAT_OPTS) }catch(error){ return String(normalizeException(error)) } }; const PRETTY_FORMAT_OPTS={ min:true, maxDepth:2, maxWidth:5, plugins:[ plugins.DOMElement, plugins.DOMCollection, plugins.ReactElement, plugins.Immutable] }; const escapeSequence=(title,[regExp,replacement])=> title.replace(regExp,replacement); const ESCAPE_SEQUENCES=[ [/\n/gu,"\\n"], [/\r/gu,"\\r"], [/\f/gu,"\\f"], [/\v/gu,"\\v"]]; const truncateTitle=(title)=>{ if(title.length<=MAX_TITLE_SIZE){ return title } const start=title.slice(0,TRUNCATE_START_LENGTH); const end=title.slice(title.length-TRUNCATE_END_LENGTH); return`${start}${ELLIPSIS}${end}` }; const MAX_TITLE_SIZE=120; const ELLIPSIS="..."; const TRUNCATE_START_LENGTH=Math.ceil((MAX_TITLE_SIZE-ELLIPSIS.length)/2); const TRUNCATE_END_LENGTH=Math.floor((MAX_TITLE_SIZE-ELLIPSIS.length)/2);