summaryrefslogtreecommitdiff
path: root/vendor/phpunit/phpunit/src/Util/TestDox/ResultPrinter.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/phpunit/phpunit/src/Util/TestDox/ResultPrinter.php')
-rw-r--r--vendor/phpunit/phpunit/src/Util/TestDox/ResultPrinter.php343
1 files changed, 343 insertions, 0 deletions
diff --git a/vendor/phpunit/phpunit/src/Util/TestDox/ResultPrinter.php b/vendor/phpunit/phpunit/src/Util/TestDox/ResultPrinter.php
new file mode 100644
index 000000000..c4b63644f
--- /dev/null
+++ b/vendor/phpunit/phpunit/src/Util/TestDox/ResultPrinter.php
@@ -0,0 +1,343 @@
+<?php declare(strict_types=1);
+/*
+ * This file is part of PHPUnit.
+ *
+ * (c) Sebastian Bergmann <[email protected]>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+namespace PHPUnit\Util\TestDox;
+
+use function get_class;
+use function in_array;
+use PHPUnit\Framework\AssertionFailedError;
+use PHPUnit\Framework\ErrorTestCase;
+use PHPUnit\Framework\Test;
+use PHPUnit\Framework\TestCase;
+use PHPUnit\Framework\TestSuite;
+use PHPUnit\Framework\Warning;
+use PHPUnit\Framework\WarningTestCase;
+use PHPUnit\Runner\BaseTestRunner;
+use PHPUnit\TextUI\ResultPrinter as ResultPrinterInterface;
+use PHPUnit\Util\Printer;
+use Throwable;
+
+/**
+ * @internal This class is not covered by the backward compatibility promise for PHPUnit
+ */
+abstract class ResultPrinter extends Printer implements ResultPrinterInterface
+{
+ /**
+ * @var NamePrettifier
+ */
+ protected $prettifier;
+
+ /**
+ * @var string
+ */
+ protected $testClass = '';
+
+ /**
+ * @var int
+ */
+ protected $testStatus;
+
+ /**
+ * @var array
+ */
+ protected $tests = [];
+
+ /**
+ * @var int
+ */
+ protected $successful = 0;
+
+ /**
+ * @var int
+ */
+ protected $warned = 0;
+
+ /**
+ * @var int
+ */
+ protected $failed = 0;
+
+ /**
+ * @var int
+ */
+ protected $risky = 0;
+
+ /**
+ * @var int
+ */
+ protected $skipped = 0;
+
+ /**
+ * @var int
+ */
+ protected $incomplete = 0;
+
+ /**
+ * @var null|string
+ */
+ protected $currentTestClassPrettified;
+
+ /**
+ * @var null|string
+ */
+ protected $currentTestMethodPrettified;
+
+ /**
+ * @var array
+ */
+ private $groups;
+
+ /**
+ * @var array
+ */
+ private $excludeGroups;
+
+ /**
+ * @param resource $out
+ *
+ * @throws \PHPUnit\Framework\Exception
+ */
+ public function __construct($out = null, array $groups = [], array $excludeGroups = [])
+ {
+ parent::__construct($out);
+
+ $this->groups = $groups;
+ $this->excludeGroups = $excludeGroups;
+
+ $this->prettifier = new NamePrettifier;
+ $this->startRun();
+ }
+
+ /**
+ * Flush buffer and close output.
+ */
+ public function flush(): void
+ {
+ $this->doEndClass();
+ $this->endRun();
+
+ parent::flush();
+ }
+
+ /**
+ * An error occurred.
+ */
+ public function addError(Test $test, Throwable $t, float $time): void
+ {
+ if (!$this->isOfInterest($test)) {
+ return;
+ }
+
+ $this->testStatus = BaseTestRunner::STATUS_ERROR;
+ $this->failed++;
+ }
+
+ /**
+ * A warning occurred.
+ */
+ public function addWarning(Test $test, Warning $e, float $time): void
+ {
+ if (!$this->isOfInterest($test)) {
+ return;
+ }
+
+ $this->testStatus = BaseTestRunner::STATUS_WARNING;
+ $this->warned++;
+ }
+
+ /**
+ * A failure occurred.
+ */
+ public function addFailure(Test $test, AssertionFailedError $e, float $time): void
+ {
+ if (!$this->isOfInterest($test)) {
+ return;
+ }
+
+ $this->testStatus = BaseTestRunner::STATUS_FAILURE;
+ $this->failed++;
+ }
+
+ /**
+ * Incomplete test.
+ */
+ public function addIncompleteTest(Test $test, Throwable $t, float $time): void
+ {
+ if (!$this->isOfInterest($test)) {
+ return;
+ }
+
+ $this->testStatus = BaseTestRunner::STATUS_INCOMPLETE;
+ $this->incomplete++;
+ }
+
+ /**
+ * Risky test.
+ */
+ public function addRiskyTest(Test $test, Throwable $t, float $time): void
+ {
+ if (!$this->isOfInterest($test)) {
+ return;
+ }
+
+ $this->testStatus = BaseTestRunner::STATUS_RISKY;
+ $this->risky++;
+ }
+
+ /**
+ * Skipped test.
+ */
+ public function addSkippedTest(Test $test, Throwable $t, float $time): void
+ {
+ if (!$this->isOfInterest($test)) {
+ return;
+ }
+
+ $this->testStatus = BaseTestRunner::STATUS_SKIPPED;
+ $this->skipped++;
+ }
+
+ /**
+ * A testsuite started.
+ */
+ public function startTestSuite(TestSuite $suite): void
+ {
+ }
+
+ /**
+ * A testsuite ended.
+ */
+ public function endTestSuite(TestSuite $suite): void
+ {
+ }
+
+ /**
+ * A test started.
+ *
+ * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException
+ */
+ public function startTest(Test $test): void
+ {
+ if (!$this->isOfInterest($test)) {
+ return;
+ }
+
+ $class = get_class($test);
+
+ if ($this->testClass !== $class) {
+ if ($this->testClass !== '') {
+ $this->doEndClass();
+ }
+
+ $this->currentTestClassPrettified = $this->prettifier->prettifyTestClass($class);
+ $this->testClass = $class;
+ $this->tests = [];
+
+ $this->startClass($class);
+ }
+
+ if ($test instanceof TestCase) {
+ $this->currentTestMethodPrettified = $this->prettifier->prettifyTestCase($test);
+ }
+
+ $this->testStatus = BaseTestRunner::STATUS_PASSED;
+ }
+
+ /**
+ * A test ended.
+ */
+ public function endTest(Test $test, float $time): void
+ {
+ if (!$this->isOfInterest($test)) {
+ return;
+ }
+
+ $this->tests[] = [$this->currentTestMethodPrettified, $this->testStatus];
+
+ $this->currentTestClassPrettified = null;
+ $this->currentTestMethodPrettified = null;
+ }
+
+ protected function doEndClass(): void
+ {
+ foreach ($this->tests as $test) {
+ $this->onTest($test[0], $test[1] === BaseTestRunner::STATUS_PASSED);
+ }
+
+ $this->endClass($this->testClass);
+ }
+
+ /**
+ * Handler for 'start run' event.
+ */
+ protected function startRun(): void
+ {
+ }
+
+ /**
+ * Handler for 'start class' event.
+ */
+ protected function startClass(string $name): void
+ {
+ }
+
+ /**
+ * Handler for 'on test' event.
+ */
+ protected function onTest(string $name, bool $success = true): void
+ {
+ }
+
+ /**
+ * Handler for 'end class' event.
+ */
+ protected function endClass(string $name): void
+ {
+ }
+
+ /**
+ * Handler for 'end run' event.
+ */
+ protected function endRun(): void
+ {
+ }
+
+ private function isOfInterest(Test $test): bool
+ {
+ if (!$test instanceof TestCase) {
+ return false;
+ }
+
+ if ($test instanceof ErrorTestCase || $test instanceof WarningTestCase) {
+ return false;
+ }
+
+ if (!empty($this->groups)) {
+ foreach ($test->getGroups() as $group) {
+ if (in_array($group, $this->groups, true)) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ if (!empty($this->excludeGroups)) {
+ foreach ($test->getGroups() as $group) {
+ if (in_array($group, $this->excludeGroups, true)) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ return true;
+ }
+}