[PhpUnitBridge] Add SkippedTestsListener to collect and replay skipped tests
This commit is contained in:
parent
491c12c510
commit
dd640f52f7
85
src/Symfony/Bridge/PhpUnit/SkippedTestsListener.php
Normal file
85
src/Symfony/Bridge/PhpUnit/SkippedTestsListener.php
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Bridge\PhpUnit;
|
||||||
|
|
||||||
|
use Doctrine\Common\Annotations\AnnotationRegistry;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Collects and replays skipped tests.
|
||||||
|
*
|
||||||
|
* @author Nicolas Grekas <p@tchwork.com>
|
||||||
|
*/
|
||||||
|
class SkippedTestsListener extends \PHPUnit_Framework_BaseTestListener
|
||||||
|
{
|
||||||
|
private $state = -1;
|
||||||
|
private $skippedFile = false;
|
||||||
|
private $wasSkipped = array();
|
||||||
|
private $isSkipped = array();
|
||||||
|
|
||||||
|
public function __destruct()
|
||||||
|
{
|
||||||
|
if (0 < $this->state) {
|
||||||
|
file_put_contents($this->skippedFile, '<?php return '.var_export($this->isSkipped, true).';');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function startTestSuite(\PHPUnit_Framework_TestSuite $suite)
|
||||||
|
{
|
||||||
|
$suiteName = $suite->getName();
|
||||||
|
|
||||||
|
if (-1 === $this->state) {
|
||||||
|
echo "Testing $suiteName\n";
|
||||||
|
$this->state = 0;
|
||||||
|
|
||||||
|
if (!class_exists('Doctrine\Common\Annotations\AnnotationRegistry', false) && class_exists('Doctrine\Common\Annotations\AnnotationRegistry')) {
|
||||||
|
AnnotationRegistry::registerLoader('class_exists');
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->skippedFile = getenv('SYMFONY_PHPUNIT_SKIPPED_TESTS')) {
|
||||||
|
$this->state = 1;
|
||||||
|
|
||||||
|
if (file_exists($this->skippedFile)) {
|
||||||
|
$this->state = 2;
|
||||||
|
|
||||||
|
if (!$this->wasSkipped = require $this->skippedFile) {
|
||||||
|
exit("All tests already ran successfully.\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} elseif (2 === $this->state) {
|
||||||
|
$skipped = array();
|
||||||
|
foreach ($suite->tests() as $test) {
|
||||||
|
if (!$test instanceof \PHPUnit_Framework_TestCase
|
||||||
|
|| isset($this->wasSkipped[$suiteName]['*'])
|
||||||
|
|| isset($this->wasSkipped[$suiteName][$test->getName()])) {
|
||||||
|
$skipped[] = $test;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$suite->setTests($skipped);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function addSkippedTest(\PHPUnit_Framework_Test $test, \Exception $e, $time)
|
||||||
|
{
|
||||||
|
if (0 < $this->state) {
|
||||||
|
if ($test instanceof \PHPUnit_Framework_TestCase) {
|
||||||
|
$class = get_class($test);
|
||||||
|
$method = $test->getName();
|
||||||
|
} else {
|
||||||
|
$class = $test->getName();
|
||||||
|
$method = '*';
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->isSkipped[$class][$method] = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -26,7 +26,7 @@ if (PHP_VERSION_ID >= 50400 && gc_enabled()) {
|
|||||||
// Enforce a consistent locale
|
// Enforce a consistent locale
|
||||||
setlocale(LC_ALL, 'C');
|
setlocale(LC_ALL, 'C');
|
||||||
|
|
||||||
if (class_exists('Doctrine\Common\Annotations\AnnotationRegistry')) {
|
if (!class_exists('Doctrine\Common\Annotations\AnnotationRegistry', false) && class_exists('Doctrine\Common\Annotations\AnnotationRegistry')) {
|
||||||
AnnotationRegistry::registerLoader('class_exists');
|
AnnotationRegistry::registerLoader('class_exists');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user