in src/pr/TestReportRenderer.js [200:297]
async update() {
// Download the test report
let buf = await fetch(this.props.testReportZip).then((r) =>
r.arrayBuffer()
);
let reports = {};
const file = new Uint8Array(buf);
let inner = unzipSync(file);
for (const innerFilename in inner) {
let key = innerFilename
.replace("test/test-reports/", "")
.replace(".xml", "");
reports[key] = parseXml(strFromU8(inner[innerFilename]));
}
let suites = [];
for (const filename in reports) {
let data = reports[filename];
if (data.testsuite) {
suites.push(data.testsuite);
} else if (data.testsuites) {
if (Array.isArray(data.testsuites.testsuite)) {
for (const suite of data.testsuites.testsuite) {
suites.push(suite);
}
} else if (data.testsuites.testsuite) {
suites.push(data.testsuites.testsuite);
}
} else {
console.error("Unknown report type", data);
}
}
let failures = [];
let testInfo = {};
const totals = {
classes: 0,
cases: 0,
files: 0,
time: 0,
};
for (const suite of suites) {
let numErrors = +suite.errors;
let numFailures = +suite.failures;
let cases = suite.testcase;
if (!Array.isArray(cases)) {
cases = [cases];
}
if (numErrors + numFailures > 0) {
for (const testcase of cases) {
if (testcase.failure || testcase.error) {
failures.push(testcase);
}
}
}
const getStatus = (testcase) => {
if (testcase.skipped) {
return "skipped";
}
if (testcase.error || testcase.failure) {
return "error";
}
return "passed";
};
for (const testcase of cases) {
totals.cases += 1;
if (!testInfo[testcase.file]) {
testInfo[testcase.file] = {};
totals.files += 1;
}
if (!testInfo[testcase.file][testcase.classname]) {
totals.classes += 1;
testInfo[testcase.file][testcase.classname] = {
passed: 0,
error: 0,
skipped: 0,
time: 0,
cases: 0,
};
}
totals.time += +testcase.time;
testInfo[testcase.file][testcase.classname][getStatus(testcase)] += 1;
testInfo[testcase.file][testcase.classname].cases += 1;
testInfo[testcase.file][testcase.classname].time += +testcase.time;
}
}
if (this.props.onLoaded) {
this.props.onLoaded(failures, totals, testInfo);
}
this.setState({
failures: failures,
totals: totals,
testInfo: testInfo,
});
}