Вход Регистрация
Файл: vendor/phpunit/php-code-coverage/src/Report/Html/Facade.php
Строк: 142
<?php declare(strict_types=1);
/*
 * This file is part of phpunit/php-code-coverage.
 *
 * (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 SebastianBergmannCodeCoverageReportHtml;

use const 
DIRECTORY_SEPARATOR;
use function 
copy;
use function 
date;
use function 
dirname;
use function 
substr;
use 
SebastianBergmannCodeCoverageCodeCoverage;
use 
SebastianBergmannCodeCoverageInvalidArgumentException;
use 
SebastianBergmannCodeCoverageNodeDirectory as DirectoryNode;
use 
SebastianBergmannCodeCoverageUtilFilesystem;

final class 
Facade
{
    
/**
     * @var string
     */
    
private $templatePath;

    
/**
     * @var string
     */
    
private $generator;

    
/**
     * @var int
     */
    
private $lowUpperBound;

    
/**
     * @var int
     */
    
private $highLowerBound;

    public function 
__construct(int $lowUpperBound = 50, int $highLowerBound = 90, string $generator = '')
    {
        if (
$lowUpperBound > $highLowerBound) {
            throw new 
InvalidArgumentException(
                
'$lowUpperBound must not be larger than $highLowerBound'
            
);
        }

        
$this->generator      = $generator;
        
$this->highLowerBound = $highLowerBound;
        
$this->lowUpperBound  = $lowUpperBound;
        
$this->templatePath   = __DIR__ . '/Renderer/Template/';
    }

    public function 
process(CodeCoverage $coverage, string $target): void
    
{
        
$target = $this->directory($target);
        
$report = $coverage->getReport();
        
$date   = date('D M j G:i:s T Y');

        
$dashboard = new Dashboard(
            
$this->templatePath,
            
$this->generator,
            
$date,
            
$this->lowUpperBound,
            
$this->highLowerBound,
            
$coverage->collectsBranchAndPathCoverage()
        );

        
$directory = new Directory(
            
$this->templatePath,
            
$this->generator,
            
$date,
            
$this->lowUpperBound,
            
$this->highLowerBound,
            
$coverage->collectsBranchAndPathCoverage()
        );

        
$file = new File(
            
$this->templatePath,
            
$this->generator,
            
$date,
            
$this->lowUpperBound,
            
$this->highLowerBound,
            
$coverage->collectsBranchAndPathCoverage()
        );

        
$directory->render($report, $target . 'index.html');
        
$dashboard->render($report, $target . 'dashboard.html');

        foreach (
$report as $node) {
            
$id = $node->id();

            if (
$node instanceof DirectoryNode) {
                
Filesystem::createDirectory($target . $id);

                
$directory->render($node, $target . $id . '/index.html');
                
$dashboard->render($node, $target . $id . '/dashboard.html');
            } else {
                
$dir = dirname($target . $id);

                
Filesystem::createDirectory($dir);

                
$file->render($node, $target . $id);
            }
        }

        
$this->copyFiles($target);
    }

    private function 
copyFiles(string $target): void
    
{
        
$dir = $this->directory($target . '_css');

        
copy($this->templatePath . 'css/bootstrap.min.css', $dir . 'bootstrap.min.css');
        
copy($this->templatePath . 'css/nv.d3.min.css', $dir . 'nv.d3.min.css');
        
copy($this->templatePath . 'css/style.css', $dir . 'style.css');
        
copy($this->templatePath . 'css/custom.css', $dir . 'custom.css');
        
copy($this->templatePath . 'css/octicons.css', $dir . 'octicons.css');

        
$dir = $this->directory($target . '_icons');
        
copy($this->templatePath . 'icons/file-code.svg', $dir . 'file-code.svg');
        
copy($this->templatePath . 'icons/file-directory.svg', $dir . 'file-directory.svg');

        
$dir = $this->directory($target . '_js');
        
copy($this->templatePath . 'js/bootstrap.min.js', $dir . 'bootstrap.min.js');
        
copy($this->templatePath . 'js/popper.min.js', $dir . 'popper.min.js');
        
copy($this->templatePath . 'js/d3.min.js', $dir . 'd3.min.js');
        
copy($this->templatePath . 'js/jquery.min.js', $dir . 'jquery.min.js');
        
copy($this->templatePath . 'js/nv.d3.min.js', $dir . 'nv.d3.min.js');
        
copy($this->templatePath . 'js/file.js', $dir . 'file.js');
    }

    private function 
directory(string $directory): string
    
{
        if (
substr($directory, -1, 1) != DIRECTORY_SEPARATOR) {
            
$directory .= DIRECTORY_SEPARATOR;
        }

        
Filesystem::createDirectory($directory);

        return 
$directory;
    }
}
Онлайн: 0
Реклама