summaryrefslogtreecommitdiff
path: root/vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/LogToReportMigration.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/LogToReportMigration.php')
-rw-r--r--vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/LogToReportMigration.php79
1 files changed, 79 insertions, 0 deletions
diff --git a/vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/LogToReportMigration.php b/vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/LogToReportMigration.php
new file mode 100644
index 000000000..e987308b7
--- /dev/null
+++ b/vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/LogToReportMigration.php
@@ -0,0 +1,79 @@
+<?php declare(strict_types=1);
+/*
+ * This file is part of PHPUnit.
+ *
+ * (c) Sebastian Bergmann <[email protected]>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+namespace PHPUnit\TextUI\XmlConfiguration;
+
+use function sprintf;
+use DOMDocument;
+use DOMElement;
+use DOMXPath;
+
+/**
+ * @internal This class is not covered by the backward compatibility promise for PHPUnit
+ */
+abstract class LogToReportMigration implements Migration
+{
+ /**
+ * @throws MigrationException
+ */
+ public function migrate(DOMDocument $document): void
+ {
+ $coverage = $document->getElementsByTagName('coverage')->item(0);
+
+ if (!$coverage instanceof DOMElement) {
+ throw new MigrationException('Unexpected state - No coverage element');
+ }
+
+ $logNode = $this->findLogNode($document);
+
+ if ($logNode === null) {
+ return;
+ }
+
+ $reportChild = $this->toReportFormat($logNode);
+
+ $report = $coverage->getElementsByTagName('report')->item(0);
+
+ if ($report === null) {
+ $report = $coverage->appendChild($document->createElement('report'));
+ }
+
+ $report->appendChild($reportChild);
+ $logNode->parentNode->removeChild($logNode);
+ }
+
+ protected function migrateAttributes(DOMElement $src, DOMElement $dest, array $attributes): void
+ {
+ foreach ($attributes as $attr) {
+ if (!$src->hasAttribute($attr)) {
+ continue;
+ }
+
+ $dest->setAttribute($attr, $src->getAttribute($attr));
+ $src->removeAttribute($attr);
+ }
+ }
+
+ abstract protected function forType(): string;
+
+ abstract protected function toReportFormat(DOMElement $logNode): DOMElement;
+
+ private function findLogNode(DOMDocument $document): ?DOMElement
+ {
+ $logNode = (new DOMXPath($document))->query(
+ sprintf('//logging/log[@type="%s"]', $this->forType())
+ )->item(0);
+
+ if (!$logNode instanceof DOMElement) {
+ return null;
+ }
+
+ return $logNode;
+ }
+}