summaryrefslogtreecommitdiff
path: root/vendor/phpunit/phpunit/src/Util/Xml/Loader.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/phpunit/phpunit/src/Util/Xml/Loader.php')
-rw-r--r--vendor/phpunit/phpunit/src/Util/Xml/Loader.php117
1 files changed, 117 insertions, 0 deletions
diff --git a/vendor/phpunit/phpunit/src/Util/Xml/Loader.php b/vendor/phpunit/phpunit/src/Util/Xml/Loader.php
new file mode 100644
index 000000000..8d43d3278
--- /dev/null
+++ b/vendor/phpunit/phpunit/src/Util/Xml/Loader.php
@@ -0,0 +1,117 @@
+<?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\Util\Xml;
+
+use function chdir;
+use function dirname;
+use function error_reporting;
+use function file_get_contents;
+use function getcwd;
+use function libxml_get_errors;
+use function libxml_use_internal_errors;
+use function sprintf;
+use DOMDocument;
+
+/**
+ * @internal This class is not covered by the backward compatibility promise for PHPUnit
+ */
+final class Loader
+{
+ /**
+ * @throws Exception
+ */
+ public function loadFile(string $filename, bool $isHtml = false, bool $xinclude = false, bool $strict = false): DOMDocument
+ {
+ $reporting = error_reporting(0);
+ $contents = file_get_contents($filename);
+
+ error_reporting($reporting);
+
+ if ($contents === false) {
+ throw new Exception(
+ sprintf(
+ 'Could not read "%s".',
+ $filename
+ )
+ );
+ }
+
+ return $this->load($contents, $isHtml, $filename, $xinclude, $strict);
+ }
+
+ /**
+ * @throws Exception
+ */
+ public function load(string $actual, bool $isHtml = false, string $filename = '', bool $xinclude = false, bool $strict = false): DOMDocument
+ {
+ if ($actual === '') {
+ throw new Exception('Could not load XML from empty string');
+ }
+
+ // Required for XInclude on Windows.
+ if ($xinclude) {
+ $cwd = getcwd();
+ @chdir(dirname($filename));
+ }
+
+ $document = new DOMDocument;
+ $document->preserveWhiteSpace = false;
+
+ $internal = libxml_use_internal_errors(true);
+ $message = '';
+ $reporting = error_reporting(0);
+
+ if ($filename !== '') {
+ // Required for XInclude
+ $document->documentURI = $filename;
+ }
+
+ if ($isHtml) {
+ $loaded = $document->loadHTML($actual);
+ } else {
+ $loaded = $document->loadXML($actual);
+ }
+
+ if (!$isHtml && $xinclude) {
+ $document->xinclude();
+ }
+
+ foreach (libxml_get_errors() as $error) {
+ $message .= "\n" . $error->message;
+ }
+
+ libxml_use_internal_errors($internal);
+ error_reporting($reporting);
+
+ if (isset($cwd)) {
+ @chdir($cwd);
+ }
+
+ if ($loaded === false || ($strict && $message !== '')) {
+ if ($filename !== '') {
+ throw new Exception(
+ sprintf(
+ 'Could not load "%s".%s',
+ $filename,
+ $message !== '' ? "\n" . $message : ''
+ )
+ );
+ }
+
+ if ($message === '') {
+ $message = 'Could not load XML for unknown reason';
+ }
+
+ throw new Exception($message);
+ }
+
+ return $document;
+ }
+}