ui5-test-runner
Version:
Standalone test runner for UI5
92 lines (85 loc) • 2.58 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',
env: {
...process.env,
...job.env
}
}
)
getOutput(job).monitor(childProcess, true)
childProcess.on('close', resolve)
return promise
}
module.exports = {
save,
async generate (job) {
const output = getOutput(job)
try {
await generateCoverageReport(job)
} catch (e) {
output.genericError(e)
job.failed = true
}
job.status = 'Generating reports'
job.end = new Date()
job.failed = !!job.failed
job.testPageHashes = job.testPageUrls.map(url => filename(url))
output.debug('report', 'saving job...')
await save(job)
output.debug('report', 'job saved.')
output.debug('report', 'generating text report...')
await generateTextReport(job)
output.debug('report', 'text report generated.')
const promises = job.reportGenerator.map(generator => {
output.debug('report', 'launching', generator, '...')
const { promise, resolve } = allocPromise()
const childProcess = fork(
generator,
[job.reportDir],
{
stdio: 'pipe',
env: {
...process.env,
...job.env
}
}
)
const buffers = output.monitor(childProcess, false)
childProcess.on('close', exitCode => {
output.debug('report', generator, 'ended with exit code', exitCode)
if (exitCode !== 0) {
output.reportGeneratorFailed(generator, exitCode, buffers)
}
resolve()
output.debug('report', generator, 'resolved')
})
return promise
})
output.debug('report', 'generators count:', promises.length)
await Promise.all(promises)
job.status = 'Reports generated'
}
}