Вход Регистрация
Файл: vendor/nunomaduro/collision/src/Adapters/Phpunit/Printer.php
Строк: 177
<?php

declare(strict_types=1);

namespace 
NunoMaduroCollisionAdaptersPhpunit;

use 
NunoMaduroCollisionExceptionsShouldNotHappen;
use 
PHPUnitFrameworkAssertionFailedError;
use 
PHPUnitFrameworkTest;
use 
PHPUnitFrameworkTestCase;
use 
PHPUnitFrameworkTestSuite;
use 
PHPUnitFrameworkWarning;
use 
ReflectionObject;
use 
SymfonyComponentConsoleInputArgvInput;
use 
SymfonyComponentConsoleOutputConsoleOutput;
use 
Throwable;

/**
 * @internal
 */
final class Printer implements PHPUnitTextUIResultPrinter
{
    
/**
     * Holds an instance of the style.
     *
     * Style is a class we use to interact with output.
     *
     * @var Style
     */
    
private $style;

    
/**
     * Holds the duration time of the test suite.
     *
     * @var Timer
     */
    
private $timer;

    
/**
     * Holds the state of the test
     * suite. The number of tests, etc.
     *
     * @var State
     */
    
private $state;

    
/**
     * If the test suite has failed.
     *
     * @var bool
     */
    
private $failed false;

    
/**
     * Creates a new instance of the listener.
     *
     * @param  ConsoleOutput  $output
     *
     * @throws ReflectionException
     */
    
public function __construct(SymfonyComponentConsoleOutputConsoleOutputInterface $output nullbool $verbose falsestring $colors 'always')
    {
        
$this->timer Timer::start();

        
$decorated $colors === 'always' || $colors === 'auto';

        
$output $output ?? new ConsoleOutput(ConsoleOutput::VERBOSITY_NORMAL$decorated);

        
ConfigureIO::of(new ArgvInput(), $output);

        
$this->style = new Style($output);
        
$dummyTest = new class() extends TestCase
        
{
        };

        
$this->state State::from($dummyTest);
    }

    
/**
     * {@inheritdoc}
     */
    
public function addError(Test $testCaseThrowable $throwablefloat $time): void
    
{
        
$this->failed true;

        
$testCase $this->testCaseFromTest($testCase);

        
$this->state->add(TestResult::fromTestCase($testCaseTestResult::FAIL$throwable));
    }

    
/**
     * {@inheritdoc}
     */
    
public function addWarning(Test $testCaseWarning $warningfloat $time): void
    
{
        
$testCase $this->testCaseFromTest($testCase);

        
$this->state->add(TestResult::fromTestCase($testCaseTestResult::WARN$warning));
    }

    
/**
     * {@inheritdoc}
     */
    
public function addFailure(Test $testCaseAssertionFailedError $errorfloat $time): void
    
{
        
$this->failed true;

        
$testCase $this->testCaseFromTest($testCase);

        
$reflector = new ReflectionObject($error);

        if (
$reflector->hasProperty('message')) {
            
$message trim((string) preg_replace("/r|n/""n  "$error->getMessage()));
            
$property $reflector->getProperty('message');
            
$property->setAccessible(true);
            
$property->setValue($error$message);
        }

        
$this->state->add(TestResult::fromTestCase($testCaseTestResult::FAIL$error));
    }

    
/**
     * {@inheritdoc}
     */
    
public function addIncompleteTest(Test $testCaseThrowable $throwablefloat $time): void
    
{
        
$testCase $this->testCaseFromTest($testCase);

        
$this->state->add(TestResult::fromTestCase($testCaseTestResult::INCOMPLETE$throwable));
    }

    
/**
     * {@inheritdoc}
     */
    
public function addRiskyTest(Test $testCaseThrowable $throwablefloat $time): void
    
{
        
$testCase $this->testCaseFromTest($testCase);

        
$this->state->add(TestResult::fromTestCase($testCaseTestResult::RISKY$throwable));
    }

    
/**
     * {@inheritdoc}
     */
    
public function addSkippedTest(Test $testCaseThrowable $throwablefloat $time): void
    
{
        
$testCase $this->testCaseFromTest($testCase);

        
$this->state->add(TestResult::fromTestCase($testCaseTestResult::SKIPPED$throwable));
    }

    
/**
     * {@inheritdoc}
     */
    
public function startTestSuite(TestSuite $suite): void
    
{
        if (
$this->state->suiteTotalTests === null) {
            
$this->state->suiteTotalTests $suite->count();
        }
    }

    
/**
     * {@inheritdoc}
     */
    
public function endTestSuite(TestSuite $suite): void
    
{
        
// ..
    
}

    
/**
     * {@inheritdoc}
     */
    
public function startTest(Test $testCase): void
    
{
        
$testCase $this->testCaseFromTest($testCase);

        
// Let's check first if the testCase is over.
        
if ($this->state->testCaseHasChanged($testCase)) {
            
$this->style->writeCurrentTestCaseSummary($this->state);

            
$this->state->moveTo($testCase);
        }
    }

    
/**
     * {@inheritdoc}
     */
    
public function endTest(Test $testCasefloat $time): void
    
{
        
$testCase $this->testCaseFromTest($testCase);

        if (! 
$this->state->existsInTestCase($testCase)) {
            
$this->state->add(TestResult::fromTestCase($testCaseTestResult::PASS));
        }

        if (
$testCase instanceof TestCase
            
&& $testCase->getTestResultObject() instanceof PHPUnitFrameworkTestResult
            
&& ! $testCase->getTestResultObject()->isStrictAboutOutputDuringTests()
            && ! 
$testCase->hasExpectationOnOutput()) {
            
$this->style->write($testCase->getActualOutput());
        }
    }

    
/**
     * Intentionally left blank as we output things on events of the listener.
     */
    
public function write(string $content): void
    
{
        
// ..
    
}

    
/**
     * Returns a test case from the given test.
     *
     * Note: This printer is do not work with normal Test classes - only
     * with Test Case classes. Please report an issue if you think
     * this should work any other way.
     */
    
private function testCaseFromTest(Test $test): TestCase
    
{
        if (! 
$test instanceof TestCase) {
            throw new 
ShouldNotHappen();
        }

        return 
$test;
    }

    
/**
     * Intentionally left blank as we output things on events of the listener.
     */
    
public function printResult(PHPUnitFrameworkTestResult $result): void
    
{
        if (
$result->count() === 0) {
            
$this->style->writeWarning('No tests executed!');
        }

        
$this->style->writeCurrentTestCaseSummary($this->state);

        if (
$this->failed) {
            
$onFailure $this->state->suiteTotalTests !== $this->state->testSuiteTestsCount();
            
$this->style->writeErrorsSummary($this->state$onFailure);
        }

        
$this->style->writeRecap($this->state$this->timer);
    }
}
Онлайн: 0
Реклама