ui5-test-runner
Version:
Standalone test runner for UI5
62 lines (55 loc) • 1.89 kB
JavaScript
const { join } = require('path')
const { writeFile } = require('fs').promises
const { generateCoverageReport } = require('./coverage')
const { filename, allocPromise } = require('./tools')
const { fork } = require('child_process')
const { getOutput } = require('./output')
async function serialize (job, filename, json) {
await writeFile(join(job.reportDir, `${filename}.js`), `module.exports = ${JSON.stringify(json, (key, value) => {
if (value && value instanceof RegExp) {
return value.toString()
}
return value
}, 2)}`)
}
async function save (job) {
await serialize(job, 'job', job)
}
function generateTextReport (job) {
const { promise, resolve } = allocPromise()
const childProcess = fork(join(__dirname, 'defaults/text-report.js'), [job.reportDir, process.stdout.columns || ''], { stdio: 'pipe' })
getOutput(job).monitor(childProcess, true)
childProcess.on('close', resolve)
return promise
}
module.exports = {
save,
async generate (job) {
const output = getOutput(job)
job.end = new Date()
job.failed = !!job.failed
job.status = 'Generating reports'
job.testPageHashes = job.testPageUrls.map(url => filename(url))
await save(job)
await generateTextReport(job)
const promises = job.reportGenerator.map(generator => {
const { promise, resolve } = allocPromise()
const childProcess = fork(generator, [job.reportDir], { stdio: 'pipe' })
const buffers = output.monitor(childProcess, false)
childProcess.on('close', exitCode => {
if (exitCode !== 0) {
output.reportGeneratorFailed(generator, exitCode, buffers)
}
resolve()
})
return promise
})
promises.push(generateCoverageReport(job).catch(e => {
output.genericError(e)
job.failed = true
}))
await Promise.all(promises)
job.status = 'Done'
}
}