let fs = require('fs'); let path = require('path'); const deviceType = ['mobile', 'smallTablet', 'tablet', 'desktop']; const browser = ['chromium', 'firefox', 'webkit']; function parse() { const currentStrings = []; const final = []; for (let i = 0; i < browser.length; i++) { for (let j = 0; j < deviceType.length; j++) { const filePath = path.join(__dirname, `../reports/${browser[i]}/${deviceType[j]}/report.xml`); let currentString = ''; const testName = `${browser[i]} ${deviceType[j]}`; const fn = new Promise((resolve) => { fs.stat(filePath, (err) => { if (err) { resolve(); } else { fs.readFile(filePath, 'utf-8', (err, data) => { currentString = data.match(/\n(.*\n)*<\/testsuites>/g); currentString = currentString.toString().replace('Mocha Tests', testName); currentStrings.splice(i * 4 + j, 0, currentString); resolve(); }); } }); }); final.push(fn); } } Promise.all(final).then(() => { let tests = 0; let failures = 0; let time = 0; let xmlString = ''; currentStrings.forEach((currentString) => { const currentTestData = currentString.match(/\n/g)[0].match(/"\d*.?\d*"/g); const currentTestDataNumber = currentTestData.map((testData) => testData.replace(/[^0-9,.]/g, ''), ); time += Math.round(Number(currentTestDataNumber[0]) * 100) / 100; tests += Number(currentTestDataNumber[1]); failures += Number(currentTestDataNumber[2]); xmlString += currentString + '\n'; }); const moduleInfo = `\n\n`; const xmlData = `\n`; xmlString = xmlData + moduleInfo + xmlString; const filePath = path.join(__dirname, `../reports/report.xml`); fs.writeFile(filePath, xmlString, 'utf-8', (err) => { if (err) throw err; console.log('Data has been replaced!'); }); }); } parse();