Seditio Source
Root |
./othercms/croogo-4.0.7/vendor/phpunit/phpunit/src/Util/TestDox/ResultPrinter.php
<?php
/*
 * This file is part of PHPUnit.
 *
 * (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 PHPUnit\Util\TestDox;

use
PHPUnit\Framework\AssertionFailedError;
use
PHPUnit\Framework\Test;
use
PHPUnit\Framework\TestCase;
use
PHPUnit\Framework\TestListener;
use
PHPUnit\Framework\TestSuite;
use
PHPUnit\Framework\Warning;
use
PHPUnit\Framework\WarningTestCase;
use
PHPUnit\Runner\BaseTestRunner;
use
PHPUnit\Util\Printer;

/**
 * Base class for printers of TestDox documentation.
 */
abstract class ResultPrinter extends Printer implements TestListener
{
   
/**
     * @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 string|null
     */
   
protected $currentTestClassPrettified;

   
/**
     * @var string|null
     */
   
protected $currentTestMethodPrettified;

   
/**
     * @var array
     */
   
private $groups;

   
/**
     * @var array
     */
   
private $excludeGroups;

   
/**
     * @param resource $out
     * @param array    $groups
     * @param array    $excludeGroups
     */
   
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()
    {
       
$this->doEndClass();
       
$this->endRun();

       
parent::flush();
    }

   
/**
     * An error occurred.
     *
     * @param Test       $test
     * @param \Exception $e
     * @param float      $time
     */
   
public function addError(Test $test, \Exception $e, $time)
    {
        if (!
$this->isOfInterest($test)) {
            return;
        }

       
$this->testStatus = BaseTestRunner::STATUS_ERROR;
       
$this->failed++;
    }

   
/**
     * A warning occurred.
     *
     * @param Test    $test
     * @param Warning $e
     * @param float   $time
     */
   
public function addWarning(Test $test, Warning $e, $time)
    {
        if (!
$this->isOfInterest($test)) {
            return;
        }

       
$this->testStatus = BaseTestRunner::STATUS_WARNING;
       
$this->warned++;
    }

   
/**
     * A failure occurred.
     *
     * @param Test                 $test
     * @param AssertionFailedError $e
     * @param float                $time
     */
   
public function addFailure(Test $test, AssertionFailedError $e, $time)
    {
        if (!
$this->isOfInterest($test)) {
            return;
        }

       
$this->testStatus = BaseTestRunner::STATUS_FAILURE;
       
$this->failed++;
    }

   
/**
     * Incomplete test.
     *
     * @param Test       $test
     * @param \Exception $e
     * @param float      $time
     */
   
public function addIncompleteTest(Test $test, \Exception $e, $time)
    {
        if (!
$this->isOfInterest($test)) {
            return;
        }

       
$this->testStatus = BaseTestRunner::STATUS_INCOMPLETE;
       
$this->incomplete++;
    }

   
/**
     * Risky test.
     *
     * @param Test       $test
     * @param \Exception $e
     * @param float      $time
     */
   
public function addRiskyTest(Test $test, \Exception $e, $time)
    {
        if (!
$this->isOfInterest($test)) {
            return;
        }

       
$this->testStatus = BaseTestRunner::STATUS_RISKY;
       
$this->risky++;
    }

   
/**
     * Skipped test.
     *
     * @param Test       $test
     * @param \Exception $e
     * @param float      $time
     */
   
public function addSkippedTest(Test $test, \Exception $e, $time)
    {
        if (!
$this->isOfInterest($test)) {
            return;
        }

       
$this->testStatus = BaseTestRunner::STATUS_SKIPPED;
       
$this->skipped++;
    }

   
/**
     * A testsuite started.
     *
     * @param TestSuite $suite
     */
   
public function startTestSuite(TestSuite $suite)
    {
    }

   
/**
     * A testsuite ended.
     *
     * @param TestSuite $suite
     */
   
public function endTestSuite(TestSuite $suite)
    {
    }

   
/**
     * A test started.
     *
     * @param Test $test
     */
   
public function startTest(Test $test)
    {
        if (!
$this->isOfInterest($test)) {
            return;
        }

       
$class = \get_class($test);

        if (
$this->testClass != $class) {
            if (
$this->testClass != '') {
               
$this->doEndClass();
            }

           
$classAnnotations = \PHPUnit\Util\Test::parseTestMethodAnnotations($class);
            if (isset(
$classAnnotations['class']['testdox'][0])) {
               
$this->currentTestClassPrettified = $classAnnotations['class']['testdox'][0];
            } else {
               
$this->currentTestClassPrettified = $this->prettifier->prettifyTestClass($class);
            }

           
$this->startClass($class);

           
$this->testClass = $class;
           
$this->tests     = [];
        }

        if (
$test instanceof TestCase) {
           
$annotations = $test->getAnnotations();

            if (isset(
$annotations['method']['testdox'][0])) {
               
$this->currentTestMethodPrettified = $annotations['method']['testdox'][0];
            } else {
               
$this->currentTestMethodPrettified = $this->prettifier->prettifyTestMethod($test->getName(false));
            }

            if (
$test->usesDataProvider()) {
               
$this->currentTestMethodPrettified .= ' ' . $test->dataDescription();
            }
        }

       
$this->testStatus = BaseTestRunner::STATUS_PASSED;
    }

   
/**
     * A test ended.
     *
     * @param Test  $test
     * @param float $time
     */
   
public function endTest(Test $test, $time)
    {
        if (!
$this->isOfInterest($test)) {
            return;
        }

        if (!isset(
$this->tests[$this->currentTestMethodPrettified])) {
            if (
$this->testStatus == BaseTestRunner::STATUS_PASSED) {
               
$this->tests[$this->currentTestMethodPrettified]['success'] = 1;
               
$this->tests[$this->currentTestMethodPrettified]['failure'] = 0;
            } else {
               
$this->tests[$this->currentTestMethodPrettified]['success'] = 0;
               
$this->tests[$this->currentTestMethodPrettified]['failure'] = 1;
            }
        } else {
            if (
$this->testStatus == BaseTestRunner::STATUS_PASSED) {
               
$this->tests[$this->currentTestMethodPrettified]['success']++;
            } else {
               
$this->tests[$this->currentTestMethodPrettified]['failure']++;
            }
        }

       
$this->currentTestClassPrettified  = null;
       
$this->currentTestMethodPrettified = null;
    }

    protected function
doEndClass()
    {
        foreach (
$this->tests as $name => $data) {
           
$this->onTest($name, $data['failure'] == 0);
        }

       
$this->endClass($this->testClass);
    }

   
/**
     * Handler for 'start run' event.
     */
   
protected function startRun()
    {
    }

   
/**
     * Handler for 'start class' event.
     *
     * @param string $name
     */
   
protected function startClass($name)
    {
    }

   
/**
     * Handler for 'on test' event.
     *
     * @param string $name
     * @param bool   $success
     */
   
protected function onTest($name, $success = true)
    {
    }

   
/**
     * Handler for 'end class' event.
     *
     * @param string $name
     */
   
protected function endClass($name)
    {
    }

   
/**
     * Handler for 'end run' event.
     */
   
protected function endRun()
    {
    }

   
/**
     * @param Test $test
     *
     * @return bool
     */
   
private function isOfInterest(Test $test)
    {
        if (!
$test instanceof TestCase) {
            return
false;
        }

        if (
$test instanceof WarningTestCase) {
            return
false;
        }

        if (!empty(
$this->groups)) {
            foreach (
$test->getGroups() as $group) {
                if (\
in_array($group, $this->groups)) {
                    return
true;
                }
            }

            return
false;
        }

        if (!empty(
$this->excludeGroups)) {
            foreach (
$test->getGroups() as $group) {
                if (\
in_array($group, $this->excludeGroups)) {
                    return
false;
                }
            }

            return
true;
        }

        return
true;
    }
}