/vendor/phpunit/phpunit/src/Framework/TestResult.php
https://gitlab.com/ealexis.t/trends · PHP · 1128 lines · 556 code · 139 blank · 433 comment · 69 complexity · f01f5872e082455edf98ba9bdb5c131b MD5 · raw file
- <?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.
- */
- /**
- * A TestResult collects the results of executing a test case.
- *
- * @since Class available since Release 2.0.0
- */
- class PHPUnit_Framework_TestResult implements Countable
- {
- /**
- * @var array
- */
- protected $passed = array();
- /**
- * @var array
- */
- protected $errors = array();
- /**
- * @var array
- */
- protected $failures = array();
- /**
- * @var array
- */
- protected $notImplemented = array();
- /**
- * @var array
- */
- protected $risky = array();
- /**
- * @var array
- */
- protected $skipped = array();
- /**
- * @var array
- */
- protected $listeners = array();
- /**
- * @var int
- */
- protected $runTests = 0;
- /**
- * @var float
- */
- protected $time = 0;
- /**
- * @var PHPUnit_Framework_TestSuite
- */
- protected $topTestSuite = null;
- /**
- * Code Coverage information.
- *
- * @var PHP_CodeCoverage
- */
- protected $codeCoverage;
- /**
- * @var bool
- */
- protected $convertErrorsToExceptions = true;
- /**
- * @var bool
- */
- protected $stop = false;
- /**
- * @var bool
- */
- protected $stopOnError = false;
- /**
- * @var bool
- */
- protected $stopOnFailure = false;
- /**
- * @var bool
- */
- protected $beStrictAboutTestsThatDoNotTestAnything = false;
- /**
- * @var bool
- */
- protected $beStrictAboutOutputDuringTests = false;
- /**
- * @var bool
- */
- protected $beStrictAboutTestSize = false;
- /**
- * @var bool
- */
- protected $beStrictAboutTodoAnnotatedTests = false;
- /**
- * @var bool
- */
- protected $stopOnRisky = false;
- /**
- * @var bool
- */
- protected $stopOnIncomplete = false;
- /**
- * @var bool
- */
- protected $stopOnSkipped = false;
- /**
- * @var bool
- */
- protected $lastTestFailed = false;
- /**
- * @var int
- */
- protected $timeoutForSmallTests = 1;
- /**
- * @var int
- */
- protected $timeoutForMediumTests = 10;
- /**
- * @var int
- */
- protected $timeoutForLargeTests = 60;
- /**
- * Registers a TestListener.
- *
- * @param PHPUnit_Framework_TestListener
- */
- public function addListener(PHPUnit_Framework_TestListener $listener)
- {
- $this->listeners[] = $listener;
- }
- /**
- * Unregisters a TestListener.
- *
- * @param PHPUnit_Framework_TestListener $listener
- */
- public function removeListener(PHPUnit_Framework_TestListener $listener)
- {
- foreach ($this->listeners as $key => $_listener) {
- if ($listener === $_listener) {
- unset($this->listeners[$key]);
- }
- }
- }
- /**
- * Flushes all flushable TestListeners.
- *
- * @since Method available since Release 3.0.0
- */
- public function flushListeners()
- {
- foreach ($this->listeners as $listener) {
- if ($listener instanceof PHPUnit_Util_Printer) {
- $listener->flush();
- }
- }
- }
- /**
- * Adds an error to the list of errors.
- *
- * @param PHPUnit_Framework_Test $test
- * @param Exception $e
- * @param float $time
- */
- public function addError(PHPUnit_Framework_Test $test, Exception $e, $time)
- {
- if ($e instanceof PHPUnit_Framework_RiskyTest) {
- $this->risky[] = new PHPUnit_Framework_TestFailure($test, $e);
- $notifyMethod = 'addRiskyTest';
- if ($this->stopOnRisky) {
- $this->stop();
- }
- } elseif ($e instanceof PHPUnit_Framework_IncompleteTest) {
- $this->notImplemented[] = new PHPUnit_Framework_TestFailure($test, $e);
- $notifyMethod = 'addIncompleteTest';
- if ($this->stopOnIncomplete) {
- $this->stop();
- }
- } elseif ($e instanceof PHPUnit_Framework_SkippedTest) {
- $this->skipped[] = new PHPUnit_Framework_TestFailure($test, $e);
- $notifyMethod = 'addSkippedTest';
- if ($this->stopOnSkipped) {
- $this->stop();
- }
- } else {
- $this->errors[] = new PHPUnit_Framework_TestFailure($test, $e);
- $notifyMethod = 'addError';
- if ($this->stopOnError || $this->stopOnFailure) {
- $this->stop();
- }
- }
- foreach ($this->listeners as $listener) {
- $listener->$notifyMethod($test, $e, $time);
- }
- $this->lastTestFailed = true;
- $this->time += $time;
- }
- /**
- * Adds a failure to the list of failures.
- * The passed in exception caused the failure.
- *
- * @param PHPUnit_Framework_Test $test
- * @param PHPUnit_Framework_AssertionFailedError $e
- * @param float $time
- */
- public function addFailure(PHPUnit_Framework_Test $test, PHPUnit_Framework_AssertionFailedError $e, $time)
- {
- if ($e instanceof PHPUnit_Framework_RiskyTest ||
- $e instanceof PHPUnit_Framework_OutputError) {
- $this->risky[] = new PHPUnit_Framework_TestFailure($test, $e);
- $notifyMethod = 'addRiskyTest';
- if ($this->stopOnRisky) {
- $this->stop();
- }
- } elseif ($e instanceof PHPUnit_Framework_IncompleteTest) {
- $this->notImplemented[] = new PHPUnit_Framework_TestFailure($test, $e);
- $notifyMethod = 'addIncompleteTest';
- if ($this->stopOnIncomplete) {
- $this->stop();
- }
- } elseif ($e instanceof PHPUnit_Framework_SkippedTest) {
- $this->skipped[] = new PHPUnit_Framework_TestFailure($test, $e);
- $notifyMethod = 'addSkippedTest';
- if ($this->stopOnSkipped) {
- $this->stop();
- }
- } else {
- $this->failures[] = new PHPUnit_Framework_TestFailure($test, $e);
- $notifyMethod = 'addFailure';
- if ($this->stopOnFailure) {
- $this->stop();
- }
- }
- foreach ($this->listeners as $listener) {
- $listener->$notifyMethod($test, $e, $time);
- }
- $this->lastTestFailed = true;
- $this->time += $time;
- }
- /**
- * Informs the result that a testsuite will be started.
- *
- * @param PHPUnit_Framework_TestSuite $suite
- *
- * @since Method available since Release 2.2.0
- */
- public function startTestSuite(PHPUnit_Framework_TestSuite $suite)
- {
- if ($this->topTestSuite === null) {
- $this->topTestSuite = $suite;
- }
- foreach ($this->listeners as $listener) {
- $listener->startTestSuite($suite);
- }
- }
- /**
- * Informs the result that a testsuite was completed.
- *
- * @param PHPUnit_Framework_TestSuite $suite
- *
- * @since Method available since Release 2.2.0
- */
- public function endTestSuite(PHPUnit_Framework_TestSuite $suite)
- {
- foreach ($this->listeners as $listener) {
- $listener->endTestSuite($suite);
- }
- }
- /**
- * Informs the result that a test will be started.
- *
- * @param PHPUnit_Framework_Test $test
- */
- public function startTest(PHPUnit_Framework_Test $test)
- {
- $this->lastTestFailed = false;
- $this->runTests += count($test);
- foreach ($this->listeners as $listener) {
- $listener->startTest($test);
- }
- }
- /**
- * Informs the result that a test was completed.
- *
- * @param PHPUnit_Framework_Test $test
- * @param float $time
- */
- public function endTest(PHPUnit_Framework_Test $test, $time)
- {
- foreach ($this->listeners as $listener) {
- $listener->endTest($test, $time);
- }
- if (!$this->lastTestFailed && $test instanceof PHPUnit_Framework_TestCase) {
- $class = get_class($test);
- $key = $class . '::' . $test->getName();
- $this->passed[$key] = array(
- 'result' => $test->getResult(),
- 'size' => PHPUnit_Util_Test::getSize(
- $class,
- $test->getName(false)
- )
- );
- $this->time += $time;
- }
- }
- /**
- * Returns true if no risky test occurred.
- *
- * @return bool
- *
- * @since Method available since Release 4.0.0
- */
- public function allHarmless()
- {
- return $this->riskyCount() == 0;
- }
- /**
- * Gets the number of risky tests.
- *
- * @return int
- *
- * @since Method available since Release 4.0.0
- */
- public function riskyCount()
- {
- return count($this->risky);
- }
- /**
- * Returns true if no incomplete test occurred.
- *
- * @return bool
- */
- public function allCompletelyImplemented()
- {
- return $this->notImplementedCount() == 0;
- }
- /**
- * Gets the number of incomplete tests.
- *
- * @return int
- */
- public function notImplementedCount()
- {
- return count($this->notImplemented);
- }
- /**
- * Returns an Enumeration for the risky tests.
- *
- * @return array
- *
- * @since Method available since Release 4.0.0
- */
- public function risky()
- {
- return $this->risky;
- }
- /**
- * Returns an Enumeration for the incomplete tests.
- *
- * @return array
- */
- public function notImplemented()
- {
- return $this->notImplemented;
- }
- /**
- * Returns true if no test has been skipped.
- *
- * @return bool
- *
- * @since Method available since Release 3.0.0
- */
- public function noneSkipped()
- {
- return $this->skippedCount() == 0;
- }
- /**
- * Gets the number of skipped tests.
- *
- * @return int
- *
- * @since Method available since Release 3.0.0
- */
- public function skippedCount()
- {
- return count($this->skipped);
- }
- /**
- * Returns an Enumeration for the skipped tests.
- *
- * @return array
- *
- * @since Method available since Release 3.0.0
- */
- public function skipped()
- {
- return $this->skipped;
- }
- /**
- * Gets the number of detected errors.
- *
- * @return int
- */
- public function errorCount()
- {
- return count($this->errors);
- }
- /**
- * Returns an Enumeration for the errors.
- *
- * @return array
- */
- public function errors()
- {
- return $this->errors;
- }
- /**
- * Gets the number of detected failures.
- *
- * @return int
- */
- public function failureCount()
- {
- return count($this->failures);
- }
- /**
- * Returns an Enumeration for the failures.
- *
- * @return array
- */
- public function failures()
- {
- return $this->failures;
- }
- /**
- * Returns the names of the tests that have passed.
- *
- * @return array
- *
- * @since Method available since Release 3.4.0
- */
- public function passed()
- {
- return $this->passed;
- }
- /**
- * Returns the (top) test suite.
- *
- * @return PHPUnit_Framework_TestSuite
- *
- * @since Method available since Release 3.0.0
- */
- public function topTestSuite()
- {
- return $this->topTestSuite;
- }
- /**
- * Returns whether code coverage information should be collected.
- *
- * @return bool If code coverage should be collected
- *
- * @since Method available since Release 3.2.0
- */
- public function getCollectCodeCoverageInformation()
- {
- return $this->codeCoverage !== null;
- }
- /**
- * Runs a TestCase.
- *
- * @param PHPUnit_Framework_Test $test
- */
- public function run(PHPUnit_Framework_Test $test)
- {
- PHPUnit_Framework_Assert::resetCount();
- $error = false;
- $failure = false;
- $incomplete = false;
- $risky = false;
- $skipped = false;
- $this->startTest($test);
- $errorHandlerSet = false;
- if ($this->convertErrorsToExceptions) {
- $oldErrorHandler = set_error_handler(
- array('PHPUnit_Util_ErrorHandler', 'handleError'),
- E_ALL | E_STRICT
- );
- if ($oldErrorHandler === null) {
- $errorHandlerSet = true;
- } else {
- restore_error_handler();
- }
- }
- $collectCodeCoverage = $this->codeCoverage !== null &&
- !$test instanceof PHPUnit_Extensions_SeleniumTestCase &&
- !$test instanceof PHPUnit_Framework_Warning;
- if ($collectCodeCoverage) {
- // We need to blacklist test source files when no whitelist is used.
- if (!$this->codeCoverage->filter()->hasWhitelist()) {
- $classes = $this->getHierarchy(get_class($test), true);
- foreach ($classes as $class) {
- $this->codeCoverage->filter()->addFileToBlacklist(
- $class->getFileName()
- );
- }
- }
- $this->codeCoverage->start($test);
- }
- PHP_Timer::start();
- try {
- if (!$test instanceof PHPUnit_Framework_Warning &&
- $test->getSize() != PHPUnit_Util_Test::UNKNOWN &&
- $this->beStrictAboutTestSize &&
- extension_loaded('pcntl') && class_exists('PHP_Invoker')) {
- switch ($test->getSize()) {
- case PHPUnit_Util_Test::SMALL:
- $_timeout = $this->timeoutForSmallTests;
- break;
- case PHPUnit_Util_Test::MEDIUM:
- $_timeout = $this->timeoutForMediumTests;
- break;
- case PHPUnit_Util_Test::LARGE:
- $_timeout = $this->timeoutForLargeTests;
- break;
- }
- $invoker = new PHP_Invoker;
- $invoker->invoke(array($test, 'runBare'), array(), $_timeout);
- } else {
- $test->runBare();
- }
- } catch (PHPUnit_Framework_AssertionFailedError $e) {
- $failure = true;
- if ($e instanceof PHPUnit_Framework_RiskyTestError) {
- $risky = true;
- } elseif ($e instanceof PHPUnit_Framework_IncompleteTestError) {
- $incomplete = true;
- } elseif ($e instanceof PHPUnit_Framework_SkippedTestError) {
- $skipped = true;
- }
- } catch (PHPUnit_Framework_Exception $e) {
- $error = true;
- } catch (Throwable $e) {
- $e = new PHPUnit_Framework_ExceptionWrapper($e);
- $error = true;
- } catch (Exception $e) {
- $e = new PHPUnit_Framework_ExceptionWrapper($e);
- $error = true;
- }
- $time = PHP_Timer::stop();
- $test->addToAssertionCount(PHPUnit_Framework_Assert::getCount());
- if ($this->beStrictAboutTestsThatDoNotTestAnything &&
- $test->getNumAssertions() == 0) {
- $risky = true;
- }
- if ($collectCodeCoverage) {
- $append = !$risky && !$incomplete && !$skipped;
- $linesToBeCovered = array();
- $linesToBeUsed = array();
- if ($append && $test instanceof PHPUnit_Framework_TestCase) {
- $linesToBeCovered = PHPUnit_Util_Test::getLinesToBeCovered(
- get_class($test),
- $test->getName(false)
- );
- $linesToBeUsed = PHPUnit_Util_Test::getLinesToBeUsed(
- get_class($test),
- $test->getName(false)
- );
- }
- try {
- $this->codeCoverage->stop(
- $append,
- $linesToBeCovered,
- $linesToBeUsed
- );
- } catch (PHP_CodeCoverage_Exception_UnintentionallyCoveredCode $cce) {
- $this->addFailure(
- $test,
- new PHPUnit_Framework_UnintentionallyCoveredCodeError(
- 'This test executed code that is not listed as code to be covered or used:' .
- PHP_EOL . $cce->getMessage()
- ),
- $time
- );
- } catch (PHPUnit_Framework_InvalidCoversTargetException $cce) {
- $this->addFailure(
- $test,
- new PHPUnit_Framework_InvalidCoversTargetError(
- $cce->getMessage()
- ),
- $time
- );
- } catch (PHP_CodeCoverage_Exception $cce) {
- $error = true;
- if (!isset($e)) {
- $e = $cce;
- }
- }
- }
- if ($errorHandlerSet === true) {
- restore_error_handler();
- }
- if ($error === true) {
- $this->addError($test, $e, $time);
- } elseif ($failure === true) {
- $this->addFailure($test, $e, $time);
- } elseif ($this->beStrictAboutTestsThatDoNotTestAnything &&
- $test->getNumAssertions() == 0) {
- $this->addFailure(
- $test,
- new PHPUnit_Framework_RiskyTestError(
- 'This test did not perform any assertions'
- ),
- $time
- );
- } elseif ($this->beStrictAboutOutputDuringTests && $test->hasOutput()) {
- $this->addFailure(
- $test,
- new PHPUnit_Framework_OutputError(
- sprintf(
- 'This test printed output: %s',
- $test->getActualOutput()
- )
- ),
- $time
- );
- } elseif ($this->beStrictAboutTodoAnnotatedTests && $test instanceof PHPUnit_Framework_TestCase) {
- $annotations = $test->getAnnotations();
- if (isset($annotations['method']['todo'])) {
- $this->addFailure(
- $test,
- new PHPUnit_Framework_RiskyTestError(
- 'Test method is annotated with @todo'
- ),
- $time
- );
- }
- }
- $this->endTest($test, $time);
- }
- /**
- * Gets the number of run tests.
- *
- * @return int
- */
- public function count()
- {
- return $this->runTests;
- }
- /**
- * Checks whether the test run should stop.
- *
- * @return bool
- */
- public function shouldStop()
- {
- return $this->stop;
- }
- /**
- * Marks that the test run should stop.
- */
- public function stop()
- {
- $this->stop = true;
- }
- /**
- * Returns the PHP_CodeCoverage object.
- *
- * @return PHP_CodeCoverage
- *
- * @since Method available since Release 3.5.0
- */
- public function getCodeCoverage()
- {
- return $this->codeCoverage;
- }
- /**
- * Sets the PHP_CodeCoverage object.
- *
- * @param PHP_CodeCoverage $codeCoverage
- *
- * @since Method available since Release 3.6.0
- */
- public function setCodeCoverage(PHP_CodeCoverage $codeCoverage)
- {
- $this->codeCoverage = $codeCoverage;
- }
- /**
- * Enables or disables the error-to-exception conversion.
- *
- * @param bool $flag
- *
- * @throws PHPUnit_Framework_Exception
- *
- * @since Method available since Release 3.2.14
- */
- public function convertErrorsToExceptions($flag)
- {
- if (!is_bool($flag)) {
- throw PHPUnit_Util_InvalidArgumentHelper::factory(1, 'boolean');
- }
- $this->convertErrorsToExceptions = $flag;
- }
- /**
- * Returns the error-to-exception conversion setting.
- *
- * @return bool
- *
- * @since Method available since Release 3.4.0
- */
- public function getConvertErrorsToExceptions()
- {
- return $this->convertErrorsToExceptions;
- }
- /**
- * Enables or disables the stopping when an error occurs.
- *
- * @param bool $flag
- *
- * @throws PHPUnit_Framework_Exception
- *
- * @since Method available since Release 3.5.0
- */
- public function stopOnError($flag)
- {
- if (!is_bool($flag)) {
- throw PHPUnit_Util_InvalidArgumentHelper::factory(1, 'boolean');
- }
- $this->stopOnError = $flag;
- }
- /**
- * Enables or disables the stopping when a failure occurs.
- *
- * @param bool $flag
- *
- * @throws PHPUnit_Framework_Exception
- *
- * @since Method available since Release 3.1.0
- */
- public function stopOnFailure($flag)
- {
- if (!is_bool($flag)) {
- throw PHPUnit_Util_InvalidArgumentHelper::factory(1, 'boolean');
- }
- $this->stopOnFailure = $flag;
- }
- /**
- * @param bool $flag
- *
- * @throws PHPUnit_Framework_Exception
- *
- * @since Method available since Release 4.0.0
- */
- public function beStrictAboutTestsThatDoNotTestAnything($flag)
- {
- if (!is_bool($flag)) {
- throw PHPUnit_Util_InvalidArgumentHelper::factory(1, 'boolean');
- }
- $this->beStrictAboutTestsThatDoNotTestAnything = $flag;
- }
- /**
- * @return bool
- *
- * @since Method available since Release 4.0.0
- */
- public function isStrictAboutTestsThatDoNotTestAnything()
- {
- return $this->beStrictAboutTestsThatDoNotTestAnything;
- }
- /**
- * @param bool $flag
- *
- * @throws PHPUnit_Framework_Exception
- *
- * @since Method available since Release 4.0.0
- */
- public function beStrictAboutOutputDuringTests($flag)
- {
- if (!is_bool($flag)) {
- throw PHPUnit_Util_InvalidArgumentHelper::factory(1, 'boolean');
- }
- $this->beStrictAboutOutputDuringTests = $flag;
- }
- /**
- * @return bool
- *
- * @since Method available since Release 4.0.0
- */
- public function isStrictAboutOutputDuringTests()
- {
- return $this->beStrictAboutOutputDuringTests;
- }
- /**
- * @param bool $flag
- *
- * @throws PHPUnit_Framework_Exception
- *
- * @since Method available since Release 4.0.0
- */
- public function beStrictAboutTestSize($flag)
- {
- if (!is_bool($flag)) {
- throw PHPUnit_Util_InvalidArgumentHelper::factory(1, 'boolean');
- }
- $this->beStrictAboutTestSize = $flag;
- }
- /**
- * @return bool
- *
- * @since Method available since Release 4.0.0
- */
- public function isStrictAboutTestSize()
- {
- return $this->beStrictAboutTestSize;
- }
- /**
- * @param bool $flag
- *
- * @throws PHPUnit_Framework_Exception
- *
- * @since Method available since Release 4.2.0
- */
- public function beStrictAboutTodoAnnotatedTests($flag)
- {
- if (!is_bool($flag)) {
- throw PHPUnit_Util_InvalidArgumentHelper::factory(1, 'boolean');
- }
- $this->beStrictAboutTodoAnnotatedTests = $flag;
- }
- /**
- * @return bool
- *
- * @since Method available since Release 4.2.0
- */
- public function isStrictAboutTodoAnnotatedTests()
- {
- return $this->beStrictAboutTodoAnnotatedTests;
- }
- /**
- * Enables or disables the stopping for risky tests.
- *
- * @param bool $flag
- *
- * @throws PHPUnit_Framework_Exception
- *
- * @since Method available since Release 4.0.0
- */
- public function stopOnRisky($flag)
- {
- if (!is_bool($flag)) {
- throw PHPUnit_Util_InvalidArgumentHelper::factory(1, 'boolean');
- }
- $this->stopOnRisky = $flag;
- }
- /**
- * Enables or disables the stopping for incomplete tests.
- *
- * @param bool $flag
- *
- * @throws PHPUnit_Framework_Exception
- *
- * @since Method available since Release 3.5.0
- */
- public function stopOnIncomplete($flag)
- {
- if (!is_bool($flag)) {
- throw PHPUnit_Util_InvalidArgumentHelper::factory(1, 'boolean');
- }
- $this->stopOnIncomplete = $flag;
- }
- /**
- * Enables or disables the stopping for skipped tests.
- *
- * @param bool $flag
- *
- * @throws PHPUnit_Framework_Exception
- *
- * @since Method available since Release 3.1.0
- */
- public function stopOnSkipped($flag)
- {
- if (!is_bool($flag)) {
- throw PHPUnit_Util_InvalidArgumentHelper::factory(1, 'boolean');
- }
- $this->stopOnSkipped = $flag;
- }
- /**
- * Returns the time spent running the tests.
- *
- * @return float
- */
- public function time()
- {
- return $this->time;
- }
- /**
- * Returns whether the entire test was successful or not.
- *
- * @return bool
- */
- public function wasSuccessful()
- {
- return empty($this->errors) && empty($this->failures);
- }
- /**
- * Sets the timeout for small tests.
- *
- * @param int $timeout
- *
- * @throws PHPUnit_Framework_Exception
- *
- * @since Method available since Release 3.6.0
- */
- public function setTimeoutForSmallTests($timeout)
- {
- if (!is_integer($timeout)) {
- throw PHPUnit_Util_InvalidArgumentHelper::factory(1, 'integer');
- }
- $this->timeoutForSmallTests = $timeout;
- }
- /**
- * Sets the timeout for medium tests.
- *
- * @param int $timeout
- *
- * @throws PHPUnit_Framework_Exception
- *
- * @since Method available since Release 3.6.0
- */
- public function setTimeoutForMediumTests($timeout)
- {
- if (!is_integer($timeout)) {
- throw PHPUnit_Util_InvalidArgumentHelper::factory(1, 'integer');
- }
- $this->timeoutForMediumTests = $timeout;
- }
- /**
- * Sets the timeout for large tests.
- *
- * @param int $timeout
- *
- * @throws PHPUnit_Framework_Exception
- *
- * @since Method available since Release 3.6.0
- */
- public function setTimeoutForLargeTests($timeout)
- {
- if (!is_integer($timeout)) {
- throw PHPUnit_Util_InvalidArgumentHelper::factory(1, 'integer');
- }
- $this->timeoutForLargeTests = $timeout;
- }
- /**
- * Returns the class hierarchy for a given class.
- *
- * @param string $className
- * @param bool $asReflectionObjects
- *
- * @return array
- */
- protected function getHierarchy($className, $asReflectionObjects = false)
- {
- if ($asReflectionObjects) {
- $classes = array(new ReflectionClass($className));
- } else {
- $classes = array($className);
- }
- $done = false;
- while (!$done) {
- if ($asReflectionObjects) {
- $class = new ReflectionClass(
- $classes[count($classes) - 1]->getName()
- );
- } else {
- $class = new ReflectionClass($classes[count($classes) - 1]);
- }
- $parent = $class->getParentClass();
- if ($parent !== false) {
- if ($asReflectionObjects) {
- $classes[] = $parent;
- } else {
- $classes[] = $parent->getName();
- }
- } else {
- $done = true;
- }
- }
- return $classes;
- }
- }