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

declare(strict_types=1);

namespace 
NunoMaduroCollisionAdaptersPhpunit;

use 
NunoMaduroCollisionContractsAdaptersPhpunitHasPrintableTestCaseName;
use 
PHPUnitFrameworkTestCase;

/**
 * @internal
 */
final class State
{
    
/**
     * The complete test suite number of tests.
     *
     * @var int|null
     */
    
public $suiteTotalTests;

    
/**
     * The complete test suite tests.
     *
     * @var array<int, TestResult>
     */
    
public $suiteTests = [];

    
/**
     * The current test case class.
     *
     * @var string
     */
    
public $testCaseName;

    
/**
     * The current test case tests.
     *
     * @var array<int, TestResult>
     */
    
public $testCaseTests = [];

    
/**
     * The current test case tests.
     *
     * @var array<int, TestResult>
     */
    
public $toBePrintedCaseTests = [];

    
/**
     * Header printed.
     *
     * @var bool
     */
    
public $headerPrinted false;

    
/**
     * The state constructor.
     */
    
private function __construct(string $testCaseName)
    {
        
$this->testCaseName $testCaseName;
    }

    
/**
     * Creates a new State starting from the given test case.
     */
    
public static function from(TestCase $test): self
    
{
        return new 
self(self::getPrintableTestCaseName($test));
    }

    
/**
     * Adds the given test to the State.
     */
    
public function add(TestResult $test): void
    
{
        
$this->testCaseTests[] = $test;
        
$this->toBePrintedCaseTests[] = $test;

        
$this->suiteTests[] = $test;
    }

    
/**
     * Gets the test case title.
     */
    
public function getTestCaseTitle(): string
    
{
        foreach (
$this->testCaseTests as $test) {
            if (
$test->type === TestResult::FAIL) {
                return 
'FAIL';
            }
        }

        foreach (
$this->testCaseTests as $test) {
            if (
$test->type !== TestResult::PASS) {
                return 
'WARN';
            }
        }

        return 
'PASS';
    }

    
/**
     * Gets the test case title color.
     */
    
public function getTestCaseTitleColor(): string
    
{
        foreach (
$this->testCaseTests as $test) {
            if (
$test->type === TestResult::FAIL) {
                return 
'red';
            }
        }

        foreach (
$this->testCaseTests as $test) {
            if (
$test->type !== TestResult::PASS) {
                return 
'yellow';
            }
        }

        return 
'green';
    }

    
/**
     * Returns the number of tests on the current test case.
     */
    
public function testCaseTestsCount(): int
    
{
        return 
count($this->testCaseTests);
    }

    
/**
     * Returns the number of tests on the complete test suite.
     */
    
public function testSuiteTestsCount(): int
    
{
        return 
count($this->suiteTests);
    }

    
/**
     * Checks if the given test case is different from the current one.
     */
    
public function testCaseHasChanged(TestCase $testCase): bool
    
{
        return 
self::getPrintableTestCaseName($testCase) !== $this->testCaseName;
    }

    
/**
     * Moves the a new test case.
     */
    
public function moveTo(TestCase $testCase): void
    
{
        
$this->testCaseName self::getPrintableTestCaseName($testCase);

        
$this->testCaseTests = [];

        
$this->headerPrinted false;
    }

    
/**
     * Foreach test in the test case.
     */
    
public function eachTestCaseTests(callable $callback): void
    
{
        foreach (
$this->toBePrintedCaseTests as $test) {
            
$callback($test);
        }

        
$this->toBePrintedCaseTests = [];
    }

    public function 
countTestsInTestSuiteBy(string $type): int
    
{
        return 
count(array_filter($this->suiteTests, function (TestResult $testResult) use ($type) {
            return 
$testResult->type === $type;
        }));
    }

    
/**
     * Checks if the given test already contains a result.
     */
    
public function existsInTestCase(TestCase $test): bool
    
{
        foreach (
$this->testCaseTests as $testResult) {
            if (
TestResult::makeDescription($test) === $testResult->description) {
                return 
true;
            }
        }

        return 
false;
    }

    
/**
     * Returns the printable test case name from the given `TestCase`.
     */
    
public static function getPrintableTestCaseName(TestCase $test): string
    
{
        return 
$test instanceof HasPrintableTestCaseName
            
$test->getPrintableTestCaseName()
            : 
get_class($test);
    }
}
Онлайн: 0
Реклама