diff --git a/src/Merger/HtmlReportMerger.php b/src/Merger/HtmlReportMerger.php
index 88f198d..8701085 100644
--- a/src/Merger/HtmlReportMerger.php
+++ b/src/Merger/HtmlReportMerger.php
@@ -150,21 +150,29 @@ public function run(): void
throw XPathExpressionException::malformedXPath($xpathExprSuiteNodes);
}
- $j = 0;
- foreach ($suiteNodes as $suiteNode) {
+ // Do not process the "summary" node anymore:
+ for ($j = 0; $j < $suiteNodes->length - 1; $j++) {
+ $suiteNode = $suiteNodes->item($j);
+
if ($suiteNode->getAttribute('class') == '') {
- //move to next reference node
- ++$j;
- if ($j > $refnodes->length - 1) {
- break;
+ // Find matching reference node
+ $toFind = $suiteNode->nodeValue;
+ $idxOfRefNode = $this->findRefNodeIdx($refnodes, $toFind);
+ // if not found it is a new suite => append suite header and insert at the end == insert before the last one (= summary)
+ if ($idxOfRefNode == -1) {
+ $suiteNode = $dstHTML->importNode($suiteNode, true);
+ $table->insertBefore($suiteNode, $refnodes->item($refnodes->length));
+
+ $insertIdx = $refnodes->length + 1;
+ } else {
+ $insertIdx = $idxOfRefNode + 1;
}
-
continue;
}
//insert nodes before current reference node
$suiteNode = $dstHTML->importNode($suiteNode, true);
- $table->insertBefore($suiteNode, $refnodes->item($j));
+ $table->insertBefore($suiteNode, $refnodes->item($insertIdx));
}
}
@@ -185,6 +193,15 @@ public function run(): void
libxml_use_internal_errors($this->previousLibXmlUseErrors);
}
+ private function findRefNodeIdx(DOMNodeList $refNodes, string $nodeValue) {
+ for ($i = 0; $i < $refNodes->count(); $i++) {
+ if ($refNodes->item($i)->nodeValue == $nodeValue) {
+ return $i;
+ }
+ }
+ return -1;
+ }
+
/**
* This function sums all execution time of each report
* @param DOMDocument $dstFile