Вход Регистрация
Файл: vendor/phpunit/phpunit/src/TextUI/TestSuiteMapper.php
Строк: 101
<?php declare(strict_types=1);
/*
 * This file is part of PHPUnit.
 *
 * (c) Sebastian Bergmann <sebastian@phpunit.de>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */
namespace PHPUnitTextUI;

use const 
PHP_VERSION;
use function 
explode;
use function 
in_array;
use function 
is_dir;
use function 
is_file;
use function 
strpos;
use function 
version_compare;
use 
PHPUnitFrameworkException as FrameworkException;
use 
PHPUnitFrameworkTestSuite as TestSuiteObject;
use 
PHPUnitTextUIXmlConfigurationTestSuiteCollection;
use 
SebastianBergmannFileIteratorFacade;

/**
 * @internal This class is not covered by the backward compatibility promise for PHPUnit
 */
final class TestSuiteMapper
{
    
/**
     * @throws RuntimeException
     * @throws TestDirectoryNotFoundException
     * @throws TestFileNotFoundException
     */
    
public function map(TestSuiteCollection $configurationstring $filter): TestSuiteObject
    
{
        try {
            
$filterAsArray $filter explode(','$filter) : [];
            
$result        = new TestSuiteObject;

            foreach (
$configuration as $testSuiteConfiguration) {
                if (!empty(
$filterAsArray) && !in_array($testSuiteConfiguration->name(), $filterAsArraytrue)) {
                    continue;
                }

                
$testSuite      = new TestSuiteObject($testSuiteConfiguration->name());
                
$testSuiteEmpty true;

                
$exclude = [];

                foreach (
$testSuiteConfiguration->exclude()->asArray() as $file) {
                    
$exclude[] = $file->path();
                }

                foreach (
$testSuiteConfiguration->directories() as $directory) {
                    if (!
version_compare(PHP_VERSION$directory->phpVersion(), $directory->phpVersionOperator()->asString())) {
                        continue;
                    }

                    
$files = (new Facade)->getFilesAsArray(
                        
$directory->path(),
                        
$directory->suffix(),
                        
$directory->prefix(),
                        
$exclude
                    
);

                    if (!empty(
$files)) {
                        
$testSuite->addTestFiles($files);

                        
$testSuiteEmpty false;
                    } elseif (
strpos($directory->path(), '*') === false && !is_dir($directory->path())) {
                        throw new 
TestDirectoryNotFoundException($directory->path());
                    }
                }

                foreach (
$testSuiteConfiguration->files() as $file) {
                    if (!
is_file($file->path())) {
                        throw new 
TestFileNotFoundException($file->path());
                    }

                    if (!
version_compare(PHP_VERSION$file->phpVersion(), $file->phpVersionOperator()->asString())) {
                        continue;
                    }

                    
$testSuite->addTestFile($file->path());

                    
$testSuiteEmpty false;
                }

                if (!
$testSuiteEmpty) {
                    
$result->addTest($testSuite);
                }
            }

            return 
$result;
        } catch (
FrameworkException $e) {
            throw new 
RuntimeException(
                
$e->getMessage(),
                
$e->getCode(),
                
$e
            
);
        }
    }
}
Онлайн: 1
Реклама