summaryrefslogtreecommitdiff
path: root/vendor/phpunit/phpunit/src/Runner/Extension/PharLoader.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/phpunit/phpunit/src/Runner/Extension/PharLoader.php')
-rw-r--r--vendor/phpunit/phpunit/src/Runner/Extension/PharLoader.php75
1 files changed, 75 insertions, 0 deletions
diff --git a/vendor/phpunit/phpunit/src/Runner/Extension/PharLoader.php b/vendor/phpunit/phpunit/src/Runner/Extension/PharLoader.php
new file mode 100644
index 000000000..adc4cd77c
--- /dev/null
+++ b/vendor/phpunit/phpunit/src/Runner/Extension/PharLoader.php
@@ -0,0 +1,75 @@
+<?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\Runner\Extension;
+
+use PharIo\Manifest\ApplicationName;
+use PharIo\Manifest\Exception as ManifestException;
+use PharIo\Manifest\ManifestLoader;
+use PharIo\Version\Version as PharIoVersion;
+use PHPUnit\Runner\Version;
+use SebastianBergmann\FileIterator\Facade as FileIteratorFacade;
+
+/**
+ * @internal This class is not covered by the backward compatibility promise for PHPUnit
+ */
+final class PharLoader
+{
+ /**
+ * @psalm-return array{loadedExtensions: list<string>, notLoadedExtensions: list<string>}
+ */
+ public function loadPharExtensionsInDirectory(string $directory): array
+ {
+ $loadedExtensions = [];
+ $notLoadedExtensions = [];
+
+ foreach ((new FileIteratorFacade)->getFilesAsArray($directory, '.phar') as $file) {
+ if (!is_file('phar://' . $file . '/manifest.xml')) {
+ $notLoadedExtensions[] = $file . ' is not an extension for PHPUnit';
+
+ continue;
+ }
+
+ try {
+ $applicationName = new ApplicationName('phpunit/phpunit');
+ $version = new PharIoVersion(Version::series());
+ $manifest = ManifestLoader::fromFile('phar://' . $file . '/manifest.xml');
+
+ if (!$manifest->isExtensionFor($applicationName)) {
+ $notLoadedExtensions[] = $file . ' is not an extension for PHPUnit';
+
+ continue;
+ }
+
+ if (!$manifest->isExtensionFor($applicationName, $version)) {
+ $notLoadedExtensions[] = $file . ' is not compatible with this version of PHPUnit';
+
+ continue;
+ }
+ } catch (ManifestException $e) {
+ $notLoadedExtensions[] = $file . ': ' . $e->getMessage();
+
+ continue;
+ }
+
+ /**
+ * @noinspection PhpIncludeInspection
+ * @psalm-suppress UnresolvableInclude
+ */
+ require $file;
+
+ $loadedExtensions[] = $manifest->getName()->asString() . ' ' . $manifest->getVersion()->getVersionString();
+ }
+
+ return [
+ 'loadedExtensions' => $loadedExtensions,
+ 'notLoadedExtensions' => $notLoadedExtensions,
+ ];
+ }
+}