import * as testActions from './TestActions' import os from 'os' import jsonFormatter from './JSON-formatter' function add(num1:number, num2:number) { return num1+num2 } function subtract(num1:number, num2:number) { return num1-num2 } function multiply(num1:number, num2:number) { return num1*num2 } function divide(num1:number, num2:number) { return num1/num2 } function sayHello(to:string) { return "hello, "+to } async function doSomethingAsync():Promise { return new Promise(resolve => { setTimeout(() => { resolve('Okay, here I am') }, 2500) }) } let report = '' let rptStart = Date.now() function record(action:string, result:any) { let raw = Date.now() - rptStart; let ms:any = raw % 1000 let secs:any = Math.floor(raw/1000) let min:any = '' + Math.floor(secs/60) secs = '' + (secs % 60) ms = ''+ms while(ms.length < 3) { ms = '0'+ms } while(secs.length < 2) { secs = '0' + secs } while(min.length < 3) { min = '\u00A0'+min } let ts = `${min}:${secs}:${ms}` ts = ts.trim(); let rline = `
  • ` rline += `${ts}${action}` if(action.substring(0,4) === 'tree') { let trobj try {trobj = JSON.parse(result)} catch(e) {} const jsfmt = jsonFormatter(trobj) rline += `${jsfmt}` } else if(action.substring(0,10) === 'screenshot') { let name = action.substring(11) let ipath = '../../../latest/images/'+name+'.png' rline += `

    ${name}

    ` } else if(action.substring(0,13) === 'compareReport') { rline = `${ts}Image mismatch` let rpt = action.substring(14) let [imgName, pctDiff, err] = rpt.split(',') let cpath = '../../../comp/electron/'+imgName+'.png' let dpath = '../../../latest/images/'+imgName+'-diff.png' let stats = err || `Image ${imgName} differs ${pctDiff}% from comp` rline += `

    ${stats}

    ` } else { rline += `${result}` } rline += '
  • ' if(action.trim().substring(0,11) === 'remoteTitle') { let title = action.substring(11).replace(/\+/g, ' ') rline = `

    ${title}

    ` } report += rline // console.log('report line', rline) } function startReport(title:string) { let ddt = new Date().toLocaleString() // console.log('------ starting report') if(!report) report = ` Test Report ${ddt}

    ${title}

    Electron (${os.platform()} ${os.version()}) ${ddt}


    ` } } export function getReport() { endReport() const rpt = report.replace(/=/g, '--') // change equal sign in flight to avoid parse issues on other side; reconstruct on receipt report = '' rptStart = Date.now() // console.log('returning report', rpt) return rpt } export async function executeDirective(action:string):Promise { // console.log('executeDirective', action) const parts = action.split(' ') const cmd = parts[0] const arg1 = parts[1] const arg2 = parts[2] let res:any = '' switch(cmd) { case 'add': { res = add(Number(arg1), Number(arg2)) } break case 'subtract': { res = subtract(Number(arg1), Number(arg2)) } break case 'multiply': { res = multiply(Number(arg1), Number(arg2)) } break case 'divide': { res = divide(Number(arg1), Number(arg2)) } break case 'greet': { res = sayHello(arg1) } break case 'fetch': { res = await doSomethingAsync() } break; case 'startReport': { const title = parts.slice(2).join(' ') res = startReport(title) } return Promise.resolve(res) case 'getReport': { res = getReport() } return Promise.resolve(res) case 'end': { res = 1000 } break; default: { const tactany:any = testActions const ta = tactany[cmd] // console.log('$$$$ looking for testAction', cmd) if(typeof ta === 'function') { // console.log('found', parts) res = await ta(...parts.slice(1)) } } break } return Promise.resolve(res).then((rec) => { rec = typeof rec === 'object' ? JSON.stringify(rec) : ''+rec record(action, rec) // console.log(action + ' directive returns', rec) return rec }) }