From 5f7185861ccb1c3f173d4b8f5b3dfdcb617c5897 Mon Sep 17 00:00:00 2001 From: Quentin Monnier Date: Mon, 16 Jan 2023 17:47:33 -0600 Subject: [PATCH] update index and class reports --- app/build.gradle | 158 ++++++++++++++++++++++++++++++++++++----------- 1 file changed, 121 insertions(+), 37 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index cfa79c5d8..18144b64b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -303,6 +303,56 @@ def reportsDirectory = new File(buildDir,"reports${File.separator}androidTests${ def screenshotDirectory = new File(reportsDirectory,"screenshots").absolutePath def embedScreenshotsTask = task('embedScreenshots', group: 'reporting') { + + ext.updateSummaryValues = { failedTestJunitReportContent, newFailures -> + def totalCounterStr = "id=\"tests\">\n
" + def totalCounterStart = failedTestJunitReportContent.indexOf(totalCounterStr) + totalCounterStr.length() + def totalCounterEnd = failedTestJunitReportContent.indexOf("
", totalCounterStart) + + def failureCounterStr = "id=\"failures\">\n
" + def failureCounterStart = failedTestJunitReportContent.indexOf(failureCounterStr, totalCounterEnd) + failureCounterStr.length() + def failureCounterEnd = failedTestJunitReportContent.indexOf("
", failureCounterStart) + + def percentInfoStr = "id=\"successRate\">\n
" + def percentInfoStart = failedTestJunitReportContent.indexOf(percentInfoStr, failureCounterEnd) + percentInfoStr.length() + def percentInfoEnd = failedTestJunitReportContent.indexOf("%
", percentInfoStart) + + def total = failedTestJunitReportContent.substring(totalCounterStart, totalCounterEnd).toInteger() + def failure = failedTestJunitReportContent.substring(failureCounterStart, failureCounterEnd).toInteger() + newFailures + def percent = ((1 - failure / total) * 100).toInteger() + + failedTestJunitReportContent = failedTestJunitReportContent.substring(0, failureCounterStart) + "$failure" + failedTestJunitReportContent.substring(failureCounterEnd) + failedTestJunitReportContent = failedTestJunitReportContent.substring(0, percentInfoStart) + "$percent" + failedTestJunitReportContent.substring(percentInfoEnd) + + return [failedTestJunitReportContent,failure,percent] + } + + ext.addFailedTestsHeader = {failedTestJunitReportContent, mode -> + def tab0 = "${mode}\n\n\n
" + def tab0Index = failedTestJunitReportContent.indexOf(tab0) + + if (tab0Index != -1) { + def header = "" + if (mode == "Classes") header = "\n" + def newtab0 = "Failed tests\n\n
  • \n${mode}\n
  • \n\n
    \n

    Failed tests

    \n${header}
    \n
    " + failedTestJunitReportContent = failedTestJunitReportContent.replace(tab0, newtab0) + } + return failedTestJunitReportContent + } + + ext.updateRecapValues = {failedTestJunitReportContent, name, failures, percent, variant -> + failedTestJunitReportContent = failedTestJunitReportContent.replace("\"success\"$variant>\n\n", startIndex) +4 + startIndex = failedTestJunitReportContent.indexOf("", startIndex) +4 + def endIndex = failedTestJunitReportContent.indexOf("", startIndex) + failedTestJunitReportContent = failedTestJunitReportContent.substring(0, startIndex) + "${failures}" + failedTestJunitReportContent.substring(endIndex) + startIndex = failedTestJunitReportContent.indexOf("", startIndex) + failedTestJunitReportContent = failedTestJunitReportContent.substring(0, startIndex) + "\"failures\">${percent}%" + failedTestJunitReportContent.substring(endIndex) + return failedTestJunitReportContent + } + doFirst { def failureScreenshotsDirectory = new File(reportsDirectory, 'failures') @@ -312,12 +362,36 @@ def embedScreenshotsTask = task('embedScreenshots', group: 'reporting') { return } + def indexJunitReportFile = new File(reportsDirectory, "index.html") + if (!indexJunitReportFile.exists()) { + println "Could not find JUnit report file for test class '${indexJunitReportFile}'" + return + } + def indexJunitReportContent = indexJunitReportFile.text + failureScreenshotsDirectory.eachFile { failedTestClassDirectory -> def failedTestClassName = failedTestClassDirectory.name + def failedTestPackageName = failedTestClassName.substring(0,failedTestClassName.lastIndexOf(".")) + + def packageJunitReportFile = new File(reportsDirectory, "${failedTestPackageName}.html") + if (!packageJunitReportFile.exists()) { + println "Could not find JUnit report file for test class '${packageJunitReportFile}'" + return + } + def packageJunitReportContent = packageJunitReportFile.text failedTestClassDirectory.eachFile { failedTestFile -> def failedTestName = failedTestFile.name + def failedTestClassJunitReportFile = new File(reportsDirectory, "${failedTestClassName}.html") + if (!failedTestClassJunitReportFile.exists()) { + println "Could not find JUnit report file for test class '${failedTestClassJunitReportFile}'" + return + } + def failedTestJunitReportContent = failedTestClassJunitReportFile.text + + def failures = 0 + failedTestFile.eachFile { failedTestCase -> def failedTestCaseDescription = failedTestCase.name def pt1 = failedTestCaseDescription.indexOf(".") @@ -329,63 +403,53 @@ def embedScreenshotsTask = task('embedScreenshots', group: 'reporting') { name += " (${failedTestCaseDescription.substring(pt2+1,pt3)})" } - def failedTestClassJunitReportFile = new File(reportsDirectory, "${failedTestClassName}.html") - - if (!failedTestClassJunitReportFile.exists()) { - println "Could not find JUnit report file for test class '${failedTestClassJunitReportFile}'" - return - } - - def failedTestJunitReportContent = failedTestClassJunitReportFile.text - - def tab0 = "Tests\n\n\n
    " - def tab0Index = failedTestJunitReportContent.indexOf(tab0) - - if (tab0Index != -1) { - def newtab0 = "Failed tests\n\n
  • \nTests\n
  • \n\n
    \n

    Failed tests

    \n
    \n
    " - failedTestJunitReportContent = failedTestJunitReportContent.replace(tab0, newtab0) - } + failedTestJunitReportContent = addFailedTestsHeader(failedTestJunitReportContent,"Tests") + packageJunitReportContent = addFailedTestsHeader(packageJunitReportContent,"Classes") + indexJunitReportContent = addFailedTestsHeader(indexJunitReportContent,"Classes") def failedTest = "

    ${failedTestName}

    " def failedTestIndex = failedTestJunitReportContent.indexOf(failedTest) def screenshotReport = "" if (failedTestIndex == -1) { - def newtestDiv = "
    \n\n${failedTest}\n\n
    \n
    \n
    \n
    " - def endDiv = "
    \n
    " + //test.html + def newtestDiv = "
    \n\n${failedTest}\n\n
    \n
    \n
    \n
    \n" + def endDiv = "
    \n
    ${failedTestName}\npassed", "${failedTestName}\nfailed") - def totalCounterStr = "id=\"tests\">\n
    " - def totalCounterStart = failedTestJunitReportContent.indexOf(totalCounterStr) + totalCounterStr.length() - def totalCounterEnd = failedTestJunitReportContent.indexOf("
    ", totalCounterStart) + def boxStr = "\"infoBox success\" id=\"successRate\"" + if (failedTestJunitReportContent.indexOf(boxStr) != -1) { + failedTestJunitReportContent = failedTestJunitReportContent.replace(boxStr, "\"infoBox failures\" id=\"successRate\"") + } - def failureCounterStr = "id=\"failures\">\n
    " - def failureCounterStart = failedTestJunitReportContent.indexOf(failureCounterStr, totalCounterEnd) + failureCounterStr.length() - def failureCounterEnd = failedTestJunitReportContent.indexOf("
    ", failureCounterStart) + //package.html + newtestDiv = "\n\n${failedTestClassName.substring(failedTestClassName.lastIndexOf(".")+1)}\n\n" + newtestDiv += "\n${failedTestName}\n\n\n" + endDiv = "\n\n
    \n
    \n
    " - def percentInfoStart = failedTestJunitReportContent.indexOf(percentInfoStr, failureCounterEnd) + percentInfoStr.length() - def percentInfoEnd = failedTestJunitReportContent.indexOf("%
    ", percentInfoStart) + if (packageJunitReportContent.indexOf(boxStr) != -1) { + packageJunitReportContent = packageJunitReportContent.replace(boxStr, "\"infoBox failures\" id=\"successRate\"") + } - def total = failedTestJunitReportContent.substring(totalCounterStart, totalCounterEnd).toInteger() - def failure = failedTestJunitReportContent.substring(failureCounterStart, failureCounterEnd).toInteger() + 1 - def percent = ((1 - failure / total) * 100).toInteger() + //index.html + newtestDiv = "\n\n${failedTestClassName.substring(failedTestClassName.lastIndexOf(".")+1)}\n\n" + newtestDiv += "\n${failedTestName}\n\n\n" + endDiv = "\n\n
    \n
    \n" + screenshotReport += "display conficts detected with \'${name}\' line ${line}:\n\n" def insertIndex = failedTestJunitReportContent.indexOf("", failedTestIndex) def firstPart = failedTestJunitReportContent.substring(0, insertIndex) @@ -394,6 +458,26 @@ def embedScreenshotsTask = task('embedScreenshots', group: 'reporting') { failedTestClassJunitReportFile.write(failedTestJunitReportContent) } + + if (failures != 0) { + failedTestJunitReportContent = failedTestJunitReportContent.replace("${failedTestName}\npassed", "${failedTestName}\nfailed") + def classSummaryValues = updateSummaryValues(failedTestJunitReportContent,failures) + def packageSummaryValues = updateSummaryValues(packageJunitReportContent,failures) + def indexSummaryValues = updateSummaryValues(indexJunitReportContent,failures) + failedTestJunitReportContent = classSummaryValues[0] + packageJunitReportContent = packageSummaryValues[0] + indexJunitReportContent = indexSummaryValues[0] + + packageJunitReportContent = updateRecapValues(packageJunitReportContent,failedTestClassName,classSummaryValues[1],classSummaryValues[2],"") + indexJunitReportContent = updateRecapValues(indexJunitReportContent,failedTestClassName,classSummaryValues[1],classSummaryValues[2],"/") + indexJunitReportContent = updateRecapValues(indexJunitReportContent,failedTestPackageName,packageSummaryValues[1],packageSummaryValues[2],"") + + failedTestClassJunitReportFile.write(failedTestJunitReportContent) + packageJunitReportFile.write(packageJunitReportContent) + indexJunitReportFile.write(indexJunitReportContent) + + + } } } print "see report at: ${new File(reportsDirectory, "index.html")}"