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