Viewing file: State.php (4.43 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
declare(strict_types=1);
namespace NunoMaduro\Collision\Adapters\Phpunit;
use NunoMaduro\Collision\Contracts\Adapters\Phpunit\HasPrintableTestCaseName; use PHPUnit\Framework\TestCase;
/** * @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); } }
|